Mercurial > lbo > hg > aoc22
changeset 3:c1b35ab5d10e
Day 03
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sat, 03 Dec 2022 09:43:14 +0100 |
parents | 5bf75b17187c |
children | 086b318fa4fe |
files | 03/03.jl 03/input.txt |
diffstat | 2 files changed, 342 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/03/03.jl Sat Dec 03 09:43:14 2022 +0100 @@ -0,0 +1,42 @@ +const input = "03/input.txt" + +function parse(fh::IO)::Vector{String} + readlines(fh) +end + +function run(v::Vector{String})::Int + count = 0; + for s in v + l = length(s); + a, b = s[1:div(l, 2)], s[div(l, 2)+1:end]; + c = intersect(a, b); + @assert length(c) == 1; + c = c[1]; + score = islowercase(c) ? 1+c-'a' : 27+c-'A'; + count += score; + end + count +end + +function runbadge(v::Vector{String})::Int + count = 0; + for i in 0:div(length(v), 3)-1 + group = v[1+3i:1+3i+2]; + shared = intersect(group...); + @assert length(shared) == 1; + c = shared[1]; + score = islowercase(c) ? 1+c-'a' : 27+c-'A'; + count += score; + end + count +end + + +function run_03(f::String)::Tuple{Int,Int} + open(f; read=true) do fh + p = parse(fh); + (run(p), runbadge(p)) + end +end + +println(run_03(input));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/03/input.txt Sat Dec 03 09:43:14 2022 +0100 @@ -0,0 +1,300 @@ +WjmsdnddnmQPZPPJPL +bQllTtpBlgwtrbbCwfZcfSFPSfLCSF +GgVgQrlpphBGrlVGgTtsRHRWVRMzRdVsqdnDnV +MMTcbpnfNGQbMjgsRwSzRptRzz +lPqCCqQdQqQmCPRzRVSwtzgqqwqR +lrDdllPdBWdDFQFnMbDNDn +FldWTldlpBSLzvpnpSTpWbDhbHNDPHhJcNHNDwbH +qVCGQRGrrgMQrJhPNchgvgJhNc +frjGfMrGQMjsRrRQjvQGmrQQszTTpSLBznlzBlLLSBLLSZTn +TPZZZMTTbNTZNtTlTbjPVRVGzpGQLLzdGgmslhzSzgLzQh +wrfwDDvcnFvCfrrSQsmzGGQQdndsGg +qfHwHCqCqCrFJrcBHCCJRmWTRTmVMttjRjRHZMNV +vpbqnzbPmWLFjFLBnjZg +NltQcCClQlcGQGtMTCRdGTGBFZRLZjFFZZhBPLrFHZFjHf +lMtlGMwMsCCNlTwtsCPzzmPmmVpmpWqVWsWz +VmWVSchSrScGtwlVtBnwBVFF +RZZPRNpPCLZvZPZNCLbQPZNBFtttmwBMTMTtttCwtgwBgl +RNNmPvbQQjPRQQNNHpNbhsfzWJqqSJcsGHhHcfhq +dtJvcpccWvLDztRCRRCrCC +qHVslPzPqHqzmPhTzmDFggjrHrSCNFFFSjgR +qPVPMhszZPVhwBZcdpvZJncbcJ +HBNLlBDtvLDHhHLvfwlFjqfQTFqqWfST +ddsGcggJncZVRdGCdZdcWWzSFrjzQFrfTzqfCjFw +VdgscZmbZNBvbDHTbL +GtSZQqpHpHfGHzzqHzHfSbPbnJCrRCnJChmjnJnbSh +DvcTNTDWlNDWdlbnnbjmRhRrCCRd +cclNlwBRvvTNccRlBNRspVLLZzVzVZQqfqqLpzpw +dBSfHdZvMQMdNVpWRmWmLCmmtB +rbTTrrjDcqcrrqrjjJGGclltPCWDmvtpmpPpvRDsCspsLC +vlhjThlqcjrnTvThndddHZngMnfwNQFNFM +tHqfszrgLsvgqtHrHtwVCGBRRjGSCwsCsmmV +MdFMclPmcDQFDlDdlZPmbVpCbFpCbBSCCRGCFpbV +mcDJdDQMcDTZQhhNNPldhhDtvHLgqtzgLvzTzWHWnWfvvz +sVdGlTMMVTGCdsTMHHWWnNBzNWpNWCpW +mPmjFhlwmwmWrpSrSWHB +jhPhjwgthtFFjRwjZgjGdJcdflfqMsZLLsdZdc +CBRsTsBBzLCfLqtqBRPNDQglSttlcgDlgGGt +rJdbrJjrdbVJZdVZCGrNNcgDQlcQrggl +FpFbbppjFCdwmTvsvfzmTnTBfq +cqhcWqqCNjGWqcqhGGZzngftmptLZLGZTn +brJHBbPVHPvSsdHrzQLzZgpfVzpfQtnL +dHFPBPrBJFRzcWNFhWwN +QTBTfQTZsjWDJBJd +FgFWNqWGDPqlPllp +CCvHzSWFrrtvNvNNHLGQQfbVRRfHZcZcVTTTnZ +ZCCHHCVRZzBZQThM +nljDtcqnhcfbwjwltfLQMLLQQppJBMLQJL +qDsqschsqblDqjcqtRmNVVdNsddNNPmFgV +QQRnqGBSpQnMmSGmRQQFtdcbbtHHccjpTFcTfF +wCNPNwNNWNgZHJHJFffqCjbj +ZNPzNWgNrsmzMVqsqs +pVWlMBWjlWWqspWDjdjMpMDCPtmmdbhtQtQtbGPCzChchz +HZNgrHSvHwnFZnvgNvnwLPBGQHmCmtPmtBCGGCmQhG +FrNfvSNSZLZJrJsVlRWWWqRBVTff +PQctSHQDPSQcbShpFzbmFddpmdmR +wqWVwvwNCJRhmdhwJw +nMnWggVqRVZqHBSBsQsQGDSZ +qppwrgZSLsVbbfvZ +hhBHPQQChCDcPcsvvhbGbsllJTfv +MDWmWFCPFWtgpRWjws +bmRjdmrJRjhJdJLZBjTFfHGTtQFTSQBS +wCNVnsspwsnvNDwnsDwSBHtDHHQGTFQFtMrQMS +nWsNvqVgVcqdJrchrz +MZlfqlmblmMRWhWNsjSQfh +CznczgtDFnVtFBNSRNttvhQsNh +SGDFzVrzVPrGHVnzCPVnlZlPwTbpTqlbqLMpbLlq +lbbbGDlwLDLjvDvm +FQfQnLTWVcPChtjmjWSj +cfgzzgfgfVdzTdfNwBpbLbwdRbpZGrdw +mwnWtbmdWdccwtgTmwnQfPqsqLQQJQQLsfQQ +SjrZbhvBZzPHQqfGJfjG +FlrMBSvMZZFBZhShMMdctWDtmFNDbDTmtmpt +ndHWprpqFTnnpdNFlhljzlGTwDGzlhGz +fvZmmVVfJctMZsgMgmcBmsZhwQlGDCzPPZWDGDjCllhC +WsmvmsmRNnpRHdbS +LgZSvhvcsWtcWnjrFrWjjjnPWW +DJDfNlDNRFlpMlFLFP +TmqTqDHdmfwJRwfdQJLHzzSggHZZcGzhtZvcZhzG +lbTpqhhgSlgtlTqSDzzLPPPrLGTTGnLm +VwGfQGBGZWNnmDLPznLB +vQdfZFWvFMMFwWGGhpGqJbpFtgbS +hSvCvFRDwmzCCHrszb +jdMgfTblgjJTLLLzqqGscmPmlqPzHc +bjQLTTbZMfJffZBBWdjBBQwVDntFpRvvDVvSnhppFv +FFnFQndPqzmjHscmJFwc +ZrZrRgDphGGDZgRRBSBNMHHvmwJJSNJHcv +DGrbbthfWWWDgtfffttfpGPVqnmblqPqCdQTlTPCzTll +sHTsGrHpsftmddRRZfRv +MqFcqcMQbMcVPCdFZCzZsRsFzL +qnVlBbcJJbbMcbgQJMMbQlDWWwHWSWwpTsGHGrpDWG +qpmvVVcGvVVcVmDsCfqTHLLJzTjfZzLZ +rSSgwwnSRRBrQrZzZHCQrZ +BFgFRgdNnSBbbnhSMBSNFdsWVtpWmzsGtvpVPvGWVDDN +fBBRfJBzzMRGRzCBgWtbCWtbgHHHWdqt +mvNcDcsDLLnnqfbv +hpTsTsTrDrfpMSFFZjPFMrSP +CNQGGDMFWGnWWvvNMQFPvrgzBLVBLszwgggLgw +mppZVZtZRTbTTpRccVbgrSLzSPSzBrfbPBbSPw +VtZJhRJcTpJTHlhtHZCFFWFjNjGGnFhCqDqG +cppcZGcGgGpdTgSSnmpFMFrFzmwqwmrHwz +RStQJNCNvfBQNjrqmrjFrBMzFB +LJDNNJCDLcdLnSVd +gNrBNSrNNtSjBndzmzlVnm +MbfqfpCLpCsLqsLFSbQLfnMdcdRRcdzldlnljzncnJ +QPQLqZqhSqhvtvTTWrNg +DtrrcGvtLnrrvLrfctfHztrfQpbwwphpdSbbPPPwFSFFRPwH +gggBqTNdTNjqWBlNmCqCmNggQPhpPPPbhhQpSBpJwbSJSQFR +ZglTmgWNgVZMZdsGMcvDcMdMnz +bjtTFsPmmtpvVlQHlQJQnJjn +WzDzwLCSLrrDNLdrSZRCwNzrlQlJMnJQJJVhbcMhgllwnJQh +fRCZzrWRzzGbGvTmBPTf +lVlfJVblPQbllflfLdJdvGpjnFRFqJFnDqpJjnpF +HcwZMgmwWCHHCSwcWCcgSCtCqqpFppGDqvDnRhgnnqFDpjFT +cwCHtGrCssWHCCWZZMbPPNBVbNfVbPllVszf +DSpSnRwrZDPWsJdZ +zjjlQVjlNZmCVCfhCfgFFfFFFqWJbgbFWHJH +lNQMlGjQBZjCmhNMCChGzlVNrpTnccLLwcRwTSppSpprLRcB +vLfvcgglbfLfgqdgNpPtzqDmPzmJTTztPCHT +ZWSQVGwQcWjSshGwVcnSzDJZtPPTzmzzJHCTzDtJ +SjVSrWVhQVQhwrLMcrFbfplcflvv +NgtfSRPnnRrSlgsPhnShDWQlMWpVBMMMpCWVBpCQBB +LLJnvwJvZHZbHTbVCQBppCFJCWWQBz +wHTGZmZvdvLvjLwZdqngNgsGtrDPSDhtNfDf +DwrDRlrwmbSbRgwsSbRwGJvQGqjJqGNTJTNGTSGn +PZdMZzCQFBZWWFQvJZvcNcjqNjjZJG +WHWCFHBBdzzMWhPFtFdMzlRsVbVmDrRVVrtQplwVwD +bpWbJMWpJbprfNMrBfJfprWhPnGtnHnLHjPPjLvsWnHGvGvj +qZdgVVgDQhQZlwcqgDcchldjjmLtntmntPQsmLnLPjssnL +RVRlgcSSdglZczdqbTCrhBrBpNBSBSbF +SgbGvfbnGgmnNnnzqMqqHHRzbZBzZR +TWlssdFwWdtswWPtTtWltwdVHlZZzRHZBZRzrprqHMpqgZrq +dssdCWTFwSvgmDjDCG +pqsDnNzzZsdZSnDSpwjBCBWvgjvWjNFWQgWC +lVGtRtLMGGfbTGTtTbQCQnBQBnBFgFQcgjfc +GPbTbPtnPttmLTGRRbtmdwSDwpwwhZqmdpzDhDJd +MdccRQMJvHdgZggvhjjMgHcHlWWqFFWmGqFbJWzzFLWlLmPm +TDpSsTrtblSzQlGQ +tfVNrwTwtswTssMRjMMQQddNMRCd +GqGqGpFqqgDGFRqDwwqqmzpGTLPvVWMPVCPLJLRJJMLTlCWV +rHrSbrsbQcbtdNHHHfdPlvWBLLWlvMTVlVLCJf +rccbtthHSHsNHrrcttwqpnDFnMmpnzFnFhnF +vQQQbRvlLjNNLLBzNllNHNBqGqhMWhGGhTqmPmqhWTFhRm +tnsZwgSnCDrZSCDsfTMSGpPWmPSWmGmbFq +CrVnfnCCtrCgfrffcrstDnJNlvJdNvzdBcHdLBJHvbBv +nmQsMqTnLlmmpQZmTZcdHwCFSpHJSSWHSJVSWSHH +vRgRRtfPvDjzDgDbsjzRvjfNNWWCSJFwrHCFbrCJWJHCSC +GhsRBztDBgzRPstgzBLZcqmlcLMMlmdLQBZT +CWfvvhfWrlllSSRrdQrQDQGQdTRr +jsNctMZLmMZLMmmmbbNZswZNqBTHPHzBMHHTMGqBRMRPDQqP +jcwjntLngngplgFhgRvJVp +vchzqzwlhzRqzVZQwqtVPZLnLLbDnDFnbGLnDbPLDGWD +pBTHpdpHsrNBBsgdrdCpCpCgRFCMFDLFWWnFWLRRGWbDFGSF +prsBHfggjpjjcRQlqvtw +VDwzLQrDDWrrwWbJrVJwVrVQfMfSCNPMfSlMlPcMmThChf +tsjFdsRsgtRmGZHpHRgBClSlGSClcPhGCfPlllll +qBBFBZZpmgdFHdstjFJbzVwJVqJWWbrvWJDL +mgjZmrqmdsmGtDplglJgRVVc +nPhnLvnHLtLnWzzcNwwcchVJRflhpc +SnnLntLWZsMqZrSZ +jcrNfnrNLNNqFgbDfCSgSQbS +zPPHtMrGGptvTWPVvzvHRgQsbDsSRRCCQbtJsJDS +wHzrWVzPwThGGwMHzTGGPGwhdlZnBndZLljNjBcLdZdNBN +qNPhNqddBNhqvPhFvllNgNBHCrrCQnjpCfPVJnnJQJCjJj +ZZbZTZcmGWWMDWRSDnBVQCjVDffJjnnVCJ +SGBRTTZGGcLSSWTScsmcMbGlhgwFqslhzqggghwhNvwwvw +GCCPwpsBqNSsBPpSCrSshzQzLhTvQhqTnhtTVQcT +JDjFJfMJgWbWWlDJcnvvhvtdLnjnzhjz +FlDflbZfZgJgMgbmgZJfSpGCvvrGrRCpCBrZRprw +HwqhgFGSMgPPCGQQQnvvcpjn +BllbdfRBsBmsmZlBTmQCjTnNWNCmNmvc +lJDlBflDdbbRlLbfsbZBJtbRqrVFPnwwwhVMHwVrgJwwrSwH +LTvLtTFLCddFTTthsbVVmHHcqVHmWRcmHL +lBgwwNggwMwNVbjBCQcCqCRB +nCMCwZGGNGJnGhtrzsdDDndtsF +ZlZdJJplLZBDpJjNJlGjQCLmCQmTwVVCbQQbqWCT +SfgFzftrnRzMnVbPPPQmPq +FfmrRvgShchvFfghzRvgtvFBpJDpcGNGdBHJlpDDDJlDJZ +LdNrLzjdWQnrDHsD +tBZmBZtVZpldVMPRnsRQsnnsHVbRHs +MlfldwMBBFMZTSFTSqLqcvSJ +nJqBlvvBjHhBcqqRrGPrTrGpBCGzTG +MfVCVMLZVZtQCdtLMtQtQSSSTSzFRSRPFpFRGpdTFd +CCQQtQVgfbbQNggsNfQZZbHbcWmnhlhnvlnlHjJWvnhv +SGmmGwVwnmhbhnhwhhwbdMgNNgjmvMDrJTCgmBTBBj +ztFWcWQQfcRzzRFllvjDjggjDDfBgJMBgC +QtzcJtFtqcFQRRWRRQWFzFGpVnVSGLLGZVGVqddbLqGL +tBmdmQtjMMqDLqBtttQMjDdwwgwccMMbffllgzncwfFflF +TPVHTVsRsJVHVrVvHvrRhVJbfCgFbzwbCGgFlwgcCwbn +hssVWnRrTVZSSZZqjLddWtLBddqtQL +WhhtGZtZGQZmvCfCwtvhqgbfdDJdfjlSDlSlBBJDSg +rHnpFHnDrdBggJngnL +HVcTzFPNzTpPPVrzmtwtvvvmNQwDQvWw +dStBwStGGBrNnBdrSSMzvjhgFcvvDcnnvPDn +RLZbCWWJbHRsTHspZWLcDWcPPhzczfjgPjjvjz +ZmLHJqJsLJJHLRsmmmGSztQdQzmNBrBN +JrmRVdvcmvvmvvRTdBVVfjFQLwjqLFLWFMqwcFjz +DDhhttDHHHbHSnsDbHqMqzwQLLFwLsjjLLQf +bSbPthtgGQPNPHnSDChCRJZZJRCZdCrCBZZZZvJd +rqvVqNJpVVNwnqqTwthMMq +jsFRFDQRLQDQmsPRmQsmcQFMzGhwBGBhTzTTzHnRhnhBhRwz +dCccQcQsFCmCQfbJbvZMNZfJrJll +TGjrrTRLHvrQrFDCrmzzVm +NwWqqhndWtzDQhCzVCsh +CSSwNNwqgBBBBbGGvLTTvb +fRBRBHCVRRzcCdZHvRvZVCZLNjtwtNwNTtLjNtTpTNttfS +DZshMssZmTMjwjSLtw +QPrJDDJsPDFmFrFDscHHRzrcvccCZRVzrR +zgqzLLvlvdgpgrWpWW +RnJmNRncnScFmZSScrJQQdbpGdHbWHtPHpBHsdFdsW +JDfRcrSnmDSJcNfrNZNjvlwjhllhMzlDqMqMvh +fDLzSMLhhtDWMvtjCRRZjCHHJjChHN +pmTNpVwPNbPwPBFRqRJqjCnFjZFV +dTwpddsTbgbQBssprsgtvgcNLzWMctfSgcfWLt +fbBsBTsNDhGBGZcLLLJJQffQLQ +MpsCCMHClsHQqZcQWLqR +FtjdCFzVljFlslVCpFrFjPhggBGDgNSTTgbGNmbGTr +HqTfmsCFmPlGHddNVGpLhz +JjjcQQJgjZvZZzzwgpNVGwLGgV +nQnSbDDRbSQJQQpRZtZcZZsPPrFfWCPFWlrFsFPqmqFt +TgTDDrCmqJDGLrhqLmLGqDQRFtttjMbQZJjtdtjFdsdF +WHffcHWnlvvcSSWzPVvHpWWVRbFdQQtQnjwZFMwZtwddsZbd +cBpPplVVPfvVGBDLGCBqmmLM +dlMMmnmjvCCjJrrvMdgHcbcFbqFbzQrFbGzb +tPhRBRZPtZRshTzRsNShRZNGDfGgFFbFQqbGHDHbqfGD +TSPhBVsTwRBTpVtRZpVhZLJjWzLjJlJlJvmwWWzwWn +WcvLLgLcczLTDtccbLcgzMMfPsGwRPjwfMwHMfMvMp +QVmlPQCdJlJJJlFJJJnPQQhlwwMMMnMwNMpwMGwwfswwGMsR +lrSCZZVFhPSZgzgWttWBcc +bwbbZLlbwlJhBzFCgtTGRGQldQRmQW +SSnpHnPHqpmggCWgdT +PPscHHTfcsPSDVfVssjvwFJLBJFjFJJZFJLNLwrL +nLgDSHgwRgGnHjjNfTRhjPVpWV +BstQsvhQZQQbMvCvMPVNWpPcTjfmPmmW +brtCrtvtzrhdSDJDwh +dTQTwgmZQbDzzMQCCl +WLLtntFnfnRHbttnSRRzSMVGDDMGzVlV +JsPhFtfbLWnsLPLqgdJcjmcwTwjcdw +wMwMbMRRBBMLPBlhLRQlhPcWzgJNvJtzWNtJptpgjJgpBj +TnmGGmVnFFNSZsnZqFsWzWjrTJzvzWvWgWtTWz +qnHGnVSsqZCddnGCGCSNdDbLQPcLLQlDhPRMhb +NGsBTBlqsvfQBQqsTLTFltRMmRwmmHmFtPSRhM +gjZWJWCZdDpjggDdgnpWdZZJtFwFRFFRMwbbmRPtShnwRbtt +zZpSDDgpzcDddjVWggJsQGrfQvrQcTGTGrTrqr +hpJchhFWMpRDWHWcDGnCGrnGnwPTwpQnCt +bmgddgmlmjjbfddgmmmNvGQLrtfTwrTtLtGTLQVQQP +qqbmdZgzZbvgPDccHcZPhWWH +VVrdQZZrZSZFgQTTTzggrVZVMlfBBfvcMBCBslMhBvsMBSff +bQwnHwbNpwcsCwjMBw +pHqqPnJHqpPNJFzqTzQWWDQQZq +HgwTDfgBwBgcRHqRRjHqHTzQQClSzvlzPVSQLvbbPC +MnhtNZNnJpWpGhMQbCCPVSPLNmSPQQ +rrhJMFJJZFJpHcjRLFRfHjgj +vGvGMBlttBltvjdgbPsrsDWdjPPP +HnJQHVqNmQHmZsDZPPrDWpgFps +JSqJQVVDqqVfJNfRffGSGMBwGTCCCTlBMSBl +PsFZPfGbDNbtQmCCmCBBbmmL +dcRdhSrCqjThTRcTpLzHQzTmpmlgBz +hhhcqCvwhhVhfPNvsMstZtsZ +VvGwBBwvZtGgfZCqShnFFjSstCMC +NlTRdvpDdTRNzdTHHnMssCnCnCqjSz +LvWvPcWLpGwBwVVgVc +bVVmSrLmLSJzTZMSFTBdMj +QnvqRGGDvWpQWGDpvsRZLBzTRjBTtjRTPtBF +QWGvDpqcvpGWQpGngqGQGwpLhJVNJcrbfrVbfbhHrmlVJHVV +NGRGPZWZpblGcJtfssSSsbffCs +gwRhjvrgjmwgnzvJJJtVCtHJqs +rrmLrhwFFmmTMgFRjNZWNpZlZLppQNcDWP +qsHZsHZrTBtZrHBNFCJGWrMcpcddWGJWLG +mRDDzbPVDVlVDgbgRRvmwCcWdGvJwGddpvLm +PnfDbPbVzDbVfjnnlbzhVFsspBSfFsssHQNTBpFqNQ +gCmtbDqPVVVqggCGqTJjHMpMQfgMpMHQQpcM +zNZnsSLzZzrlRhTTJMHppjfHSpvp +nhdrBsLlRRrdTlsTVmCmGqDVFdtDPGwV +FnqNfdGfgzmPLGmj +blvVvbsRwgnzjCPcbT +RWWvtvphnZQZwMBNdHfNDBZZdq +DMRhDhdvnjhnPnvPMfdZSGTccGJFjGFFpFpFTbTpTW +NVgVmtzVlLBmgztsBNmtgCmqFpJJFGGpGbrcGGsrcpbWPr +zwBztLBzllQPDZvfQZfRfHSR +mFCgPzmqgtPPqMmFWzbMttcRGvRclvHhWGGcZvclRfHh +psSNnhnLGnwZHZGv +hBpNLTNLBhsPmbCgBtPDbM +JsbLLWLJRfQFnccmQhtvvPCP +dwgrVwGpgVhCrrhPDHtC +gpGSjpVdVpVppjjVZBwdCbFRWLzLMSRMbNzfzbWR +DmMQMJmnmGwzGwwG +ZcLcgLgcRsZSctHFWLGfjjBwvbvBsvjpfhGb +GgFPqFtLRHLFSHLRRFRHHtMnJVNCQCrJCJCnMJDdnqDV +tqdqFqdsRdVdtHMNdRZHTZLrHJgrlZQPJLgr +GGwVcpGznmhbWhwcVVgzTrDrDDLZlTLLZQrJ +nhbnbfjcnfMfFNVtBq +QHmPNZvfCLsSwJSm +pDhjpVDFcRBpFFjjMnRcVhpFCzbzsZbSSCtwtLMSLZLLtLbs +FRjrnRchnfHPrrZlHl +bjjMbdChgRDZthpQpRQnwRTprRwS +mGzJsGsHzHGPvvvqvzGzSnglSJrrwQgnlQQSrlQl +qvzHqHLHmHgPsNBdCdZtVBtVVMBFbh +CctrCwrdpTwcpVrdpTpcrcnSJQttvQPHJQNQnQNjvvHQ +zsqRlslRLqfgRmWsRgRzqzQnHjSBSQWJHPhHnSvHnJJJ +GRgllbgfRgbzfRmwwcGdFMcTVPrFCF