From 3ff503dd7b5059b24df7ae0a7ae6d7795fa0ea49 Mon Sep 17 00:00:00 2001
From: chickliu
Date: Thu, 14 Nov 2024 01:23:08 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?=
=?UTF-8?q?=20/?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
91阅读_1.6.py | 52 +++++
叮叮联盟_api_1.6.py | 492 +++++++++++++++++++++++++++++++++++++++++
可乐_api_2.5.py | 525 ++++++++++++++++++++++++++++++++++++++++++++
搜搜小亏_api_1.4.py | 436 ++++++++++++++++++++++++++++++++++++
鱼儿_auto_huaji.py | 253 +++++++++++++++++++++
5 files changed, 1758 insertions(+)
create mode 100644 91阅读_1.6.py
create mode 100644 叮叮联盟_api_1.6.py
create mode 100644 可乐_api_2.5.py
create mode 100644 搜搜小亏_api_1.4.py
create mode 100644 鱼儿_auto_huaji.py
diff --git a/91阅读_1.6.py b/91阅读_1.6.py
new file mode 100644
index 0000000..ec36a0c
--- /dev/null
+++ b/91阅读_1.6.py
@@ -0,0 +1,52 @@
+# --------------------------------注释区--------------------------------
+# 入口:http://vpxzmxosdoepguypfyonle.gwc63ltoaizgg1usjj2.cn/index/invite/UilSMFU_aAWBWMQ
+#
+# 需抓取数据:
+# * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透
+# * 登录多少个账号就跑多少个账号
+#
+#
+# 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!!
+#
+# 变量名:yuanshen_api
+# 满3自动微信提现
+#
+# --------------------------------祈求区--------------------------------
+# _ooOoo_
+# o8888888o
+# 88" . "88
+# (| -_- |)
+# O\ = /O
+# ____/`---'\____
+# . ' \\| |// `.
+# / \\||| : |||// \
+# / _||||| -:- |||||- \
+# | | \\\ - /// | |
+# | \_| ''\---/'' | |
+# \ .-\__ `-` ___/-. /
+# ___`. .' /--.--\ `. . __
+# ."" '< `.___\_<|>_/___.' >'"".
+# | | : `- \`.;`\ _ /`;.`/ - ` : | |
+# \ \ `-. \_ __\ /__ _/ .-` / /
+# ======`-.____`-.___\_____/___.-`____.-'======
+# `=---='
+#
+# .............................................
+# 佛祖保佑 永无BUG
+# 佛祖镇楼 BUG辟邪
+# --------------------------------代码区--------------------------------
+'''
+Powered By Huaji
+QQ Group:901898186
+Create at [2024-11-11 19:45]
+
+ __ __ __ __ ___ __ __
+| | | | | | | | / \ | | | |
+| |__| | | | | | / ^ \ | | | |
+| __ | | | | | / /_\ \ .--. | | | |
+| | | | | `--' | / _____ \ | `--' | | |
+|__| |__| \______/ /__/ \__\ \______/ |__|
+
+'''
+import zlib,base64,zlib,lzma,bz2,gzip
+exec((lambda O0O0O0O0O0O0O0O00O00O00O0O00O00O00O0O0O0O0O0O0O0O00O00O00O0O0O0O00O00O00O0O0O0O00O00O00O00O0O00O00O00O0O0O00O00O00O0O0O0O0O00O00O0O00O00O00O0O0O0O0O0O00O0O0O00O00O0O0O00O00O0O0O00O0O00O00O00O00O00O0O00O00O0O0O0O0O00O00O0O00O0O0O0O0O00O0O00O00O0O00O00:compile(O0O0O0O0O0O0O0O00O00O00O0O00O00O00O0O0O0O0O0O0O0O00O00O00O0O0O0O00O00O00O0O0O0O00O00O00O00O0O00O00O00O0O0O00O00O00O0O0O0O0O00O00O0O00O00O00O0O0O0O0O0O00O0O0O00O00O0O0O00O00O0O0O00O0O00O00O00O00O00O0O00O00O0O0O0O0O00O00O0O00O0O0O0O0O00O0O00O00O0O00O00,(lambda s:zlib.decompress(base64.b64decode(s)).decode())('eJyzKS4pysxLtwMADfkDEg=='),(lambda s:zlib.decompress(base64.b64decode(s)).decode())('eJxLrUhNBgAELQGm')))(zlib.decompress(lzma.decompress(bz2.decompress(gzip.decompress(base64.b64decode((lambda s:zlib.decompress(base64.b64decode(s)).decode())('eJyUm0d2q1oURAdEg5yaAhFEzqlHzjkz+o/fDD4NL0s2NxzuqdplLYvY+vvww676KQuen9XUdNDsplF3eMa3I8ePlqkw1I/R0OD/uTCeBYtCPI6l8SDSSLaNpskj2GiSxMmseK+cRkhoj9BjQxeYpovkKBJ49AEE7gFyCGASTYOYRI93iL9fTxZyQPMiKIrsCNCVTvLj2PfmyBAEOCLygdEJNXayxzNUIS98StC/W5OE3HIAzTeSAA6NpgmMommNQOEjJ42YeN6hdiClSYimaRzNiqyjE0Snc4B+1zf5hXZs9J5RG52k1HbMxb+VG3ke7CgS0wFqvOOgRpGgDnoMwVHki+cYOwCQMI3mAHxEKJKhaJEMS3C0x/7bgs1Ds33RgYXcGiXbIYDekw2jaQp4ryK/7qfZngEdYBrO35IF72AXvdMU+u6DTtAieDe2NgSNAKT/ZHSKZrBxaKS2A/u7k4yCjp9nnJ/GYUNH0z6M+uk/n1/44S7140il877hCCMUspHqfKRa/TDO2ffSVI2fDxt+oq81TSMzjVAccbTHyQNWbc7nM4zvF+6USu4OP+/lxBx0fhyHzSvBeX/Qv+P9zaU21ngJJTNqX6uFrJKL49CRplKac3asPIOS6sTspe19699yYt7JezZs3u+FfpraO7SIho1DqZpDpqxqTXPiOBaaH6zeHzZ6X6pc7Ny5Hcdq/66nfYeH1fduxuPm/LQI5735XWNL9dq7vHfa/vOu1JHq8B1F+hsvYqb6K7XQu3FHIhhBKtm3FO89kLVxJxe+NwhS9e7lrZVc8w7icKfmaM7PoaU6GuOvYwq/O+xNCAqnvq/U98U7xVsDXqzf7TIjBz32lx0mInYY546H9tYMSxud97e031/pNedSf6fjWJ3FTuAYcYj1FkwqqxaCIEeqNLUaT+kdunc4pIx/9/cjzYm0OVw8zIlV/hW4Gm+Vfes0SsS72p5Re9g5uce934q4CBuN3JiX30t2H/j+iIND8VMgjRzV9P6S0xB6bwCJuztULpG3foATkdxcHWgl+JgH3k+twRl9ouJpCu30eJM6UCBy0sxgX+AOxzHdxap8zfitZBqqANDXfE8bYW9LNVKgtzARLHv2eq6NE7TGEA5cZ6O6NJqoTdJW0tr28MlXapjX1iezz0BdGXztN9wMKetEKiJthSWsYKoDCPPVpk5flgPQsZDKGXxOuJDcV179EoWwlRw0q0gAdx8R003ZWQ1wtdrtGKQ8MxzFQkE9dVqK77KcqQgPXu5Pqot1Q9F4IvzI/WJUuwLXOSPDeIddBo/C82P34jyLlZHMJrl1Tsm35he9NRc7HDg8e3Tsj9Kr+sfUiLPOOzpXHBTZDyL1ngEJfw8oWoU/6/hEldjszL8ESHdLpJh7NFlo3K/mUw67vs9i5o87QBSyYWoSg/Hqp7TyXSlHo9FkaBVWX7A5GKK5nvjF5rOjuy2LqJ0vLH+o37G7x03Y8x6LgmLX6CZpuN2nUAmXcZmtfUiwS74OTYv5gNoDVMxsHkY2s7MvEhQ/7n5AU8E+q1TC6/EFXWeSu3hgJ9YUZ+Xa/k5KQe0GGFfRGc01S38Pz5rD9lRKaV+iRGnlRykKnxoEPgDTbxOZYIomvTqqiOOLXyphosnh3m4fBCg+fUV/9XGOrQazwRuLQBsFRdSF6JyEMq3KZDy6OvcwWGkiHFhYAh3tPAKwRrJr5KASo5J/zidgNux+0gjIyCBguxxZdsbNmwK9ItZORV0OW4Zvsq0RhG8XHpOLUO+wWq3hylkpVZJ5T7805Yc1khgRsguWwkYRu2ErP0ube5A0I/TD6RZLJAME8bRBuIXVgvNNUCokCQkv/tDdgEmz7odaHSxBndcbk5OJOpWKCqfuPpZrj8SwzAHbtSDVmFbWzr+LatfLe26a74a7kpI+TAu69zKjtnj6/AGneUMnvwD2BwCRpEwWq8v/6BxJtj0v4ffwOUAeYpQUn9PEihTrM3H9KoKK5+tr9ziVcjkjA6InWQk2Qho0s5bsPbCfFdlWcqiN4tSqiwc9ipSyTGvxzk0sMag3JNnyJF8nSVZjiuanSGAm5zxYLKwF+Lm4Ai71ELX0gwUSSybdXzqLHSJoDz19gzR6YAmXzMMzZduDJjq3De2HQc53ElGMyB+gDEDm4reO5RrBOIGzSbhvaUCsZUyRm7OPN0I++Phf8nw2sCET7ICiRQ/dct6jOZPPtUxf30ZgWP8Z9a3I1ROXJEGPpuwxKWEgnN45MCJK3sBQSL/7LTdF+bUtpXQWvue3gorJpyCEQCPCB5ZsgXtC7+A4tDSKkAm678GkQmp4wmItmucpHzbIjkcNesD37qJH3aDVPkD0UD4Q4Ir+r996cAqrBlJNF6nUkRVtNaNQiIECDwEAdwYKq65KAWamAwf2lpi/RJ8SHj97Em8juygRgAQ+UWH8+okxLrY1hWsnq8vlBooNz9JedjB+pwlJXAHDHcqz2AxPgYzTaEtUtw47mvqBjE3gkWJSReYVh+PuABaGZmQzfLnA6/x5SvuJbaL2y4UaHtf7OJFuztnIRYDxQwDe6+qxosnsQLEPJPykKu26c+u/rBwTuRwDSPnzFMxonFo08KCa4Bb8jZGWPrsi/I7YF1B0XomZNKLvgkaTwYG10/UJY9cfsOhK9Pf2KFMVhnNf+Frx8gfzE1u2gaXCxWrxU0j8iulnC57gGTmJ/TrLAq2ZCRw15SprskWTF6cfYKQTZg9/GOigRkl+PKb69sLlv4r0jWF1zrVeATlHKzskcR48xiFBc3KN1Fu6NSlWcMaqvuExR7kZ+VIm25jJ+2yKb/W1IAxbt3jlkAOwTmfcTVa9A2LhftU5zHo+xtHSGbWkXESyIoxxLhSADR9UGANkz+GvukJLLK08kgySBnLHngqnhTxwm/Ev+jHb+Rj1foZVrzqAcHuvVoy0C/gF8Hmw41OoYS8KVGLId0FZgahMu952IybEmIJT0fCwfnN+wYSnGpqnYzIbzKzyZiRjKqbdGam6bVrPCdTMv7vMNH1tQmAcfJF9QVU8mv0AhXDaBqLYp8tWZRlsvPyk+gwJu1EHXnx0VCvGyHpYzpgMt71srMrn8dYzZOtVtxAi+Khi2LZPWMm0q1GzEhUtkxR91zhcSpnC59AsU2hu4lvLGeR6/eQd5RlIRumN8V4dwGsIt7iAdmGUFRkQl1y8zwn9MZvculvd268d1JxbUco3vMUDEfTy7Yt9SrIDlprZeM/JDPmewu2LvUC5CynMzTe35JrXl8RLhRt/FDkwafpy8lDNw0kiy0jYGejBe0HLKFGGF9Dtj/jjRK2yWOT6YsWS+YV8Yd2wLMl0BzCiH1xj4WCBAsbXW1LPyclr12s6lYdG2aZTtvsWJVq0zyqie2VzQYNLowoPSiVd01/EUCcwa1SvT/kXF1aYu7AA1cJLpZb4eKpeZ+T7bbwsTkw+nIbscac2TvCyccZPHiWJGbXNah7wNz5Ilm2zwM8DvuoQaNi/1yYT2hWDm2LCT/AVjjCQhjgUyooZBDSJCz3WXn8p3Tr5jhOr+OnT/m4Oz56ZsgwooKN+JtOpy5rmUs6LBsJsosOvcdjfDYPlUjjsV5717aJRnw8HbIfPa3UrYR5XcPs7h416ngmLn9mvOKhGI7Lq3LFp7dDtCvtiSmGjnisiyD2u1p0DXHaD+gmk1nKCQIJKePlCXpEt2fuQH+yYxKt406Fy26YN15yUbQKT8QO31CxqFZLRnd73MJHOa6YZ3ljNJ5t1KtGCaYO/QqAN1QhYK4E5n1xl41l55hbUHyCbgu3lo2Je/a/Pb4cp/SR5wfq8D7Zbzeg3SR6UpjI5diqr6hTDmdVeoRHhNia7HpQvR7mUSZCkp9yAB8+uy3mocNkuJiXFp9ami+gG66jfsyrEMd8L4BAFgZ7s0eKERbwPoM1dbvsmy7tXr3KcbHAZx+kY8dGueVJp5+lrLIem8aGAXhsromo4CNhkLrEulHN1GugbHD8u1GaGN4fStQfl1v6EogeN0K+w8AV+JmxLaq723QAJjEiqh6D72YVvGuD9yVJeIVxJYRoOqrMxyc3cHSWXcMUeP860o6HmPtgf4W6PSEAcemui8S5sCw9FHhg88lZ5OoNIyIeicdwlK+jJnIrhFMgcUC3Ij7GMqV/Pr9En/JZfaAdrqIRJ8TrgeTpLkb16yPr43OEl7fAdrEuBCQ/nuMtTBVaexw/ANPOgBaAII71DRHRCz+KPHNGvlN9M1W67VtA5gmckPT9j/0Fvkh32rV50jTvhPiiZrtaOgR/ViHdSs1sHcIV/nBOCYkCSRKyTTUhPR3LaYF58EWj0tdDAw4V2NcQkIA9su3eZR7DM51kiwnv6UXQyq8vui/TiPptMh/xpSWb0a39OaJj91dzNWzXgwogmsFsED6cToQMvrLE3a5GYZMWfOeFPbf1a4JtEbE1ZwcOWxNfdn9s+MxlUf0/O0kudNUgZMNO8NFM3YGgY6AIo15oBWxrJ6kHkXgjl0wHTr99vjoRNX/VYrdziSQC+aho6hWfCZwW8qAbXSEf0U090nZhBrYloR1uZCo5GkzKbYT9wxwuXc3AYvSJ87aNun2sB7J34xl++ZcWcjXDb0ud+oKBk2owA7MmsebtzO6zZ4eEM0qH2sV9ASwlG73Yc4GBystrgnEVXKVu2Cym+P+QP3M6uNun57Q1qvcd35hFL7njBsUj4xx+oImc+KnxTnwkhRgJrd5g++IIFbaQD82p0VzHG2GNYTkof7ao10qjATkJYL22MBi528zycPJfmme4LeBKByvZ6RIOWIupk06QcL0lp+VU8aM7pd4rlEMeq99Xa08m5RnnYBc3RQUhGZTdU0LPABAAX0SQFb/wDujnplBrUrY3E3tdGqGTras0S3lb0uW0yj2G4TheG/e3lbYXfg0bZxQyttkA+mJBfLIzwq5Q3wyGy6z4ouIslO1E/jbT5jAvcVAE3PRFix3RWTCH0Cg4jnZKGg/4UZBG3Xb5jcIhNHGwtKnUiakIefrU0FcT5r7dXZ5CmlZYJYXUeXG4BgCeGdWSPkFN1qy12ToF1sPNzGdDOTwjmP0Znbabnhige6AD91gcErGjLqP7sg9X7VUBKsE6Qa9sMPioxYMdgDIHxZRpfbJU9qB95GIo7N/Gs5VJjlH0LtiEKl5oWM6672220lJnKFKwfQ5sHQJsTzKmiGIRcZdJbZWf1LLOrX2jGi2gEawRI8yZCcryFz8C+oSDvEaS+8yb4rTx0xXtu6nHmikzGKbjywWC/EbeLoTsCQwpta2GioW2jZizRcr8Rb9jsJapkJfWOxOeNdU5ntGNYP33id1g2VrL9QyxdPGxNzg1ZMRnCPRiT7Q6UL4u8dVkrJMRu7++Q708/OzvJIfewueWqPFJR2NPluvTXwaBNo7Qy10Kkk5nPrUmeW/otebU2qWQsV7Kxk/ZNSwxntg5YMRixheSmZy5OXgxUNIUOytO58as6LIIIGYKhiEjcXLDRBNPnk/070sVBiuSrSSrYoRkBlXRRzsWXBlJ/DmTafakbrZtsxvs3TYqT9tPucnc1bbXu/eVi2DcpqZ+ulfHi5ZT0x/wEeq+DgZEV+Gg9iSOZAYd87t4zfo38oOTq7lV6vYN72SsBsitdTjUxX3bAF9QbkIzcS7lWIImv/w4/yaejCl1g0yBLbHZ5ePUnloq5muwQ16pIl3K4Auex612A4mNBIUKyGGDg6HF2NbsN4en5kHEk1ie2o04hGJKjEs/m0nXOk17d9G0Z0hST48cadC/JE3l+LOiHzCY64XfwrSYQsl66qNoLGgc43W6d4Bz5zp859/D9UQtlcasl/qCjrCsckWHVIpbOR/kxEb6Hee8gcHNCCzH9cJvtyjfxF/Z874VhCDZxgZMYuopuDL11ymdif0uJEx6MzstGECxN/dIfn16FbgQ87JS9whue1fCo4GY07k15l6m48eAvbFOi6I8mNMDv543Dtgd8k4TnfOfNyzYLJdBrjwnGbvPaTgBGHcCKcEf6SFO1mjmh+bpEYV/f/hYqH04e/MIG6oW+IU4NSbmR/kcy40LkeHSsGVEmsG7IIDRiLYXNLjKn16uyiPjMn6yi1c2EY0q6B5OcWljDfm0b5pRL1bGw7/nH06HuyQRG+jQ4JyzsFiIfd4Cn4N4MRDYC7+qbh78lUAnsg84Pco23T7Gi9hoAsNXRiGHWU/GjYRmpGFG5nnkbz6nhBH2hRX15+51gilEQ++RG8yN9xGOylxG2Mmg/KOJRsKCWBpcdVklIWFRpsfnz2trUrue8q0P3iXESy/F7FV8kaVXDyBTsofhko8jfYdk9CpL913ETQyxZ22ol3XnP9zH7R7XZXQu+nQaolxgUsGSQeRcMN07FkwIZidUMF4MnqpgbyoRawLYXsoDupIl4ljik+9Voh3w2mQ4KwlEOJRJCF6v3BTWHZ07Rouaoi+OXiXkHrMHG5dbsuC+macSFWH392pAgeXD4aj8DKWp+kcVWnQo2pn9RFozSzpNqbs/kZUKF/M3d+m3sQuspwBww+YZeLfdPuygSypoBVvUfk2+P9CxQzKu9unGgY89AScPI5Lk06+YZDT5KywAdxt+KqN6lWTTRprxmGwZu+qsFPX+tjj6Cu2aynYgxUy30mCVExwg/MBDEYADxSp1SH8ydnuKqcnLcMhkoMg4t2tG5g5z4YQT+4w8p7jS1Yaooz4BWKHXd/PsLjDDhmhG1cKPV1+OkvI1g3UeeytWNDNKtuJP0IeIwfZ3mL1W9oY1mDlOemXEAQvFIPvXmQ876xHr9A3n3p5Hh6tVrwfn9nr4bgtR6KkkatWOski4U9kE9hN1fZT7najOJYXdOK3zVb/9ALAeDfiwg1snHH+ZSM2rAhqdw81qolR/u18xpK6cOacoo6iCOUgKl5s9k5MNGTGLjGAO5U1EMJ2OhzjRqDj84YlBvbjgNX+nmx+mSCvJ3QmFALa+/QIGwD6np+gHDx+cNz4iXqewrZp2nqOfKLNbj1p8SLQdtGBAXry1fYWAJ3Aa5/fYVKfOWvX4TXQozIL2Yh7MYB+AA91aYIdWcFISIDykewy3THHz3dNlRgoRdDwfT8M3i8RTJzO32UJqU6skSUmnArymD4u5QOmWq2JiaqJzDNDeKabLFVYfx06kXwCeUBZ2ULLeBJPeOgi0Jb6RhSsc+YjBCofqrXzcyAi7s9PH+XFSHEkGSP2M3iR+vvSVcV4gjmvOukh6vx29YHCfah0A1rR9DoCjcaNAo+wWBKcLSg6xIbLMR6++amFoITXE/CyHNscrlIz/dYxywfD4a28NBD0wsW/Ghhyuzwg6PgOZWYP6k95vgd5crkFZo0kINr5UF6g3LsV4Uxt+BtIiQWXCp5gREfpbGJNX4RGB8E76IECXbD7sQc5hGWYE5ihN8yTd5nqUvHAt7Np1ziAFHdChs16/U2K3XTPpGQ1SwIk5gYNdaKUXNnxFm6JhnDDGqI8HhdAfHfrnzabrjIuBLUUDrMfj50buCLq+haStCjBTEqR+CH1YOyMWRX4tVeDXhZc6TLM/wpdvJ2Ah2NWTS4lpkvPnJjoqSCp/hcRe+rzxDJ4d0WdlnYeGEIAb+Smb+gicvfz0gdUuphJBYG14IlYD2GwBxlkMcu9E28yyaht2/H7AtfQAD4DP8pGExhIw9stBzqzkBfpcAkSphtM7qa3id72fhzLGryXr6FNWVK+/sOH195252/OeQDg3CyCDnd/wjD7Zn994601nQVtujS0xj06eFJ7bUGllH0M0LLcMpjcHvWYXS4n6/Li9xqMUl4MC2nE5p8Ouj05rw0l192oDLdpprE5ZyN7ElM+7kQWSLbyVEqMFEYWcZOad31Z/DAVG2/iwLSo0Jaq6BIpJgLCKk9llOs+15vFZV20heiAuPQ4jUx6h56FfeUs80wmepwKYkRwVAjaBtgz1q9tXxe30OZxu+MhGZosf1OezDB0eV04EjuMb9CJ+CDExxRBNzwK8qWMf20eXWU5l6hmiaZSa9iOcF6OqAMCMdXgMHt+UwK7tnu/HXkuNuQt/H3kaP4FIZOVPWgIAwMSzx6g2tirWY8+2omaU1W7gDr/7SSPNdtbBBCm/5/LpHPw3xpzBa+tFGttv6bbfEipTQw1Cc/AeruKQGLAvGXbMnqW9DUnpHnyufy7LPcEWIioOb9z0MD9cKfbmZdFgWZwJwXxJlDu/y96DUc3XQe5pP8vptRulO5Bx6wQkcxMe/1p9SY/fxugTI7NeoyBWSCRv3fZZ1gEcgrNF7kdNCTtHvZDMGaGo/z+URXqHg0RN6XzpCbHW9J5uD6ZBfReRH1xdYKEC7SE6/peihepNNkyYtXGB02UlFDrbnjhM8ou4s+089frcsFTmX0++zkf38jUItZOncjX/fQENigSpeNPCqnz/FZBXEn3UMo8lmG18R0k8V4/aM+ERXGG+RcsnpSwPDI5HEvmARBk4ByxJDgtbqBQR0yx8QSkr6s666DvMjysJmPHjV7ZLew7kWdAm/ucBRkDpJq19nylGg1tQYJjGpcUBxhW+t1zBjsdTYXFgPDDO1BwF3xJC9Ft9b9CissQlntX2WmQScxVSXkqXZyEK0KRnIxjY+n8+gvvqcbrOVbeSnF1OJmXG4HSlzELksX5nidgUCKiYkJLJCm5DMa6Aiyalp0SMvmAXWFE8XqCX26h0lvXDGdwHuar5Xf5mkQ4WFOPlgQ0QokTJQ5GMyZio73FcjLjEhPony8P1ShIT62o7cGDSSJox9qBjk8QSOV7i9B8g7YmDWLzjrM++2/XMxAloh8JjJvanEU1ojNhNyvUJIfxsLKbqOba8HaPkKRHgszcr9RU3ZH8G4GfAXw/ttLVizOhHJfGwldPT1ZYECP4FXDdix3TCwxa4x9Hk7ACst1wsRragcsyW1aAA3G9/XJuEcH0KGh7OG9M3aVxw/p+fVIpFuWyxMx2Ssxqu58OOGBFUmnxaIzbZ+LOpoKRCKs63DKyDRRd5Nft/T78RCMuVi0b80Ork0GTOt9fZEiCztjMc0+fHqeMdzuJ61iL4HWqO6qEsBZhI65p1djhgjujDIdXHFkTTg89tO95PnW7a5azJesRVo9ddmPJGk7rqjrCBMoRTcWXC0X1I0aMknQBXuY1jNvuJG3z4++mRQvfaQV2NrUUrJ1Ca1B3SPwxtw72N64x5QagTjF36cNJgHSxG30zmOmEvpzhLhRCb9xvebgWd3aCKo23U6gI3YToVvOraCYTSkYcZVCEYVLqS8dn+1B0s7XAw+JbyMOVGPB/PzuK+apiFWXQX/0aqAz03jNTLoujEBui0E+eBz0nfmTWtNNCHmGE4X4pdT8CXqaIbLH1DkgnlgbWBNOVT4Sv2Le6Ipf+q9vxYVd6bkPPxDIdaDXvak4+L+oiMK2FnpAJKGEkIokmr2PDL3K342tQZWRPEfEWg2cg5O3gPDSmayIZqzJ2QxNZKF/AgXCfzFhEXFuZl8peNFCJiykOEWaSgVLXjpyly7LK3Nv1WJdzxR9Yq+9jiQIQrnjJkLCLQ1SnDJL/3KraLSXdEhMpvVx35BQ7Kg6R9ilICfGAYy2A29EZ6ROgHoiniU2Ggowqae9dkJ0blPaf+B0qzhlaM7ptCQKqQLwKx6YtWeoQ2cCns+QBcv0wfJvoMX5PiSzbmrEfddRPLFopyVPwfJDCTlAtW6WXNs/n1yDnnSi1OS7hfIVna+H8ZO/jwEhyKoGPWV1dOFUj0ZFkZ5VWkl1YNQVT/iHFmPF4OMuOmfJWZgG+g0jicCpedMZx5vt0z6Nlv3oQRYFG4rLUwdGpksl9bjEyxF/RQtnQcJNIruVllwbj7j14LMVOjMy53HggLLAeiJ3NGuRWaDG6gCw293j/JvcQvnUObOuaRngFnYBLiwI7Js8ncDgvzR6R0QNWEl4s9mEVcK1KZWNn7CJAXjz8WHRt2CyxXUSE7hw29sbBDuqtarVCtjBGU/wlXp73V/sKWeh/L4cQKS5OGwHHGeOlZSzjCYX4YW3MMzC9Ub0cm7FAHbionY0rpjmTB/33Sb74wXPN7wUyIuBOWszeFmhQOzXDNRF1avyZ6qCbDvIXlQlU+EHKLbvmORUHT8dO7Qjwo1wnfGdzBQlLUuu6AwdcZo06565Ka8f4+wirIrxiDLJ19UX1GX2dVs6pzrKKBwScpzZmGRpG+lux32WbP4+inx41P1Di2E/SOU3g0fSRDoxBIRdAVGtCyGoK+UL2VVM0enBTxywG6eJ/o7jXurz5Cof6bkkcvErLyghlTmwPYAqGyqXkwiwEBPZ1qSOeG1rXt3CB1wnrrWMZcwlD9LkSzEIgz1gO4zShjg0wLQGhKzkAbGdt/qF7t2nK9l1mQqCJNS/S6kVaYeRsvR/FADxMC6Oq7y+mKotbxwuFYEUFOdj+pN61Ir0BQl2Kt1tv6cGdtSQ5rpSvflUDf8/ZJiT3f27aTytO0h2UX1cnTF82Xn9jMTifCLewAiRmEx+ThbiAHmbwwAixoE44ClL08Pa+vQLvSK8MUJJLXJJDzAzSwkuBy/MZw8K12H7rijPl8c2DeCe1pUWIRRJE9xx7DQ5fYQajkG/9ZpKAh2ISqNLqToRbE3lb2Q4fWZQu3VlGboppo4+5q4EhlgzjVvZGnR8QHklm9cxLhJ3ja1rIedNuh6Qvqg1yrYw0oCfW6vosRLYSQk6TrYO14jXTs2re0OYKPtlaeRkVJzPJtOslfi++cHLt8zv40Vw2iH+epo9XOnhCTZwqoNwX+ZDICY0APyA7NKNTV38gYfL+pswP1F5+n3b5pnDSiaTKB3estwHpOCAYYBofan3ZEg+slSxIboXtLRucVVTeDp/74+Q5Q+lc9nqv8kaiBR5ef+5q+h66/dg/sA8B/F3Fk0qOsRNBa6VfdNusgqJj7LZmRIQEOLJxmXS+wP2BdOxSCL0w6rLK5UOVJLKhx3X3xS3d/yp2LxXZDG9XH8BsDar5To9fPQQ0dxJiV8lqe6mfpSvzn1xv3op1AJ5OpFjgktzh2dFSoI+f2wnmWhK73cqPyF30HOn/RC+KJBTHWPs9Pc8AXlqzGWFdFg1g+0BNucRyO7buLufkb+ZshUZ26xiazUZbii0p0YzuY01scg57ZAjIqOOjkvU/mK9o4Mz7kjRRUbS2M2X5MP2sDkK2Tp4/fUMPiqMHCKEwD46GWSpaAJIse2fqTBuyf/sWpc1n8nw2Jeh0t1oU6N6wKupDw0dfdRv7PkYioLaoZLdaIzJe+YOa2uLjyErmC+YbXHt8F3McmGC+kJMtSUO4E7ZwSPGU0p8asToC70WPiRXLy1cvZgc8BQvH4LHvPrj/nQ5QaN9UctJfVPs2ky+HneXEp0cNbjfInFUZI5qfGsgO+V2OVt9XzdfUgCxT1bIHHdMF9EAm6Y1z3anTaocZL0uL6RDlAvNV/8Z1GJn7+hjJxJw/0tPaWKNDdsFh5hPTeUYfgqBU27f2Cir3veiXFIigBZZrPHzlMgbvewZbYHWp0X1UeuBXK2g8ZbOLbIAPLpAzqE84IrJdhc+E/px70OX3xwBSYYfJz6Yw9ih9Jq0Wr65X7b23SG19yRsbdXD41SmUawiCr2afz2+Pe7u6gHespL5IC/fo2ADKMgRLhazk/waxaXVz1WGkYvWZ0kx/kL86ncZmRj7BGKlfySV99oUyQC50yT6QgWm6H1HBfDoBjps8SyrOPXyAZDPAHykkMQoSlUmm+smo7oFkAhYfCqaMIfbJsl7RsoqyhEBh1OE2aRUFIuuo8FCJT8+zBekImLEo2aE76TI71EfuZo1crwswai+SZjCgZrabZyCdvxa9DqKsQzmjjuqoxz+TbynS3l2VtyKi6TIN2hMOCGR0K0qi6sVJE8E+YBESjJ8M5+nDFsSgd7vMjTrFsqQR1kLXyIkcumVUdsYZ31Ae5pZjDEQfBjcBo94kxgwGd2PVboAmoZwd9TGjX2ge6w1xHCk/0DSXmZvApq9emwK6HwfXaCVTGzLkeG8qohPyxQ5XIB7jLD9zgTmBSDn1K2uBSS+y6eeTbp3I7itSLyeFOtPWGqOVJ9w6WXya5Ec2GyqZtldKW/rVhbnvSbqV2lI2MzccBB3jp2TxuvzBatuWmpB/IZhl4XXl0IN0pP13izPmgRUeKxKTv9enIRiEyMcvg4D0XpFpCJkHUSa8z5K8VE/JkRPLrUlFePFk9f+XJYirZBvrHp9qAmMPDhSHecdCwXBPXvjrpRX04faDl3y0RrF1EYtSx4nj7czrYYq614uie7JGzEN2MbwvhTvPTzJl8JM3+vVuaZfgbDawgZS58BtGifg/lIVMPmmz+qsp4OGFl2B+kIdnwspNcIqaLNmwdMs4QiJ/A7BwyNzAKK5A63b1La1O9i5CAQwtENt0HQ55G7fIdeRW9jOk6S6X5PqvEMvG+Xpju/PM2f6KvG+TFMdQX0UEZqfU5iJW47AxY299DR2DDQRBUbdj+vVCZueJ2uF4r1+1dKb6ob55lVLtTFV/RLibKFxiaKL/dC+59zNHKlHDGe3Jf4lT+z0ijkMb1DiywT5kB46NMB7UWFzf2W2p0t3YhethJj/OoVL5mT7vq2h/iX+1DPFRoFUGNTiqlltv+gbO6JmMjVEbzWnjqg+ES+LxOH0mYjk/P76ITMhHRvzXnbxqFL8CaS+M8RNrDdEwONY7GWg6/maTrWkdM+I3NmTGATZJGIjBtj+8Mgh4JzyVdNgzL2fFV0jTpTtO/Qym7vSJJI90Z23nCfmlJr+IykV/0U+Tsr07Q5XAYeUgqMKTrXHqlfHdpmNQnYqX3aKLkfosdhP0Rl+nByKPFW4MVVJ9i3EpRwiXYAyOakokjtMk/jFSSZJ60zM4l1kQPBH67FYuQsMP9FAxBEc7RnybzRWUAclALNcKZEmn0Mv8D+kQ+lMRs1Pzb+oAYTg5+tRcgpd5JqUVLJo1fh6mA0q/tpbKrNaImTyEgUMpBZC1D9lI3giiO+bx98rjHu81Xb8JjlRYJ2R1Ok8K7XmAGwnRRsZj0WQ+01Z/EJ9s0pZ4K4IjDbGe5SuzViEj5a73FZxKaGS9xq0G8ycskReZqoaiYv9odLsTWGhC1uazwGa3DpzQS3YgR43IF4GKhiEjFEchMj5zM+R/5gCI180PrKijFZ4qh1NUNe/1q/qS0VT7CiqwQHtXoFBhsy015Sz2p4Eo1Otf0Mex6fM+nYNGS5qwzMeu3d7wOXtfBZozZQAmQUzYIhkXGeQaURNxh8hq1KeBNIR78KGn8IrUNLGJs8PC8h0Am7H6myUju8YvdIs5sxhEjvlC3ksZnbQeP40CIuVebRDuX1dvO73rnFVUNGdzxKmnB6+NhhggFyuuA82jcd7Ld0nGKyrqIt88HJXlYld+17QOzDm7i3Mb3nQCkMDOIFM+aP1d23ZycjN+QxBmZfrd9qQvgMWCvmbH4m6XZj+Ej1xfAN83BBqwYWrSZGCpPiA5SbFaQYAV0bCXjtdIw8epAzv1KhZT/94iTYseQWgvWzi0C/HlCBSIx9ZAK0aPMjOH4Q582A35m0gRVJLSqH/lr49Mskn8iCW/5C+EAh1UG2OjWdmV1QYgeECPWx0AKbfQTY3XhvAX+pkWqfLcAyT9nGwEEGkEHgsIwAi5Mpk6EiqIePLlEJV9gEb0V+lrE5jfIroASH3aPh/QZMdQb1TNthQnAn4kS4GQPL/p2t8q2to6D4KrXyQbWkT7l5HnUe90AHv6uWajwyS5StKKYpZenaXF3ngIetgls0J66hxYwoO68/yYXAqYaq59g+P1LARs7btwnaBRCSXtDPhco+T4tfxqfktQlXbj7wEOefHkcvhiBh0Afp2vEyqJnoZDhKXF3SOz44M5vG+y6UoEUZYxIzP2JnCCp8nrSLWa9Dh5AI7QL9Rzc6sOWvfBHkO+8GKFZK9eP7GqhQdCKLI3GfdhXm+Lmbj1IntCRhT4CBm9YKz2VIO7OBj/zAlj9K7p4AAO2/8V1mNyi88XkezsQixk6bA35zbOKkfBOQLSp1IAnNRrhjDPITTHFYgt2gi3KXw6ffSXnH9Bb1MlrAPv5PbAWcHKIA6Nksc6iAQ0AsqPMYuVp7E7YZ87xqKxp+bNTC3MTVHiLfstU6y1CkS7zU25qOsBWbNTloBXTBo6IvSNI9/Iu30RbltAz3HtpkPt300ZKkcWtmOq7N1vjAwwiNKgPen/fsouXmJ2hOgT5G3aPKn1f1pmtcSYjhEQwKb70v9LGYJouWSNzGz4ApJfLk7e+2ve9U6sJeZUcyD7mPEXGbSQCYv8SSz8vTQbpRt3vNZrUqNHQgjf06zBMV9m31+yNC+pP/8jeJJ9wyaHpLH+HwcImmwysspeYwax41nvhF+sM2EhDXcuJW+tJybPS3yrhGyYEYelud3FXG7cGe9ryM0gz+pnI5+9IPyPSTf/gGzXx+AUdVTpAMiDFHgqF85vD25yW26mPBzR4qUcebu5hSIthHTw5wUgOWLxj/EpRboR/6uV61BOApmPff7RIZfHv0hBaVNNgq7MZrLaUM1zYQyCbKNKwC+CN/Ws7vR/07y95qoXbdiYTqu3Yj5pCLU9q2gANi4R14PUclQRHANPdAWyOOZyC9zymF5XWr5XEq/EAvuxPFPhggX25wYRVPEiBRhk/+jXt/0FVXzgMGc/JOZe8WirGV6j4bX0dHTPokyP509uY3N79lewUdC+5l5i6M0pzkz2QYgqtDd6ezE6R+2szq4hXsv8IcLCEv26D55ZiWOQePDXqXmdNfQ0QwgMVYRVTBG9FnMhfKMG/unewvJVz8K2iDbEuIcC/EUj3oo4vmQPldH+SRfmxESs3MOzG5nRSms5YPSp0cW9g+Cz9DPRjqLTnsObtaiPMi8Dt4lfEq+QOi+15+W7WuDavkxRuputRwfXMtEgcqQ7oodA1NnapJ3cylGT3mmk/7LIVbGYHt95AeE0foqW5dIaGbrg/VMfA8GI6hWgn2UUqi79YTPJ+Vt8cOxPPYd/gaVndnWcZcsfCjKdE6uH0t59cz0EploO89jsdXl3GEWvq3kQkBBbGn0GV3qA+dhq5UymABmy4td6NX6igVPysMcb+eyXU8LvGa0o1Fvlq+rhh5uRJthL4uQVXEUAB9l4gJM0/u+buck/uIoPbLv81FIX2GtCoZuOUcImOYgd793b6WTmCGeHv3vTD0FKfQFeX3CMKmy/1MHVbbj2L1h8QG4RJqJRWRHb19H16q8A8oXGqTte4LtRcckm2gWFfqPaZTsJUIv5pfzMUE11n4uVCYBa8A5t21SJYghomfXAsfQSODmL6h/szgXH7pdXuLoOq1C2ojzvjXesFsghYhYT2j9GmAxW+kIqWQrgRWo6YZXZfQVfdCRo8jUjwxkPbl4lunPO/8OP93/DakCdjTfCQqxl1nbs2Oy3Xa8ARWm7X9W9ARv8FNQ6ksiFNqLUQwvcKx8sBfXK7pYIWcSL4rH5mgjPrqNIDjkgsqmzd0nIHNZXbDXzZaVJzQOb/NeOa6TFJXkywBHZEI0RIkEXyo3TDmwMxbrG9JeWPri2eThYOjx8dU1hHpCyFuWbXcDCCgvkYPKahyvepvrB8IgKLXhdFRpExkNPrmrpSOPQYfPBkqoU1sXdutRxLIrc5e0jO+x+GTHVOmP9shfTlm9M6ePaKOH6DgMjS7L5Cfd0em/B5sr8geqLsQnM0Nw0VCowrjednuHsQTyD60bqTLBxJk4YcKFbEqgI0TDjYLU7GzWQePpIBAU05kYqqE9kfnYM4rwvy7k4jDm9tsiPmZN4XcLRdf+VAF0+TgMayw/ZJNmH5fbfJuCRw/CuT47SErqEzaJLRXPAaZZCjDjyQksDKwrhXjOEO9fhCaaV9sbVzlYN6BIvW0OEIbqZEiQ4LG3Yh95wqXhsTuyqGL0zAoGsB/wDWFINepQssYD8ZcP5OTZKp5J4TibtlHEdKlj+Mp/9KcB1DoB6bYVouLF6mmX/gdE3rPonCZ+6Q0wgCd1cp7lu6JaCVxSjPwgB43Hri04ciZZH/wZq0nZSSkaTUjn2D35/GUWfZA0SLVSoA4wNkBbTCiH+JDFRxtbuHohEaC1ZCRa8shY3iRz59f0ug1ClMXR4aG1ZpL/4jCPS8A2CvOV6lj3vrhPLzAN8Fpd5NDGc3G4t9nNSEEUIG3P4M+ynjzWfzUb0UBfw5ptDXsynj/2bMLWQto2ESKGXUKfvbvMuWDRc+pJH+a3ng+IGscmVhbJ5EUmF4c+TwZREiSHz8gkkOgs3BalS+zBx7JH2QAzW9uf4NH1x9fkf5atd/VKeJZk9VBYcGqLUhcVrdNlpPTdptG11u2r9uw4Oj4CQkkIuzVKuKhgWFMq4tTCOPIwbwR+ctw4dYKloP0UCFCWLdkyfEpq4cZZF45ukZPJwqHrF/30kFKaNBoQ/k1J2iqoE8CDM3Jgo1miFn4jYhty3e9l6EDAKnS7aauzFkSuksJUQysAfhx+PHqa+3f2vv7z8QvvhZ9xgJdedb+JQS/2LeW0v/RRBnENXx1FuDgiw6WUarkjQe8h5rLdyanUJN1WGsOTNEitkngv/e3um7euDNlchu6gEnB6iEK7uySV8PCn1XmFw/bG0vrz0bso420z+czxw9SW4h1Tj+wHvYYm0LnAaMXz14bvriCitpwfjFSOxosHvZxpcWC/4HfamcrC/3Jbpm3SF0N6TKb3jKf8QQDw5YFUJgS0FCoslnljGcjR0Aee7g2oOrubfGLNBf0XMb67upoc6TOZ5+Zsmhvhn2BopbtxxdGXEsaNITYOmAL12nfwyTUFgbjXknzLhOoTaOMcknqfD0x1T6q7Qb9VDSrWiZUWjzMk2ZXdGZHm4Y2MF0g29Lqny8bpshnTO0lxqhfeOe5+gLF/RlOu9Peh4u0IZVNXzc+McHNJgyzJSZzv1onoP3Bp89cGXrlAVoN6/MqYKnTP9dvf2RJgIjauxtkHGcJT6OAZJIuJ26jwQowj/tyCc3ZChCzN4WfnT60h2hZ9VS1jj1eDuWgGjLcHOWXXgmIH88gOHY/6FkAnTNxe18ProDsnKJRXXjSoD5vzE2Tvsi0/yg6iy0HgSCKfhAL3JZosATXHe7ufP0wi9llDqG76tW9OaQDiN580QgV0BW0v5O3OvhFnLk8cooqhNMB26Dey8sDgfAo+uTSdoFYey4WDNsbfW2O3uCJU7tmRMCs4yjlvf6c7DZl1I88tmPIhU77lE94DJeK6WMmVAxqg73QUfmqLmCHCOtGfouakD+OSq5LMX39HO+Rm0VtE31bovN5Po0Udehqt94FPpAjqZkfQuYazm50wFim331eUIAjtPP8W3w7NcacJtDv2E/YEbcGHI1Z6rUfWgaieLnwy7MGKe1O8NuP1A87sO3LCW6w0w30IEFFXf5euX1Bw1Fr1IIkucR40+xBqXuwzwHT10AVK2bmJAhSGko22nGNLqchEAEvQQl3OcqRE9I9od33u69OvvSnuwcccuzcztSk5M/v1iAinh5nnL2CGUdYEszEuam/131E+ROEDUyRMIrWmJURYWQw50kEpdgBdVZdQmT4V/8As8POZZwnsxp8rAVDixWnRk8XfWAa48wiaWN2ASCfsI7+bKzGXc/gG2nQR8PF7GGrwJgVfL3CYlaA2ruyE8HESonQPWSSYRNyLteiPtziOmXVrG0DCsDhR06iKuqcLT/U9JG/DGOrSsVuOR90d77YAPxYKSpXC0GXs/6F5QP92cgPVxvQPep7Tkyu9TnnhAgdMvm1EDdmnit92GggNl5v0xYt1Mr2m8w8vkyRTeEsG9adZ/BorjVhueh+6CEIsqSjuCkuFqYmubBf2AQcxeArto+dnMLReYgzpXuO4Iv5OpDi9P5BKF0CBBwcQyjStA1NSWWsd+XXBtFvL65wc9KtELE+X8kkhnepukeKmNO90zP7RIEPflhfLOGcpqSwurMEh7/Fcx19kHwKFjtrPNLd+9cCg6IHTxWKopikeBjEqPQ7qDXLXV27faPHiakp8B8+ncvvczpu8ymdIzirZ0M5XlZsFfdX+ttGcN1B2PFbo8ohUYcxVNDmOX9Sf50P8aPvBrii89oX9U/Pu+q31z7Vz07o3yY8fvVSLmx/equnwyJOs95SvuuDNSqkwntR3HsXgNQq1/jsKV/zmM9t2YEr6RtsU0650HrWwZwq5/mMbfeZ/AzmJPnetX3LwFJaiBGzmGX3qWhHQPNLNcAP1+krd52DmjrTRrxvpb9G/9csp9CzPi2rgLsM530IfOHT7YZ+MPHq3VFBkHcyn1/JyQDcb6YcvrRS4jOIhJM3u/kNRt/Fr+0M5Zvx1vcBFlGtNAChFvf6+UBsBQ1AzXzyOf//+KkEEW4wdbIj1Ikiur4RFGvwY350M62xYMr1DnfjF/OD65BVRz8GtrRFpzR5Eadq3HF9ZkQI3xioddEnRRbcxbyvpAJgvbbWDBwKKx5RHTE6ON+xrvVPoVB3mPW2tCkp8FlftRXZJKkJ4DN0LYW31A3hcHoBpV284v1ZRAk0ti2c1IZBUNd33G8py0eK6WodoNobjYavJWCdt2Nc4+c7mQGAXwVtcIyNZzTBEE3Ki86jQNXH8wcIf+JF8QxnAZ7D+y5vNhL++P80Ebml7SRamgAMPKCva3e82bIk3p5PNOgbB/SNP2OggOweVpIsa+44QUwSP4xSZ9BE2SHPPH5opU3FLSRZPQSpTpl7bn7PXzbC2Tk39AqXmDXqJV4/ClxzVEA2iNtRXkwStGpUTke+1Cog4sMwFaHrpkBdTbKnxV5IVoP0MT2w2Y/iQcs3IaXV1ox3wLc9SoEBtLS7TnUE38rTmbHjB0vK3eGyj3F4pFEp5nMHwzZQdstEElkUDL1WzVX/9jmtb/lS4EYa7OEknIzvbrv1y6q1hiGzIEOGaZXNfDDaV+udfoyqD4JNTXuk4Phq6Nt6Bvmkk1+QD+DnE1Ymf+546H3ofW+QTxdui3kIl3xid4f2/AoeWWXWWZ8aoj6tIVzz7vIBXa0WBAIVvW3fiBfzKvCyAr69iV34BAndo7g8q5na1rHsNyOblcIFWMk5oCgcJrjOBRYAASSw6kWz4xnSe3jp6ByZV6pSVI/j65W/1We/+4GnDIRTDqfqBcPeoIiY1jxTN/gPM9InbEtbrk30vrHQ9eQ0lcNznQ/bw8TTdfkBaPDAgpDwXvo57O52/lnNLgejc2mBZZy9Rku+wa8iQ0YLjKr39sW9QbqaZgIawuxijhci0iNMWTUSvtgaGrAiTJqoDwEbUwgJsKtAW0E5dSb1vRvIQiHx2+UF+S3hMXLcMA2Aok3mAoFNO/5rqiLg/UbDMOdACRLsP+yTv444tUn9ddA4H2vQf4ZzVansZi7XQPv2bDfSoHkIDH+TxTpE7XSM1DSyz71ScAfu8t0pneO+aWXdYaepyPWZ6SuUW5SrSSaoRrnJRxlUqOK8cCynm1ur6LSLGPxdjg69HfmUuS4BjBl+rml4TubB6j2J5U/4NEDymc6z0DcKaMrVYN0aPkHTGT4sCiau2M4HQx8kx+gV66xaT/yCk6bHeFo3MMmQ2vPzrfwCy4yFj6SCb0fvBpx4Cd8l0LZASOfbXoik2O9clDS5V2r7f5AbDH1RP72fTHtwu0tSWyI6fe0bgIGyj7CA+OWye38kKaWdwBlIDRd8auea3onJHA/3gBpT8XMg6tQPuXzvxQ/SxibXA8uSf/bjC/PN8ngYQotrpu21Fdcza7ucNvYFRKn8GcjTiBMRfEaUMf0QP3biq347iH9Hbv9ZMx9XlDsN+PQoNDaJz1RCmLCYAFzPzaOBSJ1hI2U5RtFfm1HPhoriFXYJcSf7ObQRO+o8+3YkajVQAH1BPBUSxVKftsuUKSWBCfUo6ks8iEKn8Yx6EMqgxzuERMmLvNEF+apD5pnrfkBz37iRl9AiePwO1Ezo6j9Z8LPxXhHjHfsIWWOFls0ciKUsUBnbpEohMV20RAF/lXBxTPOH5vXLJoUf4MZ2FOb6AXvG8QAtDPpO9pXCTINrG3wuO/hnYaFGM7t7GPNbg1T396DJKeW4q4D6lqzKofijRK1MmDRLfVe7mnwgmhgtQ6U6CAax/ASOrxN8bjDO6jROA28yIpZ1rhDaQf4d5yBiLBV3qEtRf7vhrAryuVeTNWGAf12GIMp0iB7LaxsZPLP1nOdepWXfXvfpVMHk2VVTRT5V9ZGVxY90XdNiTftJbbLD5Nir8hJNU8dZhk/xX4QyM9OCvwX2WrT+IVbnor7oIPdnzRHNoHTd1HTyd1r/TwuoAiGpERAYfo26XUqR6RHNJYa28ImqLFrkoOJrdxh2acMWWjNYz54ZuwFTxltCOohTtnfYpCKHKC+vJX5nrc6nhyXBbpRrttuIrdYj17UYs2RvoiT0+04KrBR7t4XUMm9u5hVsnAp8gUOB96a+LnhEeg7ApLLKjz3fBX4fW3Phzp2X4FJkoL+HCSDfBRdl5U05uPiNS0ArwmM2W7ONogZ/KUETYO8qJdup2cGViwtwxe955O9uzyPhI9aw161O2ork5ebn5xU/bmwvTGrh3bJuElB+xoT8ANhWQjsI0SPwP5rxkDWqmijo6BA7d1TzjVHDpV0xPiO4dU4aY3O/9MCgk/Al6PwYXxMjqeOd837R4bknNS5X0pJAKGeY9uVSLcybQOCMZOAL8fdeIYpo7/pSZRktMfG2ap1OK2uLMs0jnLsKNpm5qPLxafJ8ARf4GiOydMHVRCcLTlFPkA1i4UHwPYbsCyq3OdRQ7nyZdhgApRz5rLU9/uSHYMtODzoy9gJD6xB9m3/VFXXWVQleFuc2aFs7URkjB6R1NXjg1enwUWDBXXZ/Hnys+GncZNBj+E+z7z7KcgnDQJc7nIsAEjZg2Ju0qzlFazC3TwthU3PUmAi3zAZciXNcPAASVcw+cidZgTpxyyQYWM/5Cr2ymMVnPJFDZumeFaqjI9oVdE4OMrbvlJVkanvImoEYTOguEJlaXORMYL5jhxbFMlLxSNG8Mv9UVHs6GEguIDWRWmztuw4Hp9825MVgjfixjOVFPcASCsWjD1C1w/GlImyYtJiNNJzkq2pPREpuZILGPgGD1Tz8ciqwfoUBlzkDKJqIuZub7dT0xpAkLdN9t9O30Ai4JWtzp9WaKPpZnfU7SNMziT7lBNC/yjsXKYinCCEaIuhTBLQHynPrXmXlZmYcAWk9LszuW4P3BA5lqIFdZG5l7OUPgSSZDkbw2YlhPjuoFpf6jDSttO/tngk4PVuC8lgijT7Ux3ewWNP51+dpB5yN4edFIR3IskGPs12gA0DZNNm57itWm1hA0qeoQHkLkffKxOzcRVaaqkn4ouxmz2/ihdaZVMfUryJ1YsbWOK4gEJWumYYgAVM7fWCsD+zQjRae4OwheNOLscY7fEe3IZghxdG0UcY+BVuKgBf3wI2D3hmEwBqgdzxOM+2uXL+S+kFWgX5jTAbntCkoCF3AtpYL8Xi+/RPO8q5m4fdalUiUAq/1yqiNtwrr8BQXWx3j3W7Ofh09NgBQw2A844UKl5TL6XjnqYMZpMuShffRpC3Yerq3T/aUpv1HcoOyUVnu+ERSqTYnpXQMmebPLzLghqA0qXDfd52A6QF9UIiAgOad3qrSVtb8GQDZqGD2GagW4RBXgQ/wyd7kgSruky+/IaYW6JjhaHIfpZZ1zohk+c7CUqNr7Vrlu7aJHhFzOkYdteHBqE4Q0flhJDv+sNSEQZSsQfjr7nNNkjMkHJAEYL4kNJ3xc4tGCrexVjIq7lm75+fmiHg+uGBqqs+Z5PJ+Yxof+LrFTtAo9HS/qvyVXlSjx9y4Ooh8bgqG8K4D24xufiVfr3Uu4tZUrV4PdjyDrFQzbxTKOh2kqGOD5+D+9UP5VyyudSm/34e/FQNRVDgcmRTbW0vsLVdUU0BtHqd3NMF9eZabgbzzy/8EBJ+Jt0QnB0JLoS/KigK7U4UuOul1PjNsw28A0rtmKa/Xoyv97FWdXfwsa5H016EkhZsa0zfDNZHodH3bgo6lT5oXLe9Kfhd93hgUFO+uRdC3yO9MDR1NxZvnKKxAvH5tfCfWx74hyZsUIkdpSqqfDGk8khvY7aEy4/zyvLBxGGvAWevW5/+jBJFs9xiF83FjDEyEgWHKk5cBsAtiCMeyr1IbZyukD+NTUmr9WVtJeqJEXki8EF63Xl35noFE8sOkqhi8gZ5xyTLMILOLTFb010LLWRmioMVVN5Sao6G5u2aOeKwe0j34B4dULzW/rjoOC6QA3Xvbw1tEETcpoO8EjX7AZ/caeiOTQsPmg7Vz1dRpjw+8d5AGza7WMnnAQtJTi3J/juGFvcZEN4f5NRP2lhVvYsG0aW3CGv3Izxf0OSHxxkzRaKcSM+o1L3+zrgt0NThUCndJdlRVIVTwN9BgYCw94DR+RGI8vAnhbnz7gnaADpAZ9nd1ltGMv93J1mC8I/LIQpUPaw8EcsKV60RsHgkGJj1dl9Cz6KBcwFCKcMn3YATJCrRZVmY8BMXjd55yxJArzRdxKnmhqdOYPMIUYPTKgIjYOuOYcMfP8bO1I+kogL+2zikyfFlkIvB3uZm0N274jt6Gd7h3cTIy9xCfF5JlYjjQHa2F6VeuT2yoan0KrJjnaEkRbdFWGGSDVCbPm2O+80bF0cukkc0V8HbYkR5MggP4hMG9xMyEWUWOk8dkOwqhkx0Cj+v6660lJMPATiV3fSwzmL50Vt0EV3EGZ1KyWyD51b1wNj3u4/egBw7MkvcdwNC6hh4Kan/Lb39hQlhYl4x2xn2TVkmIqb7Tp11QJOsCqFN+Tzeer4J352JSiL2bMLCmtRUbmOB5vWEJQ1H64ufsgmkpz3eDq2ns+MK9LWA4omF2SsE6hrFTbA7l/d65wlxsoqTsh6kkMAvWWXH9TNV6x/6lEw9T65ujCsKyhcGuHp9ajvOB9lb6STV+Plo3Tptg/OYAvh5+SiuaSlDdQ+D8RezlLV9prDzO7Y7isUu+/T5XQLBs5PteMw07CzOURkFqs+cGvNLAb5chznlpxkuykIhIfCmhepwUDYmPQpUYGNp4cP0ZAfKxXOAo0khxLR7L835WBsd+7ee00pJmlMsI4gqcdxLs/P3TmnqOwAgtVD4kQ15tL4zE2pnLdsfoRNuxyZnR1LnTJuhrH4Z+JrHKJLjsWrWrt1i0O1tjR0hCd4Lnpveq8VNy/xpw7u/XyvjYSMOrxhvKG4bufetqNztAAO5gh0ecV21UZSLFGQPNkIwGX2ryVP1+3feD7xf+WP4Jg8s3OBtE8Siih8qvZdKYQ7EQpxzkDmH797F0GmUkFOs/px1Mmk5XFDvtrUgCA0km8EvFDF1JnjQ1OnChmFE41vR0mv55IUrU9fMSHuFdMx71LmfN4Lt3UbDQ4hrKOp2LbwazOSTcr7Fz5/SDAFQCBmZxPwopW87Odz1WC+RHfMThaHZW6JBG0IUKyULqx6IzPSMvBG2hv0IDWYb1hYnuHrK9QzdOm0m0T1tFR3G61B1Uoxb32+U16no4IsMJnz0yaSfWDgdrDG5qCYcHn/6CbAuB5gvIgBuT1xdimTd7F428tN16aHdmZhobpLoEj7MVxZxNjpZs/B5hnfr/CzpsX2sH0MXg9xqBd+kL7pOB3CFUXaXpa+6FOG2J2ilrHjvkK1UXPfy2xpAqy0Q4j/x/OFRESivqUOJqQj8VmrJFQEkiRz/QMOwCcGCMvjms0H5xG8jvyEbnvDG65M0olR5618uTRzIxOCiwJzn0zYXwJGEkJ8EOyXnXMm7HKkrwKvq4BrOPc8LvyF0zyWVLFGc8crHWsgqru1uFbmQfZ8rnEVnoe+MV4Fzp7amjrvBznhfULMh6u3B2VuRUyCQpegi6XIxmefw1ZeF0rB08eqhBTsIRgO03iDKX9vSAhjv01VUWjtOY/NYAB1f6MkMY4FS5nwebJMZf/3V+a/IvSb00NVR1d9U7QeujZpvBYHxDuaZzX9j2uKQrCwpPib0FkSonyOZpK6wUxyQZbgx4LwDa1QGF1rtLdz+QTrAFi2eq7ZvBtQx/7MNp3jq5CB9fH/z64MIUS79rxco3syHUVtVk9L5Rp2mjz4SgT1H1jOLk941uNmZJD2wvlSxS0NCZWMLAQKr9D+NwMgyjQMo7AzHlAPF65NdIqWTWA0+9MD/tmEOiNcEz3v9Fu69p1GPgfbAPw3DkfTFxQumRl0PJIR4co5v3vu/fdjDVzW9JJVqZW2hl6ZCH7zZBuS7dFo0LSVa0tRvRz1M0Ts2Asur5apept7r2mZ2IMlxkvEoe6QoWoZuDzsg2te32JxdwMOmFNncBTmxJZBrdFrtV/u6p/PVsBubFytZzayO23UdEjBI+ORxqaX26s45ak5iUYR+iqSUoUBIJD9D/ZJRFjFWru/jm/LoxAnw0NqEQmSrKjaU9/Tk9AG7FiEOw0WUlHuxQp5NXuI/wp3S3Ewo5v7JwlOK5jD3CuJjvB9SNSHkyRq/3L/LkHqjN0PoY0yA3Gf/LkR97PnaetQ3zU3r1mZo7aHd8nEzZIhE8j39AcZeVG2WRJpmddZeDfCcKBH13oFwbP+1VNYM+NAdzAqowDAT6JqqHRnTh2PBE1ye2K/8N+FK6D8Fzanlphm2WAKNCKEk81OMr6a6mZ4QTrnXlvUamHqCb0dS7DYgeCsoPk7gfUsRC8XzBUFylgLAciL/tmdEn9xJ/SyEj+wm+tNdaIEKdqu2ay7as7YK8rXKzGHYfNGdv7U8c9gxcE6mBCsfUgGjayp91dsZYuSMGfbQP7ubb+mXv8KPO/2fiE271mGvrvjdTfGctkoyYcWCn8o0kQNcudQB5upeDGfVIgGHcWR+4Am+14IR26vKsEH8JNie7ZeHvO/pSfHOiuxmTO2iJ1eeCn/7tMbgwfmrCL50r26dMBUAMO242hZoeJJGj9R8XzO5i7qCntMgzlWezfapSjMOT7J/yFnc714MDOR7/rAjoW2Lvas28npkoe+4PPQTJW7CsfVDUDFeG4sb9RRtIY6OBjUGKUwVsKvLPw0ZoyETBDAOFiB2qbu0Pnqhg/iYR6A+/Lz5xgsJgJ2FvQp72ZrADUN8k94Lh1AwRW88b5cdygk56QwCFXjU38frX9qbehRcxmt+6p+HH+H7xZyQ13Z7XAZvG7sSK0JlXGexf6gYcPb2SzZib+dXpo38Q854sx07xorvcl4Kto8KI1uwv1bK4x7g7jlKZUqq2wsLMO6wK7xHhsANWObVrm/a6jy0hHxSP1le+exK+ugOBT4hLFouIKQHLv6/2PYoJ6WZQSD1+/9ZvXgncLFMobzFf8Pyagr6etcpPk8Wk2uFja1m2H/nUTWuJOXT47gnUQjQEl7qQuZ9Hy6Du59wp73/dbPxenKGBdpcKsvUktizBFisWOsZU9EVeEk3WwBP18XPC2ueXWYGvDUs3zKdojbnmqbgKiltUkv7lIijQrLZVUbMwSe0uIaOBJ0Qn11in4rJCL4Szd2NgjS4EC/IUfMTFIr3466DFTQ2LSiIwqUYu1W31Fv40zlBi9XvOrO4mNuJ4ZJNZVQ3lwuU0q98cWQlD7Em/Zp9yH5whiMxxKmyXSKEg2VfzCTgALnIeXz9zSTfdmdXBmhXJIg7ZdbnCDfMNl47VkYuvbb2CupJcLU0xC6cxKnk6MsoHnOhpeJ7XQYdZS33fRSGaGtwlYDKK/cI0jtP4mszBIAfI3Ne0ArjU/b4IA7Y9qIw6OLJvvLlfMkApTuqJUXFvzeywa1nuT+PGTkUzq0iLpBdlpJ+//PvaZsO28TdD9d98lWul8ryzLfVwbtZZ2zEYyoO341Gus8nKn//PJX1wLH7Brs/0fihIiLSjuNlIAIxS9ZJnyU3ZWOa+aL+RgxjRnGIAd1+u3rTeWltMmTb3hMPyiRLodsf2O3tdYlo/dbEYRqZf4b2FYoDzGnnfj5FHz3xCS2Eghaau20EXGG7LtCM+ilMa3FOsR3+v1SHzK8xl/6fVaoQ4gFr8AuPOyxJqOWQ9xgize22pv9rC52XdLbtJCE7Jcs9JuMYObfDidDyxVlwxLTyGQQ9qatPoogpyNuIvOF8Vde5iTPO6M1jCSCxGM80FXswNJYYgpql+memjNeN1HnhKS6AEmGe6uJ4RJlZeqtwitjHXkt3oBRR5wbGejFTplYKClpE1ErVb/Yqggy5h2ZzNOMWKZehoTZMQy6F9cEaaPWsjgQblQywUriq3GKs3F1pWi7NvbxPllmPxWLbMNBDmDvCllTBtKkn8T5zbUvyIsODfvAEKnx3en3o+ViigNwnkfuahClKrXHzCTJYhkcDE1k+iKRKBZSELzKs4JMVMnNWnhx+KSHUBuFvHSJAqjB4A9Iqbxzsc4rjKspbzmO3pab5Lib1D/Eg/7ioRw1D2t4g+pbHiUQUAyRLLM1q3IfUNMrEzFudowPFc2KHFKJy6mx50sX0NU4yk4oC+xAs0OLxirKEwSvsbA/B5ABiI8MxH3r994ZvyFkU0iPeMzeWJarY/q9urwB5KrCfg0/xYakSn3TTh6mikA1j3sQBoLPCFER1EmHE+4dZdmsQZ11s9CJGAQf0UqglsUSc89crcgw82camltpSrRF145PtH6cGXYRfaQBP1QLWpRL7RYxKvp4JtxeI4Jc41sx4wDKgxsquk50Iug8vsBbTPdR0L4IsKqUi8Aw0KkSsljDNw8O23mu6gFv0B2SINA+cOo2z4BghqVvd4h/gsjx0Iw/v3a1n0EnzpsSACXdib5HXsdJLshvJb2D7mUzEnWNzAU0T8B/vBRmtcQ2mre6rqZ/aTRXbI4sY0hr4UOFY7QbfQkyQ03xf6Q9DZQpUbTf49qbI6fSxjllNgnuDLIGf9qVLdiYzidwzoFEHsDe8ELQKBfBXwwVUsB6P+uebysM9vx4Zcajg+ZlIlYi+wZPcLMYVnttrN2bV19RZtI9wWgGT5D+qAO5WHogbgKAgd1QPF9GomNJFj7YwxvR0liSD3VbdHi3a/KSD5i/JIKJF8YOuwq0xRzY58g55s7fPN3TFLpuJVYb5Dyrgnfe3OUwsD3KWVPdxWQBFTRB/j6XgiNID4NCLEtsH6s+wyXY2KdwuEyZE6zGQor/KbU6TtV1+jP6MAgo773Cf7cGoG6OOx+AGlV8tOUtF/xBKkn8VDvNYyTA1kw0Zq2wAB8NcNhw7DiIEW8O835GN4Is8JXOwXwMA7S/Z7faZIKK2vAyZdIv8aQ8g0v7Tzfd0ufRd21H/HthJPT+Lkdi8Ewgi2pvUTJ86t4E2gDZAADl8myaZ4BkASdckJhlP/isLDlFV1NlPzaqkWW0rhckHUfKN8bF7yCaPUa0jfqGiyD6BaSzA55kZ+GYqdN6yxWBbQM2EGB2vL88UYwOHDG0qkSR1KwX3eH5NpsysQFnbHcnQ/S+mGjlfE/cWy1fPpDVYAnCZpM9wau4j3AUSNJEFXkWWMx/Y4qJS83kPo0sR1Lh7oGH6WYph1+6N04I3sT+WeqSGI7pe+pZzFn2KAc+n35qGM2qDOf8IEgv1Ee9tWBLQd18leQKZ9q81P+mmv+g5YjkEgABbr+Uf/h5QFZu6FYhucATfx6ElUciriFWqZ77vJQI7WasG2d1+FW1+biQbCHihNa4JO1Eh2Cq7TQv2CBHofLmhH/zwMhqUvixaJArzcauCXEIZ9VafeqPjPKm/joK99s5+HXmLE4b/p1sbeQN0SFYj+AakbMUJnoUM/PgUad0GvrifaDwrfVKMEDeP17XJJ3Oa2dFVgX1gX19dn2MR1IpxWCcV23JlGcGN4M6yA2DJojYZzTH46SMuk2WFN3SVLImr6jMGHbnoIpCzO7a6HQeFsUcCU5BFNe6eBPX9+hqH8H92q5Y6nNN9DY0AEAu2FW1Pgo/649NgUTY4j89f9Hl7SpcT/eH3F/D9jpg4a3Xk72FgGX5rF2udhpd/A4THVOPyI834rMwcUPTAeWIB2TDnW0pl1xi6dbTrY/abD4LluODYqdACJLB4z36XgONlHtkfGPU3QtDCfWyLlBrn8DKZa2bxSUfenivbF0AHz5/OI1hXMld0FQiJE736ttb+OkwuI3T3bOWPkU5dC+bf/uQ+wH/lIpSdkKc8NODxGm22+iWj0W0QF351n2t3gV4VVK4fy5ogbMd98b0Q8RMWWD/hEjZzSDnBn47fZHX8H+vLTc5t4fBgtXhX1oLepjUK/kPE7wv5HhVp4kZvTQWA4eX3oolGzIQSbMJx9E/6+daudI92VLJtHPmOkfyCKPFZ6cM1wojfB+TiitUQyKD3tkCmQ2DeO/SoKrggEuhV7BqRRl0h5VA4R568QqWIpHLp9MQTgwaYfR129OTPA+uH3AHkY0gSiYu9Krd9H42RZvTBnw9UVQ8olmLJXDhXB/w8J80Zgv9MsfuOTgBHvjuMHkSsqzmGTk8G3T1zOMarZ9f0LNDHyE/ICiZ5vH8SZzWGxU/A0OAIgY6Nw8ybo59J4VEJN4SNaRcSVUhGlCwQgP7kO452YamPeediB9Ftq7DtnU5TKAPQzfwzGIbykc1XM/ZQdgpV0zyoZx3cNRHzbrlEtx/n/5Z9SDCoexioGueSqLuKx2jiTMKrCKgJ85+3NIgaM/TF+JV/kCvsrEQwqXYo4Auhr55Xf3Cq4IM26X7GHlLEkB4Mi0dcluD5iqIK2w3Kr6uVjnS0r6l/9x/QlrOHDE/qqX3IESaRb/mK9n4LSG+blvSlevGwd7fWpS33qajjK4BdXh6uHC2pD3k1x5vE6bOE4j084gZks76AbsOhMPMa9Fx/eMFAL4laBupEqpAv4CDJZcflV5KPTqGAPQ8cT/PbstVuOcaiC9DrsnuHOjmjbMxOiEJO12b43Xmg86Dn0nYez187GEq3KL0a2F5+Z9PuF32WvOzbbiXpFmgDWZ755rKhIGR2BSzQoaH3bQDVxgYnYVMxjf32Ove4tZBLe1yBECSgf5+rwTnUkN6+IzL9eDGE1j+7p6pMf6RrfOS0TgPdSc/E0Bydvmp8EVQKsrQKeP0VKHA2GOrvsu/6jxVdhka4GbMuJIKcMgeQjjC/puV1AC3X+QoulChaefiUy940Nd8t9dJ0+Kb3TJSqq8+30qnfOcIeEv/PlvVaN9j4PTxwOUOS3mLovntrOsE7TYBun3fhWHUoHr9JvEhbRCx0XdzAYGTpVfLy7LpJLbXpy1eb2VCy2mAgY5gtYYvRZ40NW+fRTBkrB6MD80mKJhjnR8LN1wHO41D0qfnpROZcOaq71Z8xZh/NRmwBsSzdInv8qR+q4sV8Sn1qKHyfu54WRs0S1aJ0H0ISkiVqaAeZy25QFCNyYP4mb9tbivGKsNLIukJYzb9BYJEjrUl/9Q2o9EgIon08Ge6MVquUukCXUjg648s7Rdfl8OwfyxNOwwZNXrMrwv+OFu0rZgtpCJ4mJb71kZuF+NEKaT7XmGKYossEy9wD4gyZp/ayxhrgmal9BNf9MFOz0n8PSafv2etKL1V4mKCm6tQ0fT9Z7QWVqh9sm5FwN8eoFyCHVt6sP4Eyg3bRbyLor2aFM/ZoEPoL1Kgg3zapXxzWw4Q2PLwmRJUo4mLegnoMrfrx+khmaFbxrrt8xE3WrD9rJVYvM9EjUF985wEHjvTMsBz0Xr9E38st5+66nESTNIjEGqvXDevETFQPm5Ebk13ETG0UweeGB9Hlx1a5uFTZKNuw8phFy6qPfOfJDg6PVOB8pq3azAvNG2bofLedzPXOWCHk6b4LXIp8Y4GzIH+eCZ2GSwl+6lgydjSrTnoeQT22U7l8LnSd94BFa5Pdhdum4B1IyjF0J7mklFgTH1lKLCp08zruGX64SosnCewzS8KEy+Joi7brr51cGtryrnmgNGl8VX3a+kgbU3qEIUPvpPbLvd2Ra031JhoVDxQu0Ybw2C5QPveZlddudF6Gk+o/0q5cgudrfl0GTYsmV33mCIiR15UAETiDxo85vvTMRT5/OQVFlv5G2GyN7L9BKjWNiMDf5/MffjYmXAHxZ56o0fkwk828N484eHIiAd6g+FQJrXKSUfcE9omgUZ34SvSWRo+bro4TJ29GLnlZQWUH54tI8N3Nn2J7y1Cgfpj6EKtrgsOMcghCdVoogW7+RYZCEnRKDcFvar282pmhzX7WHZ6PqM3HVqXT+9Hh9h8WKEhA7DQPkSWaf4t2+H+dUaaC/+irtrWcjUNP6KuoowKfPL+x6oD72M0N2US8YSeA6sk3prjJudoNFGWE2W3QQ6gwZNXN8gfLx+myvtjBoGwlqfDjZDYSalMs991iBD7m/NLY5++0+tmbZyqAT5GbGaupQNO5VhRooCh6yxakpLcwDFbk7rJ8CzDd5uSJ4EGNwUykWGW2t3/n7+cihnMlgZBtBvV1V/daq0TnvfGzrgxJN81GoaMjPa6eAztTcdsJaU820cArF6qMBKRT7b21HQncLZazBqUC57D3VEdM5aY5+tR2yifKAtoCsPtxs7QR5nyvAIw4YRo+eUfp8fyB5kwZnD1UBYNsEXn4/Wn82K31Ig7y98Tn7EwOos34BEVhVB1gEK2Zg9Gz4VZeJPk20uHR+36DLEiMrEfIJ9Tz5wqgoXe1uWDYPoUNLANq3ttra10kc/vYOmMroMKUWzYJiX31ocdZJGyH9yBjbStugfZdqFZihpCEJ60Xo+1mZ1SVNYoRlHY6P9JrhzwfipSswbGb5ZCy70jcbk7OTAcQ7lJg49qDsiPXIMoRCOzFyfV2bDJyFZDzsN0av/l3d0p0y09zer3cBYZmdobrkptPeXjbPF04cYYM1GSBi3ugP2tsVI3yuvhPTb8dPYCgv9eR6mfhS9FB2hlIrIu5IM26MkBs5BpB6mAV2M5VvGc2tirHZyWwSUJ3czmQA/hUl4iEsi8xa1A4DIf2Oo5f/lBRmpDpOcWEZr170hB6IaQCw74k2h7U2kR/UIrD9tmd7PJD5s2sxxroBsuEfgFi+bmnoDNvz06DEWFn1q/gcpwDNEikOvFVgJUtM1TZal35nA4d8b8ww90BiRAGAi/rcyorLpmpZhDh/v0UAgC2GkLMAOvLAyuLe6E0U7u3YpJOYdIH3q4s+1/drGn1KTZpVXdgXMn6rhkAiGhuFMlKTrXduR6oXuyCwpPvBNtXLaBO98jkFcf85J/Fh0V0Pmu5AJ3TUId+BetdtntuA4qpmlca4R2W92Eh9JhMIsGdkSyd0HY36fqVcZ/k1uL7icn6vy2/1NUP9RkXjliPKhze0OyX8YvPADdn3vqlEM8Y5f/Zd85hyEtuSNbmLYXMDpL6oCA01mfHUInhEJ3xhlNDnH75S7VbhX8CWaBQ8+2NnX/Der0E+M8e3kYqE6OOab3kRVMJNZxtTKjkIoklmT/6pA5suk5jl6vk6Ar2AMCflu8zvVaDXy7eKfnBwj0m7QryFxuOU/LCO65YPZNKxjoIqkWh82X0EjtJkQ4w14qJJ124HqlpXeptjiFCjBUrmDxzWwSddKIB5xkWrRyCmzPVS8+Qt7jA2eWU4f0IfGjPLmu48n84PYqXFx/VKxr82t6QCsMTwkMq5gR4j8vueR5g0/JdSdUA+Wyhd3urhGIPLiB/yEYDAa6TOZAlH1LREIbddWA82F80U3j5Ykbw+bDHlXdnyMiDPu8P/J0SMo3kCxpuOx8lIiYLMk1q7g8Fea2oV87SC453Pj+YRyy+paMRmijFMeRFY5JUsq2dGW+D/u/3tpYxJxXrClXke43vbJ+bN27xTzN1l3Pncnf1/JhGcRY15wo27moc9Qx2UycAKXe7KVUJBYDXQGUiE7HUu529PxdtNOllHRQ715lEPCFd7qfRv4pOng85qeMxPjlN3Mk9RHbz5uDpepWiWoWYZlYh3FMsO2Nas7NV229/tWKMx3n57ABbO6FzaYPL7gMKp5cMmQtEm9LddjKg8s8Bdfl6rLOvnuGDhnuQZiuiz8fjQCkegCx+K2CAle0d8fQv1VwpQlasIiCRuWKdeWtF8RF8H1y/R5+24bsFiD0Zkq3nXw4ZMNX+SBFpEWHZhnmb628i+i6PfC589YbJ+pi1/hViKbAIHjhs7v/WqoR6QuCTnlz03YMCYyXweY87eiZyQBfH0nNyla1PrPsGAAExFRhMLmqObYHNPmuOuYWsqqN95OrYQH0xdHSLfCU2NpzNejKFPljw/JNa4d8oQa1bV8Wr6AAvYIA9M695hEnZOKCENam9u6j5LMuaudYPOsWgKFPA7ORUikEkZ5Nw7tjTDi/qDtk53f/NL5uwuE7XOP1rz93pm05zQlxu0H1xdfUJUIhQMY4lJoD/GwmcAyE4Vdn7mBIs/Gh71BUKi6QQNbL4Qs68K2y6rAWHA/yRkfZBU7tcHdBtUiH/RcwDjGOcL27luRt8FfsCfYerBcORuVUxeqOYJWB/OaGeQM8yHgKKUgfnIPjRK1hXAqKVcLzCCa7ynCq7nQgqFk9pGYMCdox5aR/6mSWT9csb1pp2+5BJrf2DjXapPJvoRYsfJof2vw9lhfgs/AYLlheDIEBe2xxKEMyJqj/FnD0r/uvKeM87OmUzPhOxeWu46cP2RZXqLF7StmrO26LNqIBvKq2knGGyvnY52ObfiEoBC8fDu/A1goC7TLjGbm+93X9D3JstXJ7PJNKPS196j3IMg/IJWYuFa4/Q0PXQFQcwzHZmQKBI/t7RZM6QcHmmJqNqTZ6voQKjrVxWnvjZzhwUgHxIJTm1vFb8baqXXqhVc7wYPDfJLIxSZoXDkBjhRjvBeBfHc/VrMH2AQ/xWPVHHGgqcS4aJsaLxph/3/WLqrXwaAt7Y554R7kYwYIasisc7vCu0emIXKCCYw9ZnH8/SJkuKN4564Scy5UCd15/EDYdTtLmi/8fHeJ/EZIH4/PfFv8cLshNsRQRyK1qB5ECr3VRYBXN9xswtOw6V6gmEcrLmDtSZVsjn3N2mudgUrLdRp7rkoFwK1hOedDu1+pqA52Fe41+wwMEPJRQhOCaO/5GM7wCr2BU+oYXpecE3Bv58yJHFE+IAWAPVegc8rchCOw3wQUYCTipkOJKP9Si4KTRbw3awv8NU5A+IxSP+Fx6Ckps0qL3HOLU8l6gKI9/olgrweqPkbeov/Ef36w6SBTkhU0Bsfv/21e3L7mtuZuBjOZEZS+3cpsyAY8VX12FDS5/5lGL7iY0Fy77uoeUIZ+/5DDfj2qoBPil22fMHP3t4jvClvCxcp1HZm/4FU+ltK1fidtZ4+eMXYh3CAa+OYaniI+CYj1x1d+ph7GCLZ81v5MdSsHhI0YDQtU6UIIJI/WJeCb2n9CbM29O6yP53cqLsrYSl20Hy+O2qLwuES5Pioers2rIXP7ZReiydcnfx2I4xmsUQLKDAeumyk4aOYa1pEVkBCQEAnE7nOveuUgtluo8YtnCUpTOQKD4T9MPYRDxj6kZex2IT6a32OHRkRqoY7H5yj571Kj3OazwmcHm2kzNcuHsG0RhInTxBQp4Y9/QaYEZzdQ7mJboo/1QodmIrxawvsFiK4YirgsEfSEMMKAM1TIIDFRS82bX7umHlivaiJcaKF60AZyIhREkxPQH5xhQAcS4RL0dm1Oma2H7fQXxetLDN4yipIaA8FwjTMV+86MJUsyuZh7fULHMzRYtgt3BE4Oo4cMEgrSliOYJZOHsuYU/h3yzs1o0Wt5qpvuYIJ0RccI+Gx446t85Dv7cwQXqbSjDbLl0lHt4opGnAO1gZlf974YpQuSs1ZYS6kmMOPlgzaRwxdjaquZYYBgXIciBy/bU94cfasPSjHS4fRff12cjgTmCB9LkukE8b+WBRB78j4VTGfTcIH/fyIMI3SlhU5v7PxdrJKCFc1w10HwBRNVDG/6Ox8aovmGkg71B2hcwDIfop7w/K+JnD4Q4twFQENZFQ2pJCI9INDa3my9ud67Fl3GiEt244nA4PFyl8XdFrWj5xwLulv9mCw8aUOIw5MidseJbt1r5W5uId1ERSCVb2UPO6C8NmhY43kQ8c5LJVWUkeqbvt6ZtAurzXEAT6ChYCvul5udjXapYJH2Wus0fFcCw23ogpB+4GskDWsE6AHigJyJAtgtPO/fWXXSWWSeHBGtZKEgCoVvrkeVmO3U194oPUdM5tQI8QR5hrymc5txL8W5lZIguCexWxblfyE24PBmxehewxYOc7A+B2RqK/xGLUZn+FXN+dswcj2pKJdlNP805fHiL+rvUTw3Z+CWa7WX0VnsewgEETRD2KB2xJ3CC47NLgF//rH26cqMHTfPieVGbJ3rfaLN5oGoOCjKkgHOtmZRPLzgeEf/zmFKHtA1RLL8mdBcTl7/qw/bSfO4X363nb8gjmlEXRrf/snUN6YXipYLkFp1HwzUsLRG0Ybe7ioDFH9zUX6nKN0sD2CeUZFQiYT7LeFyXXR3ZhTuUwc6y/RiAEArG0BnBE6XV/10n7SmvbHFyfhcHalvlIBBMyviX6nNEr9GiYKD8f+DN1XTyzxpRomiSCc+iJ8zVpBiWSEveauy4PT/xbc4HtY/OgPeJQRC7616vOJtkOyEE6IXmoe2cAupPD1vEbzP6XA6AFGJqTsnRy2cyfjkpEAy9nbtFsLjD/ac2Ewe1J/d3+szyKFsNYyBO4hGTHsSygN/YyzGPIDreZvdXqSIpfEcAfcglOTVT2D0FJq/BG8XsiP3xAbnl7XlalVzg9SIJFaLqtBG4P4/212aNo7lRUSL+fxehhgRKA5YBR83By1wGdNvZOQUbBIGfVDgeJu3vTLucjeJ1R1ggdSf1QqijBng6cvsLS1JR67vXy1BYdeGf+g5Yfq94Ugr6P3HVUPBurTgVd86d1HYLt3ZFkygZWD0l6J03v4uE+v8Dt8c3OoFWm4dxWAUKrVKLex08JowoJxrANHePTb3Kesmx6gyKkSNNKccUu9zriu36OKsTBBNJgCW6n+lq0jvb5B1ytr5IP1NAdJgLKkwqd1D8akGmLkTg8whiZicb1OGNXJ1lYIiPAK3D3Fkr/r8KwFuqXgxNYulmVKxUQpxR/UdipghYthmrnisaZXTT2QjjWL3RWlF06/VBvMLzqHcL/57qxQ9Li9gVq/eipNeLPp3bkZFRE9RdZFIiDry2AmYqnNTGUtiNAxP9j67tyWw/pX6pxIfTHBUuxCMxpG3OGIjXJkXnJsSajPD++Tel0O8zSmXxJ9kb4A9meVEfJcQbzGHy1RCHxFmE57x4MG+PUjFs34EqaX0pKXfqsF/sK8hgjYAR9SyaqBKQs+nPqHE3fgeMw7qs9Nd0D/29H3Nr6ZsXP9QzuaRcvJ9JSN+TbxcvzUlBqlZPodIePlWTW4atWoDr1hyx1zsLfl+pXipQhWurXUVABXyse7c8bpthTuIjmRvAfSctFTnIgnlCVZTidijp6YZwPc9ufXIYV0vVPP3JPqxhg/q72ItEOYiV8WIANgYNYl6erPpRlK8NqBp+I8TRSqHbSP9XUokCa6ZKeivgyEMKTCuNM+1bBD21PzPvic6X6g9Qto3qdBbm99SWvyx9wPUrX1dHIU1bYgIAdB+BzlemyddmEtv9t80DfPJKfA//dbBy9gZ6/hk6i72pE88eglbx3SsUmUCjAaH8YOj/tX/jGx7ePWQcNQLoS/CUTObFhIUvrAIs0fMerFIjbv4SijsmTJiiEog+5RH5Q9kUDLTS11JfKVealMgOFzyuVO1SuanIvGSPluLomnHQwVLafS9yyQBwcy7MiRdFNlwbUap4679Jq0UlPtj9xPZeMHh3wySVIQce2aes3sMj9HoANQgLxR8ajOkrIYv8EeIJiXn+7sAMtkhWY1WUk79sWAn9mCEqg5EC95NVz9imZyKekZ92I0ebToDyxsWx9kum4A7N8v8UrnhWMm2Xb1i0+XsBHP5js5nTSNQrE7NGqc+6Hj1t0IDuXD2x9/AJkoE5DflFcAfvPWpllszwCzIvnGFlCBjJ7Tbrv5BZBpj4FjCkAKeF3OhRyw0OUbbWxkmyxIPwl32g9P88k4789Qntq37L/g3sw18HlBQB6W/hdGtHfyWtrdoMrZ/2dI2wAdVSVElgNj7wmF44Yw5yb4sZUnGH/exIMhVvgLXt+HPYi5Ve/RxI6KuOUPoLmbzmQ2bKFUw8zhZKjP3C42ly70dn6pVILglfqYqeFPyiZ2rRFJebbvCLBYbEWtlEka/JSibohUKJPDSZ9H548KVHpbCgnQDK6n7k++fLz7cSUamn52pVQQ0ntL5aW7mJeyhrU9nNSiDLKk8ZOuKhV5AVGvHj+pgi3KU2oUhOGo1dEcAguoG74Z+5VyaewvtEahhTkGpiiC/zNnZ7UJVq+6YFDgAa728O9UPlzOdkMwJvLQWSY3oCHbZlMTul9+K/U8OVRP1K7vl91U7ZMVEl02e6/J6Q/w/bE+sZ+mRcRJC3j/ylkC02CZtpBa6TGOySLWsBEmMsbphO5s9DoflenEn/lpmDQYfwO5DUmVtEp6Ie18lPJhyyaP6OF1I62iGidy/ccML+qLoRekabR/wgpOP4JnhP1z5qnDywmfTw3DZeiPapQf1Ky/nDiaqlT2pCtmuAeyK+fkRLUmpfoeqFyj2kjDEGdpHLFb1CSIXdj3c4QvOc16tF3EFjjnISCM0HNMvaYcYCqKMKM+++46R4XNk5iIT7WtdOwVsKh+4g8c5kEXkkl66zRHifrSbnL9G+0qNz77Z3I/KuSOnqggeMeI64x39y9QWQS1QKZadASp+m1Adc/IyYHIGkkaGqv1bI33IfbHfmIlL7j0UzfMlVPks9i9wYzOzDxr030NuJ4DNy5jLet6IlsBSFoTLGlINs5cepZrrMUtm7fd3bsUXjwItgn+R1kyFEj+k/RMTC+rsNBGRKNYzjS6o0nHRCXBmQER16odJr+PPXFhXQ2z3QGmEsmM/ZnTopjctV0XzUntzWBQX3RR1vaovrM3XA49HGoKt2+seJztYkhPjLUn7fXk3PEkU6QFu2QVdp2f7cNJvNk4sH/sBKisD74d+eZbN8Z1XB6kfcBWD5VySySGGc3zKvGZfy/IxvidEB9IUMUPwGDPl4o7HGrFWikzTD9wwqzait99RHbvsA/65uQykFU+u9TlZtTl34wAl/3XPB060wQHPZ9yE4af4Wntghdb1HzpcV4+zzkUEA7gN5sbhMENz8/4bfR+cB4PC6LgOcfYqOpjPmfBalKfWt8yPD8q+qbNrmixZw0cLBB7OES68KZgXn3tvOcjihhWiZmG3LO5zcbIVmeHojEqXje7vFxrAug6MeAD/jKi+Hz9jkWTji16k6mBHiGySeu99yYxf/V9rRNqmZvy0QT6HJfaDUGR6cnT+NvJUj9hx3s5bwyByqcO46pfdxrkjlMp60NTu3uplCkhoeGnjzebYtaBXzr0ItGHH05K5pzk2RKOjRu8b2jico4hGrAlUmf6+53gO6bWq6iPd2L3U95obVwaeNGSYaLDZSlx1QBGPy5zFPmKOXjl2Wx59AEGe4NaR55u1tP1txz1B4rJrI5sgHSIGqWQOQRDR35CsgdCdRQ5WTP/EuC0LEPcf1eQQAUbYMidR3Eokj+aLHD07X9ptYB2goVyKaZxnkTdaoEoyZNJTOxW8AK0UvoRLAJpMgt9UUjsLDQ/YiyW501ee0DsJXI3ns+3sQ1va8VIV6kikipvq+mM1cpmNjemEe/cXipXRKhJ7ASQiYsTlmvNpbvODIXUtnyFccdzGUkqM4yWB5oPiqyO/7iI0GRm+f+ut84ZxQbxaEIKbMlZ3dyZoypj6fnKn6Bax+4uw58juJ6GtvpBe99qjnrJuwnBPhvp2/m1el3hMTOYjqa+byO54yP3h4q0V+rxqAGhdMESDrNeTiZ0GCxaBw++9aQ+dof3LaH/9K2qpy3aoIot2WqvMMc2np+2tAZIiwlkslrDbJYqin45TQRI98undHRd5VwmpL83PnM0HLDH1tvlFxOeK17vJ0t/iQ9T1hAye2I+jj/pChaaF1iA8VRXQri7It2N0sQY8/dbJZuPgFkiA3xb5dOx+CEIdH31OyBARVyWo90YHUiK4WpaNb2Z8pLLpwIFOqgRu1eAKM/b83WOh7btTZGEcOEnhnSJoAlIJtTdhbTmimxyShgJaNq5Uv7/DWa7LlwUeCuLVQkgKD8IoIRavzObzKUQsDJZEwMjhL5Y+3DD5GtRY8qnD9HCUoQ5L3Ij3WmCidQXFDRWAtmtil9oU+fMWN4P92yIsElzv0mqcZ/0t4YRkRcVzNUJuSAM5pmv3dDGJXX0AtHbSI9rn2mY9FkLTru4o7fFW5CnWadm5yUMp4H7zAsBMIVmhhReIo8pfv2cvqx5BuVRncz30vMQL4HegQTf/QJQ+PXKC38qI21+jY/IVqsTUZqjvh6xdHhFGDjQfsqmnNSDCbwaZAWC3zofi80BM+M9L50oJgCZQGfom5uQwc6mrUOZ05qcWLBIdlrmmZbKWAH2BME/lLSALyRVjhdbXCw19qhkU0WalZCWHmA/r1/SvQ2A6o2st2OY7dVrVeKzPTYNTSlMnRsdCfTDO6UrxCd5CQGaHmzDocOtqCRVN0Ni+LN2KDs3UVxrvhAVrnBG16AyHjUWrxHd/J+hTQZbTuFidon43hn+A72ENdimR9D8OoOOREXnkGwdLHwvFMs6UkLUb3GrufkkDw56/ohmkIcO6AVbd/ybbi9R9S1dgXmK3lKA2ooO83eCWT/voFprFI3f+HtyYi3n72E0Qu8FLlfx4wk6QduX6F0NlOdqPpj7pIZtUXKrDEaSY4Fd+Op39ZirO7b68Uy88pvEb+XcntwMKlmbcxGtyOWxL4fOeENsY9BUKgcSeejQBtGdIcnBpP6KSr46tSl9s8yQynCL01+diouMlNAvgElqsy7CjMhP8OVMNfuOgV9V2pgIPYfmCPMUIoFTjpUeLWRQrzvNHVMzXp+Tb2Gii1ZqxiSdVmuxfumtuuFFfn7RKXHbG0cQrS0PJKMeWQNqGT3IgdlK71WY9KYo7bJ51StLU7NUdu9Xor4jKVjg1vZ5nDNCmlOMQcw5FoI5PJ6crUCKtZW9dK6/w3DuU4Jufhf+9cYJppxSf3SGA5Qx2zTEQU0CSuugj1noNYfRIBvJIGvXDjT0+V39hfPpenHIgplUCBX9pwlQKRLb1Jl17Em4owyur0T03Vvm2fjZ8RHA9FkKlYBFLZoVzRNsIrn6xxJHhn8wG5SVpdfyamjgOr8GV4rJbRaiE5RT6dFKRsxUgZrpLeHmPajzzq5MNy91n245rb09XY46bAFym7Cvi8rfsbaX6OSU23atxPDc8dHIX1g8PB8UmhFNCb+Uu5ElDSxDH/RblfQFjK3WJ7vKAwRYDki2cnPlYL5sC+Viy0uNDoIQJ6Ub1msSNtucTNOcYcO9Q9nwlGMgJ0kQYx/oAEjlcqScLN1DScpjSNJvfEGmL5A3JUDNGF38MEy8p85Y3tD2gc/kSQxdHCVOZzb8lLGVvSYPAeq5h+cPzm4yKlXbZh4/FnayshDSRLrB9a21vgw5WjHdBHeaDc3kwKLTD3lthDl94DNSJ4dlTlsSufkAKj+mNQ4qP9K9cyjAnh5J2+Eo8q8kcFkUVHlG4wf/KQ/Wa5JHho1RF+rMNUEysccl5/JST72c2QKYBYeXe2+LJcHWy3j0LFtaZS4avxv210v5jfjwPvygzTU+Af4zzLOlh8nNukyo7g129SzoowgH7kvlKJJcwpMQ9s4JlI5QD3jmKhfrCl9EBOu2SUvV93skBR+AU+RDqR0oHMKKijH/5sfmv8g4Sx6pMS4OfiVs2r92hx4XWSDwqVG4p25WC3h2bY0fBZPU36+UcIMvzcz1PcXJekSROKzoCNyd5EOXSNbaNV892rcIw1/WJEMktGF1iFQ8y0yyo2ArX+Lhk2qLxFFXazQTdeYVeiVGU9DV7X65KdOTRNuQFP5hS0lrMQocX9UEyR0IHF7vbN55ny5mKfQdVhaKVqk5JQuox8//rn06N522pDl94QT8IY9cQMtUGX6XPmMHJQJrIKrITobutOTlhz60l8vD+ikzsbgxuyxeemPu/SjE96IcjcXSfurA/vIvZCInkTgeJdCO0kahq5wCMY8Wv8SMMweQe3u/8vKf6pMm/0cwimThpP2lHEehhtdLiLYejbhYfQkoa2ZW5pLEWTQamrsLnmVgQY3V/n/JZaDqOVmZv6BosF5tLD5SO5KOqDo1EuNjVNrHBN4Wtfjgez9YBCRDQ9w+0E4DQZdS4ceCxaPwgrJmSeSODffLAD6/JqTF3+ex1nzp5QeBji8Ytfo3FJdSd6nLKLWe0GVOwW7orsOeAx0WvvoC/gaGxd04G3sXa4pH82tNC9NCVlVHJP4cz3Uict6GHVI8aA7a18lWHmBQe5UMAyJM+Khi6ZB0S+Z3VVxC7yfWSrphcuWhe070l292BdF+bxaWor1zym8cnUMPfevCGjUyGW7M5YfW/CItYKiNTZAyuTvOHKIUG0gtMv8ENeLRcxYVQFPzz+45NyvZxlisZbGAvkiuAx10A4U7mphb/cCldHeSEGj/erLTV/RggcL0plhd7V8wU3dKLlFMjZn28KlvOTIab04GJIyvkTsPby65T5df7zVymFTCflvR1a7KR6qpUm5PDM5iM3kecwpXooNwav8KWItS8HSQ1Cp/GSs5z9rFxHdCVQmRZdLO9yA76XUUKYT3Xc1Lf7ipOQnXhTpV5QC9XzlZBgrl17pvEKGILgj2pt21WC5qZlb/k8A4HYA2x+CKki6RZjn7CDEI+Tx7oxrpXJ/UQTqleeRpzdhghYbJB4th+VTldfGvl2rtWTx1N471XPjmgqKCz0/N98FvWjyHPgh4T9Hbza11u2o+ZyPyO2jeYZF+MHg5IG3gYnU6H4CA4RBGdb6hZaVabprZFBWKp/A+7ybGla7Se79ZYzMCLRzIqJFQ2DyBbhCRT1y0ETLl1seWFZMenmJLcxpvfqF38FoC2PRFUVDL2Ve4NxTm4uYofU2yFfiMvDuj+rRKfPKTJQKbEhojudZ2TlDIL4A4OF6uVZQXcNlmuDeANmLFjZEw3WcwZzLLvSrH6SZwdboGUJ/7xtIaBLX3RcC+Bzdd6Oxh8zHxHTG2oelE2NsB4w1fDJbE4EWu4k8bR7aJPXgdPKP3vePH4DPTPrdXQQsWgPrumvmHiY3oe3S1w8ThztsKV+JN50RNV0ZV8aEdt6WVqGyue9x/BowO/GbuVpziD6P1B7dRa4ogItF+TAUa1W+IW1VozD2maCbOxdbR4MmzIikEpqegLDpyC/lef+oBtdObF/pgza/SmG22EOYEsWjfJtP0Lmysjtd5+3BlM3xbOE4oKYXsexTUI1XGAhmWrWwfDWzAy0LwElc8MTnMd+zfkyIEOd4bK8ZocN/cZdtW8Bohh/6ux8nplzK6miqHNJQ0GFT7Te6eSxeG9HKoujuNky5ZVGUJaKhW5Ly0309f0zhzU2AMjAh1km0Ac68wXVcKAxLvh5ktEpnDf7PnpS5axouGmlh1QWTsZoOX43tynLROJPs7xbGFai/Z+BIcoCl3Iu/fzFuLu8sXsT+kL8zETmEC/pqsVvp9w2Pc5R+vJBXcfEQ4Z8DDd45vBuKCS57vTP/fKRI4zfNRv11NEnKL9NLlrSqJfxkHh0EUo2RMYwVTFxrqqpr6wDthlsRlCf1PMXpflCEb2rl2TvD4x9OsZ70etEgVVxqToK8BUoKw+Sw9kfyMFT3ClGD40N3H3+/O6s9IhjUtP4+7M6pseZZru4O4OdRsqBOjluEHnfbiJ07RRkwjsdxmrGW908It2xPSYA1HdP4YqIR/Y4XaBvyFdQbGJWyj0+RoKGqyQbRFRmDLsrb1OgF0+vzrRJ8hC8Tgfzf72mNssP+m+Pyed/dpPXFvlUNoVT5J31ZOk0926gVmEl+96xwmdEff4SNwWCJKANcPcHU3F7beN25l0OFp7xBi4iLj4cuXhJIDmDU8HlHlhnMmGyFvv0M2OYVuhEKG0P5ppduHgN++CQt845lHmkdsLKELz0n+fywTPXDZD1IRQFG1wTB7caJNjn4CeXfzDOqINNVO4+k4SAqzmcreOVcC7tljKEDXpZb87mB7A7+K5Vwe6uTpCS0v1UHEr1kA6ahV7fxjua5PZHOy2nP04a2oW/tH0rpFfgFlT8IwhyKotObIhi9P5ANRzq0FVuOvOewK8WPZLzD/1DYp5zr6ohOFHZzo3OaQgEbUg5eSj2/SZeiAqOyEAA3lw4jmv2LMEbwliO43GxaaGfJqmXq8hX8A53J7hKaytMmN2aH36tMEzJYhg1wr2FW5B0VAZi0CvY97FfifUGdBcpCaVFgSAGrFCncsq/6ByNPiVTclRnzRvWYAJ/mBjPyx6Hzw/dQxbTsiHLQnz65j3qAhis6XGyxqm8V9HyzkNqgaFZzXanNaY+6CfZDf6ALUx77k/f/RctxBMn5WsXso5AduYlyfgurX9GDk9/hyF3J2fB+EN/saZ6D1NqHPZ4fLIYb8zmkDdhRZUVQXEIqj+GmNBtBFJSvvZ1FmDP66rldZStPkjBLnQZKOhI4magkMErTLbdTTB+t/fcwO03GhBUGmbQLFE03z0ZyTUcPHFltNK6UTJAcDBbC5fVrKxXcRu67JPobfJjmQ4lq4MlSU09Awqh9G7v//yX+bv+6mUcKPUjw1s8kJtZh6LOagJ8qa73fy1yS/a08bk0cR80CTGbm8NvTS9qpOwwGP1To7o4R34VmYY5nvhzXzm/yAufiM4KCvEmZMxiW7zGunTTmGIkDeNH1s19gQpYcwsy5ipJ9wGHgjz/CNc3N/8FFlDn7YhKMFbSpi2Uf+rPShfwNLbwVm6peZ/l3bCaK1ND5t1YzZjk2yYnPTGZF+jo/BnDVDOXOhe7VqUvE401mLaqsShTSryz6pk7rI+cvOmfxS/+/687YuPZGB2SGoqw3qGeb/9G2ZVEVFbEPxikcxuKFjE7cBrCp15CzlLlkpsYaf/CWDD5rWHyqy8Qz4Crg6kNPbceMyIzFbVPMIm6BoBgxRazJUA6azpGjcT85Gs2BfFGRZfULIuxcjMg8bUs/4+4EJBDEHUJOHHwBmEZc21F4qc7SDlWLxKTIvTUAlytjfw3ar3HcIDWEvJPdqwLUzcHkC8Y2ZpludFZikMefXDrwRMu0KePvuzXtLmjv7JP8nzT7DoOTC73rg1WezxhHR+xGngiiKmNLjuWOD5Regvt3tYRhaYOE/iGIkTNHu2fY+2xgrF9xHWK8+xoi5jyRP6aDJTjw9xsrvdL6q8fAeiRRooowNAb/tGZMQrCHbEoEYa6pJttMq4wNVQvRCjJ0z8Y5ZXDEaZmrZbPISLOPOA393SfALNxzHHLE/LxxJh1qgWcSSLr0XUQZKLEJQm3W71MYSc/kvm5G743KeIq2wL9/ZwLpVCePe08x3J1uhu7LOcm0uXAgJ7GUY1QJtmGxr+7tQ9Jqvz+cLnmVuw0ocUfzm58dSr72PH1iMfgLxKVX+UrrlfpEjf5Y1B+WAGIDo4RzmFRYSeZ/5VeAw3sCkDkaUaf825XhnUSfrR6tZP9ks6T0W7dhIh8VahrJc10+vxrcHEDZYW+iueDq02r6R7cvlY1V9jS15IVE12vIPq+mxMy0zyxKfEeB9/t1LrkagCeQEw5JVBI+CUqWJlFo/E6p1zad1jY/CIVq9NwwJl8nZNN6JOy/EfH0NQPY69x0/v+7h7jKX0JjtvTUuysWRqIYPEId2QO0a4Oq9PVOr+eSGh8/XzfBCuVhKjSGMEKIyhF0DSF9/khLCbrwREqKi+qb5E/Dn+kLD0pf2h0JBEgUhmCn03U+PrKLXKyg9PEgA6/kF6pHT1WvShik/7N4FWvoDjzYmyKEpenjQpsgZ901SmIw4C65GRPIgl/PYZLeoPpliRnnZSDrM+Ua1zKyfLwiCbogL9z495WVnbuHygaQ8hvkjYxSVSh/4ETGrN43aiuW3XpCGUJd5uqYtypgIr0m3hnYfGw5xLqhvPVsHQjkwcjqtIdYI7+CajWi9kfnkueES/qmkyKLjkKg+0kFWxr1TWrn9WIl+LB8EG7JrRq5WvMgFytg4wx4FtepkmD+CcQv4')))))).decode()))
\ No newline at end of file
diff --git a/叮叮联盟_api_1.6.py b/叮叮联盟_api_1.6.py
new file mode 100644
index 0000000..194e6b9
--- /dev/null
+++ b/叮叮联盟_api_1.6.py
@@ -0,0 +1,492 @@
+# --------------------------------注释区--------------------------------
+# 入口:http://nmub7w.jlnrj.cn?mid=1786918&r=OKgDUXIa&e=1730731520
+#
+# 需抓取数据:
+# * 填写穿透出来的api接口
+#
+# 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!!
+#
+# 变量名:yuanshen_api
+#
+# --------------------------------祈求区--------------------------------
+# _ooOoo_
+# o8888888o
+# 88" . "88
+# (| -_- |)
+# O\ = /O
+# ____/`---'\____
+# . ' \\| |// `.
+# / \\||| : |||// \
+# / _||||| -:- |||||- \
+# | | \\\ - /// | |
+# | \_| ''\---/'' | |
+# \ .-\__ `-` ___/-. /
+# ___`. .' /--.--\ `. . __
+# ."" '< `.___\_<|>_/___.' >'"".
+# | | : `- \`.;`\ _ /`;.`/ - ` : | |
+# \ \ `-. \_ __\ /__ _/ .-` / /
+# ======`-.____`-.___\_____/___.-`____.-'======
+# `=---='
+#
+# .............................................
+# 佛祖保佑 永无BUG
+# 佛祖镇楼 BUG辟邪
+# --------------------------------代码区--------------------------------
+import requests
+import time
+import os
+import json
+import hashlib
+import random
+import logging
+from urllib.parse import urlparse, parse_qs,quote,unquote
+import sys
+import string
+from base64 import b64encode
+import uuid
+from datetime import datetime,timedelta
+import re
+logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s')
+code = "叮叮联盟_api版"
+ver = "1.6"
+envname = "yuanshen_api"
+
+debug = False #debug模式 开启即从脚本内部获取环境变量
+debugcookie = "" #debug模式cookie
+
+is_bulletin = False #公告开关
+is_toulu = False #偷撸公告开关
+is_with_sleep = False #是否开启随机延时
+def get_sm():
+ global bizlist
+ try:
+ url = "https://api.huaji.asia/read_api/biz_ddlm.txt"
+ r = requests.get(url)
+ if r.status_code == 200:
+ logging.info(f"联网获取检测文章列表成功")
+ bizlist = r.text.split(",")
+ else:
+ logging.error("联网获取检测文章列表失败!")
+ bizlist = []
+ except:
+ logging.error("联网获取检测文章列表失败!")
+ bizlist = []
+
+class env():
+ """
+ env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理
+ :param args: 传递给env的参数
+ :param kwargs: 传递给env的关键字参数
+ :return: Null
+
+ Powered by huaji
+ """
+ def __init__(self, *args, **kwargs):
+ self.cookie = None
+ self.env_ver = '1.5' #版本号
+ self.split_chars = ['@', '&', '\n'] #分隔符
+ self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen'] #标识符
+ def check_file(self):
+ file_path = __file__
+ try:
+
+ with open(file_path, 'r', encoding='utf-8') as file:
+ content = file.read()
+
+ results = {}
+
+ # 批量检查每个标识符
+ for identifier in self.identifiers:
+ if identifier in content:
+ results[identifier] = True
+ else:
+ results[identifier] = False
+ logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
+
+ all_identifiers_present = all(results.values())
+ if not all_identifiers_present:
+ logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
+ self.force_exit()
+
+ except Exception as e:
+ print(f"读取文件时发生错误: {e}")
+ self.force_exit()
+
+ def split_cookies(self):
+ """根据多个分隔符分割cookie"""
+ for sep in self.split_chars:
+ if sep in self.cookie:
+ return self.cookie.split(sep)
+ return [self.cookie]
+
+ def scmain(self):
+ get_sm()
+ apiurl = 'http://' + self.cookies[0]
+ r = requests.get(apiurl + '/getallwx').json()
+ for i, cookie in enumerate(r, 1):
+ print(f"--------开始第{i}个账号--------")
+ main = yuanshen(cookie,apiurl)
+ main.main()
+ print(f"--------第{i}个账号执行完毕--------")
+
+
+
+ def force_exit(self,code=0):
+ exit()
+ print("Warning: 篡改你妈")
+ os._exit(code) # 强制退出程序
+ sys.exit(code) # 正常退出
+ import ctypes
+ while True:
+ ctypes.string_at(114514)
+ ctypes.string_at(1919810)
+ ctypes.string_at(666666)
+ print("Warning: 篡改你妈")
+
+
+ def run(self):
+ if not os.getenv(envname) and not debug:
+ logging.warning(f"请先设置环境变量[{envname}]")
+ self.force_exit()
+
+ self.cookie = os.getenv(envname, "")
+
+ if debug:
+ self.cookie = debugcookie
+ if is_bulletin:
+ try:
+ print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n")
+ except:
+ logging.error("网络异常,链接公告服务器失败(gitee),请检查网络")
+ self.force_exit()
+ if is_toulu:
+ try:
+ txt = '''
+此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本
+请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置
+=======================================================
+ '''
+ print(txt*5)
+ except:
+ self.force_exit()
+ if is_with_sleep:
+ random_time = random.randint(10,60)
+ logging.info(f"随机延时[{random_time}]秒")
+ time.sleep(random_time)
+
+ self.cookies = self.split_cookies()
+ account_count = len(self.cookies)
+ logging.info(f"一共获取到{account_count}个账号")
+ print(f"=========🔔开始执行[{code}][{ver}]=========\n")
+
+
+ start_time = time.time()
+ if debug:
+ self.scmain()
+ else:
+ try:
+ self.scmain()
+ except Exception as e:
+ logging.error(f"脚本执行出错: {e}")
+ end_time = time.time()
+
+ execution_time = end_time - start_time
+
+ print(f"\n============🔔脚本[{code}]执行结束============")
+ print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒")
+ self.force_exit()
+
+ def main(self):
+ self.check_file()
+ self.run()
+
+ def random_str(self,charset="all", length=8, to_upper=False,to_lower=False):
+ if charset == "all": #包含大小写字母和数字
+ chars = string.ascii_letters + string.digits
+ elif charset == "letters": #大小写字母
+ chars = string.ascii_letters
+ elif charset == "digits":
+ chars = string.digits
+ elif charset == "lowercase": #小写字母
+ chars = string.ascii_lowercase
+ elif charset == "uuid":
+ return str(uuid.uuid4())
+ elif charset == "uuid_str":
+ return str(uuid.uuid4()).replace("-", "")
+ elif charset != '' and charset is not None:
+ chars = charset
+
+
+ random_string = ''.join(random.choice(chars) for _ in range(length))
+
+ if to_upper:
+ return random_string.upper()
+ elif to_lower:
+ return random_string.lower()
+ else:
+ return random_string
+
+ def aes_encrypt(self,data):
+ from Crypto.Cipher import AES
+ from Crypto.Util.Padding import pad, unpad
+ from binascii import hexlify, unhexlify
+ key = self.key.encode('utf-8')
+ iv = self.iv.encode('utf-8')
+ cipher = AES.new(key, AES.MODE_CBC, iv)
+ padded_plaintext = pad(data.encode('utf-8'), AES.block_size)
+ ciphertext = cipher.encrypt(padded_plaintext)
+ encrypted_base64 = b64encode(ciphertext).decode('utf-8')
+
+ return encrypted_base64
+
+
+
+class yuanshen:
+ def __init__(self,cookie,apiurl) -> None:
+ self.apiurl = apiurl
+ self.Wxid = cookie['Wxid']
+ self.bz = cookie['wxname']
+ logging.info(f'[{self.bz}]开始运行')
+
+ def login(self):
+ headers = {
+ 'User-Agent': ua,
+ # 'Accept-Encoding': 'gzip, deflate, br, zstd',
+ 'Content-Type': 'application/json',
+ 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
+ 'sec-ch-ua-mobile': '?1',
+ 'Authorization': 'Bearer',
+ 'F-RTYFGHVBN': '0cb5cc12b50dddc84c3066433e88194f',
+ 'sec-ch-ua-platform': '"Android"',
+ 'Origin': 'http://bsdspbkbbt.r8it3o.cn',
+ 'X-Requested-With': 'com.tencent.mm',
+ 'Sec-Fetch-Site': 'cross-site',
+ 'Sec-Fetch-Mode': 'cors',
+ 'Sec-Fetch-Dest': 'empty',
+ 'Referer': 'http://bsdspbkbbt.r8it3o.cn/',
+ 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
+}
+
+
+ url = 'https://api.jiudingliliang.com/login/get-auth-url'
+ data = {"route":"","mid":"1786918"}
+ r = requests.post(url,json=data,headers=headers).json()
+ if r['code'] == 10000:
+ url = r['result']['url']
+
+
+ data = {'Wxid':self.Wxid,'url':url}
+ url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url']
+ #print(url)
+
+
+ h = {
+ 'User-Agent': ua,
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
+ # 'Accept-Encoding': 'gzip, deflate, br, zstd',
+ 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
+ 'sec-ch-ua-mobile': '?1',
+ 'sec-ch-ua-platform': '"Android"',
+ 'upgrade-insecure-requests': '1',
+ 'x-requested-with': 'com.tencent.mm',
+ 'sec-fetch-site': 'none',
+ 'sec-fetch-mode': 'navigate',
+ 'sec-fetch-user': '?1',
+ 'sec-fetch-dest': 'document',
+ 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
+ 'priority': 'u=0, i',
+}
+ r = requests.get(url,headers=h,allow_redirects=False)
+ #print(r.headers)
+ token = r.headers['Location'].split('token=')[1]
+ self.h = {
+ 'User-Agent': ua,
+ # 'Accept-Encoding': 'gzip, deflate, br, zstd',
+ 'Content-Type': 'application/json',
+ 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
+ 'sec-ch-ua-mobile': '?1',
+ 'Authorization': f'Bearer {token}',
+ 'X-NIUBILITY-Y': '',
+ 'F-RTYFGHVBN': env().random_str(length=32,to_lower=True),
+ 'sec-ch-ua-platform': '"Android"',
+ 'Origin': 'http://rdecfgw.cecua.cn',
+ 'X-Requested-With': 'com.tencent.mm',
+ 'Sec-Fetch-Site': 'cross-site',
+ 'Sec-Fetch-Mode': 'cors',
+ 'Sec-Fetch-Dest': 'empty',
+ 'Referer': 'http://rdecfgw.cecua.cn/',
+ 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
+ }
+ r = requests.post('https://api.jiudingliliang.com/user/info',json={},headers=self.h).json()
+ if r['code'] == 10000:
+ logging.info(f'登录成功')
+ self.h['X-NIUBILITY-Y'] = r["result"]["uok"]
+ logging.info(f'登录成功')
+ else:
+ logging.info(f'获取阅读入口失败[{r}]')
+
+ def get_readtime(self,url):
+ h = {
+ 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
+ 'accept-language': 'zh-CN,zh;q=0.9',
+ 'cache-control': 'no-cache',
+ # 'cookie': 'RK=x93V1EQnnk; ptcz=70105284a73b47db6aa5f48a05337a8cd84e98de7bd26d75975059126646db21; pac_uid=0_ZkHRNfy6PMhrH; ua_id=SyF8Nc7qjhUZ6RH8AAAAAHO013VXlTF21GY7ajzLLgs=; _clck=19reoir|1|fpg|0; wxuin=27186344812218; eas_sid=x1Y7v2y759E6j1a811G6q158d0; qq_domain_video_guid_verify=08d525e64ffa56c3; _qimei_uuid42=18a1b130e12100363fb639c628b466967c0e1ac0aa; pgv_pvid=6915337851; _qimei_fingerprint=3c42962857167cc55475bb65b2331f0b; _qimei_h38=fded42463fb639c628b4669602000006018a1b; o_cookie=3487934983; _qimei_q32=ec50b72a0f5a646accacf4393f1271f2; _qimei_q36=9e46147a2ab8bee5904ab74e30001741890c; rewardsn=; wxtokenkey=777',
+ 'pragma': 'no-cache',
+ 'priority': 'u=0, i',
+ 'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
+ 'sec-ch-ua-mobile': '?0',
+ 'sec-ch-ua-platform': '"Windows"',
+ 'sec-fetch-dest': 'document',
+ 'sec-fetch-mode': 'navigate',
+ 'sec-fetch-site': 'none',
+ 'sec-fetch-user': '?1',
+ 'upgrade-insecure-requests': '1',
+ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
+}
+ r = requests.get(url,headers=h).text
+ match = re.search(r"var createTime = '(.+?)';", r)
+ if match:
+ date_string = (match.group(1))
+
+ date = datetime.strptime(date_string, "%Y-%m-%d %H:%M")
+ half_year_ago = datetime.now() - timedelta(days=30)
+ if date > half_year_ago:
+ return False,date_string
+ else:
+ return True,date_string
+ def getread(self):
+ url = 'https://api.jiudingliliang.com/task/read-batch'
+ data = {"u": 1}
+ r = requests.post(url,json=data,headers=self.h).json()
+ if r['code'] == 10000:
+ logging.info(f'获取阅读入口成功')
+ print(r)
+ #http://agifh.liliangda.cn?route=/pages/read/read&bn=2409211329003132289067&token=p5wP0pTb9eMHHJjf1fy133qF8tiaE0_k7jJzJRBtBXc&k=15G8EuNiZKx4b9W9SjgmmVJL60Tm0e_SNCQtW5IVdFdpYVsSHoL_UHd9btHBIunG
+ j = urlparse(r["result"]["qrcode"]);
+ self.domain, p = j.netloc, parse_qs(j.query);
+ self.k = p.get('k')[0] if p.get('k') else ''
+ self.readh = {
+ "Host": "api.jiudingliliang.com",
+ "Connection": "keep-alive",
+ "Content-Length": "28",
+ "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Android WebView\";v=\"126\"",
+ "sec-ch-ua-mobile": "?1",
+ "User-Agent":ua,
+ "Authorization": "Bearer",
+ "Content-Type": "application/json",
+ "X-NIUBILITY-Y": "",
+ "F-RTYFGHVBN":self.h['F-RTYFGHVBN'],
+ "sec-ch-ua-platform": "\"Android\"",
+ "Accept": "*/*",
+ "Origin": f"http://{self.domain}",
+ "X-Requested-With": "com.tencent.mm",
+ "Sec-Fetch-Site": "cross-site",
+ "Sec-Fetch-Mode": "cors",
+ "Sec-Fetch-Dest": "empty",
+ "Referer": f"http://{self.domain}/",
+ "Accept-Encoding": "gzip, deflate, br, zstd",
+ "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
+}
+ return True
+
+
+ else:
+ logging.error(f'获取阅读入口失败[{r}]')
+ return False
+
+ def tuisong(self):
+ # 发送消息到wxpusher
+ url = f"{self.apiurl}/zdgjc"
+ data = {"url":self.read_url}
+ r = requests.post(url,json=data).json()
+ logging.info(f"遇到检测文章:推送结果[{r}]")
+
+ def read(self):
+ #print(self.k)
+
+ data = {"k":self.k}
+ url = 'https://api.jiudingliliang.com/task/read-article'
+ r = requests.post(url,json=data,headers=self.readh).json()
+ if r['code'] == 10000:
+ self.read_url = r["result"]["articleUrl"]
+ va, date_string = self.get_readtime(self.read_url)
+ logging.info(f'获取文章成功[{self.read_url}],发布时间[{date_string}]')
+ j = urlparse(self.read_url.replace('\\',''))
+ biz = parse_qs(j.query).get('__biz', [''])[0] if '__biz' in parse_qs(j.query) else ''
+
+ if 'biz' not in self.read_url or biz in bizlist or va:
+ self.tuisong()
+ time.sleep(random.randint(20,25))
+ else:
+ time.sleep(random.randint(8,10))
+
+ k = r["result"]["k"]
+
+ else:
+ logging.error(f'获取文章失败[{r}]')
+ return False
+
+
+ url = 'https://api.jiudingliliang.com/task/read-article-completed'
+ data = {'k':k}
+ r = requests.post(url,json=data,headers=self.readh).json()
+ if r['code'] == 10000:
+ now = r["result"]["readingNumber"]
+ all = r["result"]["totalReading"]
+ logging.info(f'第[{now}/{all}]篇文章阅读成功')
+ if now == all:
+ logging.info("本轮阅读完成")
+ return False
+ self.k = r["result"]["k"]
+ return True
+ else:
+ logging.error(f'阅读失败[{r}]')
+
+ def userinfo(self):
+ url = 'https://api.jiudingliliang.com/user/info'
+ r = requests.post(url,json={},headers=self.h).json()
+ if r['code'] == 10000:
+ name = r["result"]["nickname"]
+ m = int(float(r["result"]["balanceCash"]))
+ logging.info(f'当前账号[{name}]余额[{m}]')
+ url = 'https://api.jiudingliliang.com/user/withdraw'
+ r = requests.post(url,headers=self.h,json={}).json()
+
+ # if r['code'] == 10000:
+ # lessmoney = r["result"]["transfer"][0]["m"]
+ # if m >= lessmoney:
+ # url = 'https://api.jiudingliliang.com/user/transfer'
+ # data = {'amount':lessmoney}
+ # r = requests.post(url,json=data,headers=self.h).json()
+ # if r['code'] == 10000:
+ # logging.info(f'提现成功')
+ # else:
+ # logging.error(f'提现失败[{r}]')
+ # else:
+ # logging.info(f'余额不足,跳过提现')
+ else:
+ logging.error(f'获取用户信息失败[{r}]')
+
+
+ def main(self):
+ self.login()
+ if self.getread():
+ print('='*30)
+ while self.read():
+ time.sleep(random.randint(0,1))
+ else:
+ logging.error('获取阅读入口失败')
+
+ self.userinfo()
+
+
+
+
+if __name__ == '__main__':
+ ua = os.getenv("yuanshen_useragent")
+ #ua = 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260183 MMWEBSDK/20240301 MMWEBID/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64'
+ if not ua:
+ logging.info("不填ua玩你妹妹\n"*999)
+ exit()
+ env().main()
+
diff --git a/可乐_api_2.5.py b/可乐_api_2.5.py
new file mode 100644
index 0000000..6f5c20a
--- /dev/null
+++ b/可乐_api_2.5.py
@@ -0,0 +1,525 @@
+# --------------------------------注释区--------------------------------
+# 入口:微信打开 http://280766611011953.av9j2ff3w1.cn/r?bwr=dim&jcz=l2g&pla=pjr&t5n=xfz&upuid=2807666&zrb=av8
+# 走个头谢谢 不然没更新动力了呜呜呜
+#
+# 需抓取数据:
+# * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透
+# * 登录多少个账号就跑多少个账号
+#
+#
+# 变量名:yuanshen_api
+withdrawal_money = 3000 # 提现金币数量 1000金币=0.1r
+Quantity_limit = 180 # 阅读上限篇数 跑满(195篇左右)概率封号
+fuck_list = [1,2,126] # 强制识别为检测文章并推送篇数 不懂默认 需要新加的话在后面用 英文逗号加篇数 新增自定义参数就行
+max_threads = 1 #运行线程数 不懂默认
+# --------------------------------一般不动区--------------------------------
+# _ooOoo_
+# o8888888o
+# 88" . "88
+# (| -_- |)
+# O\ = /O
+# ____/`---'\____
+# . ' \\| |// `.
+# / \\||| : |||// \
+# / _||||| -:- |||||- \
+# | | \\\ - /// | |
+# | \_| ''\---/'' | |
+# \ .-\__ `-` ___/-. /
+# ___`. .' /--.--\ `. . __
+# ."" '< `.___\_<|>_/___.' >'"".
+# | | : `- \`.;`\ _ /`;.`/ - ` : | |
+# \ \ `-. \_ __\ /__ _/ .-` / /
+# ======`-.____`-.___\_____/___.-`____.-'======
+# `=---='
+#
+# .............................................
+# 佛祖保佑 永无BUG
+# 佛祖镇楼 BUG辟邪
+#佛曰:
+# 写字楼里写字间,写字间里程序员;
+# 程序人员写程序,又拿程序换酒钱。
+# 酒醒只在网上坐,酒醉还来网下眠;
+# 酒醉酒醒日复日,网上网下年复年。
+# 但愿老死电脑间,不愿鞠躬老板前;
+# 奔驰宝马贵者趣,公交自行程序员。
+# 别人笑我忒疯癫,我笑自己命太贱;
+# 不见满街漂亮妹,哪个归得程序员?
+#
+# --------------------------------代码区--------------------------------
+import requests
+import string
+import uuid
+from base64 import b64encode
+import time
+import os
+from urllib.parse import urlparse, parse_qs,quote
+import re
+import random
+import math
+import logging
+logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s')
+code = "可乐阅读_api版"
+ver = "3.2"
+envname = "yuanshen_api"
+debug = False #debug模式 开启即从脚本内部获取环境变量
+debugcookie = "127.0.0.1:5000"
+is_bulletin = False #公告开关
+is_toulu = False #偷撸公告开关
+is_with_sleep = False #是否开启随机延时
+
+class env():
+ """
+ env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理
+ :param args: 传递给env的参数
+ :param kwargs: 传递给env的关键字参数
+ :return: Null
+
+ Powered by huaji
+ """
+ def __init__(self, *args, **kwargs):
+ self.cookie = None
+ self.env_ver = '1.5' #版本号
+ self.split_chars = ['@', '&', '\n'] #分隔符
+ self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen'] #标识符
+ def check_file(self):
+ file_path = __file__
+ try:
+
+ with open(file_path, 'r', encoding='utf-8') as file:
+ content = file.read()
+
+ results = {}
+
+ # 批量检查每个标识符
+ for identifier in self.identifiers:
+ if identifier in content:
+ results[identifier] = True
+ else:
+ results[identifier] = False
+ logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
+
+ all_identifiers_present = all(results.values())
+ if not all_identifiers_present:
+ logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
+ self.force_exit()
+
+ except Exception as e:
+ print(f"读取文件时发生错误: {e}")
+ self.force_exit()
+
+ def split_cookies(self):
+ """根据多个分隔符分割cookie"""
+ for sep in self.split_chars:
+ if sep in self.cookie:
+ return self.cookie.split(sep)
+ return [self.cookie]
+
+ def scmain(self):
+ if 'https://' not in self.cookie and 'http://' not in self.cookie:
+ apiurl = 'http://' + self.cookies[0]
+ r = requests.get(apiurl + '/getallwx').json()
+ for i, cookie in enumerate(r, 1):
+ print(f"--------开始第{i}个账号--------")
+ main = yuanshen(cookie,apiurl)
+ main.main()
+ print(f"--------第{i}个账号执行完毕--------")
+
+
+
+ def force_exit(self,code=0):
+ exit()
+ print("Warning: 篡改你妈")
+ os._exit(code) # 强制退出程序
+ sys.exit(code) # 正常退出
+ import ctypes
+ while True:
+ ctypes.string_at(114514)
+ ctypes.string_at(1919810)
+ ctypes.string_at(666666)
+ print("Warning: 篡改你妈")
+
+
+ def run(self):
+ if not os.getenv(envname) and not debug:
+ logging.warning(f"请先设置环境变量[{envname}]")
+ self.force_exit()
+
+ self.cookie = os.getenv(envname, "")
+
+ if debug:
+ self.cookie = debugcookie
+ if is_bulletin:
+ try:
+ print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n")
+ except:
+ logging.error("网络异常,链接公告服务器失败(gitee),请检查网络")
+ self.force_exit()
+ if is_toulu:
+ try:
+ txt = '''
+此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本
+请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置
+=======================================================
+ '''
+ print(txt*5)
+ except:
+ self.force_exit()
+ if is_with_sleep:
+ random_time = random.randint(10,60)
+ logging.info(f"随机延时[{random_time}]秒")
+ time.sleep(random_time)
+
+ self.cookies = self.split_cookies()
+ account_count = len(self.cookies)
+ logging.info(f"一共获取到{account_count}个账号")
+ print(f"=========🔔开始执行[{code}][{ver}]=========\n")
+
+
+ start_time = time.time()
+ if debug:
+ self.scmain()
+ else:
+ try:
+ self.scmain()
+ except Exception as e:
+ logging.error(f"脚本执行出错: {e}")
+ end_time = time.time()
+
+ execution_time = end_time - start_time
+
+ print(f"\n============🔔脚本[{code}]执行结束============")
+ print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒")
+ self.force_exit()
+
+ def main(self):
+ self.check_file()
+ self.run()
+
+ def random_str(self,charset="all", length=8, to_upper=False,to_lower=False):
+ if charset == "all": #包含大小写字母和数字
+ chars = string.ascii_letters + string.digits
+ elif charset == "letters": #大小写字母
+ chars = string.ascii_letters
+ elif charset == "digits":
+ chars = string.digits
+ elif charset == "lowercase": #小写字母
+ chars = string.ascii_lowercase
+ elif charset == "uuid":
+ return str(uuid.uuid4())
+ elif charset == "uuid_str":
+ return str(uuid.uuid4()).replace("-", "")
+ elif charset != '' and charset is not None:
+ chars = charset
+
+
+ random_string = ''.join(random.choice(chars) for _ in range(length))
+
+ if to_upper:
+ return random_string.upper()
+ elif to_lower:
+ return random_string.lower()
+ else:
+ return random_string
+
+ def aes_encrypt(self,data):
+ from Crypto.Cipher import AES
+ from Crypto.Util.Padding import pad, unpad
+ from binascii import hexlify, unhexlify
+ key = self.key.encode('utf-8')
+ iv = self.iv.encode('utf-8')
+ cipher = AES.new(key, AES.MODE_CBC, iv)
+ padded_plaintext = pad(data.encode('utf-8'), AES.block_size)
+ ciphertext = cipher.encrypt(padded_plaintext)
+ encrypted_base64 = b64encode(ciphertext).decode('utf-8')
+
+ return encrypted_base64
+
+class yuanshen:
+ def __init__(self,cookie,apiurl) -> None:
+ self.apiurl = apiurl
+ self.Wxid = cookie['Wxid']
+ self.bz = cookie['wxname']
+ logging.info(f'[{self.bz}]开始运行')
+ self.is_wx = True
+ self.is_zfb = False
+ self.fuck_list = fuck_list
+ self.biz_list = ['MzkwNTY1MzYxOQ==','MzA3NzMzNjMwMQ==']
+
+
+ def tuisong(self):
+ # 发送消息到wxpusher
+ url = f"{self.apiurl}/zdgjc"
+ data = {"url":self.readurl}
+ r = requests.post(url,json=data).json()
+ logging.info(f"遇到检测文章:推送结果[{r}]")
+
+ def getmain(self):
+ headers = {
+ "Host": "230640607122241.asfuoqa.cn",
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": user_agent,
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
+ "X-Requested-With": "com.tencent.mm",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
+}
+
+ url = 'http://230640607122241.asfuoqa.cn/r?upuid=2306406'
+ r = requests.get(url,headers=headers,allow_redirects=False)
+ if r.status_code == 302:
+ j = urlparse(r.headers['Location'])
+ self.mainurl = j.netloc
+ logging.info(f"获取主域名成功:[{self.mainurl}]")
+ self.headers = {
+ 'User-Agent': user_agent,
+ 'Accept': 'application/json, text/plain, */*',
+ # 'Accept-Encoding': 'gzip, deflate, br, zstd',
+ 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'udtauth12': self.cookie,
+ 'sec-ch-ua-mobile': '?1',
+ 'sec-ch-ua-platform': '"Android"',
+ 'Origin': f'http://{self.mainurl}',
+ 'Sec-Fetch-Site': 'cross-site',
+ 'Sec-Fetch-Mode': 'cors',
+ 'Sec-Fetch-Dest': 'empty',
+ 'Referer': f'http://{self.mainurl}/',
+ 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
+}
+
+
+ self.mainurl = 'm.zzyi4cf7z8.cn'
+ else:
+ logging.error('获取主域名失败')
+ return False
+ return True
+
+ def getdomain(self):
+ url = f'http://{self.mainurl}/tuijian?url='
+ r = requests.get(url,headers=self.headers).json()
+ if r['code'] == 0:
+ self.today_num = int(r["data"]["infoView"]["num"])
+ try:
+ logging.info(r["data"]["infoView"]["msg"])
+ return False
+ except:
+ pass
+
+ time.sleep(3)
+ url = 'https://m.zzyi4cf7z8.cn/new/bbbbb'
+ try:
+ r = requests.get(url,headers=self.headers)
+ print(r.text)
+ self.domain = r.json()['jump']
+ except:
+ logging.error('获取域名失败 原因为ck失效或遭封了')
+ return False
+ j = urlparse(self.domain)
+ p = parse_qs(self.domain.split('?')[1])
+ self.iu = p.get('iu', [None])[0]
+ self.domain_url = j.netloc
+ logging.info(f"获取域名成功:[{self.domain_url}][{self.iu}]")
+ time.sleep(2)
+ h = {
+"Host": self.domain_url,
+"Connection": "keep-alive",
+"Upgrade-Insecure-Requests": "1",
+"User-Agent": user_agent,
+"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
+"X-Requested-With": "com.tencent.mm",
+"Accept-Encoding": "gzip, deflate",
+"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
+}
+
+ r = requests.get(self.domain,headers=h,allow_redirects=False)
+ # print(r.text)
+ # match = re.search(r"var url = '(.*)'", r.text)
+
+ self.is_read_a = False
+ self.is_read_b = False
+
+
+
+ match = re.search(r"var url = '(.*)'", r.text)
+ if match:
+ self.canshu = match.group(1)
+ self.is_read_a = True
+ logging.info(f"取阅读参数A成功[{self.canshu}]")
+ self.readh2 = {
+ 'User-Agent': user_agent,
+ # 'Accept-Encoding': 'gzip, deflate, br, zstd',
+ 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"',
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'sec-ch-ua-mobile': '?1',
+ 'sec-ch-ua-platform': '"Android"',
+ 'Origin': f'http://{self.domain_url}',
+ 'Sec-Fetch-Site': 'cross-site',
+ 'Sec-Fetch-Mode': 'cors',
+ 'Sec-Fetch-Dest': 'empty',
+ 'Referer': f'http://{self.domain_url}/',
+ 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
+}
+ return True
+ else:
+ logging.error("取阅读参数A失败")
+
+ if match:
+ match = re.search(r"var dr_url = '(.*)'", r.text)
+ self.canshu = match.group(1)
+ self.is_read_b = True
+ logging.info(f"取阅读参数B成功[{self.canshu}]")
+ self.readh2 = {
+ "Host": "m.zzyi4cf7z8.cn",
+ "Connection": "keep-alive",
+ "sec-ch-ua": "Chromium;v=122, Not(A:Brand;v=24, Android",
+ "X-Requested-With": "XMLHttpRequest",
+ "sec-ch-ua-mobile": "?1",
+ "User-Agent": user_agent,
+ "sec-ch-ua-platform": "Android",
+ "Accept": "*/*",
+ "Origin": f"http://{self.domain_url}",
+ "Sec-Fetch-Site": "cross-site",
+ "Sec-Fetch-Mode": "cors",
+ "Sec-Fetch-Dest": "empty",
+ "Referer": f"http://{self.domain_url}/",
+ "Accept-Encoding": "gzip, deflate, br",
+ "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
+}
+ return True
+ else:
+ logging.error("取阅读参数B失败")
+
+ return False
+
+
+
+
+ def read(self):
+
+
+ logging.info(f"今日已读:[{self.today_num}]篇文章")
+ jkey = None
+ time.sleep(random.randint(2,5))
+ while True:
+ if self.today_num >= Quantity_limit:
+ logging.info(f"今日已读数量已达设置上限")
+ return
+ self.today_num += 1
+ r = random.random()
+ if jkey is None:
+ if self.is_read_a:
+ url = f"{self.canshu}?iu={self.iu}&pageshow&r={r}"
+ elif self.is_read_b:
+ url = f"http://{self.domain_url}{self.canshu}?iu={self.iu}&t={r}"
+ else:
+ if self.is_read_a:
+ url = f"{self.canshu}?iu={self.iu}&pageshow&r={r}&jkey={jkey}"
+ elif self.is_read_b:
+ url = f"http://{self.domain_url}{self.canshu}?iu={self.iu}&t={r}&jkey={jkey}"
+
+ r = requests.get(url,headers=self.readh2).json()
+ try:
+ jkey = r["jkey"]
+ self.readurl = r['url']
+ if r['url'] is None or r['url'] == 'close':
+ logging.error(f"未返回有效文章url")
+ return
+ except:
+ logging.error(f"获取文章链接失败[{r}]")
+ break
+
+ logging.info(f"第[{self.today_num}]次获取文章成功:[{r['url']}]")
+ k = urlparse(self.readurl)
+ biz = parse_qs(k.query).get('__biz', [''])[0] if '__biz' in parse_qs(k.query) else ''
+ if biz in self.biz_list or self.today_num in self.fuck_list:
+ print('遇到检测文章,推送ing....')
+ self.tuisong()
+ time.sleep(random.randint(20,26))
+ else:
+ time.sleep(random.randint(8,18))
+
+ def userinfo(self):
+ url = f'http://{self.mainurl}/tuijian?url='
+ r = requests.get(url,headers=self.headers).json()
+ if r['code'] == 0:
+ gold = float(r['data']['user']['score']) * 100
+ logging.info(f'今日已赚金币:[{float(r["data"]["infoView"]["score"])*100}]')
+ logging.info(f'当前账号剩余金币:[{gold}] = [{gold/10000}]元')
+ if gold >= withdrawal_money:
+ self.withdrawal()
+ else:
+ logging.info(f"金币余额不足[{withdrawal_money}] 不提现")
+ else:
+ logging.error(f"查询个人余额失败:[{r}]")
+
+ def withdrawal(self):
+ url = f'http://{self.mainurl}/withdrawal'
+ r = requests.get(url,headers=self.headers).json()
+ if r['code'] == 0:
+ score = math.floor(float(r['data']['user']['score']))
+ if self.is_wx:
+ data = {'amount':score,'type':'wx'}
+ elif self.is_zfb:
+ data = {'amount':score,'type':'ali','u_ali_account':self.alipay,'u_ali_real_name':self.alipayname}
+
+ url = f'http://{self.mainurl}/withdrawal/doWithdraw'
+ r = requests.post(url,data=data,headers=self.headers)
+ logging.info(f"提现结果:[{r.text}]")
+
+ def login(self):
+ h = {
+ "Host": "m.zzyi4cf7z8.cn",
+ "Connection": "keep-alive",
+ "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Android WebView\";v=\"126\"",
+ "Accept": "application/json, text/plain, */*",
+ "X-Requested-With": "XMLHttpRequest",
+ #"udtauth12": "63e2zZogVUJV9DUya0ouQk9gXzSkwqy3tTNF2ycNMdf%2FyF5NfTVX5W7HfbxNSakX%2B7YCKBhq8lIxMS9G33sE%2B93v4bxUECwyk9J%2F4bAe0dJ1HYUtWvJoqAwRvpJmklIxajBH1HFpagDaIu0OtSAllTtyDhYlCAwpF5FGxeVTwcw",
+ "sec-ch-ua-mobile": "?1",
+ "User-Agent": user_agent,
+ "sec-ch-ua-platform": "\"Android\"",
+ "Origin": "http://klluodi-06.eos-ningbo-1.cmecloud.cn",
+ "Sec-Fetch-Site": "cross-site",
+ "Sec-Fetch-Mode": "cors",
+ "Sec-Fetch-Dest": "empty",
+ "Referer": "http://klluodi-06.eos-ningbo-1.cmecloud.cn/",
+ "Accept-Encoding": "gzip, deflate, br, zstd",
+ "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
+}
+ url = f'https://m.zzyi4cf7z8.cn/tuijian?url=fne%3D232%26g7g%3Ds0w%26lgn%3Dll7%26upuid%3D2807666%26wxl%3Dzy8%26x7f%3D76e%26t%3D1730983021&upuid=2807666'
+ r = requests.get(url,headers=h).json()
+ loginurl = r['url']
+ data = {'Wxid':self.Wxid,'url':loginurl}
+ url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url']
+ code = url.split('&code=')[1].split('&')[0]
+ print(code)
+ url = f'https://m.zzyi4cf7z8.cn/user/login3?code={code}'
+ r = requests.get(url,headers=h,allow_redirects=False)
+ self.cookie = r.headers['Set-Cookie'].split('udtauth12=')[1].split(';')[0]
+ print(self.cookie)
+
+ def main(self):
+ try:
+ self.login()
+ if not self.getmain():
+ return
+ time.sleep(random.randint(2,5))
+ if self.getdomain():
+ print("="*30)
+ self.read()
+
+ print("="*30)
+ self.userinfo()
+ except Exception as e:
+ logging.error(f"发生错误:{e}")
+
+
+
+
+if __name__ == '__main__':
+ user_agent = os.getenv('yuanshen_useragent')
+ #user_agent = '63e2zZogVUJV9DUya0ouQk9gXzSkwqy3tTNF2ycNMdf%2FyF5NfTVX5W7HfbxNSakX%2B7YCKBhq8lIxMS9G33sE%2B93v4bxUECwyk9J%2F4bAe0dJ1HYUtWvJoqAwRvpJmklIxajBH1HFpagDaIu0OtSAllTtyDhYlCAwpF5FGxeVTwcw'
+ if not user_agent:
+ logging.error("❌你还没有设置user_agent,请设置环境变量:yuanshen_useragent")
+ exit()
+ env().main()
diff --git a/搜搜小亏_api_1.4.py b/搜搜小亏_api_1.4.py
new file mode 100644
index 0000000..2aaa6e9
--- /dev/null
+++ b/搜搜小亏_api_1.4.py
@@ -0,0 +1,436 @@
+# --------------------------------注释区--------------------------------
+# 入口:微信加
+# http://share.shangjiabao.vip/#/pages/redirect/index?params=%7B%22type%22%3A4%2C%22id%22%3A34026%2C%22date%22%3A%2220241103%22%2C%22channel%22%3A%22A0000004%22%7D
+#
+# 需抓取数据:
+# * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透
+# * 登录多少个账号就跑多少个账号
+#
+#
+# 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!!
+#
+# 变量名:yuanshen_api
+#
+# --------------------------------祈求区--------------------------------
+# _ooOoo_
+# o8888888o
+# 88" . "88
+# (| -_- |)
+# O\ = /O
+# ____/`---'\____
+# . ' \\| |// `.
+# / \\||| : |||// \
+# / _||||| -:- |||||- \
+# | | \\\ - /// | |
+# | \_| ''\---/'' | |
+# \ .-\__ `-` ___/-. /
+# ___`. .' /--.--\ `. . __
+# ."" '< `.___\_<|>_/___.' >'"".
+# | | : `- \`.;`\ _ /`;.`/ - ` : | |
+# \ \ `-. \_ __\ /__ _/ .-` / /
+# ======`-.____`-.___\_____/___.-`____.-'======
+# `=---='
+#
+# .............................................
+# 佛祖保佑 永无BUG
+# 佛祖镇楼 BUG辟邪
+# --------------------------------代码区--------------------------------
+import requests
+import time
+import os
+import json
+import hashlib
+import math
+import random
+import logging
+import sys
+import string
+from base64 import b64encode
+import base64
+import uuid
+import re
+from datetime import datetime, timedelta
+from urllib.parse import urlparse, parse_qs,quote,unquote
+logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s')
+code = "搜搜小亏_api版"
+ver = "1.4"
+envname = "yuanshen_api"
+
+debug = False #debug模式 开启即从脚本内部获取环境变量
+debugcookie = "" #debug模式cookie
+
+is_bulletin = False #公告开关
+is_toulu = False #偷撸公告开关
+is_with_sleep = False #是否开启随机延时
+
+
+class env():
+ """
+ env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理
+ :param args: 传递给env的参数
+ :param kwargs: 传递给env的关键字参数
+ :return: Null
+
+ Powered by huaji
+ """
+ def __init__(self, *args, **kwargs):
+ self.cookie = None
+ self.env_ver = '1.5'
+ self.split_chars = ['@', '&', '\n']
+ self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen']
+ def check_file(self):
+ file_path = __file__
+ try:
+
+ with open(file_path, 'r', encoding='utf-8') as file:
+ content = file.read()
+
+ results = {}
+
+ # 批量检查每个标识符
+ for identifier in self.identifiers:
+ if identifier in content:
+ results[identifier] = True
+ else:
+ results[identifier] = False
+ logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
+
+ all_identifiers_present = all(results.values())
+ if not all_identifiers_present:
+ logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
+ self.force_exit()
+
+ except Exception as e:
+ print(f"读取文件时发生错误: {e}")
+ self.force_exit()
+
+ def split_cookies(self):
+ """根据多个分隔符分割cookie"""
+ for sep in self.split_chars:
+ if sep in self.cookie:
+ return self.cookie.split(sep)
+ return [self.cookie]
+
+ def scmain(self):
+ apiurl = 'http://' + self.cookies[0]
+ r = requests.get(apiurl + '/getallwx').json()
+ for i, cookie in enumerate(r, 1):
+ print(f"--------开始第{i}个账号--------")
+ main = yuanshen(cookie,apiurl)
+ main.main()
+ print(f"--------第{i}个账号执行完毕--------")
+
+
+
+ def force_exit(self,code=0):
+ exit()
+ print("Warning: 篡改你妈")
+ os._exit(code) # 强制退出程序
+ sys.exit(code) # 正常退出
+ import ctypes
+ while True:
+ ctypes.string_at(114514)
+ ctypes.string_at(1919810)
+ ctypes.string_at(666666)
+ print("Warning: 篡改你妈")
+
+
+ def run(self):
+ if not os.getenv(envname) and not debug:
+ logging.warning(f"请先设置环境变量[{envname}]")
+ self.force_exit()
+
+ self.cookie = os.getenv(envname, "")
+
+ if debug:
+ self.cookie = debugcookie
+ if is_bulletin:
+ try:
+ print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n")
+ except:
+ logging.error("网络异常,链接公告服务器失败(gitee),请检查网络")
+ self.force_exit()
+ if is_toulu:
+ try:
+ txt = '''
+此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本
+请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置
+=======================================================
+ '''
+ print(txt*5)
+ except:
+ self.force_exit()
+ if is_with_sleep:
+ random_time = random.randint(10,60)
+ logging.info(f"随机延时[{random_time}]秒")
+ time.sleep(random_time)
+
+ self.cookies = self.split_cookies()
+ account_count = len(self.cookies)
+ logging.info(f"一共获取到{account_count}个账号")
+ print(f"=========🔔开始执行[{code}][{ver}]=========\n")
+
+
+ start_time = time.time()
+ if debug:
+ self.scmain()
+ else:
+ try:
+ self.scmain()
+ except Exception as e:
+ logging.error(f"脚本执行出错: {e}")
+ end_time = time.time()
+
+ execution_time = end_time - start_time
+
+ print(f"\n============🔔脚本[{code}]执行结束============")
+ print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒")
+ self.force_exit()
+
+ def main(self):
+ self.check_file()
+ self.run()
+
+ def random_str(self,charset="all", length=8, to_upper=False,to_lower=False):
+ if charset == "all": #包含大小写字母和数字
+ chars = string.ascii_letters + string.digits
+ elif charset == "letters": #大小写字母
+ chars = string.ascii_letters
+ elif charset == "digits":
+ chars = string.digits
+ elif charset == "lowercase": #小写字母
+ chars = string.ascii_lowercase
+ elif charset == "uuid":
+ return str(uuid.uuid4())
+ elif charset == "uuid_str":
+ return str(uuid.uuid4()).replace("-", "")
+ elif charset != '' and charset is not None:
+ chars = charset
+
+
+ random_string = ''.join(random.choice(chars) for _ in range(length))
+
+ if to_upper:
+ return random_string.upper()
+ elif to_lower:
+ return random_string.lower()
+ else:
+ return random_string
+
+ def aes_encrypt(self,data):
+ from Crypto.Cipher import AES
+ from Crypto.Util.Padding import pad, unpad
+ from binascii import hexlify, unhexlify
+ key = self.key.encode('utf-8')
+ iv = self.iv.encode('utf-8')
+ cipher = AES.new(key, AES.MODE_CBC, iv)
+ padded_plaintext = pad(data.encode('utf-8'), AES.block_size)
+ ciphertext = cipher.encrypt(padded_plaintext)
+ encrypted_base64 = b64encode(ciphertext).decode('utf-8')
+
+ return encrypted_base64
+
+class yuanshen:
+ def __init__(self,cookie,apiurl) -> None:
+ self.apiurl = apiurl
+ self.Wxid = cookie['Wxid']
+ self.bz = cookie['wxname']
+ logging.info(f'[{self.bz}]开始运行')
+
+
+ def login(self):
+ headers = {
+ 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260183 MMWEBSDK/20240301 MMWEBID/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64',
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
+ # 'Accept-Encoding': 'gzip, deflate',
+ 'Upgrade-Insecure-Requests': '1',
+ 'X-Requested-With': 'com.tencent.mm',
+ 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
+}
+ r = requests.get('http://auth.51zhejia.com/v1/user/auth', headers=headers,allow_redirects=False)
+ login_url = (r.headers['Location'])
+ print(login_url)
+ data = {'Wxid':self.Wxid,'url':login_url}
+ url = requests.post(self.apiurl+'/loginbyweb2',json=data).json()['url']
+ code = url.split('code=')[1].split('&state')[0]
+ url = f'http://auth.51zhejia.com/v1/user/back?jumpType=platform&ticket=&code={code}&state=search'
+ r = requests.get(url, headers=headers,allow_redirects=False)
+ url = r.headers['Location']
+ print(code,url)
+ j = parse_qs(urlparse(url).query)
+ openid = json.loads(j.get('params')[0])['openId']
+ print(openid)
+ cookies = {
+ 'openId': openid,
+}
+ headers = {
+ 'Host': 'search-api.lingxiaojiang.com',
+ 'Connection': 'keep-alive',
+ 'version': '4.0.0',
+ 'cache-control': 'no-cache',
+ 'ticket': '',
+ 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260213 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64',
+ 'token': 'null',
+ 'Content-Type': 'application/json',
+ 'Accept': '*/*',
+ 'Origin': 'http://1731024966.b27.yoga',
+ 'X-Requested-With': 'com.tencent.mm',
+ 'Referer': 'http://1731024966.b27.yoga/',
+ 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
+ }
+
+ data = {
+ 'ticket': ''
+ }
+ r = requests.post('http://search-api.lingxiaojiang.com/v1/search/get-user-token', cookies=cookies, headers=headers, json=data).json()
+ self.token = r['data']['token']
+ logging.info(f'登录成功[{self.token}]')
+ domain = str(int(time.time()*1000)) + '.j56.yoga'
+ self.h = {
+ "Host": "search-api.lingxiaojiang.com",
+ "Connection": "keep-alive",
+ "cache-control": "no-cache",
+ "ticket": "",
+ "User-Agent": "Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260213 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64",
+ "token": self.token,
+ "version": "4.0.0",
+ "Accept": "*/*",
+ "Origin": f"http://{domain}",
+ "X-Requested-With": "com.tencent.mm",
+ "Referer": f"http://{domain}/",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
+ "Cookie": f"openId={openid}"
+}
+
+
+
+
+ def getread(self):
+ r = requests.get('http://search-api.lingxiaojiang.com/v1/search/index', headers=self.h).json()
+ if r["data"]["restLeftTime"] != 0:
+ logging.info(f'[{self.bz}]距离下次阅读还有[{r["data"]["restLeftTime"]}]S')
+ return False
+ r = requests.get('http://search-api.lingxiaojiang.com/v1/search/get-task-info', headers=self.h).json()
+ if r['code'] == 200:
+ pageurl = unquote(r["data"]["pageUrl"])
+ domain = urlparse(pageurl.split('&query=')[1]).netloc
+ self.tid = pageurl.split('tid=')[1]
+ logging.info(f'获取入口成功[{domain}][{self.tid}]')
+ self.read_h = {
+ 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260183 MMWEBSDK/20240301 MMWEBID/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64',
+ # 'Accept-Encoding': 'gzip, deflate',
+ 'cache-control': 'no-cache',
+ 'token': 'null',
+ 'version': '3.0.0',
+ 'Origin': f'http://{domain}',
+ 'X-Requested-With': 'com.tencent.mm',
+ 'Referer': f'http://{domain}/',
+ 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
+}
+ return True
+ else:
+ logging.info(f'获取入口失败[{r}]')
+ return False
+ def get_readtime(self,url):
+ h = {
+ 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
+ 'accept-language': 'zh-CN,zh;q=0.9',
+ 'cache-control': 'no-cache',
+ # 'cookie': 'RK=x93V1EQnnk; ptcz=70105284a73b47db6aa5f48a05337a8cd84e98de7bd26d75975059126646db21; pac_uid=0_ZkHRNfy6PMhrH; ua_id=SyF8Nc7qjhUZ6RH8AAAAAHO013VXlTF21GY7ajzLLgs=; _clck=19reoir|1|fpg|0; wxuin=27186344812218; eas_sid=x1Y7v2y759E6j1a811G6q158d0; qq_domain_video_guid_verify=08d525e64ffa56c3; _qimei_uuid42=18a1b130e12100363fb639c628b466967c0e1ac0aa; pgv_pvid=6915337851; _qimei_fingerprint=3c42962857167cc55475bb65b2331f0b; _qimei_h38=fded42463fb639c628b4669602000006018a1b; o_cookie=3487934983; _qimei_q32=ec50b72a0f5a646accacf4393f1271f2; _qimei_q36=9e46147a2ab8bee5904ab74e30001741890c; rewardsn=; wxtokenkey=777',
+ 'pragma': 'no-cache',
+ 'priority': 'u=0, i',
+ 'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
+ 'sec-ch-ua-mobile': '?0',
+ 'sec-ch-ua-platform': '"Windows"',
+ 'sec-fetch-dest': 'document',
+ 'sec-fetch-mode': 'navigate',
+ 'sec-fetch-site': 'none',
+ 'sec-fetch-user': '?1',
+ 'upgrade-insecure-requests': '1',
+ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
+}
+ r = requests.get(url,headers=h).text
+ match = re.search(r"var createTime = '(.+?)';", r)
+ if match:
+ date_string = (match.group(1))
+
+ date = datetime.strptime(date_string, "%Y-%m-%d %H:%M")
+ half_year_ago = datetime.now() - timedelta(days=180)
+ if date > half_year_ago:
+ return False,date_string
+ else:
+ return True,date_string
+
+ def tuisong(self):
+ url = f"{self.apiurl}/zdgjc"
+ data = {"url":self.url}
+ r = requests.post(url,json=data).json()
+ logging.info(f"遇到检测文章:推送结果[{r}]")
+
+ def read(self):
+ tid = 0
+ while True:
+ params = {
+ 'intranetIp': '10.1.10.1',
+ 'tid': self.tid,
+ 'taskDetailId':tid,
+ }
+
+ r = requests.get('http://search-api.lingxiaojiang.com/v1/search/get-task-link', params=params, headers=self.read_h).json()
+ if r["code"] != 200:
+ logging.error(r)
+ return
+
+ if r["data"]["taskFinish"]:
+ logging.info(f'阅读任务完成')
+ return
+ self.url = r["data"]["taskDetail"]["link"]
+ tid = r["data"]["taskDetail"]["taskDetailId"]
+ now_num = r["data"]["searchSuccessTimes"]
+ all_num = r["data"]["searchTimes"]
+ va, date_string = self.get_readtime(self.url)
+ logging.info(f'第[{now_num}/{all_num}]获取文章成功[{self.url}],文章时间[{date_string}]')
+ if now_num in [0] or va:
+ logging.info(f'遇到检测文章推送ing...')
+ self.tuisong()
+ time.sleep(random.uniform(18,25))
+ else:
+ time.sleep(random.uniform(8,15))
+
+
+
+ def userinfo(self):
+
+ r = requests.get('http://search-api.lingxiaojiang.com/v1/search/index', headers=self.h).json()
+
+ money = math.floor(r["data"]["userInfo"]["tokenBalance"] / 10000 * 10) / 10
+ logging.info(f'当前余额[{money}]元')
+ if money < 0.1:
+ return
+ data = {
+"amount": money
+}
+ r = requests.post('http://search-api.lingxiaojiang.com/v1/token/withdraw', headers=self.h, json=data).json()
+ if r["data"]["result"]:
+ logging.info(f'提现[{money}]成功')
+ else:
+ logging.info(f'提现[{money}]失败')
+
+
+
+ def main(self):
+ try:
+ self.login()
+ if self.getread():
+ print('='*30)
+ self.read()
+ self.userinfo()
+ except Exception as e:
+ logging.error(e)
+
+
+
+
+if __name__ == '__main__':
+ env().main()
diff --git a/鱼儿_auto_huaji.py b/鱼儿_auto_huaji.py
new file mode 100644
index 0000000..4d0811a
--- /dev/null
+++ b/鱼儿_auto_huaji.py
@@ -0,0 +1,253 @@
+import random
+import requests
+import time
+import re
+import threading
+import os
+# 分别为检测文章id和不提现列表
+check_id = [1,2,3]
+no_cash_list = []
+# ---->注意:不会处理异常情况,请自行捕获<-----
+class Compatible_auto:
+ def __init__(self,auto_type,api_address):
+ self.api_address = api_address
+ self.auto_type = auto_type
+
+ def get_web_code(self,wx_id,appid_or_url):
+ # 鸡哥过检传入wx_id和url,返回url,不直接返回code
+ if self.auto_type == "jige":
+ data = {'Wxid': wx_id, 'url': appid_or_url}
+ url = requests.post(self.api_address + '/loginbyweb', json=data).json()['url']
+ return url
+ # 汐念过检传入wx_id和appid,返回code
+ if self.auto_type == "xn":
+ data = {
+ "Appid": appid_or_url,
+ "Url": "",
+ "Wxid": wx_id
+ }
+ r = requests.post(f"{self.api_address}/api/Tools/ThirdAppGrant", json=data).json()
+ return r['Data']
+ else:
+ print("该功能仅支持汐念(xn)和鸡哥(jige)的过检软件")
+ raise ValueError("仅功能支持汐念(xn)和鸡哥(jige)的过检软件")
+
+ def get_mini_code(self,wx_id,appid,api_address):
+ # 直接返回code
+ if self.auto_type == "jige":
+ data = {'Wxid': wx_id, 'appid':appid}
+ code = requests.get(api_address + '/loginbyapp', params=data).json()["code"]
+ return code
+ else:
+ print("该功能仅鸡哥(jige)的过检软件支持")
+ raise ValueError("该功能仅鸡哥(jige)的过检软件支持")
+
+ def send_passage(self,url):
+ if self.auto_type == "jige":
+ api_url = f"{self.api_address}/zdgjc"
+ data = {"url": url}
+ r = requests.post(api_url, json=data).json()
+ print(f"推送结果[{r['msg']}]")
+ else:
+ print("该功能仅鸡哥(jige)的过检软件支持")
+ raise ValueError("该功能仅鸡哥(jige)的过检软件支持")
+
+
+def generate_ua():
+ devices_uas =['PGP110 Build/UKQ1.230924.001', 'HONOR Build/HK1.220923.005', 'VIVO Build/UKQ1.230912.001', 'TYYH Build/UA1.220923.005']
+ internet_states = ['5G','4G','WIFI']
+ ua=(f'Mozilla/5.0 (Linux; Android {random.randint(8,14)}; {random.choice(devices_uas)}/UKQ1.230924.001; wv) '
+ f'AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160117 '
+ f'MMWEBSDK/20240404 MMWEBID/7076 MicroMessenger/8.0.49.2600(0x2800313B) WeChat/arm64 Weixin NetType/{random.choice(internet_states)} '
+ f'Language/zh_CN ABI/arm64')
+ return ua
+
+
+class Yuer:
+ def __init__(self,wx_id,api_address,wx_name,invite_url=None):
+ self.next_time = None
+ self.read_pages = None
+ self.money = None
+ self.withdraw_headers = None
+ self.union_url = None
+ if not invite_url:
+ self.invite_url = 'http://h5.yyyeee670771.1gkjk8yhyw.cn/yeipad?ewk=ako&tay=tvo&tdq=uin&tfs=qip&ugs=avn&upuid=3387330'
+ else:
+ self.invite_url = invite_url
+ self.read_headers = None
+ self.wx_name = wx_name
+ self.api_address = api_address
+ self.wx_id = wx_id
+ self.ua = generate_ua()
+ self.cookie = None
+
+ def login(self):
+ try:
+ login_headers = {
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": self.ua,
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,"
+ "image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
+ "Accept-Encoding": "gzip, deflate",
+ "Accept-Language": "zh-CN,zh;q=0.9"
+ }
+ r = requests.get(self.invite_url, headers=login_headers, allow_redirects=False).headers
+ location_url = self.invite_url[:self.invite_url.rfind(r"/")] + r["Location"]
+ self.cookie = r['Set-Cookie'].split(";")[0]
+ login_headers["Cookie"] = self.cookie
+ r = requests.get(location_url, headers=login_headers, allow_redirects=False).headers["Location"]
+ url = Compatible_auto("jige",self.api_address).get_web_code(self.wx_id,r)
+ requests.get(url, headers=login_headers, allow_redirects=False)
+ requests.get("http://yyyeee670894.1gkjk8yhyw.cn/user/login?"+url.split("?")[1], headers=login_headers, allow_redirects=False)
+ # print(login_headers['Cookie'])
+ # self.union_url = url[:url.rfind(r"/")]
+ self.read_headers = {'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1',
+ 'User-Agent': self.ua, 'Accept': '*/*',
+ 'Accept-Encoding': 'gzip, deflate',
+ 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,zh-TW;q=0.5',
+ 'Cookie': self.cookie}
+ self.withdraw_headers = {'Proxy-Connection': 'keep-alive', 'Accept': '*/*', 'X-Requested-With': 'XMLHttpRequest',
+ 'User-Agent': self.ua, 'Content-Type': 'application/x-www-form-urlencoded',
+ 'Origin': self.union_url, 'Referer': f'{self.union_url}/withdrawal', 'Accept-Encoding': 'gzip, deflate',
+ 'Accept-Language': 'zh-CN,zh;q=0.9', 'Cookie': self.cookie}
+ url = requests.get('http://h5.abokxeh.cn/pipa_read?upuid=2802253', headers=self.read_headers,
+ allow_redirects=False).headers['Location']
+ self.union_url = url[:url.rfind(r"/")]
+ print("【{}】登录成功".format(self.wx_name))
+ return True
+ except:
+ print("【{}】登录时遇到问题".format(self.wx_name))
+ return False
+
+ def user_info(self):
+ try:
+ url = f'{self.union_url}/yeipad?bqb=eom&ivb=kff&qsz=nne&upuid=3284491&vlm=ssr&xik=mzo'
+ user_detail = requests.get(url, headers=self.read_headers)
+ if "抱歉,出错了" in user_detail.text:
+ print("【{}】账号被拉黑".format(self.wx_name))
+ return False
+ money = re.search(r"余额:([\d.]+)元", user_detail.text)
+ read_pages = re.search(r'([\d.]+)篇', user_detail.text).group(0).replace('篇', '')
+ next_time = re.search(r'([\d.]+)分钟后到来
', user_detail.text)
+ if next_time != None:
+ next_time = next_time.group(0).replace('分钟后到来', '')
+ else:
+ next_time = 0
+ self.money = float(money.group(1))
+ self.read_pages = int(read_pages)
+ self.next_time = int(next_time)
+ print("【{}】已有{}元,已读{}篇,下次阅读时间{}".format(self.wx_name,self.money,self.read_pages,self.next_time))
+ return True
+ except:
+ print("【{}】账号被拉黑".format(self.wx_name))
+
+ def read(self):
+ headers = {
+ "Connection": "keep-alive",
+ "Accept": "*/*",
+ "Access-Control-Request-Method": "GET",
+ "Access-Control-Request-Headers": "x-requested-with",
+ "Origin": self.union_url,
+ "User-Agent": self.ua,
+ "Sec-Fetch-Mode": "cors",
+ "Sec-Fetch-Site": "cross-site",
+ "Sec-Fetch-Dest": "empty",
+ "Referer": f"{self.union_url}/",
+ "Accept-Encoding": "gzip, deflate, br",
+ "Accept-Language": "zh-CN,zh;q=0.9"
+ }
+ url = requests.get(f'http://yyyeee670930.1gkjk8yhyw.cn/read_task/ggg3',
+ headers=self.read_headers).json()['jump'].replace('read.html?','read_task/ddr?')+'&type=7&pageshow'+'&r='
+ url = 'https://h5.v2dx6gzdx5.cn/read_task' + url[url.rfind('/'):]
+ read_response = requests.get(url + str(random.random()), headers=headers)
+ if '已经被限制' in read_response.text:
+ print('【{}】阅读被限制,继续下一个账号'.format(self.wx_name))
+ elif 'finish' in read_response.text:
+ print('【{}】到达最后一篇文章'.format(self.wx_name))
+ return
+ # read_response = read_response.json()
+ # final_url = 'http://' + str(re.findall(r'^(?:http?://)?([^/]+)', url)).replace('[\'', '').replace('\']',
+ # '') + f'/read_task/{read_response["url"]}&_t=799888'
+ # response = requests.get(final_url, headers=headers)
+ # if '您已完成阅读任务' in response.text:
+ # user = str(BeautifulSoup(response.text, 'html.parser').find_all('p')[0])
+ # print(f"【{user.replace('', '').replace('
', '')}】本轮阅读已经完成")
+ # else:
+ # print('未知错误')
+ else:
+ key = read_response.json()
+ for i in range(1, 31):
+ print(f'第{i}次')
+ if i + self.read_pages in check_id:
+ print(f"【{self.wx_name}】到达设置的检测文章id{i + self.read_pages},等待过检")
+ Compatible_auto("jige",self.api_address).send_passage(key['url'])
+ time.sleep(10)
+ else:
+ sleep = random.randint(6, 10)
+ print(f"【{self.wx_name}】模拟阅读{sleep}s")
+ time.sleep(sleep)
+ read_response = requests.get(url + str(random.random()) + f'&jkey={key["jkey"]}', headers=headers)
+ key = read_response.json()
+ if '已经被限制' in read_response.text:
+ print(f'【{self.wx_name}】阅读被限制,继续下一个账号,被限制的id为{self.read_pages + i}')
+ check_id.append(self.read_pages + i)
+ break
+ elif 'finish' in read_response.text:
+ print(f'【{self.wx_name}】到达最后一篇文章')
+ break
+ print(f"【{self.wx_name}】阅读成功")
+
+ def withdraw(self):
+ if self.money >= 0.3 and self.wx_id not in no_cash_list:
+ money = round(self.money * 100, 1)
+ data = {'channel': 'wechat', 'money': str(money)} # 微信
+ # data = {'channel':'alipay','money':str(money),'u_ali_account':'账号','u_ali_real_name':'名字'}#支付宝,需要url编码
+ res = requests.post(self.union_url + '/withdrawal/submit_withdraw', headers=self.withdraw_headers,
+ data=data)
+ print("【{}】提现结果:{}".format(self.wx_name,res.text))
+ else:
+ print("【{}】不提现或不满足提现要求".format(self.wx_name))
+
+
+def main(wx_id, api_address, wx_name):
+ a = Yuer(wx_id, api_address, wx_name)
+ if a.login():
+ pass
+ else:
+ return
+ try:
+ if a.user_info():
+ pass
+ else:
+ return
+ except:
+ return
+ try:
+ a.read()
+ except:
+ pass
+ a.user_info()
+ a.withdraw()
+
+
+if __name__ == "__main__":
+ env_name = "yuanshen_api"
+ semaphore = threading.BoundedSemaphore(value=1)
+ threads = []
+ api_add = os.getenv(env_name)
+ if api_add is None:
+ print('无api地址,请创建环境变量yuanshen_api填入api_address')
+ exit(0)
+ else:
+ api_add = "http://{}".format(api_add)
+ sessions = requests.get(api_add+ '/getallwx').json()
+ for session in sessions:
+ try:
+ t = threading.Thread(target=main, args=(session["Wxid"], api_add, session["wxname"],))
+ threads.append(t)
+ t.start()
+ time.sleep(5)
+ except Exception as e:
+ print("【{}】发生异常{}".format(session["wxname"], e))
+ for t in threads:
+ t.join()