From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Hiszpanski Subject: Contribution Date: Sat, 26 Mar 2005 00:51:41 -0800 Message-ID: <20050326085141.GA29906@sue.caltech.edu> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="liOOAslEiF7prFVr" list-help: list-unsubscribe: list-post: Errors-To: flx@namesys.com Content-Disposition: inline List-Id: To: reiserfs-list@namesys.com --liOOAslEiF7prFVr Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, Recently, I ran a --rebuild-tree on a reiserfs partition in an attempt to restore several files that I had accidentally deleted. Due to my own stupidity I did not back up my files on the partition before doing this (!). What can go wrong did, and --rebuild-tree stopped at the first bad block, leaving an unmountable /home partition. I ran badblocks on the partition and passed this to reiserfsck. Some of the bad blocks were journal superblocks, and reiserfsck gave up at this point. Web documentation suggested running a dd_rescue. Since I was working on a remote machine and had no extra drives available this wasn't an open option. I noticed that writing to the badblocks should cause the hard disk to remap the blocks, making reiserfsck happy, though losing data (turned out that apparently not much data was stored in these blocks, and this data was inaccessible anyway, so not a big loss :). The non-destructive write (i.e. badblocks -n ...) didn't remap the blocks. Only the destructive writes (i.e. badblocks -w) did. Therefore, I modified the lib/io.c code with a pretty trivial update that others in this situation may find useful. The contribution adds two options as #define in lib/io.c, NOSUPERDIE and NODIE. When NOSUPERDIE is 1, the bread function calls badblocks -w to destructively write the bad block, hopefully remapping it (since the remapped block is meaningless data, I didn't worry about having bh point to meaningful data). When NOSUPERDIE is 0, but NODIE is 1, the bread function returns a 0, acting as if the block was in the bad blocks list, avoiding the need for running bad blocks separately. When both NOSUPERDIE and NODIE are 0, the code compiles unaltered. The point of this contribution is to prevent reiserfsck from dieing on bad blocks, to get it to finish, so that the file system, what's left of it, can be mounted. The results that I received were pretty good. I was able to recover most of my files, and the file system appears to be in tact. Can anyone tell me how in tact is actually is? I'm not exactly sure what was destroyed when I remapped the journal superblocks. I'd appreciate some feedback on this hack, any problems with it especially. Hopefully the community finds this useful. Cheers, Chris (attached reiserfsprogs-3.6.19-hiszpans.tar.gz) (http://www.its.caltech.edu/~hiszpans/pub/reiserfsprogs-3.6.19-hiszpans.tar.gz) --liOOAslEiF7prFVr Content-Type: application/x-tar-gz Content-Disposition: attachment; filename="reiserfsprogs-3.6.19-hiszpans.tar.gz" Content-Transfer-Encoding: base64 H4sIACIZRUIAA+09a3MbN5L5Sv0KWCl5OTIlkvIjiRllS7bpjSq25JPsvdpzXFNDDijNipzh zgwlaxP/9+sHgAHmQVK2k9uqIyqxLQzQaPQL3Y2HUhllMp1k8zS5yPYe7j/Z7//Q/ebrFvGo 912vJ74R/YN+/zH8LUT/cZ/+VqUn+r2DA/j86OGjx/D1Yf/xk2/E46+MR21ZZHmQCvHNZZT9 ex7EWWO7iz8Dmz+9pHX8n0ajrykDd+L/dwfI/+8OHm34/2eURv5Hyf74K43R7/WeNPP/u37v 4UPD/4Me8v/Rk/7BN6L3lcZfWv6f87+7uyV2xfNkfptGF5e56P/ww5O9g17vkRjdip+BHuKM JKQjptFYxlkUX4iL5FqmsQyxCfZ2ZKh7Njx68XoI9fjpTF5HWZTE4ucoy5P09ilWgr4/7B48 7sIwYOyfX6ZRht+J/FeREEdhCMBPTl8cD0Uyz7H7JEnFJIpDHH4UhKNpMr7KRBIzuOUlv5Ri Mr3tiCAT0UTMgyxj3AGQYEj74i3wfx1gMMd5gv2DMIwItWA6TW4yQ4TxlciTdSDt7aVytIim 4V6eSiluovzSwoh+Thb5OpAug2ukS56ITM6DNMjl9Faki7ig1L54HqRyHVgz0AcxkiIPrmQs FsTvHGijGQEENFDXgSc/AuNFFBMX/pks0jiYimwxl6nG7DimAdYBNg4ySYAUMien5+/eDM9Q TmDWlzKFj8FaMsHClQGFpyFOdwEsZSHQsMfA17WQCgxBRCizPF2M8+ga+JlGuUSeIL7QYh1Q DCWJUVhB4sdMfKnqARZgmspZMJ/LteDBNMIUkMmQLjmSfZ6kOfNzIoN8kUrQingtWCTmGiHU 9DSYIUrBRQDcjZNchJHcFydJvpacEUIAKpNVlcqw6hoqgCuTxXQtcEznYAFKA7YKVefiUsyC W8KMwN0N2m2yQHnQIAVQDORLjhhgKrM54BmNpmtNFq1XEN+KMJgFF1KESSzR/hAf9KT3ydqu A40NMk1OoZTKELQsjUaLXHbZTsu1lcoYMmAjIHlDYMHaX8msI7JETBNgerCefiIiOdLqAqQu drmyDxC6W1vfRvF4ugil2AYP43LbqvgRpxBf7F/+ZNXJNI0TtyrIZt38di4zrN7q7u7ugl5c IPZ6JkaigDaV5QXad91Rw6g0AlSBC0Tgvw0lrDtSiGevTp//cn78P0MB7uwPT4oPL4Z/P34+ pPlvd0N53b0Mg4fbxXfLSPXsWqyg0leTkHF4pylcJ1EoxpdyfOXP5AwWV3+WXYg2Vnvity0S vDlQNJ+0YUJAyI7Yam3/Gr9lBQbZncHSAQZvPF6kwDngdAILD3IejNplkIY3sGiYpm2w2ZfB PPs13t7SDN/mgb19cY7YLzI2V4sLEEkyNWjLcM3A6kyOE2iECxOYCpD8HEG1tulbMIORpsFY LYSmjk1fvJiNZLoP7b3B1idn6pfhHzptWJ8maAxwkZWMb7FId8QN9AnBxZHUBuT9QuYAJZY3 BInNbwfkcxyA+QFyjKklA8K2ZAo0wMIsAoUy+JG6g2LmEtfNDFfAGO3PZQRiOkmTmcMMAJyK DN24DoIYw1o4BjonE8QqR9sNzAKE4f8LGcsUTPotUBlISUvLOJlJl7mL8SUMdYELK7A/lWOc KPjLOVibaJwRpEV8FSc3pOuLzKPlRLBlwyk48NRsyLyPgtGUban8OEe/Er7ImKw2mUtFTvVX itTA6Tnw8ggEhMYLgzzA1S7K94VmGFjZv+TiJohzhDBJcP1i+lr/duAhJ8fkYMQChVazXfwT naIAlswbYTNf5OktrfPK+4KOZQkRhF8G/p1SAqYBLeKZ0L6Bbtwm9GYStJwBgTFFRyxDJ4MF BGpQeNFYwyIkUwBGQ+DyPAbPL6MmSEGUN/ibASUTnrqtTh7TCporqSKsCocDJogwtHejALF3 1N575rGmGsdXLPIIRBToAHIXTnkBUgOOE9C0cT69LVSYxGiMsg0S4cMgPjdtL0AYLmLSS3T2 sdLb+g2s8wRspzg+9V8eHb96dzb0h6/fvTp6e3x6QhykP7q7alFNU1jGsmgWTYkmFo0TdkXB UCOvwY5iv9KYGplMvP8gDrdav221sNX3B73vO/jnD/hnvwdmuyMedsSjjnjcEU864juo7wj4 2u/B/334/wD+hxZ9aNKHNn1o0Ycm/R9g4NanAQ1OJBgUk0DmtSNxKHoDEYkfYRr/lsC/doGW J7o1te97Hzzs8eCBt9WKnE/ifQQTOdTUpNmkEvy/WPQHsMiB8Y4mW1tWdY+YhCuTOJpOwaRP JjJljQfRC5MFGEewmfEVEG18O54i7cAqsEiBuRlNr2AiC5BM7krCggOgQsrQEUSECEJ9Kf61 kAuJAjlL0GlVPZUXgQsMTJhHwfXPkqALP059hSPMR38qsZW/q8VyQHMDjwUExExvEYMMo1HP 5jgcO8ppMCaZh8Gz2yyH5YMhdNjFgpUbJY7t/RRELtcyFsyAADn2UzNBlxkjjS1AX3sCz969 fDk8818PX5+e/cN/eXb0HEUaJIjwUwRCELcoyEAp1HPNENDcMaqrnKBhvyHjnOYmdshu4zEh CP3DKM1v2VCivUglx3aLeEFehiJAFMMEAyK0sijYCJYzghKDz0UMBls4XQDDwkRmaGUxNCeQ AYqFAtahZRA7odggAFg1QJa0qQJ/Ya6Z20AFcDnAmc3BaYbuNVQ7P3351n91/Pr4rWg/7vXA Re33Dh55y/jvZ8kk95lPh1U4KD16kJMz/+ej85/9/3o3fDc8Z7dPQeY4T4O8RJLtghQGPsqx T3IMSucC+DBY2vsZ/4TyTVXLW1/4k1RKLfMwk5N3r16JVX2sn7OBrUD6Q5QjrJ6o+ziLskw2 f04RaONXCof150JDyZHzIQ6/0VNp16G+i1TpEDww3J0SY9EUatcPm4CAkfU0FSz7TlUU+7i4 kZFFO0Caeg/RU0sCNkISF91qaRrLj/mALSf+E1oTrmogMML3sNozToYyr6oLmfrBAJEni41t 934a+TBJNNf41/37QtfiPLFaz5fMOE72wYMB/2DDKKZEbVtqxqbtp6KLmhKTiQB43IdrlnQB wx/EqouNKg9+aAYnStpw4D9FL92FKWnIgJ2JlGq5GoF8XTFZPzHxlJO/bUuPaCPNdsIOEUns TBfeU2Yj1llcxh95dvgv9GyQkDsh+CcdljEE0KG+HSUtqkcHac5OjCPGLh5GVvEfxLEtllBX 2u+X1d4a3RODuh6u6pfal5ECgy7T3AckEss2iVotE6NLjSSrSCg/AoNGl8geWrDjVOyUzKKS ZJIJakijQLBwLX7/XVhVrAcgUjD6dj1aT203AH3GxRyWCXQYzRglG/uekPxAQlb/yUUJZwNC VkILqus7a3nDP+tbKIhlsoMrDS6MjyHancjuUlHrQQ9Vq0zdoh4luozdcqZ9AEaA1WsbS7PX 98Rf0fS12EA5XMUGd4WvLVoZa7JHrNEsCfWUapaECptXYGIE2FDUZmoNwb2KeFRFyKlp1gAX FNaUxa6CGoGqsLrcjhelstDNF7le4cmcoAu7ZDk1a1JjWSGttZ+nQabQK1HFNQmONahB/Kn2 cLGiwRbQNIpFpgDsqrmt+KoL/UBSIOQUFkXorfBmoJ7uB6O5cLGZtVo5I+C3AUPSTcrj299s NJYaEIs0X8bPNXhaaLzFJ6SPplyvTLiCBM7EKkSqkKOgcasY1V7yC2YVwKz1v8RvC/YaukET /zJirqBkrTayHwuNeCa2OH7CgM9OQt9m3dksiCkNrd16WOX9XEgIpGYQQem8rwo0OQeqlZOb TmUM8PsDu24WfCwYSdTZxcRzqlTr5jKCIK6NPX9SqoVfocsM80PtXgehdsSbs9O3Pu72dsTr ozf+m7Pjvx+9HYrf6aejk9OTf7w+fXfegbWlA2AUlxnSIbXBRM7whfFk8TOl+3GRGJ6cQjDo kQ+KJoKGngSAGZiGnYzcNGAAtE9S7uV5A8dTRBcTQc44rYQDE+Je4RO7owJWwzfDM2vQkwQj UIx7MP7HPOQiFgRvuzrYVmu2iMtjDaiWyOZWEgvgB7QJQOjdQ3HgCHe3C0yBSPtG/uVaYop6 LkNKN7tpTZ2toU+lSoirC1Bk3rLFeCyzbLKYklwUaQOGr/ZipZDXEiFRMhJw79KUC1jMBgpe lHh1SKZuMLrnGH8kEacsKTCmxDhuMl0H0ygsgKUyW0xzO/UEoFAbaJdGReJ/Ozv9b59j9XPf PxnSD/hv4Jf//AgiX5Uv4XxOZuVNMAdhslexdohxmjP0chNxqfId9noDY9vZpbTs2Nv+vJW+ a7AIHfgzn80x7qVp7xIxWHd5b5DSlQUOFJ/rQBTtYr2l8gDMDHdmVpNnV4BQt1racqncYRWo Jx4s+QpDekVk66YTeB1G98ytNWucXi9g+pg3JMbwxN0EH9dpNrSAcOSeu6mLljJSu/Um3Gtj twer5cazHVIe6otBopvxxWjZvkFtVnglDJUKBpJrIoIkPUBRbYHQZCCBiE2H9LRZHnA20IyS Epg7PBRa6EgHlFV3WpQ9fFt9ngowtJbkF9pJqcltezhayvf6RQ3nPwhbqKxf0SvRMfT1bI/f zQKLB4drGJddNSb2t1PNa/Ue2LZtjdbsuVSlB3OsauB2QyJMbdvUZMe2fmu17pLEqgRZtLBV gqtBJYtVB5+lz8rvqJyYs4CqgRWrrYjIFjAd5d1TWxkYT9jCcY+lw6oOOeYMKRjD8cZJnEfx QjpDopNq55csjjESljtZn1qVuS13X+6m61LLyy9PR7aKbZ7aRKTNIaXF7gzd+CzKSkF6NRFp 0hXLE4e1Oc6mbAr1HlTbOAETu9xuU4uzX5iJtOCpqAP3IBPOd/Okb3A/GbOLai+OtpT5MBft oqDjdYqn125we31PnRzDkxNbhb1S5wNtYrpOCu71FE7KOkn0iLxFxlSnz5cIlfZ1sH1Obh8K zxb4b7jn9PROMreeyNlTWi5vYln6vCa7bVUDjCTEPUAr760Rb7uMBKtSl98GWPf0GIkfJ6An tDlmJ9JHDMaRWMqC4z/IJ6LzAZHZ9Iwys5/WwVBS0Lai6ynRwVbMbRtnaT21K830K2tXbdxb WZbtHkqiHjwQ1jaGEbPDQkiBkEqG1FfV/iKhqIcEsQj8DPNg+hraTw40S3kNwC/flyhDRKNA UTaJRWWHwM68FNlYnRpz+jzVxxZAOvDARjaX42gSWWkx1wo0bS70urtgj3a7yjFac2O0yTHR 2/0rvJJy3NQQLJkUKCBhuTxEm46GpXxPTbbRpaciC5RSdQat4ewAHR2ApnR6jBxZTh2h+9lR aSQGTw0bBb+GtpTWqfilLP9NrXlA1lXaH7N2YlkhlDgV4YDFMt6SpXYF1Sq+SEX5KuRDocMN 5CJt73rJoDYVIXEs5Xpy9/DAs/YE7bjARBOtOmEs++wUzK7vthtra2JQjXYVBR2+tNaekUr+ 3I30rRq6k1KU9zKLHo4rBvpGoRSZf5PemOQwppOt2IaZiG0+8DHBxEx7J/S2O04UwzOwDJgt kyZ3qLSEgrIQk7ZFpROXFdXaWVe+uv0JdMKPkuLUAn7RQamtjj1HVkHax7SCAepR3n72s/+C 92PvKzzAG2pu+04t9JXmzdnaJq1lV6h+Y9U0WNfEWEuG3kmk1QIWFpTW9bYMtdjq3TtyK4rP JZdFLy48xFM8/0frCUlTYAsV7qBvd1yGehb4pkmiIkAli4b1xaM5m+42Znt79uTBO8Qk2Xqz t7Z/iKnsm7Y0BdnSNrk51a+WHKxv5vHbUoH5xBl+cUYsysAtS2KdkR2IPjj+apUCPZUD+Lwn Tn/ZL3n5Ezpms4oq7vpLfySTCWiXSlOqfQA6UqZXDusQT7GecC/MP1ZBepby77oSUiwtQH95 ZQQAzRmD7Ijz4fAX/3z41hM/WpJL+R5G6JbPC6WU1rEANOlSIVVamwgCQBd/BbDiKUChmnuY TmUS2HP4q8A2PW+JozNiZJb7OYq4a7k6OqZKkTX2VYbqNbNlVxkm1iUDpt74MkjFeBaK9/1e 74N1xNPcNLjLCJqb7kFdPkxazSXolZB8wgavbW3j0Ww7rFNIRQwHOuA5LpMWCPQmWXeMQhoo +FnvdLFh3AFXe1hoY6c4IR2E1o2sNp4v2qe9KF6fhe+/fHdCZxd9X81bqz87H3q8H9V4YBCe Hb3g2yXi1fH5WwGMfHN69hYA7ooCm+cWAvow+LdonffFOUUBKmWeWPfzEDFyYt09ruNTSgp/ nrTVCZsuMJe5TMFyz+pvwhX3HChcw12xogrvcrqluECx5P6aaM+SDA8MhzKN7S6eA05LsS4Z Hx4TbdCRjtgurpTujcROVL6buZMhpfF/JGklgWeuBnXUZSDFeXBU+4UQuOPzQWIc3iPtnBJd 60ia45aWRSjnFiswb++ZSFLAuJiDCXNsSJaSfouS+HmWgFOo1sWbNqJv+aZlWS0pCxjhncyo TKtOX+r2dY35Uj68PpE/0WzUN33uOn6DzjbuLSsqottqec2KxOx4BumVX2OXeA/cgqGcPb3F eXb66tWzo+e/+C+PXw3987dHZ2/910d/O36ugG/7Z8l0+iwYX70Ei/QySc/UvYuX589/2a5k p3EWPl/ESHGXFfqOoK+6D+DTJps5p+v7i4cHlTZqD5V8KdUQccOwyjdt0TzWNZkmF/TNOQsc JqajSh+qj7RcWViiuXd6lnCjSGNLHXCM8hI67TI4tuEIZ9f071iY6uyn6sf3EJ0tXUQF1+/y yuGSQQVzRu9sb9z0Q1DtEmr3AbS9KlUJPEnmMhblfts3D7a9gYNSpasVYVbVRamKugZBHXbw WluSXukb6LDcGKZhA9IdZwxvUDtjnQ6rsA4zxDYfFZ3xpsFhsx6orLFKpHL7jjjA2zSdMsE8 t/H9Kg7Fpmf1m/cZIJW2NIJV35eCplxfmYFeSXwcHTHbsXWzUPLU7eJf+rD0r7H2ufqYNOSP E5WwBrEAhpvqwjtzBi05aErbPKeNZ4DogSGY2bZFXBsIPAaTXFgRg6ovtMhIrf4EcqsHe8oy i0adLEEUTAGnWhEleBUL9In9555zWEymQSbXMSrGcEyTagc120VMxx3aJXyIEJ/MwobGCVV8 PVPWYLqUEr0/+P7DV7NeFJG5FqbJgC23MYSEY0mIbbW8apXG/lQyoeuax/SBlrnPNo0E+HOw ZZ1O9TnD1daKNsGg5Xg2L3o0mkNPc95REYP9ud4asBQEb2tRngdvPOsLz+vb9glJeYWMVota v6BBnKpE+opWuirixeLzo0pAl2hXkK6wLTcpxvWGQhZa8mOU81XW1dP7+pYOZVKGjcyqsXR9 x/XsWZfoay2XvkxVrzS9ioeDgxYybA1tExq/TTgfVAKKimEOnmF6xbPzQzAiEGQy8XMPN8aE VcoO1ueuzivEqcwxdYLUQWU573bM/WP8ma4+uuxzvYRaq9esf1qLZHWx1r5F5aMdCCAI5QlY hgRcAWcO7Z2Fp2eRBdd4HnX1HDDjKaqn1+r7wDc8sVanmoyM2v5s77xaeB33DjFix2GdKJXa KeON6H0Gd6cubg68gmBhEyBa1joG+oDvQhX6SBnESejr8dWP6nkkU61WeXpsR2aZ1qUiqUtO g5XYbV7zOWWZjdMIQtLUTQODEl0H06IdpeN9dcjXuTTJX/Q07K+mCSVpix6x2jHq2VXWPItP bi41T/Jg2uGXctzLJIZsZiexRlrKhhyAm/VQU7fJhNfqnhrZ5VDZuN2bENGrDS3/yJayMiWg zX4G9DUUJET0pqXdc8lUi4nq17YUuVQKc8QveNDyYc3dTmUUlryYUONE4ibkK4ivhXQDsuux a0mAVGvyyzFKERwd/CnBUVNs1OAQfWGMSaBJsXBbpd4AFzioA9Z9m9eEr49b1BOYVVsbJpAK VNSmlYDQ6XV3kaH/WkQyp4MnLQO1sEuuw0gnsNg4oYevaKJ2gczzF/hj/Yy9iqunoTJQr2r3 q3605X4hApW7J6JIENqA+FSQXVPStOYJ6g0yPUP++T91ita0ls+rpCV1vv5/+gTLIzkTjvWp Q5ZIp7Ej4caYliTdWQ3oVGG7tEBo2MuBu0tPKXukR7M71RB4ialmpwv3yc3TT3ptyK6iudBv BZWI6TgVeNDJ/ajPZFeJ7TrgHD4U2NftJ7vxwqqZVRYcGgNXnD9+OipasaezUk08fV27dl61 Us/DYAhC+9+8bkpMc6Hw4xGhbd7MPdyZTvlk0+FO6Bk9qdNV6MSU79Z91UZ6uYI1ErHW56k4 n2Wy426ZerVL34RD+YSVLKDrZ5koOuPe/TiZzfCeWwQLkgpTHFmzgz1UR7tCOQNLrE9tGKiu Ubxa0Is8LHn4002Q0fnVJFVhfQWuLlqyVxEfSI2z6jbJSDm403tkr0JPn1wlRFaOt8yH1ONZ YdGyMHo57ezw06FVWTA8fZfWuU+tEfd5g472xyiKLc4YlffMRr60MyH1QWE1bVrfzPihJqPn H588PxsenQ992kD2T969fjY8U6cWceXfJQxWpLTMNt1h6dBVm2/2erX42C+IqWFWTkB+nANt mrMIZdd36fhLRPwzCFTxySt+9zJEl7X1tONc+/V9PTPw0QnCbVDbVXFM269/ZXiooYmmq2IA poHVDszaPEhXbv88XBXh/EHErN0Votu+YILpSiCY7D1+cnEWXEEAiKc8+PHC4hW/EEQL12s8 I4iP4GK6hdIPxfbgFxyQK2ppxewIa6Oy5hyUcziyYTeBEXtqnePAV3IT9XLkSGqj+9ScMmm1 KscuWxgEt7836cEiUHfvuOCJyN9/N7dSGo5H9dyjf/xCF53902DNkUo86JrwmzF0+Ab+W6jH aRdxmJjDOCCQ1jvoeCPFBVEmlt785U3h4jAeo1CcPlSLkDprqH8snTks1pc1Dh26TuJSljE4 4NI8yfh8DLhJC2FcpkXFY+KzInpQB82OsNCqOWSiOYwnf/Cghz4pRO0yMZWTnFwXek8TOKBO xFmyUE7Y31OnrM0TQvqKnXums6yx1ptqxKK6rCIWPjuiSTMoboA6q6n6qSYa6e7Cai/w4Y4o WWTkO5NTpu86wVc1RyPsKitlEbLYfiSB5sF0rrb8hNXAbaWziW4Gy1wR0PLsj6LYz2SQji/b 91XfqnVWJtFctl9lvRUgz+pyX9NSJbgBHT5PrA07tASevjk9P6YzSy9P3528UJeRfqssqt1d Cr/V3ji//0jBm35k2CKuTWR1VNJQuBSXWAdvlSpVTwWXQxRdeJOmfd+it0WQonLVjkwdzLsk T5ZC+rx0RQPIVQc77EIDEL99c8XA1yJhSZ52r6pZQuVgoUCtyCBa4mekji7hICK12K2KsNS+ 0NLgyhaztYKsejEiyq4TbU3roi2Memma2+6GXNlYW+JYzy9yXeo+VCpro9rKTCrLjzoA37jY kOVYvcY0xOC6OJ6FO79Wq9ZC3H2VvfPU11h5iY/bZZKsXnqxW3X5vSNl6n9atmNTM0lezdBY wQyK5Mxe32bwUqfBRcE6aN7gCjS4qNVkwBQibnxtnF7jR68hjNBVlPQ0Kqwh27zq0Av+E3IJ M70ri8mzuQrQ624PWVkCfdODDW/DTY/ylUV9k8O8E9BMYJX+mk4rCTCqM9LE74DShMrypBIr HAwsEyrsvcSrs301+6Cweg2BriaUvG++KmfdcOIKOlHc1y+EujeP3efPMCzy+cg2OGP2dUS+ 4VQXKtH95iVPAujH8PCgeWl7WD3xqydxT12V1qhZL9/WPXxrPVrbdMK7fioQgD4t7rCpy2uc 2sQHXom7/EfIxwSstwKKHwxToaP9IkXHvfhPZ94bHs5d8rTAZ8yIIZemQ8/a8uvqK6dCqJrT H6Ylnwxp0Wzo2vHqS+/MSNumNT2EQVDtR/6tX9dRM0v33TpHkAaNEshPTZjMj84n0CD0zpct BzBIR9Db1kA89Yz1Tij4xWr4h3qcWr3+CyA5QChuYnfcC9cd57pcx42gtU52d90rxD26AaCv ZegpLtPM8mVCZT/UZfHlfd17x7ZZMSrm3AHWjOVbHEskkh/13zFPxnfMrwzbCc09KBqjcstY kcVhjfPUmdpzbptHiCyWZ5565NeuW/JcF+gKw1nvya6SklirlCXZ5oEXwJdfdLDfYHfEeIm0 e9XXKX31LB6+6biObTavuKz7GFDVFLuvBPGDLdoyr3iT3Ln5X2cCyw+lIDOqZq8y56xk7/iX mJjfIFG1fOTDOyPV2b+Wnmf5fjAzdvnjJ2u9DtT0HAhf+FVXmQPr12iox1v4t2QVv4pEXWgp k6XyVEiTuNQ+UmBeEW/oVPOcOD8k/n/9qyk3ZVM2ZVM2ZVM2ZVM2ZVM2ZVM2ZVM2ZVM2ZVM2 ZVM2ZVM2ZVM2ZVM2ZVM2ZVM2ZVM2ZVM2ZVM2ZVM2paH8L+6dHqgAoAAA --liOOAslEiF7prFVr--