Advanced Batch features via auxiliary .exe programs

Discussion forum for all Windows batch related topics.

Moderator: DosItHelp

Message
Author
foxidrive
Expert
Posts: 6031
Joined: 10 Feb 2012 02:20

Re: Advanced Batch features via auxiliary .exe programs

#46 Post by foxidrive » 22 Apr 2016 22:27

This creates Antonio's very useful set of utilities in a single .ZIP file called "aacini_files.zip"
Antonio, there is a link to this entry added to your original post.

The decoding routine will work on Vista and later versions of Windows.

Code: Select all

@echo off
if not exist "aacini_files.zip" (
echo creating "aacini_files.zip"
(
echo UEsDBBQAAAAIABB1nkPnURvpmwIAAAAGAAAJAAAAQXNjaWkuZXhl7VBfSFNhFD93
echo m1Pn5ha+FCF9RmIkDKnHfJjUtgJTyXT9gfDq7vKu7S6u3xUfDTaYDkHocUER+RRE
echo 9FciYaRogiJBL0FQRMSNKUjkPxreznfvHSOiLKi3ftzfOd85v3POd79z6vw4WAHA
echo htQ0gEkw4IOdcQ9Zve9pNTysXKyb5FoX6870iwPkipy4JPNx0sdLUoKSXoHIikRE
echo iRxv7yTxRFjwulyOA2Cgq+H1i12BJ9kib5y7nd2DfiUyka1Bf1rs62d5MNHhB2jl
echo LBA7ut4OJt6Bm6viypxgAUAa8Jgk5ms8hmbTxZKHplKPtdjoKXnjVMJunHcQ/gEI
echo zv6F7KXCEEX/hgPzLYw/jOjxymGe8gDP9IRZY4Pv4GOfCdXOlqo+wLFdmeWrM8tv
echo NW0uxSxTo2vqBCoj/sLYVAFzI1ObaNUQ5tRBNKP2QDLnTt7C0ub9Sq0ZXtNDWpYu
echo D+aXMYfnL/mlRr2X7uWm2PSx1CraDu0RS2pKQb2DTZnt9lF7OrWBqWZCy5M5ag3k
echo V2bt0M+eYtSGVBdenMrR2szmT0b1AP6ZPiVtz+i3fmpDZYcfOIRdkbkUe6bLEQVT
echo j1pKFTfZL+q7mZ/GZXVnljKK07oduh+OuB/bA+ufkznFMTrzypH8oFTl3bYmXAAL
echo h2ea0g1BPZwtJ8H3Ly80fo2CpnhCnZpSoZ4EgIvzz52wgFBb2CWr+taUSsNt5Z3s
echo QKgNL1hrmzaCrbbpBa3eQ3yg1YNubbqt0K0T7e8gQgCGkePI68izSAYf+iLusjP5
echo s/4s+IdE2iEn+oSBAajhggL1S4OinJDigkS7eVnke2NCC0SZ0knDJ3gpHBMANiwh
echo WaRCQMTgI6B2LBGPo9YqSlh9WZAlIXbksDcci8F//AV8A1BLAwQUAAAACACDdZ5D
echo s1vajKIAAADmAAAACQAAAEFzY2lpLnR4dD2NPQuDMBRFd8H/cHEubu3QzYKbULDQ
echo PcbXJhATeXl+DP3x9Qu3C/dwThG1tTnNhJaiZtuLDR4TB6F7mrxMmLAh0Eax0kIM
echo HRYU4YMobP0XzgqxchHKt3go0QajYqsaRzFPkzTZBdnBZfidP/J8JwTk2wvEEPzQ
echo NcSr/0zGpelHYqEWNoJJBvbr9ijr+llX5busNhHNqusd3XE0iwxpcrv+AVBLAwQU
echo AAAACAAQdZ5D6aXqd50EAAAADgAADQAAAENvbG9yc2hvdy5leGXtU2loE0EUnk1i
echo TWt044EU8dhIPbC1Fv3htYJX6kHVaNWqCBqbjU1MN2U7Ww9UPBLNYcEfgoKKiIqi
echo f0S8ECrFSEVURFBRKh4osiH1rEeswfXN7KZR4wGCf6SPfe/tm/e9b2bezMxashMZ
echo EUImUFVF6DzSZCL6o1BstwEXuqHTuTds55myG7b5VZ5arkbyr5Sc1VylUxT9mFsh
echo cJIsch6RmzqnnKv2u4Tirl3zCnSOBTPapO5Dd9nSemD0dlsf8C/M22w9wc/zVFaR
echo cfSDOOwIlTFG1K854UiPPUYs04XpZEE5dEOaWHXl6K60f0MmTT1NZQJjutD6rScu
echo IwXANxT9A+GA+zfpYiysweAfmvQF0b1mUSwvllxO7ERoJKPv3QCa9z1uInzFFKa3
echo p0THWbJwjahD/ktRcsA4lEMmeIrRls2XlUeqmvK+Vw7DQNieqkIlE5Eqp5QQxNF+
echo JojqgwTjKPcy9fY2B8lthJw7am9zH+oN+dvWbZfvWN1he7K+IQnIcMM7sEpPACkj
echo wURySgONbGA6vDJ+BBvcAfMXUgjO96bJK9QzZISQLwNclOb1QpYUcrIlM2PiKD+C
echo xkk93l1UwufWmYs682ydoYiLDC4NPGMDd+Fqb0pxuMe2y9/nYbW0Lr4UpuQHypw+
echo 0xEo4AfiTqHO0xItMAb/7+JjCKaE3dKEIDmW3X4RvHKQIIdhM78Im/g18pDIg1LA
echo E5jToMEWg1fWgWHPXo/EWo/HX39RVVhN7dpNqVx5QLQraa3xZmE92enWJ523xs0f
echo 75/kAHgFgHqD+jh+1qEJwLpIa1FoSDvAy2QQTwHRfpIXIYhLXwh4WtwL/nfdf8JA
echo 97/MGdUc2v+WHgE/DncPBVvhn+fw8kAjXlqaiGvJphxEdz1czm0KkgFDogtfKOdp
echo AaM3pIbRGlIFXvGAaWczQ8+Dc2GEHJYVfOQBUFYhDsHCknRhSmdYfBCO5g0C38wG
echo boIfH2MDV8CvH76pgcyEcL8P2pRyXmGMCZK9JODvlqL9R2PxPeTS3dN6ZkyGG1oI
echo +0kueq31eJpjisZhwH29TPrKq2da9L5cBYJRzYn+0c+3XhU+akdUZBBHETmVJKSy
echo mkquvNeQTYphPNEHalB2zSLIRWinQjnfvqv4sdTvT3AAFLLn7G1XYwVs5DE9BMnC
echo j11tLiq5kxd5nHgxOwYP3wtXo5cqW1XZospm5RQURWdZ3Vs35DNSz9Vmpms+eVel
echo RurDs6wV0Q0W90HyaFrdJ+jlJQRzMwx1wLCM3jkSzYToSidSS+TqpV7oui5KOZnq
echo NX1dcq7mPiUs5IfDpkCj/H52TAs+zY5dVwchDhgHmag1U2uh1kptL2rzqe0LtkP+
echo JDUcQhtB94GeBW0CfQb6DrSHTcOUcRl8ARnj/p5rL7Kv8WCH5K8UamvRezRNwFP8
echo Yq3fJ5RXSoIgTpbdbkGaIbr9CPVkIGsX6zySX6wWRLzQKXmcK3zCJOQlmXLsmu4U
echo XT4BodGGeYLTpRPNkXGNjCdhLHlWyBiyLw0VkgcLNE2q32rxL+DPtTVVVwN3mUcE
echo /CpBEgXfqJHFLp8PdUiH/EfyFVBLAwQUAAAACADPc55DRKYsCrUGAAAKEgAADQAA
echo AENvbG9yc2hvdy50eHStWNmu0zAQfY+UfxgihR1K2SkqUHbEKlYBQshNpq0hjYvt
echo 0Fse+HZmvDRJyyrxcpuMZ86sPnbuLVUp/WKh1qfxAKFEU2i5slLVsNbK4ihNeBGK
echo hdCisKgNyBoKNjqdJmmyNYfBdAaGHp6R4hJOn3bLLHyxwkLONiC8GQhrtZw2FuGo
echo QYRbTx89fQ6D6zCjtaXSSA5m6liatGARwS6wG4hVzqGH2aaw0mpORt1UjrWRRi2z
echo nxSjG7FEWIsNqNke4kmgoNOkn34/IwNLsp1yCga1xZKWQNQbWFWiQO8k+F5xZsi+
echo T1KqaK2s57zqwdOEApipqlJrlrfKp+HBzKnNpDZ2BwoWwkCtyCXFjF+lakyabIM7
echo yXZp4vA5P1lLK0UFRaMNSVbKSNd3aaAxWJ6GVwZhAKJSNYJVpF/KQlj8OQxJ+jgn
echo oWH7wa5pNNiZBpanCUWNmsy+yhKVq/DEAtalix2UlnNZi6o1+kMeGm2jaywd9p3n
echo z58+f3Tn9Z1H4JDvHIjlqkJDI378lipxdLw3zvnNqsE8f7OQFnPI3C8Q7JTEGdx6
echo Do/uktJb5B7Run8ARY6m1OzPQYUdGbRwHw9uU/B2fGZ49tz5CxcvXb4yuXnr9p27
echo HZ9eczCBzOKBHeeotdIVVaTKD585uEvzR7g98bVr57M0wWKhYNIpSSjUfk0o1UMx
echo ktH3nPHyk8NDXRm7ZlmavFxgZwRvClsswDRTrRqaVQTBK34TYoWFpdSdb8MtJNfK
echo bT3DG8YtVWR0ulPqGxw2Gcy4RKMXHuM9EcYHyGjHLVc2868BaRh+z3pu0biESW1V
echo LRU8Q43fYLIRlWAwOYMs/z7MoMYvkGUwVxTkFKki5KgxYo6xZoWVX3kshc+B4Smi
echo GDr0I2eTQbAsKHv416D7EM+cOiwbY5kxsC4qZdyowpdGWTRXeQNx/JSPx3Z7ey1q
echo i2UfzJNv5Nk4CUfNMWgCZE1t7XJOiIuXZqpgnlhLSmnq2an2sLwadmTZwjIFtW8u
echo prn8ivVJnjaNtd2OW2SJyCj9mJ/6KkfKNJJ3I6yVLg2QUfbCD5KXtGXJrrb8lyYl
echo jy2pB8xmtUJdCINQoaVE2UzUIdnoiWPpzC3Zr6VdwKeGAbnhn3GzE2uXhepmOUWm
echo Pn4LIFiyj33WgZZ0CNEN4ujOU8cKozCRBm2lCsrzTi2mFd7GSmywvHOwErVxNfSz
echo fhtnbtc1B7KSQm/gq9CSDYynjZo6O04TPkTzXLDro8/lfGEnWqv1+NSlS/AIZ9u3
echo C3DL6upjV2M4vJgmTkqKrfACHINSwdE0AeBJ5HaXLpbS+QwrALCNgvyzjAyxMjsK
echo wm2y96TyYXyItQ/tmXvbNDnmEqOyWNQPcTMenvMCx1Rnxucv+9dXK+73u/GVM/79
echo kVqzYDK+cukP1BtLy9wbdxhPQhxnpeNEn2zn3WNm/n3MNEOShZxZxzu5l4++nzk5
echo zAG/NDAI+W9ZPurkkA9pNYPMrQcMX7M9mywaRW20EEIgm5jIPbS/jZ2vWJHcenmc
echo DYm0GZztp7DrNGrlvdgZIA5H0PTkO0d7l1nGH1L/4cjrhDL4+xNt1I/Dw8yigLG2
echo /TtLyW9fhvTSqXG/hJUw9umKpovwmWU9rYWCcW5R48R4GKQR4X0elvIP3ADfc3di
echo P1Mm6AY27Wv3KvKL8QpnYDth3PzBXchKrOTSjLMtTxyZmEJKr3+ks9u9DalNnRqp
echo 9xc9IfDyHL9A7vdlHmUVy8LmzDtG+1QwpXxian01Hh4m3ljTKGd6aB/i31Ffs92V
echo +7eBTqMiCYRLTBD61vHreHiS1NdP3RMfDdxp36UX8hsC992Euep3EA61rVPctkO7
echo rerMXs6+WtVItzk5zGFuNZxxkbOWDxVLnzSnQvQYC3IP41usMyHsz0uL7vd4Hmk2
echo 33Ozq++7HWk2j1NOS6fG585G7ZYJYqOd8Yc4CX3Iyhg4szMk4ZJ1qGe+PS7a82V/
echo tGK/fmPanx+Ow9uEalD6oRChvP/aWfGrpsbtP44Ow7WgHaFRp/a9SRs8ai8lB5KK
echo ftMH6m4T7VHOI+8WfFnj1oqNisVRxEjDLZLD4IO/D+FHb7hvemrH1F0c/i6GiLIV
echo /gTpt5FEgH4IEyhUwzdIDN91oGbbz+DOh0v7uec3Pn/mFBSKkXwJUzWmSe92n000
echo wkY1BKHxegZvCfmJ8nG1u8rPzTAw1gEWjcVILRP/b41CcVg2BrjrJ35w3oxfnEHO
echo l8wSjdRYQik2o4w0n2OZx0/PNHmsalqAlw0a/n2DZe2f7H3duIe7WtKPY7WIdVvs
echo ssIPUEsDBBQAAAAIABB1nkM5ANj4egIAAAAGAAANAAAAQ3Vyc29ycG9zLmV4Ze1R
echo TUhUURQ+b2YU/50ywkXQNRKKahDdFJT497TCn8HJTRT4mrkvn868J3fuI5cPcqOT
echo 0KZVQau20iJDpIU1FoS5iZDAjaTIa2aCFs2EgzKd996MYwRFixaBH3zn3HvOd77D
echo 5fZdvw9uAPAgczmAeXDQBn/GU2TN8YUaeFa+0jAv9K40XBtRomScabeZFCFBSVU1
echo Tm5RwnSVKCrpGgiQiBaivurqipPgYGhufvfQh9XZAh8vv56tx/zl29JsHeZBJThi
echo 1SEPvwjQK7ggOflpoFBbh1qhUiipAhcA0oE3T5J/jdfpeexmMUNTccZdGPQWs3Mq
echo 4hj6nYJ/AILev2n7OJ3gmDsEKLwF+YvFsI+FJC4BZJyCo/H8rGvb971mKQa/WYe2
echo Q7HU3aX10bR5GC9T4s6MuOXP6TvmLirkmJiSp8RN84U1s4bBaAW9JCYmkjeM1kt6
echo abf5xpb1JcyrYI0nzDlHxeuN1rOW4Ikj2DRP4wHNUrGbiYC1wPpca1lgVJgRN+yd
echo D7BU+1zceBtvWWxea3k/fbTbyJ7hZUb2nF5uLLuMZcEuNbFaI3vhToWRaBpbrHC/
echo Sn7OxAVemYm7uFv+/lF2v+yPv9sPswedY1+nS7svntDLnbSdrLIOhHsmF/V0f9y5
echo bONkrvEIaYNcI9jRY8cyO1bZ0Yvx/4ZKAO4hHyEXkKvIYaSFLlLUmdaZ/L3HQxAn
echo FO5nWpBGo5CGHso7NTWqhWkgyChVO3RZpuyKKmsAowJ2Azx0WVJDYQpw3jVIpVBe
echo PqDzcZ13jkhMCnLK2iHiCux5deosqjG/FlW4oqkAW86eSASdehWVtsMYZSoNtzT7
echo QuEwHGAPPwBQSwMEFAAAAAgALnOeQ37mI0LzDwAA6CkAAA0AAABDdXJzb3Jwb3Mu
echo dHh0vFXpzhIxFP1PwjvcmGgAWQSXKEoiKhoTV9wwRk0/5g5UOy22HRbfylfwyTzt
echo jDPg9tMfzJS299x7zl3mAXsylhxey9w6LDfGSS+N7jcbzcbduPfMOHr37vu390uj
echo KLyt2b0Pxw9T0oY2woqMPVuSjlZyy7pLln1udcC0rH/DJuGaDYBdbAHp1q3htTZJ
echo TbP5/On80ez17FG/BBf6QEtjbCK18ExrsWVycgV8v+YaLfoMzi0r4fGHvAk34KP0
echo bzSXmGUo4XZmtpwUUFO3lBKuEiaTxp3lGqyWgZTwpHlXe5OIvaDHyR/CfmtyysQB
echo J46tBwXiL7lQvRA3nXFqLEcHqbTOH7MTOiGBjSwTzcbRRcdLgyNQ6JJM6QD8nXTr
echo Pt0HDd6LbKN43Gx07iL6cecoZ6AvlKIxcnw3uHGkhMNSTeJibnaTo9uT82CJw/Pd
echo sMDh+WaDl2tDj9k5seJfdejTvMoxEILkxsoVuKjqzvgEv/QOB6X782VKjFaHwO9I
echo jaqUqLWTfk3axMS3uyT+WUUOmy7POLkJ7fAvZYEgGRn5zA4QQawYa5HBokpqBgC3
echo vJUmd5WXv0jr2EcVIzO21ljFW1bn/6OidL4MIOr4rAi8piyUM3gos3MBKjOJTA90
echo ZqBmrbMjCR0hjF4pKGE2bEXwU6i3E4eafsF5MKVzCDrQK73TRUpYeQGmWLbiel4m
echo 5FyZYcj8a+MVcrulZUZf5GnK9XzAfeHDTW08baWTZyE4qSNOabKTOjE7tIR34KM9
echo a+9i/nNvMnAItX8Il41ShTe3Nrsi4SDw60i6SelRO9FSObpAtdSXaHTjRiDzhmN3
echo 546jREW/6iRaG4BbbENMxIGx6Cm1JiscZ0XSceDDXGs2NkZqTyek/trTt2PdmDQN
echo oyeje/Ppm9nzV9OXD58+6d+ZvqQe3bNiV9Z3HDiBk6PDJG3t43Bd9N7SRgnNBcJU
echo e6OloWds+StND0Jh6MQMKwPlaKYFNL/HShw4me03QjsAFiUAuhOZRjFiDuiF/Mq/
echo DxudZygJNwmLR1Kzm1QVlIl9GEPljd6wG3bCnUl5F3sBf7xi/zEwaDa89GD2+EXv
echo 3tMXP+nOSp5xChiLl3JFiw2KF2j4mJFaExLIAJ4WUyVjlAnkRs87V5Xdp9z5mN9F
echo YBqwtfMC1dU/xa4HPXIncD9BTEg9AW4pI97ZATe0WIXdBJuZUCEJS3YYT6bZSEx0
echo 2S0R8QOMCIKdsUW6fxo5akkU5agdIoqxSV936GlYD/Up3xT1X9Q9zGyu2JUGUPGl
echo IZEkA5efUcUydMqiG1ipPOEqgvKTmo1pcfFy/9IlQkWN8K6wHudqcE9uQ9SLQFxU
echo kBTbxEIVTy1tKsg2sDpXATS4chxRlisvN+oAB0heBqxy1aVEbmXCxcffmiQHIE7P
echo Gc3nAtZiMERER1ilwe9IlZPyM1we11ABaLD4QzFVWVYyC6MnfJ0qRmPqXYNh92r/
echo +iUylnrD4aXwf3g5vE7Qjju9G3NZpWxMrf3FK208hnj0LrdLiyx34MvEIQ5O6gIg
echo ihZw0e4Eq7CIUnSCefXv1P/Tqi/kVihgYhSqgzaZFGpM+w8fLl8c4TkCh31vOCqt
echo pPuD+31nHx2Ur4ujzs8dGHdq60E5Yuhp6OkfrFhbq9NAEH4X/A+TwEpqU937ZoWI
echo iArineOD+iBUG48HD6fSRm3BH++3lzaJt+ODLWw3s3Pbbyczsz2kg+dUpueE74BC
echo iZQfGswe+H5AUlglOTpd92t4sQo5IOkoo3wRl2/daIvymDxeLXdnh5ww2AvEbO4V
echo hYfDaVbn3Ye+RtH92M+iAyGt33xAZb/+1F1sW1FLOAPmbVtTSYwtQ26tShaUsHJG
echo eKOrq1eIKG4zaGvBNFCiapDeXb0yS/4knsgK11kiZrbEnsm5+O5O+u5zW8WVRZCa
echo 3UzptM5SgTaPXNdzgk1AskhjAWDilBqRHFHny80psKhYFmC0BSsSZXAPVX5G14B6
echo yFgjTDPCry9D+PUUYTQgKNB1v/78PxBO2qYYQ/UE4QNPZh7gjIyBfYrwPiEM+iJJ
echo AOFUnjKQ+38CMghcgmTG7u/VDc/7HNtFrnQkXCx2yZ1w4IzOt6FLYSgQjFiMBEan
echo /Yb4AFeKnzfdZt1WOXRiTNQUiU9EG38XoowSJ6FtifAsisxQkJIkpCYSigSPbEOT
echo lLgKmqeFeLKPcYT7eISyFjXLQLLROR4sld+T2YnKhaC5iOTZ4BNsH07+V9fisSdg
echo EstP0GA/vwdmH4HJDs6rw9HvI0K5ZUGBk22a3pTldPstr4uooxg81eY6S+xsgCyt
echo pezwk4piMFPU8xFzzgSLMUPeafB/18YoQBAfQd9F0HkGHTIZ8+me2+olwrxiIbrY
echo LO82bQwIFvsigZfFJr7CRM0zOb0Fb9+mk6LufNtl+Qj18dj/pOfIMNH3daTuT5Iw
echo MZG5k2TGu9zN2xjmEa/RcY2tpgh8HhrB+K/Dp25P3z7imoHWbrUHIOhrH3Xo2mPx
echo GdpSJMFciaYvcWa8df/ZAzDhO2qMU1f8U0tcMjG5R17juwf41MRkW40Xbt8WdpZX
echo 4Ve3O4P83dHVBFwXsUuhHkGzRkXvMHlPH75cvE+3ApzMty4XVVpSH1r90LedPHwa
echo N4V+4Eu3PfRIZ90q9XOhmVstN7jr4I+R9Sb1pMkRwqM1RpnZ+NZy6140cXJ28XIZ
echo b3Dp7hGp8dKVjWYPstkquXE96YtZhC+U5XD4FJek7WUXGHrxZbkSLY/vwrGAkBBa
echo E0nZOCKlFSfSxkki4wRG2xhQnA+rXkhBgksjIaQaKBLScENCWWlJaKexYBoDivVW
echo ItRGH9Fwq0l4YQXJqEMKpSwMa2FIKt1grg2sSWO5I2mtAcVZj5QO56Qn6Z1RpLiz
echo jpRwcFJhvZnaUcoZjY0EAWWsh4C12hHInpNqDPagvNaCNIdR0kJqRVoKaa9e0dJ7
echo QzpwkdY2zI2RGK3SYmpHOxHknAdiunEcc6+xN8MlVxi9wlxYjblUypNRWMBoG2Ri
echo o5WSZLS3WDbGNWSscAajM3ZqxzglPIHFYrlRXmH0wYJX3mKEabJcSYvRAWErRKMw
echo mmDHCm+xIJVsMFonMXrvyCrF1cQOSND7o1dr23EaiKHvSPzDpNJIwKaQ3qCsFKEV
echo F4G4CFgQD6gPgYZtxW5T2hT2iW/n+My1mXIRSDyQTWc8tuOxPeNj8JxOsGA8KMBJ
echo lMRzMoYEsSee07tgNCnG8sQO4ImtgZzJ6A6WTcZjPu/KcwKV6Kp7ctJcS688wv2G
echo b8MSjtLnmBkYycBRNDAu4fOGwrNBZLzPOJTNeOdJJoY/mxhhon9wZuxnru+HTCHO
echo rKAFP8atwexMgsuG4XzOSK7OXfjutoRFU4zimo1fV8fY/ELY6ZOaFtdD9E7k291Z
echo 5vUZ4CwbF4ctO4Fl00+b4NMyp7Q9LwPXpec6IVMnHTPlXmJ9YyudXJncbxNlkiBN
echo 3Z4TQQgVJhEnKnGpZ3GqwyKZtMtY2m8Xy08tB3ESgQEyjPqAa7MHtHkNuKmoEfL6
echo opm70hqSvjWbz6YiJVhaz+2ewNgfK0ENTh++gcEsFyssQH5Lj4wI5+VHgWSRjU9e
echo C+p6Dlm7s4XRYt58BMa6au261RxoW1t71K533pwJ/mYk9MDj8evrBMf3i97GHFOV
echo xa2cWc821XqRE+aInUhKfkxdXL1SfQCAyO80sIb9zPjo6daSdInLbHZjWMgBCoLf
echo Vn/Id1Iz/76I6Q8HSPJEOvn5SxbI2xYogXzjqvGmsdCMqFvZ888Dzl5ZoEFEBHfg
echo 0O4c2VfsS3xKVkB4sXNw5gvs8612sakhZQmU8ZaVg3BCWwYqr+pjUa7oA1+u5jIV
echo GYaVc2KdQV+9AGdsoXaCtaodDHgc3R/NzbEnLtZAOKfoY5jrsO3hgOsriymqzDHO
echo DjFOF8cScG0ORINAco1XtstygEAfyecSbEtst1zZSHDobSxX7gmOIW9VYBnunDfr
echo y5r4dQRp53h3IX24McSeEfyAhG7Duwg0gkyyJ3pFOfDwNu1LmU31jal96Ng2E7pM
echo kSq6bRCoglli6sYtKxdZBqx0HAOqbjsw4A/kEnyBmgnaOt8h9zHwl/RtZ+btfn4S
echo 8ah8gdhIAmHUy0W2Wattc0FYv63xRezbVavlBR3TqbTN4cCfMaE+VFukJIHzmv5Z
echo dfErePz0xcnTh3LmHKuHTDa03mE5/YSxE/1vQLlZLQryBvtusTyXmF6vm03L6rSn
echo vw96xBB6nOwZXEsPydwsKP1ZdY9nFY+p5SdD8QBVvKV9CETelklybJnR17uVYfLx
echo Agnilbp1X2Q+KnqGt1PxdAWfCHtnAbXTl6XqmffTNWKoHFm9TtZrsLw9tjIkV55s
echo 0H8r+3fumLFn9Sc/NAn1zZuGxHIBetMITdm3QzLwoPm2KgfSM5Jfb9eY5JjVQTpO
echo Vbt4r+0SfaSDaI0rj6HWP6WGwEAsAlJSkDi+f0iKP7/VgKMpW7I4TJwy5tqEGJpZ
echo vn9IS7apCnQD2z+iL5hD7q+7O27q+dA3eIa5J3s+Dj2ecQJ8+cjFO7+EtyIoihdR
echo XOryrZIUu2Xuo8KEwmwJPxxMFYqBG9oroaUYS+6SI8FFnCIOGQkA05276vTlccwE
echo Q7w/mvm7w0TKUDC5uGHo78hcwoq3OqfGttcvkRQvmaI8xSKrwW33L4RQWy3PQVhO
echo j64NC/ZXc7XAkS5jgyIaXCHtPKtX74tZOcJ1Qn7SEfDbekjP7ejLXcuQdsoyk4UT
echo E6KD6uu6nh97deZCWY6KnG8GNOXbrWmuzrBZHCl4iGqXjLQ6YeqtmXa6mElsPh08
echo Ridoilc7GCdqKN7INjBwc5HhEJ/kKm4s7s/1YpGaKJ0mIMQMHaMuiKUvSjMVapOo
echo gwbcMM0fOqobqGf0tUFX2UfAT/wr+1JGG2RGuQsg4faWBfZQXhJaTltaw11uByft
echo Y1lltYXxreWzMJnx4HHfo+cNyOj+4gIIcuJfsBNDLUQaSQwSpm694K8Uvo9A+8xp
echo naksGDOLUXwCja7BEzKWro4A4c8CkS3tvBmyLmkWU9LOJEZdmEz4+KB+2UwM7czq
echo x5ykjpFteW9RxmC0J5+MiVjd8oZ4zMO6jSrVwKlfDjzG6geBtcLJiLU6OabE/lqt
echo PtZcnPP/EvCVJDFr5oGjoHf3K4MlYsjervPW6zhRtG2exCWoWE0agBlN1fB33KjX
echo Ox5AZjA3yUPt1lECZG6RLgyzRfCG1FEzBlfmvCFocSca6OYzDAWOcxrY4v5xAuuX
echo PnslfuKzGEwXx6UbzmNLMZYi/4htcx+9nw0Z5Koy28lf8Td79vxkD7knG2YPgaxr
echo itHw537ORdkMXgf5u8uyM96xFSgSHTzbLs8ypQihdJgkJEG6ZDqXJsZEU5r40DLG
echo gFtPkqSF4LflWd2G3Bb7YcrWRW26waQKKULTnbTLD1ru5uFU+G+9gKtXHldfa8H8
echo MzWFHj8AUEsDBBQAAAAIABB1nkOf0iA3CgIAAAAGAAAOAAAAQ3Vyc29yc2l6ZS5l
echo eGXyjZrAwMzAwMACxP//MzDsYIAABwbCYAMQ88nv4mPYwnlWcQejz1nFkIzMYoWC
echo ovz0osRcheTEvLz8EoWkVIWi0jyFzDwFF/9ghdz8lFQ9Xl4uFagZoeo3Twi6bZ8N
echo w/Mjl8yWBNJv05bOFgbSQZnJGSBxmJ0BrgwMPoxMDMYfbvjDxB4w8DNyM7LyMDAB
echo OUxQQQEoVoD6RgAixwKWRNAMBgg9zDCNAggawkIACaB5Ggw0AApAs/FI65WkVpQA
echo 6TdQB0H8imFEgl5RSmJJIgPDMbAAVA0LqjoHpOgF6AUbKFBfHAZFRfeb5iMfsr6+
echo OATkdLr+6XX9EvC/9M+LtUBut+uX5tofjCVMxgc6XT+8SAPpbAUSDXYMJUFpjXb6
echo PiXsICqnlPO46w9GoMxrfePbxge62NxsDIp4bSzLOXUMsm9zMd94/ab1dglPZ+wX
echo mDp2IAPkEph1XmDrPpw8fAYEXjiCuB9A5iiVckKon695QAyFEpaWA6Vf/Q5DOD/9
echo Dp/5ryqg4MDwX5UBTLKASQ4wyQMkRwFgmCANmEbqgLgPiJcBcYQCNI0oINTsALEV
echo SNM/m8G1IrMkoCg/ObW4mOE9g3tqiXN+XnF+TqpzaVFxfpFnXlo+A0MWI1A8uCTF
echo IzEvJSeVgSGHKRirumcQ/bm5QHU+mXmpjgzZqUV5qTnGRnopOTkMo4BsAABQSwME
echo FAAAAAgAlXOeQ26KOFIJAgAAhAMAAA4AAABDdXJzb3JzaXplLnR4dF1SXY/aMBB8
echo j5T/sCBFgusVSL+upcoDCfRaKVJP9EtV1QfjLGDVxHTtAFdV/e1dOyC4y0Mi786O
echo Z2ZTNGQNfVJ/cIAHhAqtJLV1ytSwJ+NwHEe36MAQWP7IgAbr4XEUR+dp+OGLf4fl
echo T1//vMZLLCgLArZIEmsnVgi9dDBIR6M+mCU4j10LEtIhgUStuSQcz8TRUmmNFSzu
echo uXRi5Iu/WIQROANrVeFF6y003BmWvkUozQ4pdLWwzmMrrM8kcTRxgHV1HSBbwp0y
echo jX0sm9A1VLMGVcNsPv84L2dfZ2UYnx3EZqt9QleFqXB8FUeEG7gls7/Q5LUIsL8b
echo Qey7q2qL5Lqw4Yn+gwBvRnHEGQexvpAlSGRI4w510raGd9CtcV9wWjb7EJiAz+f4
echo 7Bi6rYr50b4htVK10Ec1D25MTlcl3s5pb0ujtdmregW5cHINtlmQaZyqESpc+o9F
echo ZmbKndANWp/5stHe556UwziSRrNv4RypRePQXiY0ngaOwkN8zbbO3uNhykJdNkqf
echo PX/x8tXN6zeTvJjO3rVtmT1N+W9g1iSRfhU9yLWQv/jdIHDkiDXAhEMGdl4B3DW0
echo 1dzJeRnc+bYOwuD8hKF7gDIwlC1DGRhKz1AeGb6jTwPywAB9qAz0AlHYxwTkkywN
echo 51ZcEcR1ZCcgGeMFZ52TvfE/hlynnTji3eNBMUUeR/8BUEsDBBQAAAAIABB1nkNP
echo ElO0lwEAAAAGAAAUAAAARmx1c2hpbnB1dGJ1ZmZlci5leGXyjZrAwMzAwMACxP//
echo MzDsYIAABwbCYAMQ88nv4mPYwnlWcQejz1nFkIzMYoWCovz0osRcheTEvLz8EoWk
echo VIWi0jyFzDwFF/9ghdz8lFQ9Xl4uFagZoXKeBwXr1SfB8PwEk0liQPptvOkkYSAd
echo lJmcARKH2RngysDgw8jEcFnyhD9M7AEDPyM3IysPAxOQwwQVFIBiBahvBCByLGBJ
echo BM1ggNDDDNMogKAhLAQQAZqnwUADoAA0G4+0XklqRQmQToM6COJXDCMAStArSkks
echo SWRgWAEWgKphQVXngBS9Wd9eBIOC9YU7iMPwwgpInUECL6yBAt0futjcbJRKOSHU
echo z9c8IIZCCUvLgdKvfochnJ9+h8/8V+VRcGD4r8oAJlnAJAeQHAWADVYQB0wjFUDc
echo AcQBChAxGwWE/CwQW4F4vbMZXCsySwKK8pNTi4sZjjG45ZQWZzjn5xXn56R65hWU
echo ljiVpqWlFjFkMbqnlgSXpHgk5qXkpDIwPGMA8p3zc3OBfJ/MvFRHhuzUorzUHGMj
echo vZScHIZRQCMAAFBLAwQUAAAACADMcp5DnszkQo8AAADHAAAAFAAAAEZsdXNoaW5w
echo dXRidWZmZXIudHh0LY5LDoMwDET3SNxhdt1xiFaqxDECOCUi4MhxinL7OlE3Xozn
echo 816RnEB3QrhSUSzFexKwh7sqktA3cMk4qGYVPmgah3F4x5L3ufmf3d60rhNFeCGC
echo MlZO1Uo2lExtwG4S/og7s231+ttVVC64Q94nzI9tHFyyzTU4NSBF8P0vlFj0T8RL
echo pLPLp8V9uDZj+gFQSwMEFAAAAAgAEHWeQzPUs+K+AQAAAAYAAAoAAABHZXRrZXku
echo ZXhl8o2awMDMwMDAAsT//zMw7GCAAAcGwmADEPPJ7+Jj2MJ5VnEHo89ZxZCMzGKF
echo gqL89KLEXIXkxLy8/BKFpFSFotI8hcw8BRf/YIXc/JRUPV5eLhWoGaFbd/wVvHJt
echo HQzPP310nQSQfvvlyDphIB2UmZwBEofZGeDKwODDyMQQlXbRHyb2gIGfkZuRlYeB
echo CchhggoKQLEC1DcCEDkWsCSCZjBA6GGGaRRA0BAWAkgAzbNhoAFQAJqNR1qvJLWi
echo BEhPgzoI4lcMIwBK0CtKSSxJZGDYBRaAqmFBVeeAFL0v2ECB+qIYxHQAEfFAosGO
echo oUQirdFOP7yEHUSVl3D9F+VRcGBoPVAi+V9UAMJit30AVFvKARH4fuPwGSB4oQ8U
echo 6/7QxeZmo1TKCaF+vuYBMRRKWFoOlH71Owzh/PQ7fOa/KgtQ639VBjApACZB9owC
echo wOgFqoBpJEcBwl4CpGdB2SEKCDU9CtDEhSS2DsjmUSDNzNkMrhWZJQFF+cmpxcUM
echo zxjcU0uc83NzE/NSfDLzUh0ZslOL8lJzjI30UnJyGBjOMcSnp5YkZzAwCDLGZydl
echo ZAKTf25xWXJRCVh+FFAFAABQSwMEFAAAAAgAtHKeQ0ZTyU/WCAAA0RgAAAoAAABH
echo ZXRrZXkudHh07VhZc9MwEH7PTP7DxjPmmqY0CWfBDIUm3FDacg/DKLaSCHwES6YN
echo D/x2vpVqO04pN2+008aWVrvf3qvckYYEfZALmuRZwg/jTOQRiTSiXJoiT0kZTZ9E
echo XEhSKQ13d5/sPhw+Hz5cb7faLRx/gLNvzj9+y69bOlSKwpnIRWhkrknk8oiNBE9N
echo 80wroz5Jx1CvkTw0Mo2wCckaFO1WKqdiicSKuTeh849JHygTzkhpmmI/XaM0owOh
echo DE2y3CmxSSpJZKSEkfGixP9Z5hmpCajbLVb0gHHkUmsZWeb7M4n3bJqLhMYyzg7o
echo zLm9u09ePBi+uv1ke7i3fmtr/9xZipSex2JBBuRhFkldKzZelJZwUOKY9FyGSsRO
echo LZXyqcq4a1gI4yJS6ZT2Zmpiumt02+Rxl60OI8amCwnJWKUwRJbqdXqVFZQIaFQw
echo J6UrvDgA0vmC3hfasBAneKLCdsuBXOBoKq2q525jZfNcu3VThrOMssmk3dLSxFkI
echo oMNUjGO5LaGijIaHc5FqyG63zrBG50fkRTJWiQ4Cj3xfsEpnTuPwaRgmozPtFhEx
echo V95st86epRvwX67XzaEBErbI5racqFTCSAxDW9EkAlBfr0iZUSnPZB9kqoPeOfqx
echo ZHjX64iOR/JjQR6oPLfBPyzm/A4k2YWzJGMty90ac+D7Y0cA9PiDzCUFppnJaHP4
echo ZNRu8e8xVXKZkF1T7DBY1maUc8An5fIrFUlJupWaLFUZ7chcfqathYhhBbe1Cw0U
echo kubIEVR5Yp0eZZGaLMhTHiNT7K51d+i2SBHdhgpotlc6dCxDgQWbvvMin2f8rAmK
echo hLlEgtA0zsYirngBmzV+ZWTvlgg/7M1FKIMrHnn7YgyFg6t45GB9N0yR4UFvA+/2
echo kTd7A6/d8oY65Jf+5ZL0ZtAdeJW7nEtcnLgoUEG3d6EpHEnwrpLvsuQdEBxnEnRU
echo p3o/v0WqG/SYsTNMkecyNfFi08q41JTxlF7QkHZpn17RM7pHT2iHHsqJuZVDMLjt
echo qumsfFkRzPBOFF5rNdhY0Yr2aJtGdIfu0n16QA/hrkSFWYyg2YKHTJ7NkcOs+NMi
echo M/L3pF4YNKVaO8ZCz+g1vaTb9Jxu0WN6RLezJBG0jcBxu55Hd3Kx2DMi/6bgLz+U
echo fPFqU/KoR6M+jQY0ukCjizS6RKPLNLpCo6s06m38rDNr/pd7Tf53s4SzkJ7Nt/Ic
echo hXtHTOWzuYXLmmxDK+tRtwvKHRFdtH51S5BV/1THduJCox5GoId1DtKaN7/RvVTb
echo HRnj448C8spK0Nswt62AsSyxdkTjn7Lp9pOjQzWkdzhbwWoiczXvpIRZzcqd3OyF
echo tUWXLMn2qk0Ev6zGri0Ev5iv/ZX06VGfBnSBLtIlukxX6CptkPXx8GMh4uMx+6vy
echo Bv2mPIvZxRRs28Nf/6gU4a166jvdsFQ+9LmJOyL32f+zunVhJezLcC9jvIrsKnrr
echo sEW0cqjSvkB/432b61Wi/wUvXfxGUq5mpOd9Nw+xzwHUTMfjqVcpU+nxO3WKiYKy
echo pHDTk4cKVLf4cVeK6CFaO+linGeFwaObCXniCqXWdqAzOWYTTVkqu+NFFx/cVXMc
echo JUExjoBlUsTC2AFvuM/jR8i1Filypm5qGDGkkQQ1TD0yr5Ftpu0W/iU8AEqe6izX
echo s+vQ341/odByzW54wJXMjUdJoQ2gksRoiVYfkcLw9pGbiCYIZuKq1dOBimNLnAtL
echo OuFtnJgXxooiyJBgu9g8cWqkWzKOg8vueWlScAtHw8HAvbmtQd/OTpWJgSZ4U+J/
echo 6yj9HjzC05z/pe9RKj8iMpBosL/fx9lUHvKUbV3rBu7Ky/BL4EuESx7LTzL2y7nQ
echo x4ZPU3DyLQy/ro4cyys3lnKLRbqj5UpzDF6eRWtaN5IyGg+KdPxeB0Te0txZA+JB
echo 1WezrYICRWSnywjGqJZrTPWZUqHltZp8Gcbml421bq/jkNRgjjNnn/oV1cnArXt9
echo OzyfP0Vl/rgxufQRfL2Ty08qKzSVqYQ7jA07oVW8oIQHWgVFcUoXylR3F3th0es0
echo ynLOTpHMY7lW5Vikpspw9sWN8GR9t3nr3UZw4cry+9XgIuLUarPOv3j6pvNRzqZp
echo lst6RSMvhOFbrJ2vneRmZMVak38k16eGBZoRaPKS7uoqXTPgapx8Oc1QOtJPMjeE
echo KiTzLqc+oXA4dBkV83m5ikKkVy2C1A+Uy1jUZCZ7txVcuugWHmYHdkUEVy83Vz4H
echo vX7/p2y2DO84tgrXN9Kxko4IBky/NOjy3mf/qITbq3s3qM50S2Vq63VA0VmxXlWW
echo 50Lrgwx3b3dTtqVMpCQ0sCr9AZmsDVNmrhRqkdj7uj1e2/Rn7DHlvmLWaFwcF1OD
echo 9c55TajlFV/EGi53Vz0gqYDXIpxKoMI2P8cVDX95Al+QQEyIHDo5XbIiD/lSYcJZ
echo +cWBFdn4SqXQclLEZGy8ocHFBGEKlXQBPpDq3srz+hpNGskpyh1WAqgAwHA3zLI5
echo FalRYGftqcrvXhpW3WS6yqTbsJllYRTLrFrvTOZyqfTjKyHbK5aqvitPGy69mCer
echo +WRCIUzAHTOx2Z0x5MNltcoCpTnVnQtwG9MKvfJYFZp9aziQOcyRALZRiYych9BI
echo Lb0w0HqNlGm30DqU0cyDCVkSTrsC6FAZWXdiXhXuqy5Ki2QMx2Y2k+GgCA5QE8cc
echo nFzDPgxRNiVC3LuH824DMD3eRISguDlRkADDMUk1EfzDPr+vEtfr6Qg5fbPp46Ek
echo CLjXu4I4qA55m+Q5Kh6YmGngs4K2tw38ejhoRsjPzQcubBpN2C/FuM1lWY3G2ajk
echo J/fXE4E3aVDpSo3Ly1mFqHO00eFeUqFtdvDeYNVmsC7+eceHhJMVaOrQFGLyhzIF
echo zxNlextWqJN0rlNbvMMEvY3mwSP3N+K1QVEOF9RbxrYyovzSrHf7/6z3L2a9FzOZ
echo 1mlX3XdcZ0FNCkUaQiJfiUS6oHk5Glb3KZAiv7NEchhoyt0XodE67bsbT8qTY8SX
echo LfSsGRcx+InrJ7Os29pXUEsDBBQAAAAIABB1nkPlsvvLPAMAAAAIAAAIAAAAU2hv
echo dy5leGXtUk1oE1EQnk1ibGs0ES+KqKtUKo2WYk9qDhFt6qHaYP2pImhstnZrspHt
echo W+3Bg0qiaVZB8FhFD/biQTz4hxgoRKqiRQoKagstKrJ1WyzU/mF0nfd2Y1tKLYKe
echo dNiZb978vZnZt33/RbADgAPZMADug0l+mJ1uIS9Y8WAB3M7vWHmfq+xYuatebOSP
echo ybEjcijK14YkKUb4wwIvKxIvSvzWqmo+GgsLJfPnFxSCSbuL3jxZGLjXkuOr+663
echo LEEcqGttWYS4U6ytp3awKFgOUMnZ4NJBoypn6wU3N4+b42JD2Cyjx2LemsZj+hzM
echo OYFQOpFjzyV6JqMFFi3GemvgLxCPtX/hLiFCE0F02a2G2KzTShwqkcMhEgJ4yAxW
echo jHNqnJ9+FmnUF9TeY9hutf/0I63HMLKPExSou2FYe4mu5vLshXQWbc3pMZTaWbRp
echo rShSzkC8zR0vRtW3SllmHZeyI5mTnFuh96MN9S/6C1+pvNW34YRfY9HFJM9XQxy+
echo JqU41R2gQaXuM+849Gxwn3uLqNkxzH33eTIxilemMkM39PPJogr9nJf1QJZzaQ2x
echo AS4k+hGDe4071G4oWa0IM9XvVWVdySsjNNfp20gWmnV8PDkUbyMHAnqf6Wx3Art9
echo nZLfnqAGmz7P51UKzANnNRazGjuCqDWg+FktDwdOBNES/+CO5yOmurFkPfCAjWVZ
echo Y5qK5gTu5RMgdrnj1xA3ZU6uPZWmdwBZNmJephR4M1yCTqGj1qmZupop69KPeV+r
echo bG77WHN6kJa9xavPhm7kSlSZJWxkFXdlylqqjTuD1lo82AaWKlS/dn729kxfXy5O
echo A4AadWzm/T5mc5DlM1/VCrgItqKkc/LL6Wv/Zhiz/8A6TFfZI3yaKXSnetlfkF34
echo evLWlr4qSPXqAzsyzylpm2noIHtkSr4J47qLKjxxxNuU4R0Z8zCOGcZqD+8HYzUw
echo 6WAyj0kXyn+R6niAU8gXkS8j1yBT8iPm6CbV+d/Lb4HyJpEE5Vit0NgIi7gKgZRL
echo x0U5JkUFiewJyWLocETYDA3UU03C20JSOCIAjNr2yiIRAiIePgL6tsSiUfRVihJG
echo HxVkSYiUrS8JRyLwn/4A/QBQSwMEFAAAAAgAkHKeQ9VhCf8wBQAArwwAAAgAAABT
echo aG93LnR4dLVWy47TMBTdR8o/3FYqzzKQ8q4oAoYikCpAnREs0CC5idMYEruKnemM
echo xAKxZsGCBb/BL/ApfAnHdtKkMDwEoo/Ivr733Pd19jK1pjhjJYsNLzWlpSroro6F
echo oFglXA9Jm1LIJeUC5yzXxGRC95iJMzpkpWCLnOudMAgDjwSZF+eMKLg+oDfUr6X6
echo WDfcL8Yvvnw+WIuEH9DOjhO9ZcVuD+mWE7ztVNxaC9CoqLShBaeEx6JgOcmqWFg7
echo qxUZRaOrV4mzOHMo+1aYSr7izJDJOK1KfihUpTv+tK6Cg5kajlRKTjVwnkMttKVC
echo cmIEI0xmNWl450AbN7DIKz6mVzBQpIInBLicp2ZIqgyDLXIplkARaeNUxg45FULC
echo NC2W0kpQzCWsAv82Wxis8prNOXnXEJfJ0JnSGp8IvcrZMU+6qRQ2GKYqpQWVNJ3P
echo n8xn02fTmQOaHrFilfNxGJzbRWDG58LgDo8zBbg0DDQ3uYoR76m0zt7nDn16tGJS
echo CyUdAz2uimgSbdajyaiugv6c6yo3pCQC1Hd8dBPfhm7WqqaPKLpM0SXqP+ZHCB+C
echo 3vcUjzp7MHkJY/FNEaKLD6hv1Gsu9SS6cAVJykWhJwAaDJj18Mxpp/06XR7RDfu4
echo iQfg8Dx9lhJFZ8KAiCxw/950NoFYn07V+z1sF5vt/t172Meb/e4c26QfBmfDwEUJ
echo 8mMa4DloCHtjoieSD+7tDfbXqqYCZ+yoWLRk+OWZe7MHvZa6O6+pu3NL/UUwgWb/
echo JwUUKIDvBtRTwuBJZVaV6Sa8ixxR++miIqcbqDCAwwCofXU2Nh42so5Y+wcBbN3D
echo bf9GYxg8SonJbg8LTanKc7VGYS+O7SHTqHihX2OdgKeS2LoeafshDEQzHHhycvPT
echo AxQZ933hpf2c09WiVJVx5iw49PppwDAsWQFzpOPVccm5pKU45I7gZ4ezKONimW1F
echo fmxT+wDiDZtn8VV/8a4nTgbRhdGwPpoMRhea/hpFNyi6ee3cwLENsI7It03dKDO0
echo hHAtEQ2j4cAjDFwPOIDoum2NVh7bRt6f3xx1FUDh9Q0DPxIw8V6TmWYg/pgWJCJX
echo 0gUAMIgo5MDDEsxGlwMFa4W5mIo8/y4hbdqQlf2M10IFlw6i0hXL82O4I3GEqJXW
echo P9LQAuHtEQ29iwpSqTPi+9FLpgsOpLU1ZsE9tJ/oHnhoHdmGWeV/irJQJnMo+kf7
echo 6Ewz+s9uV2AYnFSC1FagL3AlDeQdMKMzukBkzpKxDYTAomLbi0UaBRaN2zznF2x3
echo +QL+sS4h90i66nQYEgvEmBc0UyxxJNec/l1gyQ0V7MhRCMy46nwZi0k9xXE64xK7
echo zRSvR3c7uQdRd0D7HhDnJ1E7sC38i57oHbix7eh7pgQubU4cERnq8bJUZc4Ped6j
echo pSmp5y3oUceaLhPGuvfPet/1z4fMh+n73vM4v28+sd133lxwHIzP1xi/akDPsd2B
echo 3SJxFcnRERzVIDQlzDDnAbJ6H2u73DEohnWpjCXug8u1IblSaYCaYlHFCoOUJ7ac
echo UlWVdSCwQ0m5yjYZZNHYS66bGY1TKC/NsR3snd4NA7zgta9hbRGDppIqrm1WP1xM
echo Xz++//rx7f/8fbBK3tGvokEEDsf2m6g0bOQ+J0TIH3TYfhawDtvHf3bx179P7pU5
echo 45p38qJtIfmr1ndcv2scrNYGLc/KxF/EKwYX6cZV1CTIdOXy9R16lJ4gKZUhtsLd
echo W9q+OEYE6+tyiL3mJU5p9+Hu0zAAGLCLAnhucPKlkBITa8e/Bn4DUEsDBBQAAAAI
echo ABF1nkNYjW2SMAQAAAAMAAALAAAAU3RkZGF0ZS5leGXtUnuoS3Ec/55zNtxjc7wj
echo r0OUR13jlhC6cs+QXeaVKDF2frbZQ3OOR5Jp85jl/QelUPwlipqYV3Mno4hu1FDy
echo SgdzMTSPuL6/c848kpTyj3y27/vz/f4e51c/ZxtwAGBBaW4GOAkGauH3OIrSptep
echo NpCuutr7JOO62nuGz79UXBKNLIp6QuJCTzgcUcQFshhVw6I/LNZNmS6GIl652m7n
echo +4KBmdtXrW/3stPNiux70eJmN7TPr7e82QHtNP9CH82DCbcE4GI42HH39RQwcQ8E
echo pjVjtdFDoBhoa4ponob6bKVsWrNUCbhKY9vvrWlMiDivP/wFiPT/a1Qr8goF7SXO
echo 3JCFyk8j5ldHvR7FA/DYTACL0upHXi3+qw0aOIAqk8f/xMvCf/zT0Fqgcms7OYCZ
echo qWL8QjrwVtuLQVI6k5fSOmMih8qHKjYG1DabpaJbW4LRk54MQIDdLH12B3r7wIKk
echo eZS0+rNDHa49ZQESjUIiz2DqgygkzqFDklKTU7tmlhpYPVNyamcNr/hMwe4h2H3Y
echo pCQr3TGmwt1ulhJsZd6aSvcwTTGLUyt9Exij5tRmmyXX177x5vokJRXJuqyQGEIT
echo pzjoc13tRDJeIOVXiUbV0pdTW3y2dnPUgnBibhNZd0dItKTM+EebsOETLoADSvqA
echo lxiMjHelzA2P0Ncn56WnPGQsgGFNIymrT2MNjvMPW226/eBFsocVuchqusETq8Ox
echo /gI50MbIlL5lOmEmAJulk25fV5ziA4yb1TOavnR8dRO3uorEpSYbaa4v4g5LsRxL
echo R5JakhnKkPJ9kuHpUQhXwA3QLZlnI4MK5LzGYl44gUlrsH3myBaA8n0so3nFFdY+
echo e2MFSM5NP+mMa1lvtWYgVTh/j80cG8lCTWP5VepdXBti0O/Ta07laQmDeJbD0YMK
echo qVxtZr+gD62a1BmHEkYqZo5baUYnxHO9UrmMG3TK1ioAOhRdPfMKd5icW8KprQFw
echo QbPdprMHvSOpPIlnWfo1TzOgv0+li3YOPbJ2zGCX0pKaoGo9zWIq0H+z1OAOAH2/
echo 043nehDT+N0UUThRIMPydYMa7Py4ccZVT6dsesu7kETvxzwlfQJcTrclLpeU0ikp
echo fTlXk61p3NTZGfvgiAqxDyOW87GnjsVZnmt49mRy7sr30OpxTOrlphbOUX3UKsO8
echo f2ajjqhYEln17eScEbzHzuZ+XUT82P1A1xZdt9K1Tddtdd0R9Z9imQiwEWU3yiGU
echo UygXUXwoFBPQVlCgvvhnc/aAtMKvuKORhfLSpWBhxstKnUeRnZFoyKOMBRhAM67I
echo Qk9whj8kAwz8GssTwySCjADNTFe8EzxhbxAZZXZW1I8T/Bg8BqyNi4RCWHP5w/JY
echo WCxHw3KwZmi1NxiE//glZiNGr0TY+fr60aGQna+rG+312nno1b1XT/zpCv7jH8UX
echo UEsDBBQAAAAIAG9znkNWb6f/MAcAAP4NAAALAAAAU3RkZGF0ZS50eHR1V9tuEzEQ
echo fY+UfxiQVrTNJptNuBRQgNKEa1NQKSCEeHB3ncSwawfbmxKE+HbOeHMVgESb2J6Z
echo M2eufefzofCScukyq+ZeGU3X1nj5oNl4Lj05L3QubE45v5ooWeSOcESZ0QtpPfmZ
echo XJI3ycSakl5VhRKahmJJ51V5JW2n2Wg21jY+s45fX3NNn5OzL1/C1cxcswpaiKKS
echo ZCb0Cf9iGo+DkeFwbRI3eFajmKqF1KQ0FSYTBVAZWwr/sNlQE9KG5sKKUnppSbn6
echo bUxZZa3UPsjzceVkDmx/mXHAAwJUUdBMLCQJKuTE009pDUH7FqlyuHEOJ/A37ULX
echo iSep85is9JXV4an8Xik8h+G/mWH8o4uLNxdnow+jM8i/DOprwBucSkNeQas2fqb0
echo lNQaI3CvTTE6KFir2CdA0LwQsKWDVbjmZ1BWG3CSn3pjXUxiB2KzUWMEo1DgXFXK
echo /CEpdgoHmXAyDih2ndyyqzdJsx+gZuNAyQcIbTIcJhzmw10nlIelEP3xGPHIZaZK
echo UdRs/4ur5IwcnMlmwcnCmXWoEVrY1dOVVfJmi5UB1kytAvRDlHPEka5kgSdbaOHl
echo WsOWhA7B8tJUduVZIChXk4nk7Aq2g14xn1szVzs6rmeIKt5Iu2s4mKl9dMAVSo5J
echo CYh3knbJ+X8t5Tc66A7eVRonMaWDsak/dTqdQ9Tr0anJ5YOjbcE9ovP3Z82Gg9Lk
echo hHJzPTiIpLXGFnIhi6iVHkbRvWbDypK4EPcNAYL1Af5hyJoNgbsKjwb98JWzxr2Z
echo fIQk4wOwy0p+lPnlrHpm1TsOvsxmhm5s3z34HUFBFPdvxBSx3mjTEParVe+G879u
echo br/uuog0Ya2nVvKNQKyszJDwy+DSviHhSIuSDYY0bI/H7eHwH2ZxQskziiLBTw9u
echo rezeOgQhBC74ptkoc4pYTdSOxmP8GA6Df2fKgVTFOWeKXNq6gfS7zL3btfIk8GUm
echo k8BvSDcaaXFVyKEsxFLmox9zoZ0y+l/xXns22CUjQN/gPuocBcQHzQYRbciLfl+K
echo tSKcr0PNYSvywUpt+8ZW7Q1+x83xxurRDZp6yy6xBzUZh83GG02vhK4EqD9G7t6/
echo f5suKue442TGlUaLCgX0AUVlFb01xVJ8M4uYrhGVQlQ6m8mcFPtqltVPuhy302Mq
echo lWMCuMTHLy/IzUUmufl4HHbonUEwPUBoxeShIkFe6ZoNsTAqh7qZKln0SpI1EMJJ
echo qFItf/iNamEt2krO+mNyhlADZeU8SPYcBC4KK4FSeVXnKJ/gd4F+widGy5g2mHvd
echo mErxDRcwDiQB8aRQ05lnuZDo0nmWCroEzapSaECEyAO63b8XItGhjwC6YanZqHso
echo wzE0EtbPHv+jTNLkOAm877eFWnYvUVowtFNP9YuQvt1+0ktZy51m4xKAb17OTOXC
echo DAUu+ijszRAyQZlaqAL0lTLsCnAy8/UIkWD4ulhSFooybzYu5Ly6wj33nlNTmPJK
echo CRI6kMv/NcduoXQGKt8K1KiIuWw8aJlWGmQhu1DUPN7Se36G7Dq+fz8okJrjjDCe
echo m4UM86+XcvJ1ex16gUYDbpeBUdaHoF4LS0BVAF0hnHf/pLGbpPcSNrFLJNLB7lfb
echo jkTKpLHVfeqD5T2ZNqtZ98qIrwPradrvYsEoPMiehkZcJ6mrrqypkHkShSwdLwlh
echo BK0Ng7apFWXMw5XTDRQWFTMSktYbBIankK/7etvKggOymYqdHe8fjMCHtPXsoaUU
echo tp4bp6LIKhbbjIcQxZlVznNt12JUy/EVGK8n9Y6SE+2NVobeAtZPOlmKQmw4OhlE
echo aRSl92N6ik9J2kUJnYaz8HE4eJrcjmk0eBpF+P1scPC0dXyY9O7EGKb40n6GKZf0
echo Y3oxODg5Su+3nraH7eet9A5GXx/yLwenye2NsdeD06DmbHBwMGq9PDzqtV+0X7f6
echo PR6U2Eqho/XiKE1bZ0e93mFy+04KM+eDF62z9vjoXitNIYvZ52eD86SfxlwUg3MY
echo SlvpOqjhOkoiXOFnyuF9a+VCoYyolIhwjvFgnecdAgSFrkc3n1Y+Q9BuORplGUKj
echo QCt3NeYfSY6yC2WQHt+7G9NV5UMRWjm3SvtQAUj64zSoemtFVsueOG+NNmU9DHmv
echo QTzWATU2ph5KaJQrbqc3UXphpRxW2Ha8b78rIRPDfnllVT6V9F4jqtYpvwweOXSp
echo Z8aukyn+OxM4/tTrpn1esMbCYpXrp2ELCr3FSRLVD1UojIx1Jofltypycqbg7bwo
echo yKtScq2H3FsvnKtMbjbWTf8hYa+QwIeIUyY0eelWf7t8RTuvCQAR2KzXOg6wCo7H
echo 9aLagUuF5L13I+jkFhTMM9nG+pDeK6NMKJXwVerMVLz6YX1sNng3lJkCvlCWYZ9c
echo S6ML8Y8d1dfGfnOoUwsZXyzDCGRISdhV99ZUs9rub847ZedmTYzSuco4mBx6w8OK
echo CqGnlZiG8v4DUEsDBBQAAAAIABF1nkP0fKS0kgMAAAAMAAALAAAAU3RkdGltZS5l
echo eGXtUmuoDGEYfndnLcaucb+kGLdya222lGvELGqxWVKkrN0ZM2tnRrMzKBGdw7bn
echo dMQ/5YfizyY/3Mrtz7IiRUlIUahtfWcduZRr6ni/+YZNSCl/dJ7mvTzP98w37zcz
echo y9cdBA4AAhjd3QAXgGEB/BmnMPqPudQfzvW9PfaCL3F77GpVK4hbLXOzldbFTNow
echo TFvcJIuWY4iaIS5emRJ1MytHwmF+AjCsObRz/8DXQ+9/i6OvgvdHYX15p/f9wVhX
echo aRmV6uAhKQEkfBwUy69WgoenIPj6+XqF6CEwGAZ4IbqnYb2/ucwqXWoSjt2IV7Oy
echo rgkR95sE/wAivX6PiC3vsLESPxuInfWnLTZGrGzaTgPUPQGov8+PvgV4RZgNokCT
echo 5+N/8lWgB/81SBBTkpz1A6xp72q5Vs69IxeQlKRTN6QyIL4QFTkpYtozH5z+HdLj
echo JCkh63wCqI/HrvWu0Jr34fpnUWjNYKOUpFqc9PG7XV25IREAzA1qtXejzZ4WJ53M
echo SFDaQqWRcfKASi0fs7sCp/n3z3CxgY+0lxOePdxelBvSIXUlc+NV+u+TvlTe1RV1
echo pnr6ZKa/wW3agrOlLmeQ0iLVQkrLrtoIJ4gT1AAoGS4UFZ/b1ucIxfWsJdgmabt3
echo V+M5JxQX075dqt3jlV7R6P5ryvFe0QVUqTeVMFNIUxnKlMaZ7Pu3geix0UjbrjWX
echo xyDPQYd0MqmOBwAVkHc7pwh9sHBeql2ci6ry4ZnCSfUPz4Tzawh39SLhAFzS4K6W
echo pHLnCfTE7jL5jVJa08C7qOIS4tU6/QiXQ8De3FByHejR5k9P2L1pyTv+2KPcpA7p
echo XDIH9Jum2Lu7Qm37KrYonH+ozLyxeOq5ML9oERs5Rd102mPgTZsFNtmGOld1K+Gq
echo bC5KGlwVx22XyjersUrsbtuw+J7PUUvY83nWdn5PI7qlwnNXX3SuqN5qgiwHgPbX
echo bcH43HFOX1Y+vQjRRrQDrRXn3YoqI5/wvu6JI0R8fxPBzQE393FzyM0D3DwEcw9+
echo jW0iwH6MwxhljEsY1zFUDIqltHp4SHvx7/Y5AtIOzU5aZkYuFGCyb4lsJ8xMOr9a
echo 02WAKd+5vMxQzIUAOaqk7OzStJHNo+MA5dQcNy09baPjg3+tpdlyXMPlOuDqIlPX
echo 0Z3QDHkhbJEtQ87HZkSy+Tz04LdYajrWPFUN88s1Y56uh/mUnJlXKCCnjV6Qwzz0
echo 4P/FV1BLAwQUAAAACABac55D0RUDLAwEAACuCQAACwAAAFN0ZHRpbWUudHh0nVbb
echo btNAEH235H+YIFm0JRdKeQoq4hYuUgMSBl4QD1vvBK+wvWF3XQpCfDtn1+s4jgoS
echo RG3k7sycOWcu6+ZOvlM1z/maSbItjNo6pRv6ZrTjZZq8YEfWiUYKI8nBkzaKK2kJ
echo R1To5oqNI1fyd3J6sTG6pqatL9mQ3lCtqkpZhpe08zRJk5iMPnqgn/tm+ri4+PQp
echo +JT6mwekK1G17GFe6tZMaa2aKeVchMRrPPRE4AH3jttndcUNqSZNKl2ICmS1qYV7
echo kCZqQ42mrTCiZgd6ygZnYBatMdy4DgDHrWUJto+rqs9gQQkVUTgpxRVTxRtHP9ho
echo Sx6WWbKEfLjDA1yUgbN0pfUwjriRUzLsWtMEpvy1VRCHnH+oFQTQ6u3bN28vVh9W
echo FwB5FSRGdZEnnACiAN1oV6rmM6meKSoU8wWWAOghxgUQtK2EaiILcHYlwLoElr2r
echo 08ZOSQw802SfaJp4FGvbmuUDUl4eDgpheRqoHMiN1JthoO7dn5Xobpp0fUqTI8VL
echo evlyuV4v8/x4X4lyyATTep3ndV2T5ELVoopjckPFFhdkIakog9TK6r7haDCd3guJ
echo SdSLbR2nBC3csQ5UQ+FW16LeVtwN8FPDwjEJ32oOBRuPDxg2ImgE09l6Pcvzubt2
echo MQHW6eSplrw8CYJp8ZyyTHjno9txNW4fkwQLdt6SJlyUmnINRCmcoIeU+WXIZhm2
echo Ad/Ygszjj/Zm06JecR9Ol2d3yQtFBUoWcsdWN0xHvhMiYH8/3ucWuSDd6/cXaQI2
echo fdx5xsZoU/EVV1l0jGn2vRePIwtvPY+xd26OzQbPDD3zUi6UdaHClmotFbZQdsPF
echo VAmYzqKkPwp4FOqmN5tAJ1wFtGrEZcXPuBLfWa6ut6KxSjf/IfZsefdQ7Bas9qXO
echo xpHo9a7RJ/OT0OKjNCGiOAW3nP7CjT0/PbkFx8vgeCvLfr0Tt/ac8VGbYMdKUYaJ
echo 4Gww4bMraVZEgoMNkZOB1IQ+O3CKvAETCgaOfcQxHsI3ftLkHXYHSlG7reXuNWCn
echo /mi4eUV4TRgXVpbxq+OFY3TB1vpjlKu9dEYUIaz++8QFtMMW9GBOx+tes6WSDc/n
echo 8xtBIuMRzCwgQ1TJI0Wk7O79MbqOHwQh4G5061TDdMkVdk0qu8UwpYm/9IZrSJBh
echo If2s3bD1y1VIGHiOcvzDoGanvULD9d6td767GzvteNjXvfw1O8s6S+c4Nt6dBjPG
echo RPIGImX0igPmw3xIdwise1k47+EGC4Ci7QArIsUghEz8qYeaRENEiwYg9aZDsAg1
echo BBm2beV84GQ5Wa/xleeTeYYSZOHfB7uba7Tc8p/iD0Nxy7aO7XgpxhDj+CE07/va
echo xQ1B44iYZzQJcO/WsfPJ8Oe1crR4kia/AVBLAwQUAAAACAARdZ5DityXZNoBAAAA
echo BgAACgAAAFN0cmxlbi5leGXyjZrAwMzAwMACxP//MzDsYIAABwbCYAMQ88nv4mPY
echo wnlWcQejz1nFkIzMYoWCovz0osRcheTEvLz8EoWkVIWi0jyFzDwFF/9ghdz8lFQ9
echo Xl4uFagZV38Z3ps4O74XhuVbfHqnA+nc3b69k4F0UGZyBkgcZmeAKwODDyMTw4Fr
echo l/1hYg8Y+Bm5GVl5GJiAHCaooAAUK0B9IwCRYwFLImgGA4QeZphGAWQaRkHZQPM0
echo GGgAFED24AZ6JakVJUD6ANRBEL9iGJGgV5SSWJLIwDABLABVw4KqzgEpegF6wQYK
echo 1BeLgWRo95vmIz+Ou/4AiyeDiCYg0cXm1nKgxMdGqVQSwnS0USph/e/64/UHIB/I
echo /vL6evc//y65ht8KJewtt0uY3V5/OsbGkMXY6/o/IPyFH9AMRtcfzT8Y65j/+/7o
echo kHu9otv1x8nDZ8DghSlQuhtiUiknhPr5mgfEUChhaTlQ+tXvMITz0+/wmf+qHAoO
echo DP9VGcAkC5AcBYBRBsKAaaQAiD0UIHwLBYRcE4itQJy+2QyuFZklAUX5yanFxQzC
echo jO6pJa55ZZlF+Xm5qXklYYlFmYlJOamODM8YgDLO+bm5iXkpPpl5QJHs1KK81Bxj
echo I72UnByGUUBnAABQSwMEFAAAAAgAZ3KeQ0x2rVzRAAAAIgEAAAoAAABTdHJsZW4u
echo dHh0TY5BasMwEEX3Bt/hk2VofYDu2kYUg0vADqXbqT2xRGXJjMZtCj185BBCmM0w
echo 8/jvv7FCLcNzGNUiHpFUXBjhnbKQT6Aw4IW0t/ghcfTlOVVlURadSsMBmyu4wf8N
echo QFVdkGcFh+HhIqC+X6bFk/JwJyPvr8IElyCsi4RMuADTtvu2MR+myVnrbM2uPmyf
echo UCN5N1r1f5ji4I4u852NvxWfGLPEUWiCRuTycdXyrKCAz0fPqixl4UJSpmE9Ut7E
echo pe9V+LrfmdOhfjcdZsoZnF9ZfQZQSwMEFAAAAAgAEXWeQ75OSN1AAgAAAAYAAA0A
echo AABUZXh0Y29sb3IuZXhl7ZNNaBNBFMffpmvbxDSJ6MGD0KlY8BBi0YMIoaTaTRVi
echo G0y96KXbZGK3Jrt1Mlt6VKwHW0VB8KLgURAJIn4ET4FUpdieFMlRUMKCH3ho0EJk
echo fZPdGESKePCkP/b//vPm7XswDHP0xFXoAAAZZdsAJXCIwe+5hwr0PgnAA+9qX0lK
echo rPaNT2kFMsOMU0zNk7Sq6wYnk5QwUyeaTobHUiRvZGikp8e3CxyOPyx92/LqdbGl
echo Wy+eFrejf1xbKm5FP6alp8Q+uCQVgITkgdtfq2Pg8gaC0mZpkx88ACiHkCvinibk
echo 1GQQtB0G2j0drcZQ251Vmx04bzf8BQjOho2JcDrH0T0StM6C+mXERIRlVK4C1JwN
echo 5x8ZfiImPherE0PSeimuYvHD+aV3z5VG3bZt65oo3seQPTe4R+FdwqgZwPIaluNx
echo 6zrWbLNh3UG/qDQuK7WkSK9genYQ+IGFzri1X/QHH1UXOqOEB+bL3GeJiy+/lX3V
echo acimRMMMblwom17rJC6+VJcrwcfKp+VKeCDqne0Od0WDs55wb2XFxRoBgMXPODy6
echo 0/Q6tv7eLxaEy/Nlsz5acZL10cqK3b+NxMDuh2aUm7G7Gf3NGML4b6MTgEuom6i7
echo qGeoCZRgGL1FVazJn8+4AcqcxpPMSNNCAeowQvkhQy8YOZpKM0r1g2Y2S9kRPWvg
echo u5KwmlALXGHMYADTIk/xzGFVz+QowBlP6kf3OD6HIc6ZNmlyCjVnbj6PfyY0nQ7B
echo acp0mtu3N5LJ5eA/G/IdUEsDBBQAAAAIALBznkPUBqNEHQMAAM8FAAANAAAAVGV4
echo dGNvbG9yLnR4dGVU227TQBB9j5R/GB6MKCqOBA9AuAlagyIVIqXhJsTDZj2OV117
echo rd1x3PD1nN26aQMviZO5nDNnznjN13LmrPM5XzOVHLQ3nRjX0uCd8Hw6+cRCzlPA
echo lyCZdMqeTqaTQy39mhW/6dem+h3/vjzKJKmV0GCspQ1TH7gk01LngrA3CLteuh4F
echo ji7X58uvawqi2lL5cjqp8WA5QS0qmhUUBiO6JhNoa3bcnt6QqnlEclXsUaxWhx50
echo r8XrTfU2lqoxW4l4s+mF6VFgprPlxXJFs3dUIdY4z6BZuZNU+l6I2/I0QXWed8b1
echo IY14AE5TjmgRxLP0vr2ZFYSWq4viW3GRmn1EAV+rprOMjg7PrCMLhdZu61VDwVHr
echo fKPsrTiq61j52GuojXCCnk6wo43tmTZKX2296yNDECD23vn/S/dsrRtuaKPUMxS+
echo K8WiH5+5kueP7+81+wCALPseUbPpJMptVbgJvskSkOUd2+x+ERaVrbjMsp8JETHP
echo DXVWaaaaPYPk/nbWU6ru5AAH1rWjdW1C2tStDA2HoLb8b3iU9jZMbx8+PSJ/oPoP
echo veMIBv+yXBeP53R0C4dtNGoPHrCw81dRR81eVPx2DQRmH+iRNVdMzR4rGdoHJzTX
echo fj+nVzFZIletAlZtZHRFGoy3SuDhcVkayiN9OrnzCj0yLXoeYNDqODvQk5cvX5zk
echo VOAUyEQLHkhD8h442nnPWuz+NK199ESayGmwwpkra+MyOHA7ujmBjFNB8jSBa5le
echo 1yLdfDYbhiEvXRDThRzkZlhg38x2hgdxndF5V3fvqjfPHsqbZ89ePn8LgguJ1uEm
echo pCs5CFspYwMczW2ivjMlO6pxtYPycb6kOmgZzxbaRiGg2cYypOE5Bdcw3NgBNZwk
echo 56f2d6+W43HQMxrRKmEkOhpMW+IcNn1VQdxg/oBByCloz9ym3zl9ZywK6Sq9ENIq
echo LEsUhYNAlXG/jRIg5jnOO9mpOF+sYacFBWu2NeRHeWkqg07JXpe1G44sBjrKBnxo
echo zZ2QghF+PAGScLxcjKPK6HaVBgvJhWfL8+J6vfhcXFKn0IMRAv5fUEsDBBQAAAAI
echo ABF1nkPxO73D/gMAAAAMAAAKAAAAV2luZG93LmV4Ze1VW4wLYRQ+vWzVKq1EhAeM
echo W0I01bg8qc26/HTDthOzLpEI1c5oq50y/ccKIStLgqbiSSSesHFJSDwIpQkbGrti
echo xfVFgnhiXB42riGizv/PTNwevPAivvR85/qfc/6ZJtO6cj+4AMCNUq8DVMBEM/wW
echo vHbImItD4OzAm2MrjsU3x7alM0Vhg1ZYpyXyQjKhqgUqrJUFTVeFjCrMj0tCvpCS
echo Q4MHN04AEyMfHF66qnLLY8u94w89cdSHDz7yrEa9JJNMszj8BJEALHa44NmuZ3E7
echo 9gT8jkGOBh+/DApHwBKB38q0nXba0lbKdlz2wcD32lQ2IgIK/AX8pm+Iypsp6qDL
echo Wojf9ZcWa0JaKkETAOcc1t2dKF74Ac34C5llIAIibNU1/lLXDf/xT8JoRRKND06A
echo paVXnbVaNlImNbGue407GFNmNUTCzaCPLc8E1OVtNf/53jfH9KEl4j3ahJEKIK5f
echo 8ULFYRm8TdfnHtIFiGwkzQ4aR1izo6xX9p1xCJ095HMW0oMCmFuGrjGe0VykjibQ
echo Q/7zo1it0tMJqAY3KvOUeVjOYhJvWNc/G2uw+vkFnFt6XPqy17MgMpu6I0HdfUZ4
echo 2RhJaJ7IlnZnUNg9YOHObv1J6c2OJqllJfHv2gUAZfJUZC0a2Fol8laZQvqVZmUP
echo 6ULvPXqvuXes85rbOO3gS/l3xtAwGClRzL1Vekg/BvbZ6aksjWSm32P6NRvUL2Yd
echo bNQplk7YxU40djQtFOOS3t5DTgT5TifE+kz2UA2RXYrU2D6TSV+J9LJdJpPbbJ3R
echo dovLgA0Z7SE1w2tHT7IoEkZ72eDbdb2vrvfW9ZrVG7DyeSfw8fhA9K0d291E18vk
echo vj29D9j0h2x6iTwxH0ODcQz4BLpIqXrwbGtLDGhYqbqYPWcF0AlKdSDaS4jURkco
echo VdY/2jKfUJ9SbUBbisaX6/4sKJI1ZTuf0nX96vTuae/3Dl/Q8UmggZ13qa/jRVhZ
echo 392ouK68NGJX+36EsZEd62dve5w+0FQfX/qYIVA3vuh3saum8xHP1ifOEPC/MjHM
echo Och5EucJnAXOwHkE52GcA5x9nL2c3cj/IsaNBTiAshdFQ1mLEkMJozB4UX8SAAyU
echo uyhXUM6iMBxEbWM41gnob/4udoL1EP783BtAVD2/PKOmCu1FeA4LZTovl5FVukRO
echo UljmQN9MirlEUs5jAmDlt2gbfkHnAFxytBY2yWYIIOqU0oV229OLsjZ9WiiVywEc
echo ArI5Q0WtkJSLRXjHpxXUYiEnS0lNltW5uqLIWouqFAA+fJdty9CcjHOybLJEU9GE
echo msrJANQp2TXWdOusc7mWofKCDBY9Nfvk83hmcUbFNutlTZVz1k7/8R9/CF8BUEsD
echo BBQAAAAIAPpynkM5xHTsvAYAAPcRAAAKAAAAV2luZG93LnR4dNVYbW/TMBD+Hin/
echo 4agUGNCWFhigQRBly8YEbKgb7wLkJdfWIrWL7a4t4sdzdt7XFvhKJi0v9/b4cvf4
echo 0iM0IBVoOmk5Rbhk6Rw1KEyZwQSMhFgKLVMEHStEAQsuErno+p7vvXeXvnc2kQsw
echo E8xlYLhJsaYBZ/wnwucFT8wEJsjHE/OFrNAUBtrKuYB4whSLDSpN1gMDKJI2zBRe
echo cjnXTWUL0cyVIIxMg3N9eyfz/eRJ/8FNcud70XB4OnwVvYte1dEcZXBeH5/8ej34
echo 8GsYnZ3/enF8EP06e3H6vglsrNhswmMX06VpYgEYZvAPAOOUozAdppCVK5vxJab6
echo Cmzf24gbtsB+IzV8XsKqCXEmNTdciipKBS0PViLcbmOTuLy9s9qauyFOcXqBCsyE
echo GXh9ehDB/ukJxHI6ZSKBcV5GFa7n89EIlUtAG0jFGdKK84pwxeSkMGUruEDQU5am
echo qKwb/DFnaRsu5gaENJAyNc4ii9yt71nLLhxa5SWbzlLc871b+zLBvVuNsvO9mNzC
echo HtX5vpQq0bAvUx3CKy5Qh76H8UTC/lwpFCX0s/1hFJ2UhRZYi4CWms6nQsMHCJxx
echo AKk9ERQ0mVN3WXoeEbY7h9DS3/ksvAtGfkehw7stCAJmE79zY0pwbXvduAmJhB3f
echo AwA+cktOcERuksyZE7mj8k9O3MObgKnGq2YEp2nlnlRGvndz89Kfvz08jIb/vPTT
echo uZnNyVhJY1/An/P4qFdzdP9e4WMrgnWje71eYeV759LyhRgjXEgzcQYaRlxpUz6v
echo SpC8m0lZtm3LViJX872c2Sq9Wv08hpWcuxJlqW5EbPARFbjv1drK0aFmU8x9VY3C
echo L7kYw1lulHX1jClStbznWs+1GNUqqi58zKNzoVEZMsmao6P5WFDXUJGhi+UW7tg7
echo 80sv2oWs62iMJYmkwDYVjFvYguvJ1jZ65ipEjka+p3BK2XsXvT8+OTh9330+OIcO
echo RJkJ0Ysc0wJIM19tF5eEYr7kKWdqVaw98zIQRgou4Q0q/AmDFUsJquucVFKrQiTY
echo RYoHmLIVJtFyxoTmkpKSWR+4AofvuDqhjIV0fueWTKHnGhMr0K71yi5rRcKgeomr
echo sH+vBa0DuRADpeQi7Dzq0f0rHJn8/uFuy/daQ6Li8snDFmRH6+2seHaXtKB2tPaN
echo Sr/V/Pbv77bypzXv/T499b1cYKNUkgeFPkUpfPSvhhmkphHlAcF3TxtRdikKUBwr
echo aEbZfVjoV1F2iY4q8nFE4TjiZpHvo+Ym3YaRFKZG6nGzeYsOqDatzRx8ROL3du8L
echo 3eULtEDDvxE3STPydpcFz1rQdwZwdEjIMp+l9zuFSTsT53GqkHdKR41tdjPgDyHQ
echo 4S4/hmWCKJH56gu+MZK60UC/uwuGT1HXkpTg/7td5Hl2Evvv1r07d32vAAWxsyBB
echo sTuE+V7he9lWcyc7QQdc9blWzfm0XmLdUs12RKemO5WXhWZjWOzYvII2ONOVMdX5
echo H2ylwGzwyc2aCN8o1Bocb8DCbhQKWbK6QkEstoVO3I3KhshkO3SVj9COtROuMDap
echo m29mKYsxsdEJBi5RZwOOmXANC9KlU5wiU6iyZOcRPgdl0wdfwrJeb4f9ptbb2ZpO
echo 56pOxQeklvfGuidHJ02ldVdN0iNN1xa3w1qfbTAgkHX1zl/UG3hdC1KAss83GBD0
echo pn5nqz4VyCb8/TWtddDrOhuRrqttwte3dbU3nyXMYEZBJRU5HgyD4h0EbXeZT2CO
echo qMLAeSGJgxY4XwKX5qWtyCPMznxUdHoJBgmESvES0+AL5J19bZPwGlyHsTTS95oQ
echo yWddDwT+gKDYagNnAiUQd7cXnR76nv3bOoznQFpBP6w7v95bHtLRhuBuuFMXPH1K
echo Xyu5lLZLXHKyf25DHIOej8eojZtyKLpBnfVaOa1wAQw02tnLYJKTQ9mOe3B2Phie
echo +1419bhvMUsHx9TOYyas24XiBovvq9J3m1RozRDLBDXIkZu+WMlGvldFsd+cL6OP
echo +zSZnsEvOKRI0HIl0oKnV0autW/YFzzBcrKc0E3tK7wLA5hywaekmIBUVp6U3+92
echo hxNuDyBmossY05TULjmzCC8kU0m2wbOmHVRmvkdhaRQldtOYYkxJfOziS0GPaHE2
echo PwpjYl615oZrF6uopmw59neEfxlG3RV9vh+/Pv4U1ZYMdg/dzcdcnevtUAE41CVa
echo hdpIhcANEe2MzTVeSetrLkhgx/T+3YfdHv31oSPgAXQW0O/1evRiTt6+umI0JK/N
echo bYR+U1hD198K7+T0fBPEr1+vlSjXX/4mmP1tOKsk+95vUEsDBBQAAgAAAA92nkPM
echo tmoSRgAAAEYAAAALAAAARG9zVGlwcy5VUkxbSW50ZXJuZXRTaG9ydGN1dF0NClVS
echo TD13d3cuZG9zdGlwcy5jb20vZm9ydW0vdmlld3RvcGljLnBocD9mPTMmdD0zNDI4
echo UEsDBBQAAgAAAEVzl0glBHE+3wAAAN8AAAAKAAAAcmVhZG1lLnR4dFRoZXNlIGZp
echo bGVzIGFyZSB1dGlsaXR5IHByb2dyYW1zIHdyaXR0ZW4gYnkgQWFjaW5pIG9uIERv
echo c1RpcHMNCg0KQ2xpY2sgb24gdGhlIGRvc3RpcHMudXJsIGZpbGUgdG8gcmVhZCB0
echo aGUgdGhyZWFkIG9uIERvc3RpcHMuY29tIGZvcnVtLCBvciB2aXNpdCB0aGUgc2Ft
echo ZSBVUkwgYmVsb3c6DQoNCmh0dHA6Ly93d3cuZG9zdGlwcy5jb20vZm9ydW0vdmll
echo d3RvcGljLnBocD9mPTMmdD0zNDI4DQpQSwECPwAUAAAACAAQdZ5D51Eb6ZsCAAAA
echo BgAACQAkAAAAAAAAACAAAAAAAAAAQXNjaWkuZXhlCgAgAAAAAAABABgAKvagRRkF
echo zwH6rij2D53RAfquKPYPndEBUEsBAj8AFAAAAAgAg3WeQ7Nb2oyiAAAA5gAAAAkA
echo JAAAAAAAAAAgAAAAwgIAAEFzY2lpLnR4dAoAIAAAAAAAAQAYAAPnKcUZBc8BXyQp
echo 9g+d0QFfJCn2D53RAVBLAQI/ABQAAAAIABB1nkPppep3nQQAAAAOAAANACQAAAAA
echo AAAAIAAAAIsDAABDb2xvcnNob3cuZXhlCgAgAAAAAAABABgAfkSvRRkFzwEyDCv2
echo D53RATIMK/YPndEBUEsBAj8AFAAAAAgAz3OeQ0SmLAq1BgAAChIAAA0AJAAAAAAA
echo AAAgAAAAUwgAAENvbG9yc2hvdy50eHQKACAAAAAAAAEAGAD1LdfdFwXPAWVaK/YP
echo ndEBZVor9g+d0QFQSwECPwAUAAAACAAQdZ5DOQDY+HoCAAAABgAADQAkAAAAAAAA
echo ACAAAAAzDwAAQ3Vyc29ycG9zLmV4ZQoAIAAAAAAAAQAYACoJtEUZBc8BhUUt9g+d
echo 0QGFRS32D53RAVBLAQI/ABQAAAAIAC5znkN+5iNC8w8AAOgpAAANACQAAAAAAAAA
echo IAAAANgRAABDdXJzb3Jwb3MudHh0CgAgAAAAAAABABgArB26KhcFzwFXpS72D53R
echo AVelLvYPndEBUEsBAj8AFAAAAAgAEHWeQ5/SIDcKAgAAAAYAAA4AJAAAAAAAAAAg
echo AAAA9iEAAEN1cnNvcnNpemUuZXhlCgAgAAAAAAABABgAjGu2RRkFzwE0VzD2D53R
echo ATRXMPYPndEBUEsBAj8AFAAAAAgAlXOeQ26KOFIJAgAAhAMAAA4AJAAAAAAAAAAg
echo AAAALCQAAEN1cnNvcnNpemUudHh0CgAgAAAAAAABABgAJUgYnhcFzwFcpTD2D53R
echo AVylMPYPndEBUEsBAj8AFAAAAAgAEHWeQ08SU7SXAQAAAAYAABQAJAAAAAAAAAAg
echo AAAAYSYAAEZsdXNoaW5wdXRidWZmZXIuZXhlCgAgAAAAAAABABgAXzC7RRkFzwFh
echo xTL2D53RAWHFMvYPndEBUEsBAj8AFAAAAAgAzHKeQ57M5EKPAAAAxwAAABQAJAAA
echo AAAAAAAgAAAAKigAAEZsdXNoaW5wdXRidWZmZXIudHh0CgAgAAAAAAABABgAkUxP
echo vBYFzwGCEzP2D53RAYITM/YPndEBUEsBAj8AFAAAAAgAEHWeQzPUs+K+AQAAAAYA
echo AAoAJAAAAAAAAAAgAAAA6ygAAEdldGtleS5leGUKACAAAAAAAAEAGACykr1FGQXP
echo AY1LNvYPndEBjUs29g+d0QFQSwECPwAUAAAACAC0cp5DRlPJT9YIAADRGAAACgAk
echo AAAAAAAAACAAAADRKgAAR2V0a2V5LnR4dAoAIAAAAAAAAQAYAKqUl6IWBc8BzMc2
echo 9g+d0QHMxzb2D53RAVBLAQI/ABQAAAAIABB1nkPlsvvLPAMAAAAIAAAIACQAAAAA
echo AAAAIAAAAM8zAABTaG93LmV4ZQoAIAAAAAAAAQAYAHZXwkUZBc8BkgE59g+d0QGS
echo ATn2D53RAVBLAQI/ABQAAAAIAJBynkPVYQn/MAUAAK8MAAAIACQAAAAAAAAAIAAA
echo ADE3AABTaG93LnR4dAoAIAAAAAAAAQAYAFLeBnoWBc8Bqk859g+d0QGqTzn2D53R
echo AVBLAQI/ABQAAAAIABF1nkNYjW2SMAQAAAAMAAALACQAAAAAAAAAIAAAAIc8AABT
echo dGRkYXRlLmV4ZQoAIAAAAAAAAQAYADkcx0UZBc8B7nI79g+d0QHucjv2D53RAVBL
echo AQI/ABQAAAAIAG9znkNWb6f/MAcAAP4NAAALACQAAAAAAAAAIAAAAOBAAABTdGRk
echo YXRlLnR4dAoAIAAAAAAAAQAYAM6EfXIXBc8BIcE79g+d0QEhwTv2D53RAVBLAQI/
echo ABQAAAAIABF1nkP0fKS0kgMAAAAMAAALACQAAAAAAAAAIAAAADlIAABTdGR0aW1l
echo LmV4ZQoAIAAAAAAAAQAYAGtDzkUZBc8BHW899g+d0QEdbz32D53RAVBLAQI/ABQA
echo AAAIAFpznkPRFQMsDAQAAK4JAAALACQAAAAAAAAAIAAAAPRLAABTdGR0aW1lLnR4
echo dAoAIAAAAAAAAQAYAJ3dOFwXBc8Ba+U99g+d0QFr5T32D53RAVBLAQI/ABQAAAAI
echo ABF1nkOK3Jdk2gEAAAAGAAAKACQAAAAAAAAAIAAAAClQAABTdHJsZW4uZXhlCgAg
echo AAAAAAABABgALwjTRRkFzwEJkj/2D53RAQmSP/YPndEBUEsBAj8AFAAAAAgAZ3Ke
echo Q0x2rVzRAAAAIgEAAAoAJAAAAAAAAAAgAAAAK1IAAFN0cmxlbi50eHQKACAAAAAA
echo AAEAGABTX/VLFgXPASC5P/YPndEBILk/9g+d0QFQSwECPwAUAAAACAARdZ5Dvk5I
echo 3UACAAAABgAADQAkAAAAAAAAACAAAAAkUwAAVGV4dGNvbG9yLmV4ZQoAIAAAAAAA
echo AQAYAPbM10UZBc8BK2dB9g+d0QErZ0H2D53RAVBLAQI/ABQAAAAIALBznkPUBqNE
echo HQMAAM8FAAANACQAAAAAAAAAIAAAAI9VAABUZXh0Y29sb3IudHh0CgAgAAAAAAAB
echo ABgAjKcQvBcFzwGyt0H2D53RAbK3QfYPndEBUEsBAj8AFAAAAAgAEXWeQ/E7vcP+
echo AwAAAAwAAAoAJAAAAAAAAAAgAAAA11gAAFdpbmRvdy5leGUKACAAAAAAAAEAGAC9
echo kdxFGQXPATpbRfYPndEBOltF9g+d0QFQSwECPwAUAAAACAD6cp5DOcR07LwGAAD3
echo EQAACgAkAAAAAAAAACAAAAD9XAAAV2luZG93LnR4dAoAIAAAAAAAAQAYACrmKfEW
echo Bc8BddBF9g+d0QF10EX2D53RAVBLAQIUABQAAgAAAA92nkPMtmoSRgAAAEYAAAAL
echo AAAAAAAAAAEAIAAAAOFjAABEb3NUaXBzLlVSTFBLAQIUABQAAgAAAEVzl0glBHE+
echo 3wAAAN8AAAAKAAAAAAAAAAEAIAAAAFBkAAByZWFkbWUudHh0UEsFBgAAAAAaABoA
echo PQkAAFdlAAAAAA==
)>"decode.tmp"
certutil /decode /f "decode.tmp" "aacini_files.zip" >nul
del "decode.tmp"
)

Aacini
Expert
Posts: 1914
Joined: 06 Dec 2011 22:15
Location: México City, México
Contact:

Re: Advanced Batch features via auxiliary .exe programs

#47 Post by Aacini » 26 Jul 2016 13:45

I finally addressed the problems involved in the original method to download these programs. The executable files are now on my DropBox site as public files; just go to this link, press Esc key to disregard the DropBox suggestion and open the "Auxiliary .exe programs" folder. From there you may download the individual files you wish or download them all in a .zip file via the "Download" blue button. In the "1-ReadMe.txt" file there is a list of all uploaded programs.

Before upload the files on that site I reviewed the programs of this thread and updated some of they; the changes introduced are of three types.

  • Modifications to existing programs:

    Code: Select all

    Show.exe                Now allows to fill the field of a variable with a given character.
    ColorShow.exe           Same changes of Show.exe; also now includes the features of TextColor.exe.
    TextColor.exe           Has not been included.
  • Include in that site the auxiliary programs that were posted in other threads:

    Code: Select all

    ColorChar.exe           Stripped down version of ColorShow.exe with no variable support.
    GetInput.exe            Read input from both keyboard keys and mouse clicks.
    ReadFile.exe            Read bytes from a redirected input file handle.
  • Add some new programs:

    Code: Select all

    ColorBox.exe            Show a box in text mode using line-drawing characters.
    printf.exe              Show formatted output and perform arithmetic expressions.

The new printf.exe program is fully described at this post.

This is the contents of "1-ReadMe.txt" file on that site:

Code: Select all

In this folder I uploaded the Windows .exe programs I wrote as auxiliary commands
for Batch files, plus some support Batch files; each .exe program have a .txt
companion file with the program description. This is a list of the programs
included on this site grouped by type of operation.


String manipulation:

StrLen.exe              Get the length of string literals and Batch variables.
Ascii.exe               Show Ascii codes of string literals and Batch variables.

Keyboard input:

GetKey.exe              Get a key from keyboard and return its value.
ShowKeyCodes.bat        Display the codes returned by GetKey for all keys.
FlushInputBuffer.exe    Clear the input buffer from any previous keystroke.
GetInput.exe            Read input from both keyboard keys and mouse clicks.

Screen output:

CursorPos.exe           Get or set cursor position.
CursorSize.exe          Get or set cursor size.
Show.exe                Show characters from Ascii codes, literals and variables.
ColorShow.exe           Show characters in the same way as Show.exe, but in color.
ColorChar.exe           Stripped down version of ColorShow.exe with no variables.
ColorBox.exe            Show a box in text mode using line-drawing characters.
DefineColorCodes.bat    Define values useful to write color attributes.
printf.exe              Show formatted output and perform arithmetic expressions.
Window.exe              Get/set several values related to console screen window.

Date and Time:

StdTime.exe             Get a standard time and convert it to milliseconds.
ElapsedTime.bat         Display elapsed times in a standard format.
StdDate.exe             Get a standard date and convert it to Julian Day Number.
EasterSunday.bat        Calculate the date of Christian Easter Sunday.

File handle management:

GetFileType.exe         Get the type of the file connected to a file handle.
FilePointer.exe         Move the file pointer of the redirected disk file.
TruncateFile.exe        Truncate the size of the redirected disk file.
ReadFile.exe            Read bytes from a redirected input file handle.


Antonio

tech.support
Posts: 1
Joined: 14 Sep 2016 07:04

Re: Advanced Batch features via auxiliary .exe programs

#48 Post by tech.support » 14 Sep 2016 14:23

@Aacini

Aacini wrote:I finally addressed the problems involved in the original method to download these programs. The executable files are now on my DropBox site as public files; just go to this link

It may be a measure of the popularity of your batch tools :D - The link to DropBox shows the following error:-

Error (429)
This account's links are generating too much traffic and have been temporarily disabled!
:(

foxdrive wrote:This creates Antonio's very useful set of utilities in a single .ZIP file called "aacini_files.zip"

Thanks to @foxdrive the link is not needed

foxidrive
Expert
Posts: 6031
Joined: 10 Feb 2012 02:20

Re: Advanced Batch features via auxiliary .exe programs

#49 Post by foxidrive » 14 Sep 2016 23:59

tech.support wrote:The link to DropBox shows the following error:-

Error (429)
This account's links are generating too much traffic and have been temporarily disabled!


I reckon that's going to turn out to be one of aacini's utilities triggering a false positive on malware scan at Dropbox. They did that to me at one point when I was hosting aacini's utilities.

Dropbox would not accept that they had been there for 2 years and just repeated that the file had to be deleted. The staff that I emailed in a free account just follow the rules they have printed out and they can't sway from them.

thefeduke
Posts: 211
Joined: 05 Apr 2015 13:06
Location: MA South Shore, USA

Re: Advanced Batch features via auxiliary .exe programs

#50 Post by thefeduke » 17 Nov 2016 03:34

Antonio, I am having some difficulty in applying GetInput.exe in one of my scripts. I tried to follow the thread in which you introduced it, but found no mention nor use in an example of the /T switch until it was included in these auxiliary .exe programs and it is only mentioned in the .txt file documentation. Perhaps I did not understand the documentation correctly. I would appreciate it, If you would peek at my attempt in http://www.dostips.com/forum/viewtopic.php?p=50144#p50144 and answer there or here. I hope that your eyes can see where I am going wrong in using " /T milliseconds ".

John A.

Aacini
Expert
Posts: 1914
Joined: 06 Dec 2011 22:15
Location: México City, México
Contact:

Re: Advanced Batch features via auxiliary .exe programs

#51 Post by Aacini » 21 Dec 2016 19:13

I added "hovering mouse support" to GetInput.exe auxiliary program, that is, the effect of changing the color of the text inside a selection box when the mouse pointer enters the box, and recovering the original color when the mouse pointer leaves the box. To activate this effect, include the /H switch after the coordinates of the last mouse selection box. For example:

Code: Select all

@echo off
color 07 & cls

rem  012345678901234567890123456789012345678901234567890123456789
echo Select THE FIRST option, or the SECOND one, or THE LAST one.
GetInput /M 7 0    15 0              32 0 37 0      47 0  54 0     /H
echo Option selected: %errorlevel%

The hovering effect is achieved via a change among standard and light shades of the same color. You may specify the color used for hovering effect in each one of the selection boxes via a list of color attributes included after the /H switch, that corresponds with the list of boxes. If less attributes than selection boxes are given, the last attribute is used for the rest of boxes.

For example, to enable this effect in the Mouse-Selectable items displayed by ShowBBC.bat program, just add a /H switch at end of the GetInput line:

Code: Select all

GetInput /M !link[%F%]! /H

A more interesting example is the menu displayed by CmdHelp.bat program. This application show pages with three standard buttons, that corresponds to "Go Back", "Help" and "Close" actions, followed by a menu with a variable number of options, so in this case is convenient to keep the standard color change in the first three selection boxes and set a different color just in the rest. This way, we may add /H 00 00 00 1E switch at end of the GetInput command used in such a program:

Code: Select all

GetInput /I %EnterKey% %F1% %Alt_F4% %K% "!keys[%page%]!"  /M  0 0 2 0  3 0 5 0  77 0 79 0  !mous[%page%]! %M%  /H 00 00 00 1E

The Batch file below is an example that makes good use of different colors in each one of the selection boxes in a menu:

Code: Select all

@echo off
setlocal EnableDelayedExpansion

cls
color 07
for /L %%i in (1,1,5) do echo/
echo     0-Black   1-Blue  2-Green   3-Cyan   4-Red   5-Purple 6-Olive  7-White
for /L %%i in (1,1,7) do echo/
echo     8-Gray    9-Blue  A-Green   B-Cyan   C-Red   D-Purple E-Yellow F-White
echo                light    light    light   light     light            bright
for /L %%i in (1,1,3) do echo/

set "box1=4 3  11 7"
set "box2=4 11 11 15"
for /L %%l in (12,9,57) do (
   set /A r=%%l+9, lef=%%l+1, rig=r-1
   ColorBox %%l 2  !r! 8  194 194 193 193
   ColorBox %%l 10 !r! 16 194 194 193 193
   set "box1=!box1! !lef! 3  !rig! 7"
   set "box2=!box2! !lef! 11 !rig! 15"
)
ColorBox 3 2  12 8   218 194 193 192 & ColorBox 66 2  75 8   194 191 217 193
ColorBox 3 10 12 16  218 194 193 192 & ColorBox 66 10 75 16  194 191 217 193
set "box1=!box1! 67 3  74 7"
set "box2=!box2! 67 11 74 15"

set /P "=Select color: " < NUL
set "color= 0123456789ABCDEF"
GetInput /I "%color:~1%"  /M %box1% %box2%  /H F0 1F 2F 3F 4F 5F 6F 70 8F 9F A0 B0 CF DF E0 F0
echo !color:~%errorlevel%,1!

This is the screen of such program after the "A" color (light green) was selected via a mouse click:

Image

The updated GetInput.exe version 1.2 with "hovering mouse support" is now included in the .zip file at the first post of this thread, as usual. The version 1.1 was the one that allows an intermixed combination of several valid "Chars" and list of keycodes.

Antonio

Sounak@9434
Posts: 100
Joined: 16 Dec 2016 22:31

Re: Advanced Batch features via auxiliary .exe programs

#52 Post by Sounak@9434 » 21 Dec 2016 22:54

@Aacini
Well,mouse hovering is somewhat different than you got it on Google(strange though).
Mouse hovering in a auxiliary programme for batch would be like "The programme would detect the slightest movement of the mouse cursor inside the console window even if the user does not uses mouse button to click on the spot and return the mouse location and stuff to the console" or in short "it would print(or return as errorlevel in array of bytes) the location of mouse cursor as soon as slightest movement of mouse cursor is detected inside the console window"(well it's the worst description I made up myself. You may look here.)

Well the result may be manipulated if left or right click is used or a key(from keyboard) is pressed(as getinput.exe supports both keyboard and mouse input) while looking for input of hovering.
The additional feature you added to getinput.exe is definitely useful to create buttons on the console window which is one of the 3 main reasons I wanted mouse hovering but still using your tool we can't show messages while mouse is on a special text or can't use round buttons. Thanks anyway the new feature in version 1.2 is definitely awesome and fast.

Sounak@9434
Posts: 100
Joined: 16 Dec 2016 22:31

Re: Advanced Batch features via auxiliary .exe programs

#53 Post by Sounak@9434 » 05 Jan 2017 11:16

Hey Antonio,
May I
make a request for a
auxiliary exe program.
Can you make a
program which will
immediately print(or set
as errorlevel) the
current location of the
mouse cursor inside the
console window(like in
cursorpos.exe which
prints the location of
console cursor). I have
found some tools like
mousepos but as all
your tools work far
faster than any other
so it's a request.
Hoping you would help.

Sounak

Aacini
Expert
Posts: 1914
Joined: 06 Dec 2011 22:15
Location: México City, México
Contact:

Re: Advanced Batch features via auxiliary .exe programs

#54 Post by Aacini » 05 Jan 2017 13:49

Ok. Here it is:

Code: Select all

;       GetMouse.exe requested by Sounak@9434
;       http://www.dostips.com/forum/viewtopic.php?f=3&t=3428&p=50758#p50758

        include                 \masm32\include\masm32rt.inc

        .code

Main    PROC

        LOCAL   lpBuffer                :INPUT_RECORD   ;for keyboard/mouse events
        LOCAL   lpEvents                :DWORD          ;-required-

        invoke  GetStdHandle, STD_INPUT_HANDLE          ;EAX = console input handle
        mov     esi, eax                                ;pass it to ESI
        ;
        mov     eax, ENABLE_MOUSE_INPUT + ENABLE_EXTENDED_FLAGS ;enable mouse events + value...
        ;                                                       ;- required to disable QuickEdit
        invoke  SetConsoleMode, esi, eax                ;change console mode
        xor     edi, edi                                ;initialize result = zero
        ;
        invoke  WaitForSingleObject, esi, 0             ;EAX = input status
        or      eax, eax                                ;is there any input event?
        jnz     SHORT end_main                          ;no: return zero
        ;
        invoke  ReadConsoleInput, esi, ADDR lpBuffer, 1, ADDR lpEvents  ;get the input event
        cmp     lpBuffer.EventType, MOUSE_EVENT         ;is a mouse event?
        jne     SHORT end_main                          ;no: return zero
        ;
        mov     edi, lpBuffer.MouseEvent.dwMousePosition;result = mouse position as line<<16 + col
        ;
        test    lpBuffer.MouseEvent.dwButtonState, FROM_LEFT_1ST_BUTTON_PRESSED ;?
        jz      SHORT @F                                ;no: continue
        or      edi, 1 SHL 30                           ;else: set bit 31 of result
        ;
@@:
        test    lpBuffer.MouseEvent.dwButtonState, RIGHTMOST_BUTTON_PRESSED     ;?
        jz      SHORT end_main                          ;no: continue
        or      edi, 1 SHL 29                           ;else: set bit 30 of result
        ;
end_main:
        invoke  ExitProcess, edi                        ;and return result value

Main    ENDP

        end     Main

This program return in the same %ERRORLEVEL% value the mouse cursor position and the status of left and right mouse buttons. Note that these values are returned after they changed only, that is, if no one of these values changed since the last time this program run, the returned value is zero.

This is a Batch file example of the use of previous GetMouse.exe program:

Code: Select all

@echo off 
setlocal EnableDelayedExpansion
if "%1" equ "Restart" goto Restart

cls
echo To exit, click left button on column 0
echo/
cmd /C "%~F0" Restart
echo/
echo End of example
goto :EOF

:Restart
for /L %%i in () do (
   GetMouse
   if errorlevel 1 (
      set /A "m=!errorlevel!, col=m&0xFF, line=(m>>16)&0xFF, left=m&1<<30, right=m&1<<29"
      if !left! neq 0 (
         echo LEFT button pressed
         if !col! equ 0 exit
      )
      if !right! neq 0 echo RIGHT button pressed
      echo Mouse at line=!line!, col=!col!
   )
)


GetMouse.zip
(1.82 KiB) Downloaded 1176 times


Antonio

Sounak@9434
Posts: 100
Joined: 16 Dec 2016 22:31

Re: Advanced Batch features via auxiliary .exe programs

#55 Post by Sounak@9434 » 05 Jan 2017 23:41

Thank you very much Antonio for this quick reply. Maybe add it to the first post too.
Just another small request from me. Add a '/t msec' switch to the tool. So that if no movement is detected within that time the code will terminate automatically.

EDIT:- Recently noticed that this software does returns the value of the current mouse position and if mouse position not changed since last time it returns errorlevel as 0 so no need of an /t switch. Thank you very much Antonio.

Sounak@9434
Posts: 100
Joined: 16 Dec 2016 22:31

Re: Advanced Batch features via auxiliary .exe programs

#56 Post by Sounak@9434 » 08 Feb 2017 06:01

A little request from me again Antonio, can you
please add the
keyboard button
support to
getmouse.exe so that it
will return the value of
the key pressed like in
getkey.exe . For things
like that I am currently
using getinput.exe with
hover(which is really
helpful). But in some
cases Getmouse.exe is
still needed (like showing
pregenerated text{thanks to cmdgfx.exe}
when hovered). Maybe
make it like, if a
keyboard key is pressed
it will return in negetive
errorlevel. I
know that you have
provided the total
source code also with
comments but I'm not
really familier to
assembly language. So
hoping you would help. I also sent you a pm about this repuest a few days ago, I don't know if you have read it or not. It's a request, so please look into it.

Sounak

Aacini
Expert
Posts: 1914
Joined: 06 Dec 2011 22:15
Location: México City, México
Contact:

Re: Advanced Batch features via auxiliary .exe programs

#57 Post by Aacini » 08 Feb 2017 15:34

@Sounak@9434:

Why do you
split long
lines at a
few words?
Perhaps you
did not realized
that this
practice makes
the text
more difficult
to read! :?

The previous code DO return the buttons in bits 30 and 31 of the ERRORLEVEL, but you don't need to read the assembly code to know that, just read the description:

Aacini wrote:This program return in the same %ERRORLEVEL% value the mouse cursor position and the status of left and right mouse buttons.

... and the Batch example code that use such a feature:

Code: Select all

echo To exit, click left button on column 0



      set /A "m=!errorlevel!, col=m&0xFF, line=(m>>16)&0xFF, left=m&1<<30, right=m&1<<29"
      if !left! neq 0 (
         echo LEFT button pressed
         if !col! equ 0 exit
      )
      if !right! neq 0 echo RIGHT button pressed

Antonio

ShadowThief
Expert
Posts: 1166
Joined: 06 Sep 2013 21:28
Location: Virginia, United States

Re: Advanced Batch features via auxiliary .exe programs

#58 Post by ShadowThief » 08 Feb 2017 18:10

Posting via mobile phone, if I had to guess.

Sounak@9434
Posts: 100
Joined: 16 Dec 2016 22:31

Re: Advanced Batch features via auxiliary .exe programs

#59 Post by Sounak@9434 » 08 Feb 2017 22:59

Aacini wrote:@Sounak@9434:

Why do you
split long
lines at a
few words?
Perhaps you
did not realized
that this
practice makes
the text
more difficult
to read! :?


I'm sorry for that Antonio, I will try to make my repuest more clear this time. I'm not a native english speaker , so sometime my english is somehow problamatic to read. Sorry.

Aacini wrote:The previous code DO return the buttons in bits 30 and 31 of the ERRORLEVEL, but you don't need to read the assembly code to know that, just read the description:

Aacini wrote:This program return in the same %ERRORLEVEL% value the mouse cursor position and the status of left and right mouse buttons.

... and the Batch example code that use such a feature:

Code: Select all

echo To exit, click left button on column 0



      set /A "m=!errorlevel!, col=m&0xFF, line=(m>>16)&0xFF, left=m&1<<30, right=m&1<<29"
      if !left! neq 0 (
         echo LEFT button pressed
         if !col! equ 0 exit
      )
      if !right! neq 0 echo RIGHT button pressed

Antonio

I do already know about it and I'm using this feature with ease. What I requested is to add Keyboard button support like a, k, d, arrow keys, enter, backspace etc. For this function I referred to Getkey.exe which did the same work. I hope I was able to express my problem clearly now. Hoping for your help.

ShadowThief wrote:Posting via mobile phone, if I had to guess.

You caught it right. Posting from mobile is naturally hard(At least to me).

Sounak

aGerman
Expert
Posts: 4678
Joined: 22 Jan 2010 18:01
Location: Germany

Re: Advanced Batch features via auxiliary .exe programs

#60 Post by aGerman » 09 Feb 2017 14:20

Seems you want to have a Swiss Knife that has the same performance as a single solution. It should have been quite clear that this isn't possible.

Since you guys seem to be keen on small files I left out any kind of arguments, error handling, help messages, etc. Also I used the technique that I learned from carlos in order to skip the overhead caused by the main function in C.

conin.zip
(2.09 KiB) Downloaded 1231 times


Code: Select all

@echo off &setlocal EnableDelayedExpansion

:: conin.exe - Read Console Input
:: type:  %errorlevel%>>29 (0=keyboard, 1=left click, 2=right click, 3=mouse move)
:: key:   %errorlevel% (either character code or (for extended keys) 256 + key code)
:: mouse: row = (%errorlevel%>>14)&0x3FFF, column = %errorlevel%&0x3FFF

for /l %%i in () do (
  conin.exe
  set /a "key=!errorlevel!, type=key>>29, y=(key>>14)&0x3FFF, x=key&0x3FFF"
 
  if !type!==1 (
    echo mouse left  x=!x!, y=!y!
  ) else if !type!==2 (
    echo mouse right x=!x!, y=!y!
  ) else if !type!==3 (
    echo mouse move  x=!x!, y=!y!
  ) else (
    echo keyboard !key!
  )
)


Steffen

//EDIT
Changed the behavior because I forgot you want to see mouse moving as well.

Post Reply