From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758052AbbCPPTv (ORCPT ); Mon, 16 Mar 2015 11:19:51 -0400 Received: from mail-la0-f47.google.com ([209.85.215.47]:34757 "EHLO mail-la0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756539AbbCPPTn (ORCPT ); Mon, 16 Mar 2015 11:19:43 -0400 MIME-Version: 1.0 In-Reply-To: <20150314092104.GA1674@p183.telecom.by> References: <5500b987.kerYYCYfIffruy3Z%akpm@linux-foundation.org> <87y4n0xxn3.fsf@rasmusvillemoes.dk> <20150314092104.GA1674@p183.telecom.by> Date: Mon, 16 Mar 2015 18:19:41 +0300 Message-ID: Subject: Re: + lib-vsprintfc-even-faster-decimal-conversion.patch added to -mm tree From: Alexey Dobriyan To: Rasmus Villemoes Cc: Linux Kernel , Andrew Morton , Peter Zijlstra , Tejun Heo , Denis Vlasenko , KAMEZAWA Hiroyuki Content-Type: multipart/mixed; boundary=001a1134cbbe1d8d62051169610a Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --001a1134cbbe1d8d62051169610a Content-Type: text/plain; charset=UTF-8 On Sat, Mar 14, 2015 at 12:21 PM, Alexey Dobriyan wrote: Rasmus, I redid benchmarks: * time is folded into average/variance immediately, it didn't change anything of importance * batched conversion in a loop, still removing results where interrupt intervened It became worse :-) On this box some numbers are converted _slower_ with your changes. Numbers are stable (average, min, max). New code becomes noticeably faster around ~100000 and up. But these speedups are diluted because num_to_str() takes ~2% of top(1)'s CPU time with 5000 processes. # 3.19.1 $ taskset -c 1 ./bb1 1000000 1000 0 13114.776199 +- 114.942115 13097-15981 1 13107.875655 +- 69.779029 13097-16275 10 31091.129391 +- 4.638450 31087-32529 100 34098.031121 +- 3.870317 34097-34615 255 34098.028937 +- 3.714863 34090-34622 1000 37101.041166 +- 4.003837 37100-38276 10000 50760.840697 +- 30.528328 50750-52143 65535 50760.825472 +- 30.126764 50750-52101 100000 59608.431078 +- 8.414339 59605-60144 1000000 77101.574543 +- 6.524058 77077-77637 10000000 88638.113739 +- 723.057589 88095-90125 100000000 86092.934347 +- 6265.582344 84105-106407 4294967295 118092.229892 +- 55.223289 110152-118699 18446744073709551615 210586.971532 +- 62.836890 209125-211120 # 3.19.1+diff $ taskset -c 1 ./bb2 1000000 1000 0 12093.654853 +- 9.896411 12089-12789 1 12093.352964 +- 8.099249 12089-12838 10 31093.928544 +- 62.655080 28091-34587 100 * 40688.594709 +- 10.637530 39256-41195 255 * 40688.571161 +- 10.667900 39991-41195 1000 * 42095.428977 +- 75.946830 39704-42623 10000 * 51724.895173 +- 6.051896 51135-52248 65535 * 51724.839467 +- 6.205925 51114-52241 100000 53103.076152 +- 20.832946 53081-54103 1000000 59602.515756 +- 10.729477 59598-60137 10000000 61104.239490 +- 23.073365 61096-62629 100000000 70857.128601 +- 31.596224 70854-72660 4294967295 79101.747725 +- 32.571835 79093-81102 18446744073709551615 132183.241400 +- 871.759411 122451-134869 I'm attaching full tarball so there is no ambiguity what is measured and what is not. Alexey --001a1134cbbe1d8d62051169610a Content-Type: application/x-gzip; name="num-to-str.tar.gz" Content-Disposition: attachment; filename="num-to-str.tar.gz" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i7c0edcv0 H4sICDbyBlUCA251bS10by1zdHIudGFyAOxbe3fURrLnX+lTdCAJGs9L7wcGnzjGsL4LhoO9m7NL iI5G6vEI6zEjaexxCPezb1WXNKMZj8EkhL25Bx3wSK3qX1dXVVd3taqzedqv8n5ZFcM7f9alwuVY Fv5qjqW2f5vrjqZbqmY5mmrZd1RNtQ3nDrPufIFrXlZBwdidIPow3cfe/0WvbKX/Mp32g/E4zuLq alBOvpz+Nc1p9K86KurfsFXzDlO/6v9Pv+59MxzF2bCcyOO8YDGLMzacFnk4jIvZcAdtwm9sYpdF uSzxcJKzb2NZEvXEk8b2oCDKMy7f+Xr9Zcf/RTkt4qwaa4Pw8/t/2zRvGP+apTt2Pf4NcAA6jH/d sfSv4/+LjP84C5N5xNnDsopA+4PJnizfizgMec6yPM4SuPHBN/ggp/Cc+X5QVUU8mlfc9xWloeh0 lpWAIonPMh4piw7bcm0grIhbGOF07le5n3DNhheSosyBNc32q86is2Lvx6PTE//l4Sv/2Yvjp60W bHM7SYsOSOR7rCaKcj+KL5SsNwpKvpVncf0sK+/YJ10/y80d8m/ofgW9x0bYI6aIxnZvU6Pg6e4t 2hCEiCykZZsgLSXrdNh3daO712rA6y30ww36a23s3qbn70FRwx2Z7bDHPIzTIGFhnl3woozzjMUl G12xMQy8asJZmpcVq66mcRgkPRZkEb6flzxiYHeIIGYk8WJYXpUsCqpgwE4nQBXFBQ+r5IrF6TQI q5LxwdmAVfmUTXkBtdMgCzlCXMbVhMHTFUMsXpa8ZMU8y+IM6H/iLJ9WcRr/yllcYausnHJoH5jk aVxVQIUg1WXOwklQQEvQERZULGBQjfeAWyCBJ11VoVLFWZLn5/Mpq4JRwolXBCjy+dkEuJ0EyQUw gJ0HBzziBcvHLJ0nVTxNQAoVyKgEeUGfCuCiysX9fMkGVIvisxi6C3Puio0BO0qnCU95VgkIBl49 z85QOlk5jQvqENRGkGnBL+J8XrJaJz12OYnDCS4AqnmRkfzjiAcgZF6GMGDhOaiw6sNJVU0fDIeX l5eDsBzM4/wyGPBoPvzft8BPORyF0RAGFFQeTKo02WOKkD5oJI1LbAtBxkWeip4E82qSFz32GGST QGs/Ddj/IExnAGRIeVQJjqCz8wprFBztA/gP45JD51AGus1GqLl4waP+FJySYDSYgrIXYHxCGgEK 2TaHGugIVUz9XYjnRzAMFlBjNRSCDtvbY4aOOJM8iUpRJ0gStkAZvVZ7TFN/cfvamx7LghQZCWAw qQvdHVuh7qHSoXNhNQ8SofogO+Og+OmUQ1dApSPOyjzllxPQXxIUZ2AEwMLDRwDrGI6puZ7b6bGR 6HNQ3Rf2ExcFT/hFkJGR5vOCTefFNC95I6wnUCxkT/ZYWxcqFbghHl4D36bg3gbu0SRAAqB+4KeK E8FshsYfQO8Xht7fs00h3No+r3rAt6CGMQe9BkMR4CUIAcc4zBMwjXwSOyRLs80N6RnMH1FKDkYK HgQHKTRAohXNc/AcYAxCd+pCM52RUJvmLc0ZDBymmEiY3FKBIGXTsD0X2RzKconjJSTmWTPVgNmH 0yAukL83oNl3qxkOZ7b2FKVA+98B3x32G8P7obh/+JC54E67wJihGmpHlnyFqaBT+NHoR6cfg35M +rHox6Yfh35c+vE6PYTRCEYjGI1gNILRCEYjGI1gNILRCEarYXSC0QlGJxidYHSC0QlGJxidYHSC 0WsYg2AMgjEIxiAYg2AMgjEIxiAYg2CMGsYkGJNgTIIxCcYkGJNgTIIxCcYkGLOGsQjGIhiLYCyC sQjGIhiLYCyCsQjGqmFsgrEJxiYYm2BsgrEJxiYYm2BsgrFrGIdgHIJxCMYhGIdgHIJxCMYhGIdg nBrGJRiXYFyCcQnGJRiXYFyCcQnGJRi3hvEIxiMYj2A8gvEIxiMYj2A8gvEIxkOYe/MMxgHz5fe7 zQwvpuJL8B1MRBAw0HE6TDi7r95nMHZhwh+zAp0sjGx4FXL0H5f5PBHjMk5THsVBhT707TydoncE X++ji0YvgNOuWhI9us3LAqZkAMUFATr/fFzPimJCycDhlGFQRDyqFwnwDx0aTX/x1ISlbIH+aMST /HLA9oHvHP0NosASJMG5fRqUJTqsPOv/yoscncgcW2LFQAaXUXuM6wtkGdcHbAcmax/8h1/BGiN0 FSoczcewUshKseBlRUd+J0vLxxlIUxruQDANzqlgD8Xsgt5JAtkpVIA+RDrLG/E0NWD+2qwzw3Vd sTahLWememLblaWd1cKa7XSAPVwONm6vYH2E3pm9AUp4x7qPmN5mckYN2ksmZ1uYbLrVcLlWqUAu Z3+Iy1nNZXETl7VYzN8hSnNdlGvzy++UnhDJg00ZqktpzIikeLDZASL5cJPrTYnOwuNrnFZh6MFY xD5DSb8PbwsulnnwuCu/h2AIqNfjKagCE//332+LocS7Ww+C8TxJPmkMfHF7/uKm+Seb2WanbmE9 Gwib9nFLXW/VcgJBCP3JhL7RMDO290hwDv/pT22cwNK63QisZYi+UaezuxoomVg8D2yuacvB/uc0 wzROZlkLacPbC6isQ+OKJ9tGlqF/cGQ14r7IYeXa5tP8vcPoTzCy32dj75tFwwEuxdf6BpM5o4W0 iiFALVxaTsM1oKUG3wjrRADXCuFgtW3ajw+sx47onmlsi+CA4Z6muz3X9nqeB8GaABZhGIQANNlX ddA+4QmErrS+wUAElyBBed4E5ripIYIQRLR6lq72PMsSzColh/eRWFQ0QU/dY6gY8R7glPMU1yJi TwTI+svQ90OLjKWqG/kRj9utY4HWcW1bSZjCYsPBbUgO7Kipt26EooEFmAV6SCF+sPaGtNbbrNY1 +zHArQTQFHYZl2CbkT7oBdaUn7K5QDtKYnfhXhkvqitAKPaEyDe2Gjb3GYRo2UvaHIJ1YQ7DrY/R LUapogKuKmEVCWvUctKsOMcBWAW8g2hYRMJBOAGFlG01/Q4/uNRFZIDr0eG/1mOzHpvg+CXv9fC6 8/qIz5GlSGPLXT2E72RimNudXTbExTZuMUEn7n4PQ2UM110xcCdM1MpobkOHF+miZEJa7bCGHl8Z 9auPAws3kQG1/ovpQk8hHtZ/AfcH6Hin2dBruItUWRLtAKGr+aZjer5jO5qv2pZN1Uzd90zP9h3d s6m67VuWsQSoPRxCYJ0dqiWod4heUO8Q/Zp8Go6x27PW1NAMKyHdmZDuDL0fctY0gDw1DRD6zSBd cw0Ge9nAmLoA+UBdd60uSElUXblkrVn0za7PcW0rQRCJJyXHLRII0rYsEvt9Me9fXyXyLIrHSw9e +z6MlcC8680dcIr1+GQUZ4kR94rTHh6OxIRnZzBIIZiqCRh7IdoY40YoQI4hLmv8f8nU5UbguN6W xYAur9Di8gJ3m3piE6rM6PuV0hmwo+p+yXhQXiE7BQ8i0TA6IBqzGKUCv7iDAzy0Ryu+KeNf+fZx O0/FyAWTbvx4wWfzuAAnBq4BN37F9wzcgsX+YaPUr4GwTtFOlU5fYwv5WEE86JjxpvXVRIw95CKO Fj2UVT2bN56lA+7nCoLh4hx4DfOi3gDHuQ3gcAuSKWc84wUE1Ozu3Z4Q1V31bme1KAIymLZhHQtd kZAdscGFwXoXMaB9CdqFIjTl90zYyrtlYcMIVOwJicA8APdIWvstpNsTUmw5LBUIkEkF+oVc7mIH wcFhD1m3Cw+12b6GW+QHGUOkviCEJcib1bJUiOX918/NnzX/46rsZ0U/LmZ9Y6B5Axjp4y/w/Ve1 LNNo5X9od1TN1DT16/ffL3GFeZrCnG0GjsdNi6uBarimYbpexFXPdfjIHnHX1OFStVBT5X2xinrA 9pM4OC95zB4Ho+IqDmCpEtRFflQX/cCnQTqAFvbkx+CMHsDU/KSI2XOQt2bAdPXAsh8YDgNki3VV Q1VpuQl26GeFD3aodGQZrZD1+2fAZDAMinAyXLj2sP5qPQzKdFhN0MH7cTbOBxM2ugURuP+IL5hl OtwwzcEgDM0IlwyasFO53+/fqi252+3err0ffmB9w+rZrAt/HQaPMODmIX7aWZKBh2USBnwwF8B0 VkjSDkgCJhJe+OT1YIm9CvJghpAkuPfzzJ8HIX7S9HlRgG6063QtAniNs0ldAitbWAJEODV0JWjX NiVJIuEDynv4L7Pms8fR8dGpf/q3V4f7j/2j4ycvlKo87wD5zzfo6JwXGU9QGv18PC55VQ7Ctri2 va81443tkWeAZrSRrlludINmtiJsKGUrjdCHLvShkz6E4HEw5JmC9x2hjhdPnpwcniqnR/44Cc7K XltfPSbKMPBp0WEwMN8kpMINyiCKCj+JYfRtUK9eQI1uqwbpZYOaCjtCU9KPz/aP/660GwqLqyks cqpx6ofVwicR9NiquAfmFhYVvoV6H9Qk2GJx5dvm4GSLgFcvGx3yUTC2DRhdJueabn5Yh63q2xXY IkDtuaqL6sMfoT8YIT6GeiCVqniAwuCLuGqepKeH66b7XRHCcqMrgaxn7FsIu5birV8xqeJllbBv jd7BSX//1dNant8V5RTfvuXYJMD7xB+0uF12MIYx/C+bG+xCNUraPbyBpJaji65pPBoMxrYWGK56 gxxvAtmQ5k1kNCI8GhKekKkMcaAq0ZiQzvkCo39wFn6SBxG4HvDSG4VYQWsqjKZjiajgDt/oEjgX rHDBA3Rd1XzkN48yNGrge9JBXZEehAuCfwy/RcP6P4zHcYiTRMVT2lmhwKPEYQbRSFAxS9Nx3R/Q oIZgndf5Ies6avx1EmfzxVIyYg656VWjE8v1jMgZDFxNG6lRuK6TGyuTLm58jTrQVTFN4I+Lds0X 4P+z5XRRBCH38YsaWDtEdJQoIiy90aeIgcTLEt3Ae6m+foaHekOJtpMoojn518nBvXuYwKD4/vP9 l8qi5/snB/7jw4NncPfPfR9s/8T3O2D0che8KFQ9D87q2q2pWjhN8Fcy20IEYfZsnleggURpz0ws TKNe/d1dxEY09bEdoecg6QHTklTvK83iyMeoqMdasyTbQXeJHm8bb5gVo+AfkUdF9FWSh5uervYx z4NzjtYMStooqfUeWJ7pasFgYERGZOrWut4365C6N0uFlh2hZId0nI/e9q8wghe6Ox/KqxLMwm09 FuF8iHpYFqwUMMhR9vjiW+XgxfGTo6f+wd8OD/7+8sXR8an/6vDk9MWrww7WOQ/TKVCv0z55dXj4 78NXgmBccP4rhKybNC9fvXhy9Ozo+GmHmM2xP0C1TZQtxsKVENqlcsYvmZB2ivuCtSRJznVkMBiM LGdsuroQ8DDiF8NsniTrgl3DROGqPZV1NXJh3VV+4+Zw22u/vLZkg7dyFwfH/rNnMBieHB0fqko9 18rddzB11JFoOIcIHEZcq7bS6e81a6ju//EgtRX/jUafO/H3dvGfbtrL8x+qbVgQ/2mG8zX/97+W /7tell8rSuLRZpnYxlsvuyqHaRpklFDcFN8toqoMB5O7raLVvsN6eXqBz8usq5f7Tw/9k6N/HzJT 9ezm48jabHK8u7X4+a78Rzb8dpcsnClTsSPXY4uO1IZbFcuymJzGyhYw8SFGqqfylAeZfxEUMWao svRiV6bgbwc30tbYj3EDcMoeMRDnVDn+x7NnvZUw4PbVC/Tv+49/E3c/vTo6hVKYysFfH/1z//Tw N7zfP35x/K/nL/5x0mN9WO6qnXqveIq7vkjwZP/o2eFj3IILRnlRKWKnOb3w8eiH8n16IZ6FAFpt Y8hw+0JoUWz8yVK98Ryzh+yYdiGbj1CswuQ/3HdcFS2gaLFedCqe2lJ6i/hSpeLGIU74xPdCdJT2 Hd/SruNbaPQ5/HS72Nnt3EuV1uDg2RfA0QT/QmQLjX3zCJgS1WHtAlHAnIu3p1hJw+1Q7CRKbz6N goqj/CDEqCG63XqrFN6LGX8p3nSeoYrbDNFXZOxgGsSZIrKrirOwR8ulHbi/eP1m/fNvy+CaD0lY BbpttLZjNXx3DAwHVR4rAkd7g31/vlamY1kr8zHo0GJSwj3cYLd+GNc77+AceFH02N3vkmT+c3VX iFMQKDg0JF8R+vAVrf5pHtX6RresZcnqXXNrW5bRer9GsfGw8VQ/mjp+rXF0r0FxTdN2TBMzblXP sjRbs2CBIbrcpLnJrQ3s/387zlvO/3z2VcBHzv+Yhm5unv+x7a/z/1/s/M/2MzeS9MHTONIHDuKQ b1HeNfGrdOMhms23eEalrvPRQzFI9JFzMCug3ZoVPNxyPWPuG5HX89tv2/J6vhF5PUOREZ8GFZ7u aL7c4aEUaJifUWY8nizwmusN+4RkU8zN8LZmHszWZ4g63VGWMBUiL8t4BLPxZXAlziVQds2A0vY5 JeQLyibJnjhrzkdQMk19ZEH3mNIcE2ApDC1MnqAEi04bIwzDqE4+EqE9YojL1TxdFecgmG7rmulh CnDW5GgA9BqMbduUqqK56zCY3O+1KQ3DMInSWafUbMP1NrpHXdPsj1Cqy05YH6Nc8mmuUzLdMdYp l3waG5Saqq9Tag2f+sco1YZPbQslZrkUFZieyM6pJkFGonWYgge1DNfurIM1XVE3wEC0G83WXWHe JiWzPXFcZJ1co/4w93bkKnWKOTeR9+qu4d4S9u2G/qjUH2Zfw9GoPyecf/KRJ6woskjrnJZrqaQb owhT8DDHo0u0mG+HZ4bw9Mh99b7Ir9GW+S2EWHwCYtEgztqI+mfn0fjsPJqfnUdLIMLNcX5ZZ/rh cUNY7RVN5mEIg4A2j1eOh3za9e6teYwbO9Rq397SI/CIzRC9sQctCGcrH9shtouV0leXVLPWK6+d 2Von/qzyfthJnMZJINJ8IFC84OKEWpSLLJNpENFBSzwyIbLj2AGOPJQnTAQ8KGOc7wpx8EukT9J5 Ea85zljlOR15w5Nt9VEMcZAvEbNTuJky6ikdPNtYYYKPmChaJyonQYnAdSoSNfCxvMo/enjjIJ9e Yd7P8nBls0l/v2SjPLoi6QQRnkXhQQHCaJKcUOZ1VFzUOcsQtIjQGPPBilpBGL/dcmS1tYsmsFPU YeeH7Bc7UYjkILjWbWSbPTfnPvBkTyu2FFbzARPHVmZ1KxuNbLH4/7R3xb1p41D87+ZTWKjdEQa0 gd6my8ZuE2tvldZyB72NSutVaQg0OiBcAqjT3Ye/957txAkhcFXHdKotkcaxn/3sxPZ78e+XStpG biXrB4HSlIKGbNGOlVGyt8fiBuQMFhwll5K+SOQlZzwKQrjzkyh55gXlU+xd0VjpTGkqIvCW79op C0wGgqeG3sxz5t5g/JUXhsKjMFjMInz4ysg7Dsx4VAk0nBtMXW+GdFQQ4+TJKgricItBbA7LeXFl SgQ210AiZSUsr8dBznEjWTQb42AWc2fOewlQOYCnjZLdu8X0z4g0mThTf7YYQ8sizuZyx4i3JhN5 wCSmLVKaepwzvpEvHAUJ0xb5tYjvDUDyonMp26qok23Q2VCoGTGycEHNqJoAhIlFTLrT6kH8stAD tf0lMtgQdUjNQaWR5oa4cUmSHfohmCNxV9XV6pI6OeE2YmVwy4kji9u3/hzchUXo8Tnk00n3ij9D yn2qcrJs5nbA7PsDGeJI6a5KtZyR408zeoEpI/vgBDF/ZT/pCdEPJJ5SVyhrYqEEw+T1i7IOH+Yo kaeU7itbDgyFsvt45BOaacUELJMzwOsc2shPObSRLG+kgIeSxXIrRSKUG2br7RgmkceX5sydtzn1 GW6FwIeKxzbuElp2uKRH4BeErfoZfUjSvQt8l/iPkuEdFa+kZD1tZq6sOqary0bsZXGoMwer5hh3 xRYRSlrXa9exInsMRRvXa1cnTG5eq4v0k+K4DKwHU1s0j0XzWP4/PBZNLdHUkm9PLVlLEdGsEM0K +ab7f4i3+B74n6PjppXZ/7OOm5r/saP9vyHf5z7/dPMh2efnsby9wVz4yt8ZyMoU19ZggdtKmFGJ 4UISozjAPKzCvHX/ir4lQy6DRJzkVlMhnITMJ7AV63JWWVxPX5HiiIuC4sVC9PTGv4Bm7Xz8W82Y /xXv/1t6/O94/HffX/ba6hQQX8hFCKxB7xlpiDkNOnquYpOYVTy0YJSow3FxTjSB/PgaDQ1HDhQs MZuVWoMSK6OUWYWIQxGQMdXvkqzUNyusMBV119c/K1IAIy5F3AJtxkP0wTg8PqcangzV2FDRxJsE 4ddSXlkJPi4Gt8WXKvdpN4za6zmE/qqgVaUy6vCi0AmNdX5znpHIM2xVYk0peAgPbbLX6E+xf3jJ GxQk1NxWChbrsqYB22n4tGbyx7D/vgv+G+b6lyv2X+OFnv93i/+aOPO7TehvicnezlTDMT9Z1t5M BeoXzzEXRuvxhUY66qdyO9wpxOnmIWYfaiAsTyyozM/NfmKQDrzx3JHvqYSyuAlInm2iUP+VjJJG /bQHjLJ9cFpFfnq1n5HlWd4wUUaSJSlPdBbBg0ktSEAPV3ab2oPPW1xzdkjJ06Qz4xSCuCTSZqoT N1jBSr8tEXjOiz6UPQReN03DGdgvtKl0MGTPa+xg+GWOEOAaxwFDZPFlWqrKPoT6qiz6K5yXl7CK 5u04it4rSMRFnLQxtcv/2N9/eGQnYJP/3zzO+v/No6bG/+7W/u9d9W4uujdn3d9UJyB9Nf99QK4V mGWGSvuPEsMlzh4ZS1gw87jFjUZ2uDTx/AhOm40mnQsDGSxv18Vj6N7TH8sqKYYrFq+tv/88/iVD defv/14q33958SP5/039/392E+q/fuhcXNm4P2vAzzaMdpv93GIj1zW6561wwmrI7YXLpx/f/dLD pNoE4SitKQFeWK3TkGlgetRm/sxT45+xYOPj+0T687ha61iGmmk0GtwaRr33++npWf+kZxsH9cBm B3XX2Nsvt9smgyPlNlnNZbWA7b9l+68Nma23IRu2i93eWvBrGAacYKwegPkAh5j1EiSlCHWhmPFE lvMHCDbyBK3NkgYK2Ch2B/XjqXjXxtQ1l6ffbkg35B1zx2BGGXS0jb23++XuuckqqIw4ly3Wk5wO Ouiggw466KCDDnH4F2X3kTwAeAAA --001a1134cbbe1d8d62051169610a--