hiddifypanel 3.0.0.dev63__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev65__cp310-cp310-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hiddifypanel/Events.py +27 -4
- hiddifypanel/VERSION +1 -1
- hiddifypanel/VERSION.py +1 -3
- hiddifypanel/__init__.py +7 -3
- hiddifypanel/__main__.py +13 -3
- hiddifypanel/base.py +88 -3
- hiddifypanel/base2.py +40 -3
- hiddifypanel/models/__init__.py +10 -3
- hiddifypanel/models/child.py +26 -4
- hiddifypanel/models/config.py +105 -4
- hiddifypanel/models/config_enum.py +207 -4
- hiddifypanel/models/domain.py +106 -4
- hiddifypanel/models/proxy.py +55 -3
- hiddifypanel/models/usage.py +58 -3
- hiddifypanel/models/user.py +171 -3
- hiddifypanel/panel/__init__.py +7 -4
- hiddifypanel/panel/admin/Actions.py +170 -3
- hiddifypanel/panel/admin/Backup.py +80 -4
- hiddifypanel/panel/admin/ChildAdmin.py +122 -3
- hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
- hiddifypanel/panel/admin/Dashboard.py +70 -4
- hiddifypanel/panel/admin/DomainAdmin.py +195 -4
- hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
- hiddifypanel/panel/admin/QuickSetup.py +127 -4
- hiddifypanel/panel/admin/SettingAdmin.py +224 -3
- hiddifypanel/panel/admin/Terminal.py +51 -4
- hiddifypanel/panel/admin/UserAdmin.py +277 -4
- hiddifypanel/panel/admin/__init__.py +82 -4
- hiddifypanel/panel/admin/adminlte.py +13 -4
- hiddifypanel/panel/admin/commercial_info.py +23 -3
- hiddifypanel/panel/admin/templates/config.html +1 -1
- hiddifypanel/panel/admin/templates/proxy.html +2 -2
- hiddifypanel/panel/admin/websocket.py +9 -3
- hiddifypanel/panel/admin_2.py +33 -3
- hiddifypanel/panel/asset.py +17 -3
- hiddifypanel/panel/cf_api.py +35 -4
- hiddifypanel/panel/clean_ip.py +125 -3
- hiddifypanel/panel/cli.py +172 -3
- hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
- hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
- hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
- hiddifypanel/panel/commercial/__init__.py +50 -4
- hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
- hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
- hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
- hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
- hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
- hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
- hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
- hiddifypanel/panel/common.py +98 -3
- hiddifypanel/panel/custom_widgets.py +71 -4
- hiddifypanel/panel/database.py +18 -3
- hiddifypanel/panel/hiddify.py +655 -4
- hiddifypanel/panel/hiddify_api.py +70 -3
- hiddifypanel/panel/init_db.py +393 -3
- hiddifypanel/panel/usage.py +85 -3
- hiddifypanel/panel/user/__init__.py +25 -4
- hiddifypanel/panel/user/link_maker.py +416 -3
- hiddifypanel/panel/user/templates/home/multi.html +1 -1
- hiddifypanel/panel/user/user.py +233 -3
- hiddifypanel/static/css/custom.css +11 -0
- hiddifypanel/templates/500.html +1 -1
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
- hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
- hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
- pyarmor_runtime_000000/__init__.py +0 -4
- pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
hiddifypanel/panel/user/user.py
CHANGED
@@ -1,5 +1,235 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00]\'\x00\x00\x12\t\x04\x00\xbf\xc9\xbek\x8b4\xb5\xc3\x9a\xa5\x8d5\x962U\x86\x00\x00\x00\x00\x00\x00\x00\x00k(\xf0[\x82\xb4\xccU[%\xe0\xdc\x08\n\xf2\xe9)\xbf#\x02* \xba\xe8B^\xa8\xd1\x9a\x89\xcd*\x153\x08\x04\xa6]\xcc\xf8x1\xca\xa3\xccH\xc96\xa8\x1a\xf2\x13\x8e\x8eWB\xa8\xd7\'\xc2\xfd\xbf\xbb\xc8:\x96\x08\x7f\xe8\xa9\x95\xcdV\x9a\x04\xcb\xa4Z\xbd\x93\xa2&%\x14\x9d\xfc\x88nt6\xec\x1d\x90QR\xa7\xf9\xbf\xfc\xf8)\xed.w\x90\x83\xd3\x0c\x02k\xa8\x90\x19\xe0\x8e\x9a\xa8]\x85\x82PB\x10\xa8\x10\x82\x8e\x1d\x12\x8f\x8d\x16\xeb\xd9\'-\xabr \t3}5\xb9\xde\x15\xd0\x81*fe\xef\xb9\xbc\xfc\x14Q\xefp\x1d{\xb5\xe0\xef@\x819\xd7\xcb\xb5z\xbfA%\xe0\xb5q\x9di\x90\x9aG\x1d48\xa0\xb6\rTN\xd7\xe3\xec\xc0\xddr\x16lC\xa6\xc1\x15\xf0X\xe4\xd9%\xdbW\xed\xb4L\xa23\xd9\x00\xc3E\x14\xa3\xa89>\xf0\x9cZ\xce\x8c89\x0e\xd9`\x95\xe4\xe9/\xcc\xfeuR\xa8^\xb5\x03:\x00\xbf\xe0\x9a\xea\x9f\xd8\xc5R\xcc\xe6\x95\x90~(T\xcf\x1eY\x9dwk\x05\xceA\x80-\x86v\x1ch\xf5;\xdcq\xb0\xfb\xae7\xde\x04\xb7\xf3\xa9h\xc7\x12\x89\xd2\xe4\xc8\xf1Q\x91\xbc\xd1\xb1\xcf^\x9efh+\xea\xdf\xe8\xc5\x079\xeeG+\xb8\xed2\xe8\x97\x1d\x95#\x08~a\xb4\xc2~\xb1$\xd7\xc0\xe1\xf0\xbb\xf6\x7fe7\xc5\x0b\x92\xc0\x1a\x821\xf9\x12u\xe4y\xa3oPF\x16XFm{\xb0x\xe1~Zpi\'\xaaTC\xc8\xd9\x9b\xfbk\xf9/N\xcf\xcc\xcf\xb3\xebP\xa8Vs\tZ\x83\x10\xda\xe8u\x8e\xa9VD\x9b*6\xbf\xf2\xed\x11k\xce)\xd7\x18n\x82\xff\xaa\r\xf1W\x15\x19\x01\x1d\x90\x9f[\x08V\xf2\xa8\xfe\xe9\xad3\xb9\xb3\xce!X\xf6\xa7H\xac:\x94\xd70\xbbL<8\xf0\x13=\xa4\xd4\xba5M\xde\xeey\xc5\xa3%`z\xbdI\x9b\xe7\xd1\xb8\xb9{\x84\xff\x8a\x9e\x19u\xb3\xab\xa9\x9a,b\xa9\r\x92QK\x90@\x8d\xfb9\xac\x1c^\xb2\xb85\xf0ec\x82\x0f\x1f\x0c\xa5=\x98V\xbbu\x08f(\xd2\xcc\x8c\'\xc1,\xe3\xe1c9\x95=ZX@\xc0\r\xbe\xcf\x06G\x137G\xbdAe\x14p\x9b\xaa\x88\xe3\xb1\xa6\xd6\xc1\x8e\x83U\x94\x8b\xd0\x95\x1b\x85\xf3\x88\xeb\r-\x82:|_l\x86\xcby\x81\n\xc6e/\xf4\x07\xa6\xc3\x10\x1f\x01\xc6\xb5\xd4v\xf5\x08\xec\xaf?\x93\x10#\x9b\x11\xfb\x9dZ>Jj\xea\xb7z\'\xb1\xc7\xd4\xd6\xea2\xe8GP\xe0\xa0\x8ap\xcd\xc8H\xa9\xd9\xfe\x18~9&J\x18\x175\xc4S\t\xb0\x18\x17l\xea\xaf\xf9\xd0J7\x8bE\xd3\xa1\xb7X8\x13r\xf6\xc7\xdf\\u\xf0\xca*v,?@\x83\x9e\xeb\x1f\xc4dm\xd8\xab\xbeE\x19n\x98\x8b\xae\xab\x96I\xfc\xba\x16\xa7]\'\xf6\x95\xcbt\xe7\x8f\xbe:\x1c=\xe9\x14\x19\x0e&@(\xdd\xe0\x08r\xa6\x03\x10\xa26\xa1\xcf`\x8c\xc7\xa4I\xd5\x9a\xe2f\x93\x1a\xb4\x9d\xcdh-\xd87\xc7\x8d\xfb\xad\xbb\x91\xe9\x13a\xe6\x1e\xb34\xc2\xd2`%!\xd0\x82\x91\x80\x96\xbe\x9c\x9a\xf4\xcfZ\'ZwqGo.s_@\x85\xb7]\'\x1c\x10\xe3\xb4\xa1w\xfd\x93\xd7\xb3b"\xcf\xefZ!\xb0\x1c\x17\t\x86,\xa2\xd9\xc9\xf6\x84Z%J\xf3\xec7\xb5\xda6\x94{@\xde[\x93\\\x9b$\xc46\xe3\xaf\xcbk0\x80\xf9O\xff\x93x\xe2C\xea\x94<s\xf3^\xdc\x9e=g\x1f\xfe\xe4*d\xb6\xdf\xb7\xd2\xaaA\xf3\x10\xfe\xb2\xf1DWFw;2z\x11\xbb\x1a{\xbf\xf4\x0c\x19\xd42q\xe4"\xdd\xdep\x1c\x92\xba\xca\xf2\xbe\xd8v\x9a\x10\xef\x8a\xf6,\x173$\xbdd\x03Cb#\\M\xd2\x03\xce%\x86`\x06+Y\xffu -\xbcp\x9e_\xe2\xed\xc2\x1f\xbc$\x93\xbf\xb3\xc4\xcbj\xf6\xe6[\xe0\xe9\x03T\x07\xc4,\t\xb0[VBW\xaf\xc7\x12\xe2l\x0e\xcd\xf0\x12*\x8c\xd8\xbdQ20\x1d~\tI<{\x9e98\xdb\xb5\x95\x0e\x1d\x9f\xbdG,g\'X:\xd6\xa5\xfe\x93\xd4ZS<+\x8a\xd3\x7f\xf7\xc9\xe018\x84\xee\xbfB\x9c\xdc\xc8\xe5z\xfc\xdbq&\xe6\xc5}9\x9a;\xa6\xe0\x9b.\xe1\xa3\x82\'\x82_\xfb5\xf9\x10/m\xa7B\x93x\x0f7\x87\x9e| \xade\x0b\xa2}\x874\xc9\x90\x85\x02%\xb2H\xf29p7\xd4\xfa\xc8\xfe8\xc9\x1a\x06\x86\xa3v6\xd0\x1bHVt\x84\x1e4\x08\x8eH26\xdb\xe1L\xc7\x94^P\xddEc\xae\x1d\xe2\x85a,\x88\x10\xc6\xf3\\@\x99-\xd3v\x95V\t\xf8\xc7\xe3#H\x17\xcb4\x00\x1c\xcc\x87!/\xa0\xb7\xb1\x02\x0f\x12\xdf\x9f\x18Fr\x14M]\xc9\xa0\xe0e\xcduN\x1f\xab\xc1M\xcf\xef\xca\x1ai\x9b\xb1\xb3\xa8\n\x98\xd9\xfb\xe7\x846\xd5_\x0b\xed\xb7\x95+\x14\xb3,\x95\xef\xf8\xdc\x97\xba\x9b\xcf\xfc<\x9d\xb9\xb9\x0f=6z^\xc0\xe8\xd5\xbdf\\\xb2\xef\xf5\x81\x05\xe7k\xc9\x9b\xa0\xbcy\xb3G\\\x8a\xee<]\x1cQ\x9d\xbe-/\xd0\n\x89\'\xd5\xd1]\x82\x00\\*3\xc2:\x83W\xf1\xf1L\xd4\xf3\x0c\xb3\x06T\x9b\x83\xb6\x9b\xcbY\x93[2o\xdfB\xe7\x88z\x80\x87\x96\x8dH2\xc4\x82\x065\xc1\x8ev{O\xe5\xb0^\x8bP\xa1\xe27\xd1\x8d\n\xe2H\xa5\xeb\xa9Wo\xc2\x16\xea\x81\xde\xe6\xf3\xff\xc0\xbe\xc3P[\x91\x13Qv\x03\xdeS\xb2Y\tC?\xb3\x84\x97*\x8a\x1c\\\xc2e\xf7>c2aPJ\xec\xcf53\xda-\xac\xa1u\x92\xc19!\x12@\xbc\x1d\xc9\xe5\xd2\xee\xee\xb0\x11\xa4\x08Q\xd7\'Rcy\xf3GV\x1f>\xcc\xeb`n\xcd\xf4\xa7\x8a!\x89\x85N\xfa\\"\xff2g(\xe6N\xd3\xe3u\x9e\xe6\x12\xea1\xcfd\x15\x7fE,\t\xa0\xd9=^\xc2\xef\xa5\xf6-\xc1\x94\xd6\x85\xa9"\xb3W;p\xa3\xdf\x9e\xd4\x12\t+o\x14\xb5\xc0v\xb6\x9b\xdc\x85\xbb\xb2\xa3\xb4\xd87{q>\xaa\xd2\xd1\xd3;\xefy{G\xc3\xec.\x13\x8e8\x86\x83\xc1\x0c\x8f\xee\xfb\xd9\xe1$\xbe\x96I\xba\xd7\xe38\x15q\xa0}P\xf8\x8b\xb2[\x12\xa1//t\x9e\xb1\xaeO\x0ba\xdb\x96\xa74\xc9\xb5\x93o\xbf,\x02\\\x89+\x07\x15x\x00\xd19\x11\xe1\x88\xac?\x9a\xdbi8\xf6C\x88!\x96EK\xba\n\xb4\xecs\xdb\x93l\\\x14\x10+\xadV\x93\xfcpo\xc9[\x1c\xe8]er\x06\r\\\x03\xa0{{\xf3=\xf7z\xae8\x8f\x17K5c\x1eKU,\xe9\xa7\x1e\x0b\xce\xa8\xef\xde\xaf\xbfD)\xfc\x91\x8di$\xd9\x05\xa9\xe8\xd1\xee\xc1\xa3\x99\x9d\'\x1e\x97\x86\x0fi\xc5W\xba\x96\x1c\xce\x14\xfe^\x85C\xf2\xf1\xb41\x85.\t\x85\x1d\xdd\xcd/\xdd\x94\xcd\xeb\x1d\x947\x1f\xcecJ\xf6dR5=\xa2\x00.\xf7\x81\xe7qfn5\\\x0e\x7f\xee5\xdb\xad\xb1\xdf\x8c\x9f\xbc\xfc\xefE.\xc3\xb4o\xb9\xf4\xed\xa2g\xdc\x831H\x19\x81\x92$\x15:\xcc\xc7\xc2(5\x17%\xa1:!K\xf1\x00\xed]\x95\xde\xc6\xa0\x01H-\xb9\xee\x8dY5\xa9Q|z\xcff\xf1\x126^z\xcdt\xb7=>y\x1a\xc6\xceZ\xd2\xc8\xb55:Y\x9d\xe9 \x9b\xe3X/\xa5\x86\xc3d\xafS\xa05\t\xc5\xb5\xd6\xa9\x15xA\x16\xc4KO\x8f\x02\xe5\xcfm\x8e`j\x98\xf8Z\xf0\x06\x1a?\x16\x10]L:WE\xc1\x8eB\x11\xea\xd9\xf5\x8b\xb4\xef 40\xc6\x14\x93\x07\xfb Yb\x83\xdb\xcah\x80Y\xe9\x19\xa7\x89\xb9R\x1b\xd9\xd4\x1b\xd4.\xf8\xbf\x12]\xca\x8c\xb4I\xac*\xc2P,\r\xc6z\x0eY8\x12\x82\xa6\xe0\x16Lg\x9e!>\xecAu\xb4\x9d\xe3\x01\xa2GW\x89\xe8\xc1\x0b \xcb\x05\x80Y\xd77!\xc0d\xf8\xc8\x97\xf2Z\xf0}\x94 I\xfd\xd9\x9b\xe1#\xd2\xfe\xbb\xbc\xe2\xefo\xae\xb4#o`/\x17\xba\x8b$\x93\x91I\x92\xd2\xac\x12Ee;\xbc`\x86\xab!\xa8\r\x97\xa6\xca\x961k\xfa6\xd6\x1f\xc8\x84\xfcH5m\x839\xc0\xc6\x8f\xf3\x96V\xd4\xf21\xf4\x8d\xf6_l7;\x05\xe3Eo\xe8\x8b\xcd\xces\x82\x18eil\x82-\xbfe\x00\xdazN\xce\xb5\xad\x9au\x0bc\xba\x1a\x0c\x86\n\xa3\xd9\xabP \xdd6*N\xee\x9b\xa7\xcej\x9b\xb9En\xb4\xeck\xe0\x93Q\xd5Z\x05\x88\x8d\x1b<z\xec\xa7\xaa\x91\'J\xf0\x91\xfc\xd6\xfa\xb8\x0e\x18B\xab\r\xb4\xff[\x89\r\xa0f\xf0\xe8\xaf\xa0\xe7\xef\xabQ\xe0\xa4\xeaAt\xb0\x1a\xa6\xdbZ5E\xdaE\x8a\xd5\xcb\xf0\x1dt\x8cN#\xf9\x85u4\x8f\x1a\xed\xcc\x11\xb8HG\x89\x0f\x87\xc2\xa8\xc67\x9b\xc4:q<\xd6>\xe5\x8d\xa6Mg8\xf3\xc7\x0e3\x83\x04\xfdy\xa2\xc9(k\x05(S\xe7m\xcf\xd6F\x89r\x0bl5)\x88&X\xb1\xc8\xa8\xbb&f7\x9e2\xb3\x82\x11x\xae\xc0\xc7\r\x87R\xec\xfb\xfa\x97\x915>[\x8b\xd9\x89\xd8\x01zr\xc3e\xd4H`\xf8\xdd\xf1\x14\x9f6b\xe0\x94k\xfe\x9b\xd2m8\xca{\x02\x84M\x03\x8f\xe3D\xbf\x8b\x0f\xfaTS\xd3Cz\xe2*\x91b+)==o8\x9f\xe1\x8c)s8\x8c\xfe\xda;\x05,\xd6\xf5\xb2+:\\\x0cp\x85\xb7\n\xcb+y\xd1\xc8\xe4([)\xc6\xa0\xb4^*\xfc\xebB\xaf\x96\x02\x1c\x97\x8f0\x030\x08eO\x8f}\xc9\x91\xf2U\x97g\xbe\xe3\xfe\x87em`[\xad\x01\x8e\x08\t\xac\xdeK\xa8\xc86\xb5s1\xf5\x0b\x8c\xda\xcf\xc4\xbc\xbf\xd1\xf7\xfd\xd9P\x1b-\x1f\xae^\xf5g\xf6\xf7I\xf4\x95r\xe8\x9b\xb5\xa1l\xbd\xda7\x07g\xb8\x1b\xd1u!\xe8\x82`\xe5\xa4\x01=\x9b\xce\xbc\xe1\xa7"\x9fC9\xb4\xb8\xc7\xa8\x06\xfe\xe4W\x9f\x80v\t\x85\x07h\xcbW:\xe1\x86\x99\xa3\r\xe3_T\xd4\x1f\xc90\xbd1\xad?\xdb\x08\xec\x1f~\xbf\xcc\xc2\xa5\xdc"2Qs:\x85\xa1?\xb9\xd4N\xdb\x18rE4`\x04u\x14\x90\xbf\x1d\x19mM\xd2\x8cc\x19\x1e\xec\xe0{pVoN\xc4\x96g\xdc\x8c\x84\x19g\xe9%\xb7\xd5\x8dk\xc6\x91\xfd\xdb\xe3\x04\x94\xc1\xb2":\x85h~\xef\xbf\xcd\x13\xe6O\x9d\x0c\x89\xd3\xb1\xc9\xe0\xa4WO\xa9$d\xf4\t\xcd\xe5\x1e\xf4@$H\xcfL\x98\xa9\xf9cq\x01\x97\xe0?\xbb\xb94\xde\xc2\x98\xa38?\xeff\x8aw\x97\x99\xe9\x91(\x01\xc6v\xdbHq\xd4@\x06\x8d\xe4\x96\xc4\xcb8\xc2bP\x19\x9a\xd5eb\x96\xf4\x1d]|\xa5\xc3i2\xf7\xb8\xe3\x1c3kL\x94\xb9C\xa3\xf4M82\x00s\xbc\x839G\xc6\xae\xe0\x80L\x9e\x0c\x16\xc8\x17`\xaf\x19\xd3\xaa\xe8 \xbe\xa4\xf27\xf2\xdd\xb9\x87!m#\xa0\t\x99\xc9(\x81s\x05\x92$S\x9a+<\xd5\x97u\xed\xd3 \xacdgW}{QKY\xd8-\xc4\xa0\x12\xecg\x19m\xdaF\x02\x1b\xd3j\x01\xa8\xdc\x9bd]U\xa0\x912\xfe\xb7\x87F\xbd\x02X\xe3\xae6\xbb\x94\x10\xa9\xb7\x915d\xb0v\xd3\x97\x062d\xb2+\xe4\xed,\xdbR\xc3#\xd4[]\x03\x01\xe9\x03\xc9\x86\x93\xfd\x91)5\xaaR\x1d<\xa4\x8a\xf5\x8e\x9f\xf7\x92\xabk\xe0V\xbf\xca\xff\xaf\x87\xb8\x14\x17\x9b\xbd\x1aF\xea$#Zd\x84\x8c([Y\xe0\xb7o/\xa3\x1b>\xae\xe73}PWg\x0f\xe7d\xc9\x05\xf4\xdf\xf4e7\xb7,\x0c2\xf7\x19\xf9\xc6\xbf\x01\x85\x8a\x07X\r\xb25\xdf\xfb$\xad\x9b\xba\xeeX\xe0x\xf0\xa2*\x1f}\xcf~\x885\xd90\xd7\xa0\xe0\xa8\xea\xf7\x18~\xe0\x12\x9eI\x8c\xaf\xe8\x8c\x0e\x18\x03\x90\'\xf9\xc1\x80\xf4B\x7f\x0e\xaf\x15i5C\xfe\xe5_\xf3\xb5S\xe8\xe1\xc1h\xd4Zuj_t\x9e\xf7\x16l\x86\xae\x19j\xe3\x1e`\xf8N^m\x0b\xc3D\x01a\xa9:4\xb3"\xf3\x15r\x128\xd9^j\'\xddq\x08\x91\x80\xd4b=\x1a\xc0"\x149\xb3~_O\x9c\xc1\xd8\xd8b\xef\'Q\x94\x7fv\x94&\xde\xbc+\x0b?\xd2j\xadntG\xa4R\'\x99\x9d\x8fb\xdcv\xd4\xb9\xed\x1f\t\xc0\x84@\xd5\xd7\x87\xe7\xedl\x9c\xe7\x9a\xd7\x82G\xd8\x1c\xa8\x86(\xa9`\x84\xd6\xee\x86\xf0\xfd\x98\x8bQ\xc7l\x1bt\x9cP\xb7\x08\x01\x03+\x1fe\xd4ct\x04\xdbc\x91^\x8e\x8a\x94\xa9\xbc\x8c\xf0\x8f\xdbe\xcc\x11O\x89\xfai\x90\x85W{\xdc\xa1w\x95a\xe9\x98\xf09|,\x8864\x84jO\r\xdf*\x80"\xcf\x8a\xeaS\xcfRq\xca\xc1V\xfe39\xbd\xdf\xab\xb8\xe5\no9)\xb2H\x07\xe2\x00\xde#{\x12\xa6\xc9\xa7O$\xf8F\x1ex\xc2IC\xfc\x02\x1d\rTS(\x95\xf1O\x1a\xc7}\xf6\xe3$qdc|\x91\xb1\xa7\xf7\xc0\x86\xac\x9c\xe5\x85\xa4\xb1\x83\xa5!\xf7G\xf8;?\xb7\xadi\xe5j&(\xc3\xa2:\xff \xcc\xe1\x96\xaa\x8c\x87\x8a\x9a4\x05 b\x13\x05\xda\xb1_4*f\x82\xf9?f*\xa3I:\xf0\xb1\xf5\x03lf\xd5\xcb`S\x8b\x02z\xfat\xd7\xc2\x9c\xddI\xe5C\\\xf7xK\x8f\x19\xe2$X\x17\xda8g\x91-\x81\xda\xbdaC\xec\x8a\xd93\x18\x9b\xa6\xa3E{\x86#zZ\xe1\x16\x15B\xab\xbe4\xee\x8fC[:\x1d\xe6>K\xba\x98\xd3M\x1f\x1d\xb4\xda; \x95n\xab>\x939\xcaI\x9a\x13E\x8eiu\xf3\x11\x03\xc0\xe9\x9bt_~\x19\xfd\xb4\xac\xbd\x10\xdb7\xcb\x94\x0c\x91\xaf\x1aX\xf8\xdc\x843\xb2\xf3I\xfb\x93\xc9Z\xa9\xc1\xbc\xb9\xe3e\xc0\xcc\xb5\x0e\xe8v\x95\n\xb5\x05\xdb~\'\x8a.\xb0\x93\x17\xfa\x90\xc8\x14\xa0G\x85\xa4\x04\xf9\xe5\x14/\xbe\x83\xc5\xfa\x7fz\xe3F\xa7\xd0gX\xa8\x7f;R\x0f\x1c\xcf\xc2v\x03\xf7\x1ffu\xbeX\x01/\xa1G\x07\x9e\x16\x90\xe45"\x0cR\xcet\xae\xc3\xd4e[E\x11O t\xbd\xd6\xca\xfa\xb8Tz\xf6\xf0\xb4CFh\x1al\xe8\x88G\xaf\xcb\x0fo3S\xf7\xe8\xcd-J\xfd\xa3\xbe8\xe2X\x15\xf2\x12L/\x1f\xe5\xf9+\x96Af\xc7\'\xb2\xcd\xa9Y 4\xd2\xe9\xfd\xdd\xb8OD6\xf5Q\xf5\xd5\x88\x0ca=c\x1c\xf0\x9f\xcb\xfb}3A\xce\xef\xffb\xcbJ\xd8l\x1e\xc7\x12\xe0\xceA{\xdb\xcf\xb0\xfc\xe3\x01!\x85\xab\xe2]\xe0\xf7\xd1\xc6\xf2\x14R\xb5\x97\xce5\xc1\xa6\xbf0)\xa7\x9d\xe3w\x86\x11\r\xa7\xe9\xb7\xf2\xc4@\xd5-\xc8$=4\xc7\xff>*\x8ct\xa9\xd9K\xe4b\xb0\x05\xed`\x9ak\x99\xf6\xc0\xac\x93qNB\x89w\x15\r\xa2\x87\x83\x87\xc5G\xb3\xb5\x90\x92\xb6y\x85\x0fPO\xe3||\\f\xe2\xe3:\'\xa2_\xc8I\xfb\x8dA4\x808s\x82\xd1\x1f\x8b}\xc7qN\x14L\xf8\r}7V\x00@{\x1c\x94]\xc4&\x92\xdd]\xb0\xb5\xd3\x86AZ9\xce\x99\xbb\x9a\xb3\x1f\x85\xcb\xcb\x13\xe3fy\xdd\xd1\xbd\xd7\xb5\t\x84\xf7;\xc0\xaa\xbf&\x89!AT\x84\xdc\xf9a\xf7e\x17\x89\xae\xf0,\xa6yo\'pH~p\xd8\xe5\x08\x0c\x84f\xa1\xd8-X\x7fm\xf7\x91\x1bH\rP\'\xdf\xcd\xec\xd1\x03\xeb>\x87\xf5\xa7\x8b\x9fI`\xb7D\x9a\x96\x19\x0fT(\x05\xa1\xf7\xec\x99_\xdd\xdd\xba\xe1\xbd\xe0\x96\xb0i\xc1\xfd\xa8\xeb\xc4\xc2\x1fo\x17\xbd\xa9m\xcc;\xcb;0~2Z\xc3\x19\xcbOR\x9a\xe5\xe8\x08#r*\xe8\x93\xa6\x7fV\x80\xb1\xc5\xee\xbf\xf0\xaa\xbe\xf9=L\x8f9\xda\x14\xef\x80\x9a[\x82\x0b\x81\x98\xe7\xf0z,6k2\xf0L\xbdp=\x87(\x0b\xb2C\xc4\xa7\xd5:\xef\xf6\xeb\xfb\xb1\xe54\x83\xc3\'\xf3\x9e1\xa6\x1bl\x11[C\xf4\xac\xfb\xec\x95\x8f\xc5]\xd8m\xf3\x14\x06H\x1fi\xa3\xb7\xfd &\xf7/\x87\x9d\x11\x80\x99\x1b\xb143\x1f\xcc\x84\x1a\x05\xc6C\x89!\xf5/?\x06S\xd9\x85\xd7\x8d\x1f\xe5@l\xdd7F\xbe\x15\xd1\xbb9\xb4\xcf^\xab\x11\xb8\xe0[\xde\xb3H\x17~\xe0\x06\x05\xcfg*\x89\xbe\xd6\x93\xda\xa1\xed\xb59\r\x82\xc7\x8a\x17#\xb2qD\xa6.\xb6\x16-2\xba\\Q\xec\x83\xceJ\xc6\xd4\x80\x15<\xb1`v8k&\x03\x9dHB1\t\xfdJ\xd7\x03R\xb5\x0b\xca\xcd\x1e\xbbG\xa8\x81q\x028\xc4\xb2\xe8k\x03Sm\x7f@4\x96;\x1b=\xc8\xb5\n\xfa\xf5\x94\xf9\xbd \t\xdf\x02y\xca\x8a\x85\xf5U\xd3\x9a\xcaA\xe3\xb0\xad\x1a\xa5\xa8\xc3\x80>\xa1\xa3\xc7k)\x11"\xfe\xab\xa1x\xack\xcf\x84T\xad&+k\xbb\xdd\xbf\xcf\rQ\xa3"H\x19O\xfa\x96\xb1\x81\xc2\xa3\x9aW\xc3\xc1x\xa4\x90\xe2\n\xb2\xe1\xd9\xa2\x0c\xa9R\xd4\x94\xf1\x90\xd0\x0c$\xf46\x86\xf7\x12"W4\xb7(Y\x9e\x08\xf4\xc0\xbf\x16\xa6\xaf%L\xb6\xb6\xcf\xf9\xcck\x8c\xb3\xc3\xc3t\x97\x83f\xcb,<2\xd7_\xa1{\xba\xb97o<\x1cq\x01\x02\x06Yo\tk\xb8\x16/\xb4\n-\xc1o\x91\xac\x9b\xb6dG(\xb7\x16\xd3\xcd\xbd\xa5C\xa3^5\xfa.\x08Y\xc3Imz\x9cK\x85\xbb\x8e\xdc\x1e\xb6wx+\xb1\xf8\xaa;nRh/\x85G\xd5\x06j\x97\xca\xd4\xd9\xc5\xfb\xe25\xdd\xbc\x14/\xb6\xc9\xd14\xe9\xec\xe4=\xa4N\xcf\xac\x06>L\x07Z\x03dp\xed\\\xa5Bk}=v\xb8\xbft \xba\xfe5\xfc\xa1\x86\xb5\x8e\xd1\x1a\n7\xe6\xe1\xd6\x92\xa7\xe8\xf9\n\x1e\xdb\xa5z\xe9\xbf\xe9|W^\x96\x83\xf4\x1f\xc7\xba\x1b\xdbQ\xed\x15\xcc\x80\xfe\x05U\x95\xb3%\xf1\xbd\x92v\xbfy\xde\xc1\xce`;G\x85\xf1\xdf\x01\x93}\xee>\x92<<G\xec\x88\x99\x84\xca~2\x1e:\xdcz\xa3\x10B\x143\x9e\x9c\x9e\xad\x9d\xea\xd1\xf3*\xe3\xe6\xee\x0btM1\xbbK\x1b\xe1\xc6\x94`\xceg\x07`D\xdc\xaaf\x05\xf9\xcc\xcb\xa6\xb5:\xf6\xda\r\xe2L\xb7\x91\x18\x81\x98!n\xd6\xdc\xe1\x8c\x17\x85\x1cH\x8e\x9d\x9c\x80]\x93\\1\xa2e\x17`G\x0f\x8c;\x92\xaf\xf7@\xbf\xc7b\x93\x07\x0f\x8a\xeb\xddG\x7f\xa0\xec\xa9\x04Y\xee&x\xdb\x02\xbe\x85\x02\x1b\xbad\xe4\x13T 0\xff\x1c4\xbd\xefk#\x07kn\xfd\x12{aM-E\xceZ\x13\xcf\xc0\xc4w(G\xb2\x80\xa5\xc1a}\x16\xdad\x98w\xcf\xf943\xf1\x9bk\x04\xcc\x88z\xfc~DR\x11\xe9\xfe:\x05\x94+\x14/\xa2\xe3\'>\xcf\xba\xd9\xd7\xde\xe8\xe0\x8c\x92\x13*\x84\xd67\xfe\x87\xef\x7f\xca=\xa2#\xb0\xf3\xf9x\x9bK\x12\xe8VT[:\xd2/\xaf\xb0R4;\xcd\'\xe60\x01AQZ\x1e\xe04\xbb\x9b\xeeb\x84\xb8\x8a\x88\xf1\x91A\x1fWy\xa7\xa8K\xf9\xd8?K\xd5Hq\x8b\xff\xdeO\xb6\x08%\x82H\xff\x8ed\xb6\x93\x9aj\r\xdaX\xe8c%`\x8d\xa2`v\x0fhj/f\xec\xbe\n\x1e\xa9\x07\x9dm\x81<\xed\x86\x83,\x06\xe6s\x90\x89\x86\xc1\xa3o\xcd\x9c(\x83|Jv\xf6\x02\\\xcd\xad\x06\x06\x9b\xa5\x0b\x84\xee\xa8\x95\x84;\xf1;\xe1aNH\x1fR\xa5\x0b\xd6_\xb1\xbf\xf5-\xed\xfa\xf1\'S\xec\x05P\xb2\x83\x8e\xd9*d~\xde\xe9\x04\x02\xc0\x02$\x9e\xc8!\x953-J\xb7\x9b\x08\x89\x8aM\xa9@\xf4\xbb\xd2\x03Y\rE\xab\xe0\xca\xdf~\xb4C\xfd?\xf0\xb8|\x8e\xa9\x9c\xf8\x0c}i\t\x82FK\xb2\xe7\xac\x07\xe3\xb4\xd1m|\xb19\xf2\x1dC\xd4\xee\xf3ip:\x92$\xf5\xe7$S|\xfb0\x7f\xd77)S\xe7s\x8f\x95\x80\xb9G\xf7\xfd\r\xb6+\xa2\x08\xd4+\xce\xd7\x82\xbf9+\xce\xbb\xa4\xd9\x9em\x85\x1f!qH\n\xfd\xf1B"\xbe\xfd<9]4}J\xab\x9d\xba\xa4\xb7\x8e\xd3q%\x8a\x92D\x9c\x11\xc9\xb9\xa9\xb4\xe6\x0c\x1f\'r\x8d\xfbE$\x03\x05\xf3\xdd\xd9?\x1bX\x06X\x069\x11_|\'Y\x17\x01\x82\xfb+\x8bdj\xfbvTh\x1f\xe6/Q\xff\x15J\x0f7\xd2\x1b\x7f\xa2e\xb0N\xa7\xab\xfd@O\xad\x9a4\x82\xf8\x0c\xec\xe5\xe0U\x0c\xc6\xc4\xf1b\xb49\x07\xfc\x03k\n\xcdSw"{G\xc7\xc5m^\xc7k\xf7\x94C\xd6\xe1t3\xeaEv\\\xf7\xc62+?\xf6\x1aFL\x84\xdc\xb4)h;\xed\xb8\x17\xf3\xd5|z\x1b\x7f\x86\xbd\xfd\'\x8c\xccqZ\x7f\x94N\xb4\xe5}\xf1\x9b\x8e.\xe9\r\x18\xc5\x91\x90\xad\xbb\xf7eWO\x06\xb0\\Z\xc1\xd2\x95="~q\xfaA#H%\xb0:\xca\xc2\xe1\xfa<\xb8\x8cYQ`\x96\xb1Yh\xab\xb9Ad}\xc5\x87Y\x9e\x80\xd9v@\x82\xc0\xf7\x13\xaa*\xe5\xaa\xb1 l_\xaa\xdc\xc3\x1a\xa5\x9d\x9cz3\xfa\x13\xbb&2\x18\x8d4\x87\xcca\xea\x13\x81\xdc\xb8\xce\xf33\x08\x13\xee\xa5\x91uC\xa7\xa5\xb6c\xa8\xf8\xa0{\xe9j\x12\xc9*#`\xef\x90\x83\x9f2\xed]\xc9h\x8a\xb0\x12\x87\x171\x14A\x1bA\xce\x1e\x13\x13\x81\x94\x16B.u\xe07\xf1\xbd\x8e\x16i\xcf\x7f\x85T\x00o-\xaa\x00\x07h@\xbd\n\t\xc8\xb9\x00\x1aQ\x00\xcc2+\x85R\xb4}\xe8\xb8\xe2M\xa4>\xc7Y\xf8})\xeal\xfe\xce\x8f\x8aF\xe1\x0e\x95*d\xea\xa2j\xbf\x14\xf1~#\x18)\nY\x1d\xb9\xc0hg\x14/KZ\x0140\xc8\xd7\x9f\xb9\x8dg(\xd8\n6\xba8\xf22\x9b\x98\x1a\x11\xf11W\xc0\x16\xae\xfb\xfe\x08\x1a2\xc4]\x10\xda\x90\x84\xe3\xa2\xa2hhY\x8d\xa1\x062\x1f\xfc\xd5sA6k\x93\x85F$\x9f\xc2\xfb\x99+bW\xa1\xe4\xcaV\xecX\x8a\x04j+\x9e\x8f\xe1\xb8D\xd5\xb56z1\xbd\xb9\x9a\x0f\xac\xba o\xb3s6\xe3~\x0c\x8f_i\xa6\x94\x18\x88\xfc4\xf5\xcb\x9f\x15V\xac\xcd\xc5R-2\x1c\xec\x110\xcb\xbd|\xfcQ`\x0b\xbb\x9e\xd8D\xed\xa0e\x9dD\xb1\x15 \xa8\t\xda\x99\xea\x825\xfa\x96\x83v\xd0\x1b1t\x96K\x8e\xe4\xfb\xea\x92\xac\xe5\xdd\xfa\x9d\xd1X\xca\xd7\xcc\xafT=+G\xe3\xe2:b|\xd1\xfd\xfex\xe7$:N\xc6z\xef\xf1LB\xb37YI\xc6\x04\xb6q\xb5\xc4\xd9g\x03*\xeb^\xc6<8w\xc6\xa6\x9f<\xc0\xbe\x12\x19\xd1f\x12Q\x129\x0fJBG\x9fFC\x99;\x9a{\x03\xba6(\xa1\x95\xf8gv\x19\xd0\x0c]&\x11\x87Q\xf3\xd7\x95g\x9a?\xa8\xe1\xc9\xef\xf9I\xd5\xa4\x95~M\x0c\x8d=\xb5f\x15\x81\x04\x12\xfa\xd1k\xff\x93\xd6\xa8\x1bneu\xef\xe6\xba\x8902>\x85{TM<\x06\xcd\xd7\xe5\x05\x8a*\x9b)\x0e\xe9\xd9Kk\xaa\xc1h\tD\xb9\xb0\xcb_)~\xaf\xcb\xce\xb0W\xf9C\xe5E\xf0\x1eJp\xcc\xca`O\xc3\x02\x1f\xf3N\xdc\x00\x80\xce\x1e&*PO2\xd5\x15*\x81\xab\xf3%9K\xfbJc\xb7}\x07\xae"\xf8o\xdb<2\xc7\xb7\xaf\x8d\x8a\x91\xfb\xf7M\xf4\xc6\x05\n%\x92\xad\x0f\xb868\xc04xkf\xce\xe7\xc2\x17VB\t\xccd\xbf\xc8\xc8\xb1\x86\xe5=\x0f\\\x84\x1b>!L\xf3\x10\x9c\x939\xe5)\x0c\x01H\xb1\'1xpD\xef)S\xab.o\xbaL\xac\x1bT\xc6CDV\xed\x9c\x83*2\xa4:\xd0Nt`n\x99\xbb\x1e\xe9\xd2\x89$\xd3\xce\x11\x11\xd0\x8fK1\xbc\x0f.\xcdt\x87\x89\x08c\x8e\xef\xfb\xbb\x1e\xcb\x8b\x88\xb2~\xfd\xbe\x97\xb9\xd2E\xaePy\xf4\xe9\x02\x0cN\xcb\x02\xbf\xda\xb4M\x1b\x10\xcd\xcc|\x15S:\xc2\xac\x99(o\x10#\x8en\xbb\xdc\x13\x0c\x17\xfc&\xf7*\x8e\x9e\xd4\xdaL\xd7\x05L\x97\x8a\xa3A\r\x83INlv\xe4\xbdi\x8d\x1c\x0cq\x02L\x96\x02\xab\xae\xc8zU\xa3,Z\xaf\x87\x10fy\xb3}\x0b|\xb5M\xfb>\xa6\x8a\xb7<8$\x96\r\xf3V#>!\x14g\x981\x15\x8e3\x0b\xc2\xa6X\xa2\x85v\xc7w\xad\xe1\x9a\x97\x1f\xe9\xf3\xd6$\xc4V\xeaR*\xf9\xfb-k\xc1\xf6Z\xe0\x9f\xb0q\xa7\xc5\x88!\x1d]{#\x9d\x11\xd9\xea~%\x08i\xf3\xc4#\xb1\x98J\xa6\xa4\x8b\xa6\x822\x9e\xc9\xd7\xb2\xb4\xf2\x9dyd\x13\x076\x8f\xa6!\x85\xa8M\t\x13E\xbc\x99\x0c\x85\x84\x98\x17\x19G}CS\xc2\x1b,\xeb\t\xa5\x8a\x05\x88\xa9\x03Uso\xc4\xf3\x05\xdf\x90b\x1b\xc8\xff*A\xef\xa86\x1f\x15\xe4\x1aU\x17d\xbc\xa87yo\x1f\x07\x00\x91a\xd8K\xa49\xc0ko(\xad\x95\xe7\x86\x8b\xd1T"\x1c\xc2o\xcf\x00\x1b%8}\xa4\xbe\x9a\xa9\x94\xbcn-\xac5%\x94l\xbf\x1a\x14\t\xac\x12\xaf\xfa\'\x9fZ\x8cBmC\xf5\xc4\x81<\xcd.\xdd\x94\x81xK\xe7<]f\x86/\xc9\xfe\xd5\xee#\x82\xbe\xdad\xb8L\x9d\x9d\xf5GU~(\xa1\xe7\x8f\xea[\xfa\xff\xeb:\xc7\xb5\t$U\xa2\x02\x8a\xc4\xfdU\x03N>8\xd5\x10f\xae\x80\x84d\x9f%\xd9\xafj\x0c\xc7\x0e(/\xce\xc3\xc7*$\x17K\xeb^\xfc\xc7R\xc2\xb3\x8f\xab\xb4\xd4\xc4\x10\xbb\x97\xef\xf1\xbakQ\xb2d\xb9\xa3o(\xa8\xa9C\x170xv\xad\xc2@\x10R-$\xbe\xea\xce\xb6*\xed\xab\xd4\xc4\xf6+\xc8M\xc358\xab&\x0b\xcf\x9dbWk4\x1e\x07;\xdf+\xe51\xc0\x00\x1f-S\xaa\xd2\x08\xa3R\x98B\xab>\x81\x84\xa5\xd7\x10\xf3:\x19\xcf`\xb8\xbe\x03\x9e\x98Bz\x96\xda\xf7[\xa3\xa4t<\xcc\x05\x0e\xbd\x95FTs,\x84T$\x1b\xf1\xe1\x87\xc5;^\x91\xf5\x10&~O\xf9\x9e\xbc\x9fn\xcd\xec\xc5\xe0\xdd\xf8k\xc2\xbe\xf8Y\xf0\xfaJ\xb1\xc9-\xe90@,B\xb0\xe0\xcb\xa8\x11s\xacAK\xc3\xfe\x1e\xe6\xbd"Y\xdbV\xe9\xf3\x1fQ\x7fk\xdd3k\x05\x1d\x08\xb0\xe5\xbfu\x13f3c\x8a\xc5\xd4\x83z_\x95>\xadS\xd9\xd0c\xc6\x7f]\x86F\xd9fU\x1d\xd9\xef|\xe3^|\xa6/\xcb\x85I\xf4\xa8:\xcd\xb8\xe4O\xe2}\xd7\x1b\xa7\xcdbq&\xe5a"\x18\xa8\x8b\xd1\x9c\x1b\xedG\x7fz\xde=\xb0p\xb0o]\x820R\xce\x8d"s\xf1\x06(\xe9\xfazi\x8d\x97q\xe6\xc6L\xff\x06\xcb\xb9\xb7\x9f\xc7#\x93q\x0cu\xcd\xde)4gXp\x1f.\xa0j\xc3?\xd8\xe1\xcaS\xcbC\xb1\xb9\xc5\x02\x12\xde<{\x04\x01c\xee\x8f\xf9}\x98M\x12g4\xd1\xbe\xa8\x84\xedxj\x01f\xc0\x8d\x86\xc8\x88\xf3.]s`\xa1\x1a\x9b\xf3\xc4\xd6\xdaw#\xe4\xb6n\xa9\xcf\x00\xe0V\xa6\xe9]\x97\xb3\x89\xbd\xd0\x06c\xac\x8b\xa6\xba\xd5J\n\x19\xd0\xa8\xac\xe3\x8c\x0c\x92l\x1d\x8f\xfb\xea>\xeaC\x99\xaa\x1aN;\xeb\x0e\xa2U\xbf\xb4\xdeA\x1b\x17\xa4\x80\xe6\x8b\x0f8\xc0\x83\xf0\xe9t\xb64\xf8\x10QN2~\xa9\xd4d\xb1\xa0\xb9\x11$@\xe7\xab\xe0\x8b\xac\xa8\x11~\xfdvRc\xadm\x06\x913\x1b\xba&\xfcM\xa7\xb67\xc1\x12\xd50t4\xd1\xfaj\xc4\xca~\x8f0\xb4P\xdb\x10<\x8a\xcew\x9b\xff\x05FK\xad\x80\x1c\x8f\xa1tzc\xa6\x0f\xcaj\xd7\x92O`f\x95P\x13\x86Y\xf3mEa\x98\x1fKA\xc8"-pw\xed=\x17\xac\x1bP8\xdb\x8f\xf2\xb2\x06\xcb\xfc\x85\xc8\xe9\x91\xd9\x0f\xe9\x97\x1af&\xc7yMJ\xdc%\x83n\x84\xcb\x13\xda\xbd\xe8\x90.\x14\xd9\xc7\x9f\xc3\xa69\xd1|\x84A=J\x19K:]kX\xdc\xd8v\xd4\xc1\xc9\xfdqs\xf20/e?\x8c\x07\x9b\xfe\xd1\xf1\xed6#0\xe8\xed\x11\x104\'k\xce\xa4T\x0f2s\xe6\xdc|lB1\xf4\x9e)\x88\x04o~{\x88\xa0\xb0\xd8\xce\xc3S\xac*\x8b*\xa0t!\xc7J\xef<\x87I\xfb\xea\xae\xcevr\xb3\xbf\x81\x0bMLc\x89\xce\xda\x95R\xc2j\xabK\x16Az\xf4\xcf\x00|\xeb\xef\xa1\xcd\xdd;J`\xa6\x01\xb3;S\xbb\x93\x1b:Sf\xd4\xf9\xaeEi\xc5c\xd4\xee\xa6pu\xf7)e\x0c\xd4K\x12\xee\x8d\x17\x8a\xd5\x03\xc8H\x90_G\xba2\x90\xdb^\xcb\x8eA\xfc}D\x1a\x92\xc4\xcf\'\xa4\x9da\x1f}\xc1z\xb7\xdd,P\x9f\xe8?\xbe\xfe.\x9f\x02\xe4\x82K.X<\xc5\xd4u\x91\xcd\xffx\xdeq\x08j\x17B\xefy\xa11\xc3StG\x87\x82\'\xd8\xfa\xf1\x9cH\x80Mq\xba\xaf>\xb3!\x97_|\xbf\x1a)\x99Sp\xef=\x88`\xa4\xdcT\xbaSP\xb0dBFE\x95(\xb9\x04\x99sSrm+\x1b_b\x8e\xb2D\xcb\xfa\xf0*"\x86U\xcf\x13r\xc4\xc8gu\xfc\xb3\xb4\xb4\x89-\x13\xde\xc7\xd9K{0R\x9ec9O \x9b\x84\xc1o1~\x03\xfcv\x1e\xe9>\x08J\xed\xcb\x82b\x19\x1d\xde\xbc\x84\x871\x1f\xb3_\xbf\xa55\xa29\xd6\xe0\x04#(%\xc6 \xd8\x1e\x15\xaae\xad\x02\xf5\x1d\xed\xe6\xf00\xe7\xab\xc5\x1b\xaf:)\xa1\'\x93*\'\xc2\xaf\\\xf9\xa3\xfc\xccF\x04\xf1\x12\xbc\xd11\x0cW\xad\xd7\xa8%\xf6\xf3\x15\xa1\xdd\xfd)\xe0\xfd"\xae\xaf+\x90\ny\xd8\xda\xfa\xac!#\x85\xf6\x0fyO/N\xdf\x97\xd3\xf5\x16\xdfZ{\x82\xc5[y\x99\x12\xed\x08EQn\xdf9B\xcd\xa8\xb9\x8f\xfb\xdc\x82\x9e\x03jH\x11\x93\xa6%\x9c\x84EW\xf7\xc7\xec\xe5\x84\tN\xf1\xdc\xa3\xfa\x12m`\x8b\xf9J\x90E)X\xac?\xdd\xab\xf4\xb6<\x03\xea\x17\xe5\rQ\x06\xe6j\xb53~1@\xe4\xf6~\xa6wu\x1bya[\xebw\xee\xfe\xd7P\x8a\x7f\xd2\x06\xfe\xc8\xff\\E\x98\xcb\xee\x85\xaf\n\xd5\n\xf1+\xb8\x17%k\xcdy\xc9\xdehU\xfa\xf5G\xbb\xd1q\xc3\xedL\xd7\xca\xd8e\xc8a)\x1f\xfb\xd9\x144\xc0\xab\x82\xe9\xd1[\xc5\x97\x0c\xca\x19\x88\xee=\xa8\xaa\x9bZ\x13\x1f\x8a\xb7\x82\xe2\xa4\x17\xbe\x1f \x1e\xbc\x14\xa0\xa0\x97\x17\\jk+\xfb\xd0\x12\xe4\xb8\x84\x83\x8b\xb3^-\xec\x833\xb55]\xaf\xcc\xc8y#\xcf\x01o\xd9\xc7m=@p\xa2\x8e\xbf\xbc\xea\xe0K\xbb\xf24\xe6\x0c\x1d\x97\xe0\x0f\xa4\'p\xb7+2\xcc\xfeC\x1d\x16\x93\xf3g*\x06o\xb0\x04\xcc\x1a\xbf~=\'\xc1\xb8P]\xba\x9f\xdb\xee\x8f\xac\xfd\xfe]*\x0e\xee\x85p\xea\xda\xcd\xc5\x86\x06\x8e\x91\xf6p\x1d\xa7>\xe8k`\x12~\xb5\x89\xe8\x96\xea\x15\xd0\xb4\xff!\xc7\x0b3]\xf6\xe7\xd9\x07\xe1;$I\x96<\xe4_"\x7f\x1c\xa7\x9c\xd3\xf9\x8b\x18f\xa6 \x9cxY\xa1\x16\xcb\x15\xbbZ\x1c}C\xb5\x1b\x06#\xb6\x03`\xd8I1\xdb\xa5\xf0-\xe9\xe5N@4@\x88<<a?z~\xe8\xd7\xaa\xdf,,\x1aK\x94\xe4\xd9\x0e\xd4\xb2\xbb\xcax\xb2\x11:\xd8\xf0\x95>0\x0f\x8b\xb8\x0b\x99(\xfb\x01\xc5]<\xf4\xd3\x838\x9d\x8en\x1d\xe5\tw\x80`\t\x0f]\x9cg\xcb\xfc\x1b\xfdPZ8\t\xdc3{\x88\x8e\xdf\'\x85V\xe4\xa2PX\x11\xa6vb\'ZD\x81\x05\xf4\t:\xfb\xcan\xa2\xcd1S\xb0 &\xb9\x14z\xbe\xe9nuz\x9fv\x80\x0b@\x95\xd9cd\x7f\xc8\x9e\xd1\xbd`\xa4\xb5\xc4{8\xc3i\x94\x85\xac\xb5\xc8\xdbP(\xe3\xba\xca\xbf\xc5N\xe4\x83j\xa5\r/\x8d\xd5\xfeP\xb8\x8f\xec\x8e\xe6Dk*\x1a\xa4\xbb\xf8\xdf\xc8\xac#<\x95\xcc\x10o\xa1yT\x07p\xa3\x8a\'-\xeb\xcc\xf6"\xed\xae\x9b\xea\xf6\xc5g\x1f2\x14eLxQ\xda\x19V\xc6\xaa\xb8\xdba \xd3c_H\x84\xb5\xf8\xa0\x96\xaewm1\x9f\x9b)\xd8_\xa8Q\x9b\xe2\xec.\xbc\xaf\x11\x88\xc1\xff\xedj\xcf\xa1;h\xd2\xbac\xbed\xd0\xdf\xc1\xd6\xbfr\x97\xf6o6\xb5\xd1\x1c\xd4\x1f\xd0@\x87\x8f\x0e\xa4z@_AX\x0f\x8f>\x96W@\xa8\xb6\xe3b\x01\x8f\xcd\xef\xfaY\x82O\xd3q\x8c\x1a\xb8\x97j\xb7E\xf7n\x12\xee\xc4W&[\x80\x19\x12\x90\x9b\xc3\xb3b\xbfu\x1c\xb0\xb3b\xce\x801k\x98O\x1e\x9e\xf1\x19Z\xadcj\xbd\xc4X[\xf5 \xa23\x80\xbd\xe6M\xbe\x94q\x83\x0b\xfb\xe3F\xbet%H\xa67\x166:\x8a\x1e\xf48\x14=e\xefw\xf8\x88\x07\x88\x98\x8d\xa0\xab\x8c\x08%!t\x10\xf6\x90\x12af\x82n\xa5\xb7\xe3\xa4\x0b\xc0\xa1\xf28\xedm\x96S"\xbb\xb4\xa3\xdd$\x8b\x19\x94\\\x83\x89C\xe5\xa0>\xc9q\xa4,\xfd\xdc\xc1\xd2\x86Un\x8c\x82\xedE\x86\x02\xc36\xbfJ\x8fO\xaf\rI\xf1\xbc\x8d\xb1a\xf3(\x87@t\xcf\xdd\x97(\xcc\xb6P\xd9\x15\xda\\\xa0\xc5,\xea$z\xa8\xdb,\tA-P\xb5?\xd8\xcdC\x86\xc8\x8c\xfdu\x93 \xc7\x92/\x1c3\xf5\x8c!\x987\xa7D\x8d*\x11\x19\xd7\xbd\xa1\xa0\x1e\xc8\xbc\x80\xd4\xbf\xae\x1bi\xa8O\xe2\xbe\xe0\x07\\\xaf\xf6BQ\xa8\xd6\xac\xa5k\x8bK+\x84\x07\xdf\xfc\xeb\x16#\xea\xa0\x8clC\xc5\xf1\xcf\xd6H\xf7\x8d\xd7Dm0\xea\xff\xfdv\xcc\xcf\r\x07\xb2`\xa0\x92\xb6\xa6\xe2F\x10\xb4>h\xc1\x9anK0W\x91\x12)\x8d\xcb)\'\xc6\x0c\xb5\xd6"\xc9\xf5\x16\xe4\x88\xf9\xaa\x85lOi\xa6\xeb\xe1\x04\xd4\xee\xa7R-\xcd%\xdf{\xdbti\xc5w7\xe3@\xf7 \xf1\x0f\xbcgU$\xe4R\xc0\x9cO+\x14n7P\xec\x0c\xeeNJ\x95\xd0O\xf0b"\'\xcc\x9a\x07\x96\xa1\x88\xbc\xdaTgCT\x87)^\xba\x0c2\x19\xd3J\xf8c\x10\xdc\xe4\x90\x98\x15\x82{<r\r=\xc4U\x06W0\xbef \x17\x80\xd7\xb7\x1b\x84\xe0\x1d\xbc> \xd1\xcdDU\\\xad\x1e\xb5\xde\x14^0\xc8_\x06\xc5\xa3\xa4\xa9\xaa5\xa3\xb9\x9a*\xbfh\xc05\xb5\x07K\xff\xc3X\xf3>\xdc\t0\x8b\x87\xeb\xdb\xa5\xb1\x1e\xeb\xbd\x11Y\x8d:\xae\x8aO\xea^\xef\xc9\xa2\xc37U\x02\x8e"\xb6#K\xd1xM\\\x0c+\x8f\xa9\xa8H\xe8\x13\x9dD\x17\x17\xd2G\xdd\x1dW\x1b\x1f}QG\xb61\xc7\xa6\x9c\x00\x07\x80\xde\xa5\xc3\xdb(\x07k\r\x04\xa5\nB\x94U\x80\x8ea\xf8\xfcg\x13\xb4\x95-CNk\xf8\xd5\xe9\x86f\xb5\x8eV\x0f\xbc\xfc\xa5\xd27P\xd8!be1#b}H\x9f\xc4\\~\x96+\x19\xfa\xe6d\xa3\x98\xf9\xb3\x1dQ|t\xd7W>\x92-/|\xaa\x7f`xy\xacQ\x19\xbdP\x06\xae\xfeL~\xd5\xa7\xa3\xba\x93\x08\n\xc7\xff\xca\xaa\x99\xc4\xd6F\x95@\xc9c\x02\x11T\r\x97\xd2}E\xc4{K\x17e\xcf\x16&W\xec\x1e\x7f\xc6\x85\xb9?Z\x9f\xc3\x83\xe3K\xee\xb1\xc7A\xba;\xf4\xa1\xb9\xc0L>`?\xe7\x1c\x9f\x13\xf7\x8cH\x08*\xd6\x15\x0cU\x80\xb1\x89\xa0\xb7t?\xed\xc6\xaf\xb6p\x90\x0c\xa3\xfa\xc6\xaa\xd6*\xe4\\D\x9dd-\xf4\x07\x97@\x89rw\xd3\xbe\xa4\xc2\xa6\x87:\x981\xa5\xe2S\x91\xe8\x13C\xe6\xf5t\x1f\xf6v\x16_\xf6\xf9v\x00\xaaW\x8a\x8f,\xc6\xb5\x80T\xe0\xe7\xe2.\xe6\x1cW~(\x7f\xd9W`\x106zE\xeb\x1f\x0cN\xeb\x84\x03\x04} \xff\xf8\x9d>p5\x001\xa8\xd4*\xf1,\x18\x16\xd2>k\xabPH\xcfn\xff\xc7\xb9\x10M)V&\x13\x95\x80\xa9\xe4b)\x84\x80\x8cu\x1ae\x07\xde\xf79\xa9\x1a#4\x15\x00[\xa9,\xe1\x1c=\xa2hL\xb7h\xe7\x13\xd1\x89\xdf\xaa\x08$\xb43\x1f\x14\xad\xaf\xc7\xdbd#^\x0ch,\xcdZ\xe9\xd4\x0e\xc2\xa8\x95u9\xcc\xf2eg\x02\x9b\x8c\x9cG\xa61E\x1b\xa4W8\xb4\x95AspFB\xe63\xb8\xaaQ@Nq\x87\x17\n\xd8\x86M\xad\x8cx\xb1\xb0\x04\xc7M\xe8>{\x9f\x04}\xd7t\xab\xac\n\xd2\xaab\x0b\xf7\x873/\xed\x18\xda[\xa7\t\xc7:w\x91\x98\x0bPdi\xfc\x12\xce.\xfe\xe8\xb1\x0bws\x8d\x1d\x83\xd3\x88T\x89~\xa7\xe4\xf9^Dym\xcd^.r\x95\x18\xc1\x91\xaf\xa5\xc6h\x86\x8c\xfc\xc3\xcai-\xb3\xdf\xd8\xea\x82e\xd7\xcc\x15}o\x0c\xf9\xe6\x943I\x854]\n\xbd_\xfa\xea\x93\x85\x14\x04\xe8\x99\xa2\x90\x8a_?{\x15\xc6\x85U\xbc+\xd4\x01D\x8cM\xb8\xbaF\xc4\xa4\xd5O\xb1\x94RL\xfb{\xeb\xa8\xd2\x1a\xce\x8dg\x81\xf0\xdeN\xd4\xa1\xd5\xde\x90L\xff\x15b\x04\xa0\xa5jK\xfb\xedB\xf5\n\x87\x95-\xdcK\xa8g\xf1\x871f\xa2\xe2}\x84\xb8\xa3\x05\x12j5\xbc\x02\xe3\x01(\\\xfb\x83w\xf2\x8b\r\x81.AU\x8f\xd6&\xbf=\xe1\xdc-\xcb\x0c\x12\x05\x12X\x80\x90\x11\x19(\xa6zT\x9b@\x85R\xa4\x1dTy/5\xa3/:\xd3\xdd\xe1\x0e\x198\x15Zq\xd9s\xb1+\xda\xe7"\xce-\xbfa\x8f\xe5\xdd\'\x97!\x9f\x9a\x89|@\x05\x19\xeef\xee\xb2\xc4!\xb5\xc4\x9c\xa9%2\x94\xa1\xb4\xb9\xdc\x96\x03\xd4\xcb\xf28\xca^\xe93\x07\x02\x9ds7\xd0\x86\xee\x8b\xa9+\x15f\xb9p=\x05k\x03\xff\xa0Jr\x84\x98\xafZ\xc8;=\xb8\xab\xb8\x8b@\x83:\xef\xf3\x9e\x81\x8b\xe3\x9c\x9e/\xf6\x8b\x07\x8dV\x8a\xd6&}`\x177\xa1\x05\x83\xd6\x12p\xfe\xfd\xd0\xc2\xd0:\xd0\x8f\xb8\x1d\x0f\xfc@\xc4\xbdL\xb0\xd9\xeb\xa3m\xe8\xf11|\xf4\x1e?\xc5G\xc6pSZ\xd6jZ\x0f[\r_<\x03\x1aOsr\x8e\x7f\xbb\x8a#F\xfd\xe1\xc1u\xaeN\x11\xb5\x07\xd7\x18^]Y1\xabY\x7f\xb5|\xc3\xa7\x86\xc0\xdd(\xb2\xd4\x9c@<\xd1P\x86<a\x139\xd80+\xb7\xf2\xaa3S\x0c\xc9\xf5\x18\xd3\x99:\x84\xbdh\xa3\xfe\xa9*\xe9\xden*KA\x80\x07\x02\x04\x92B\xc5\xab"\xf5\x8eAbhvxv\t\xdd\x14\xec\x0b\xb5\xbc@\xd4\xa0\xf5YR\xe9\x8a%\x01\xe47\xb6\xd8^2\xb0!\x8b\xe7:\xac\xad\x02rTr\x98Q\xe6\x8f\xe3\xc8\xcc\x87\xf8\xbe+\x8fX\x107P\xff\xc1}g\xf6\x1bN\xd4<y)\x96\x05H\x1a,\xd6\x82\x1f3ih\x115\xd9\xc0\xf8\xa6\xff\x9d\xadqO\xff\xef\xd9\x9c<xO\xe9\x1c4B\xd0\x0en\xbd&H\xc0\x0fb\x00\x05\xb7rl\xdeqi\xe7+l\x1d\xee$\x82k\xbb\x18~.\x19\x8d\x95\xf0^s\xc8XZ<"\xe1\x18\xaca\xd5\xf0f\xf2@=t\xa3\x80Y\xb6\x8fYu\xab\xf5\xc4\xfa\xea&\xcc\xf3\xa4HS\xd5r;t:\xaf\x0e\xfc\xb6:\xfc\xc2\xb0\xbat\x0b\xad\xc8$\xd8\x0f^\x98\x9e"\x8b\xdc"b\xe1\x8d\x10\xdb^\x0ca\xea\xd6^\xf0\xed[lT\x10\xddf\xa8X\x98\x0f\x831\xfdZ\xd0l8<=\x1c\xc7\x9f\x19{\xe7\xf7\xe8\x91\x0f\xd8eQ\x04\xf8\xc6W\xe2\x15\x101P\xc4\x1456T\xe3\xc2\xff;g\xe3\xf7W\xb2P|\xfa\xae\x16_1\xbc\xa2;\xb2+Q\xe0\xdb\xa9\xc2?0\t\x0e\xa1^+eg\x83\x12!\xc4\x8f\r\xa3\xd3*l1y\xef.\xab\x18\xd1\xbc\x7f\xfd\xc1;\xdcU\x0f\xdd(2\xce\x17\xe4\x92\x8d:\xe0\x9e\xf7C\xedaY\x9fS\xc0\xec\xf4\xc8\'q\x94\x9a\x9434u**\x88\xe7\x10q\xe0\xf6y`\x9fR\xb2\\A\x9e\x0c\xc9\x8c\x04\xc5\x1b\x0f\xf2\xca\xe1\xb2\x11\xadZ2\xe2\x8f\xe9%\xf9\x8e\xa5RD\xfe\x1d\xc5\r\x85\xb6\x91\xa4\xf4M\x9aI\xee\xf4\x08@\nf\xa88rb\xc9\xcd\xc4\xa0\xb0,\x14\x85A\xee\x9b\xb7>\xf3\x8208L\x91T\xbc\xc8\xe8\xb4\xc8\xf9\xb4\x96\x1a\xfc\x13x\xd07\xa9\x97\xed\x15/:\xc2\x8a\x00\xb0\x96\x1b/\x8d\xda\x9dS\xb3XV\x80\'\x1d\xc7\xd8\xc9]\n\xfaX\x0fS7\xa2\x1d\xf4K\x07\x07XJ\xe6%\x9dId\xab\xef\'\x06\x05\xbe\xd0\x8fE:\x00\xf5\x8e\t59\xdd*i\x19\x08\x1d\xf4\x96\x88\xf6\xed\x1c\xec\xa2y\xd5\xde\xd9N\xf1\xcd\x8d\x9as&\r\x06.\xc1MG\x97\x11\x95hM\x0e\xac\xae\x15\xac\xe0S\xf0/\xac\xdft\xdcHN\x15aW\xb8\x80\x85x\xe4\xae\xc8,5\\\xd8\xde\xf3;2\xa2\xc7.\xe4S\x90c]\x0c\xb6\x89\xe6}\xb16w\xd5/\x90\xe9j\xe6/x\xb9\xbcYO+*Y\x82q\x8e\x1e\xc8`\xfdO\x88\x1c\xc9\xd5n\x1e\xa3azB\x1a\x05\xfd\x9aV\xea\xfc\x80\x13L\xad\xa4c\xfc\x11\xc3\xc3+\x8b\xe4\x03t\xdd\x8f`\xe4\xcc\xb1^/\xed\xcb\xc0\x00\xb7\xa1\xfd\\\xf3\x8d\xf0\xf0~v\xbc\xbb6#5\x089\xb7\x83[\x89\x9d\xfa\x1f\xb1+\xe2w\x92\x99\xe72\xdf\xa5\xd7\xab\xbb\x1c\x95\x0b\x0f\xc9\x92\xca\xec\xc2\x85\x0c\x97\x94\xce$\x8cL%\xa3\xa3\xf7\xe5\x9a\x85X$\xed\xc4~\x92\x7f\x12\xb8}\x97\xed5q\x0b\xfc\xefC \xd3\xb6\x01\x07k\xe7(G\x9f;\x1f\xbd\xb93~\xd6\xc8\x16\xb1\x8aZZ!\xebi\x87.-t\xc6\xfd\x97$\x00d`\xb69L\x022\x01\x00Q#W\xfd\x8f')
|
1
|
+
|
2
|
+
from flask import abort, render_template,request,Response,g,url_for,jsonify
|
3
|
+
from wtforms.validators import Regexp,ValidationError
|
4
|
+
import urllib,uuid
|
5
|
+
import datetime
|
6
|
+
from hiddifypanel.models import *
|
7
|
+
from hiddifypanel.panel.database import db
|
8
|
+
from hiddifypanel.panel import hiddify,clean_ip
|
9
|
+
|
10
|
+
from . import link_maker
|
11
|
+
from flask_classful import FlaskView,route
|
12
|
+
import random
|
13
|
+
from urllib.parse import urlparse
|
14
|
+
import user_agents
|
15
|
+
|
16
|
+
|
17
|
+
class UserView(FlaskView):
|
18
|
+
|
19
|
+
@route('/old')
|
20
|
+
@route('/old/')
|
21
|
+
def index(self):
|
22
|
+
|
23
|
+
c=get_common_data(g.user_uuid,mode="")
|
24
|
+
user_agent = user_agents.parse(request.user_agent.string)
|
25
|
+
|
26
|
+
|
27
|
+
return render_template('home/index.html',**c,ua=user_agent)
|
28
|
+
@route('/multi/')
|
29
|
+
@route('/multi')
|
30
|
+
def multi(self):
|
31
|
+
|
32
|
+
c=get_common_data(g.user_uuid,mode="multi")
|
33
|
+
|
34
|
+
user_agent = user_agents.parse(request.user_agent.string)
|
35
|
+
|
36
|
+
return render_template('home/multi.html',**c,ua=user_agent)
|
37
|
+
|
38
|
+
@route('/new/')
|
39
|
+
@route('/new')
|
40
|
+
@route('/')
|
41
|
+
def new(self):
|
42
|
+
|
43
|
+
c=get_common_data(g.user_uuid,mode="new")
|
44
|
+
|
45
|
+
user_agent = user_agents.parse(request.user_agent.string)
|
46
|
+
|
47
|
+
return render_template('home/multi.html',**c,ua=user_agent)
|
48
|
+
|
49
|
+
@route('/clash/<meta_or_normal>/proxies.yml')
|
50
|
+
@route('/clash/proxies.yml')
|
51
|
+
def clash_proxies(self,meta_or_normal="normal"):
|
52
|
+
mode=request.args.get("mode")
|
53
|
+
domain=request.args.get("domain",None)
|
54
|
+
|
55
|
+
|
56
|
+
c=get_common_data(g.user_uuid,mode,filter_domain=domain)
|
57
|
+
resp= Response(render_template('clash_proxies.yml',meta_or_normal=meta_or_normal,**c))
|
58
|
+
resp.mimetype="text/plain"
|
59
|
+
|
60
|
+
return resp
|
61
|
+
|
62
|
+
@route('/clash/<typ>.yml')
|
63
|
+
@route('/clash/<meta_or_normal>/<typ>.yml')
|
64
|
+
def clash_config(self,meta_or_normal="normal",typ="all.yml"):
|
65
|
+
mode=request.args.get("mode")
|
66
|
+
|
67
|
+
c=get_common_data(g.user_uuid,mode)
|
68
|
+
|
69
|
+
|
70
|
+
hash_rnd=random.randint(0,1000000) #hash(f'{c}')
|
71
|
+
resp= Response(render_template('clash_config.yml',typ=typ,meta_or_normal=meta_or_normal,**c,hash=hash_rnd))
|
72
|
+
resp.mimetype="text/plain"
|
73
|
+
resp.headers['Subscription-Userinfo']=f"upload=0;download={c['usage_current_b']};total={c['usage_limit_b']};expire={c['expire_s']}"
|
74
|
+
return resp
|
75
|
+
|
76
|
+
@route('/all.txt')
|
77
|
+
def all_configs(self):
|
78
|
+
mode=request.args.get("mode")
|
79
|
+
base64=request.args.get("base64","").lower()=="true"
|
80
|
+
c=get_common_data(g.user_uuid,mode)
|
81
|
+
# response.content_type = 'text/plain';
|
82
|
+
|
83
|
+
resp= render_template('all_configs.txt',**c,base64=do_base_64)
|
84
|
+
res=""
|
85
|
+
for line in resp.split("\n"):
|
86
|
+
if "vmess://" in line:
|
87
|
+
line="vmess://"+do_base_64(line.replace("vmess://",""))
|
88
|
+
res+=line+"\n"
|
89
|
+
if base64:
|
90
|
+
res=do_base_64(res)
|
91
|
+
resp= Response(res)
|
92
|
+
resp.mimetype="text/plain"
|
93
|
+
resp.headers['Subscription-Userinfo']=f"upload=0;download={c['usage_current_b']};total={c['usage_limit_b']};expire={c['expire_s']}"
|
94
|
+
return resp
|
95
|
+
|
96
|
+
@route('/manifest.webmanifest')
|
97
|
+
def create_pwa_manifest(self):
|
98
|
+
|
99
|
+
domain=urlparse(request.base_url).hostname
|
100
|
+
name=(domain if g.is_admin else g.user.name)
|
101
|
+
return jsonify({
|
102
|
+
"name": f"Hiddify {name}",
|
103
|
+
"short_name": f"{name}"[:12],
|
104
|
+
"theme_color": "#f2f4fb",
|
105
|
+
"background_color": "#1a1b21",
|
106
|
+
"display": "standalone",
|
107
|
+
"scope": f"/",
|
108
|
+
"start_url": f"https://{domain}"+url_for("admin.Dashboard:index" if g.is_admin else "user2.UserView:new_1")+"?pwa=true",
|
109
|
+
"description": "Hiddify, for a free Internet",
|
110
|
+
"orientation": "any",
|
111
|
+
"icons": [
|
112
|
+
{
|
113
|
+
"src": url_for('static', filename='images/hiddify-dark.png'),
|
114
|
+
"sizes": "512x512",
|
115
|
+
"type": "image/png",
|
116
|
+
"purpose": "maskable any"
|
117
|
+
}
|
118
|
+
]
|
119
|
+
})
|
120
|
+
|
121
|
+
@route("/offline.html")
|
122
|
+
def offline():
|
123
|
+
return f"Not Connected <a href='/{hconfig(ConfigEnum.proxy_path)}/{g.user.uuid}/'>click for reload</a>"
|
124
|
+
def do_base_64(str):
|
125
|
+
import base64
|
126
|
+
resp=base64.b64encode(f'{str}'.encode("utf-8"))
|
127
|
+
return resp.decode()
|
128
|
+
|
129
|
+
def get_common_data(user_uuid,mode,no_domain=False,filter_domain=None):
|
130
|
+
default_asn=request.args.get("asn")
|
131
|
+
if filter_domain:
|
132
|
+
domain=filter_domain
|
133
|
+
db_domain=Domain.query.filter(Domain.domain==domain).first() or Domain(domain=domain,mode=DomainType.direct,cdn_ip='',show_domains=[],child_id=0)
|
134
|
+
domains=[db_domain]
|
135
|
+
else:
|
136
|
+
domain=urlparse(request.base_url).hostname if not no_domain else None
|
137
|
+
if hconfig(ConfigEnum.is_parent):
|
138
|
+
from hiddifypanel.panel.commercial import ParentDomain
|
139
|
+
db_domain=ParentDomain.query.filter(ParentDomain.domain==domain).first() or ParentDomain(domain=domain,show_domains=[])
|
140
|
+
else:
|
141
|
+
db_domain=Domain.query.filter(Domain.domain==domain).first() or Domain(domain=domain,mode=DomainType.direct,cdn_ip='',show_domains=[])
|
142
|
+
if not db_domain:
|
143
|
+
db_domain=Domain(domain=domain,mode=DomainType.direct,show_domains=[])
|
144
|
+
print("no domain")
|
145
|
+
flash(_("This domain does not exist in the panel!" + domain))
|
146
|
+
print("HI")
|
147
|
+
if mode =='multi':
|
148
|
+
domains=Domain.query.all()
|
149
|
+
elif mode =='new':
|
150
|
+
# db_domain=Domain.query.filter(Domain.domain==domain).first()
|
151
|
+
domains=db_domain.show_domains or Domain.query.all()
|
152
|
+
else:
|
153
|
+
|
154
|
+
domains=[db_domain]
|
155
|
+
direct_host= domain
|
156
|
+
|
157
|
+
# if db_domain and db_domain.mode==DomainType.cdn:
|
158
|
+
# direct_domain_db=Domain.query.filter(Domain.mode==DomainType.direct).first()
|
159
|
+
# if not direct_domain_db:
|
160
|
+
# direct_host=urllib.request.urlopen('https://v4.ident.me/').read().decode('utf8')
|
161
|
+
# direct_domain_db=Domain(domain=direct_host,mode=DomainType.direct)
|
162
|
+
|
163
|
+
# domains.append(direct_domain_db)
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
# uuid_secret=str(uuid.UUID(user_secret))
|
168
|
+
user=User.query.filter(User.uuid==f'{user_uuid}').first()
|
169
|
+
if user is None:
|
170
|
+
abort(401,"Invalid User")
|
171
|
+
|
172
|
+
has_auto_cdn=False
|
173
|
+
for d in domains:
|
174
|
+
db.session.expunge(d)
|
175
|
+
d.has_auto_ip=False
|
176
|
+
if d.mode==DomainType.auto_cdn_ip or d.cdn_ip:
|
177
|
+
has_auto_cdn=True
|
178
|
+
d.has_auto_ip=d.mode==DomainType.auto_cdn_ip or "MTN" in d.cdn_ip
|
179
|
+
d.cdn_ip=clean_ip.get_clean_ip(d.cdn_ip,d.mode==DomainType.auto_cdn_ip ,default_asn)
|
180
|
+
print("autocdn ip mode ",d.cdn_ip)
|
181
|
+
if "*" in d.domain:
|
182
|
+
d.domain=d.domain.replace("*",hiddify.get_random_string(5,15))
|
183
|
+
|
184
|
+
|
185
|
+
package_mode_dic={
|
186
|
+
UserMode.daily:1,
|
187
|
+
UserMode.weekly:7,
|
188
|
+
UserMode.monthly:30
|
189
|
+
|
190
|
+
}
|
191
|
+
bot=None
|
192
|
+
if hconfig(ConfigEnum.license):
|
193
|
+
from hiddifypanel.panel.telegrambot import bot
|
194
|
+
|
195
|
+
g.locale= hconfig(ConfigEnum.lang)
|
196
|
+
expire_days=remaining_days(user)
|
197
|
+
reset_days=days_to_reset(user)
|
198
|
+
# print(reset_days)
|
199
|
+
# raise
|
200
|
+
if reset_days>=expire_days:
|
201
|
+
reset_days=1000
|
202
|
+
# print(reset_days,expire_days,reset_days<=expire_days)
|
203
|
+
expire_s=int((datetime.date.today()+datetime.timedelta(days=expire_days)-datetime.date(1970, 1, 1)).total_seconds())
|
204
|
+
|
205
|
+
user_ip=clean_ip.get_real_user_ip()
|
206
|
+
return {
|
207
|
+
# 'direct_host':direct_host,
|
208
|
+
'user':user,
|
209
|
+
'user_activate':is_user_active(user),
|
210
|
+
'domain':domain,
|
211
|
+
'mode':mode,
|
212
|
+
'fake_ip_for_sub_link':datetime.datetime.now().strftime(f"20.%y.%m.%d:{max(1,datetime.datetime.now().hour)}"),
|
213
|
+
'usage_limit_b':int(user.usage_limit_GB*1024*1024*1024),
|
214
|
+
'usage_current_b':int(user.current_usage_GB*1024*1024*1024),
|
215
|
+
'expire_s':expire_s,
|
216
|
+
'expire_days':expire_days,
|
217
|
+
'expire_rel':hiddify.format_timedelta(datetime.timedelta(days=expire_days)),
|
218
|
+
'reset_day':reset_days,
|
219
|
+
'hconfigs':get_hconfigs(),
|
220
|
+
'hdomains':get_hdomains(),
|
221
|
+
'ConfigEnum':ConfigEnum,
|
222
|
+
'link_maker':link_maker,
|
223
|
+
'domains':domains,
|
224
|
+
"bot":bot,
|
225
|
+
"db_domain":db_domain,
|
226
|
+
"telegram_enable":hconfig(ConfigEnum.telegram_enable) and any([d for d in domains if d.mode!=DomainType.cdn and d.mode!=DomainType.auto_cdn_ip ]),
|
227
|
+
"ip":user_ip,
|
228
|
+
"ip_debug":clean_ip.get_real_user_ip_debug(user_ip),
|
229
|
+
"asn":clean_ip.get_asn_short_name(user_ip),
|
230
|
+
"country":clean_ip.get_country(user_ip),
|
231
|
+
'has_auto_cdn':has_auto_cdn
|
232
|
+
}
|
233
|
+
|
4
234
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
235
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -163,4 +163,15 @@ legend {
|
|
163
163
|
.sub-sidebar {
|
164
164
|
background-image: linear-gradient(195deg,#185f9d,#135085)!important;
|
165
165
|
width:200px;
|
166
|
+
}
|
167
|
+
|
168
|
+
.dark-mode .ms-choice{
|
169
|
+
background-color: #343a40;
|
170
|
+
color: white;
|
171
|
+
}
|
172
|
+
.dark-mode pre{
|
173
|
+
color:white
|
174
|
+
}
|
175
|
+
.dark-mode .callout a{
|
176
|
+
color:#b0b8bf
|
166
177
|
}
|
hiddifypanel/templates/500.html
CHANGED
hiddifypanel/xray_api.py
CHANGED
@@ -1,5 +1,111 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x7f\x15\x00\x00\x12\t\x04\x00\xd5\x85g\x82\xc8\xef\xd8\xea\x93O)\x9c\xed\t\x98s\x00\x00\x00\x00\x00\x00\x00\x00\xb1\xf0\x7f\xb4E\xae\xda~\r\xa2\xd9\xb4\xfbu\xaby\xe0\xffs\xc0\xe6E\x051\xadJh\x02\xc5\xc88\xb8\x8c\x12m\xdd\x99?\xbb\xd8\xe0\x9d\xe2t\xadm>t\xda\x88.\x01\xff$\xda\x04[\xb9\x0b\n,\xa9\xd9oLp\xd6\xa4\xae\x02Tt,.\xba\x03x\x90\x83{\xc2\x80\x05\x81\xd84\xec\xf22\x12\xe9\xe3h*\x0c\x15\xfe\x03\x9e!\x10VjC\x04\xf99_]\x16\x84&\xb9O\xb4\x8a\xf6\xbf%\n\xaf}\xb0#\xf8\xfd6\xba\x97M\x0fG_\xaa\xcc8lGPS\xc4b\xad\xecb\xa9\x96\xdc\xb7\x8f\xb1\xfd\x98\t}b\x88\x99\x9e\x9b\xc11\x0cBK;\x8f\x05\xa4@\x8a\r\xabW\x91x\xc9\xd6mu"\x81\x10E\xa5:N\xa3\xddgt\xeb\xf4\xa8\xdcz+5\xa1\xa4\x8dC\xd6\xf5\xa24\x95\xe8\x0f\x1c\xf7I\xd9\xea\xb9K\xbd\xeecr\x80;@\x88\xf0\xf2r!a\xc5^8\xa7f\xd5\x83\xe8\x8fVQ8\x9c\x91\xd6\xe5\xa5,mlyb\xc787\x04\xa8u\t\xf1=\xab\x11L\xbc\xf8\x8e\xe3\x15\xe5\xf8#W\x0c>\x07\xb3\xe6\xc1\x1d\xb2\xd4\t\xe9A\xfbf/\xc9\xee\xcc\xd5\x9aX\xf0\xcd\xcen\xc6\xc9V.<R\x03\x94\x07\xe3J\x01\x95\x82\xdf\xab\xf2v\xb9\xec\xf4FR\x8f\xbdT\xb2\xf7\x0f*\xf9t\x884Z\xf6\xbd\xed\x07\xce\xd1=1\xdd\xcb\xf8L\x923\xc0u-\xbd[Tq\xcf\xf0\xde\xafVW\x8dN\x19a<\t\x0c}\x7f\x88\x84\xb5&\x87s\x0b\xd1]d\xaa\xf7\x97\xfd\xae\xcb\x8f\xbc9\x92\x1f\xf5F\xb4\x8b\x8cM#\xfb\x90\xd2u\x1bo\xfd=lW\x1fw\xe0\xa8\xb7\x19F|\x93\x004-\x10\x8clfe\xf2\x9e\xe5\xd5\x83\xac)8\x00\xe5q\xd1Y\xfa\x1b\xf7\xbe\x98\xa0\xe5\x83\x89Q.TK\xe3Y* \x97Zo\xd8\xaf\x96\x1bNvl\xc3S\xf4\xe4\xc85\xca18\xd5"\xe4\xd9K\xc1\xcd\xc7\xda\xe9\xb3\xa8\xc9\x19\xe1\xc1BS9}\xc9\xad\xe5\xe2\xf9%<\x0f\x99$f\x05\xa6\xd3\xca\xd8-LW\xd0q(\xd3\xa2\x07\xcafP\x05\xe6\x99\xb3>\xe7\x0es\x00Mr.\xfe\x0b.uVx\x04G\x80\xe3m\xeb\xa7\xb7\x87"\xb1Dn+w\xae\xba\xb2\xd2\xc6\xc3k\t1tN\xff\x9f\xed\xdb\xee\x0f\x1a;\x99\xed\x8e\xe6\x8b\xd6\xf6n\t\x1e\x9bYMh\x1f\x9a}A\xc9A&\x98\xa4\x15\x06\x0e\x9e\x99\xd2\x05\xf3?\xbb\xa0\x9b\xd3U\x8d\xc8~\xc4\xac\xf8\xd5-HO\x02\x08\x98\t\xc1\xae\x91\x05\x0exGp\x81.jl%\xb2\x80\x85\x1f\x04T\xaf\xe2b\xaf\x91H\xd9$\x0e\xf1<}\xb7K|\xb4\xd8l\xca\xa68\x82N?\x9csd\x91\xc1RST"W?^\x1c\xfd@$Gn\xc1\xfa\x92~\xa3\xcc-1\x0f\xd8\xd9\xf4\xa7&G\x1fE\xc4\xaa\x8c8{\xa6\xcd&@\xe3+X\x93\x0e\xb9\x1b\xfa\x8fT{t|\xac\x81\xa6oX)<\xeb\xa1\x9c\xf9\xef0\xb4fj\x8b\xbe\x9d\xec\xc0{\xea\xc6\xe8\x85\xebD\x93]?Oy>\xa5\xe6\x91\xde\x12\xcc\xc0\xae\xd9\xba\x07 \x99\xd7/d\xef\xa8\x86v=\xb9\xf8\x85\xaa\xde-^\xf4\x17\x07\xff\xf8o\xe5"\x02\xc2\x070\x18\x0e\xa4\xe5=\x12R\x81\xc8\xbe-E.\xca\x06s\xf5\xd2oy<SR8\xc6\xfe\xfe\x9b\xebS[\x8a4\x92\x0f\x0c\xd1\xab4X\'\xdf\xff\x07\xbc\xafl\xc9\x10\xc9\x9a/\xb9\xc4\t\x00\xf5.\xce\x15$\x13q`\x02\xf3ea#\xd5\x06>Hkv\xd8\xca\n\xe0\xec;\xb9\x99\x1d\'3\xc2\xde\x0f\xdf\x8c\x8e\x83\xe0o9Z\x16\x1b}\xe4\xfa\xc1\xb7o\xc8\x9f\xea\xa8|L\xe4\x98D\x07\xe4\xc3\x84\x8f\xd5\x89\x05\xbaN\xdc\xec\xf2\xed\xabe\x85F\xfb\xe4\xd8\xac\xf2%\xb4]\x85F0Y\x9a\x9a\x01U\xc0{\xe2\xb9\x97\x12\xc9\xc2+v\x0c\xb3![\xa7O|\xc7\xe7\x1dy}\xc8\xebB\xc9\xc8\xe9\xa5\xc3[\x9a~y\xffd\x07&s\x88~\xbc\x0e\xf2\xee\xd9&H\xe3\xbd\x83#+H\x16\x15\xd0\x05\x0cM\xdb;G2!<\x03\x8e\xcb{gJF\x0cV:^)Q(\x00"\xee\xccM\xa9@\xc1"\x04_\x05\x8a@\xed\x1cB\xd9\x10\xb3^k\xd6\xf9\x92\xe0\x0b\'\xbd\xd3\xb0ton\x01\xba\xa5!e\xd9\xf8\xa5\xca2\xf8\t>\x13 \x92CT\xe2\xcbF0\x15\x1b7Y\\\x1b\xf5\x86\xc47\x84\xb8ru\x96\xc14]\xd2\x15\x06\xfc\xafS\x18{\xe9\xe7\xb5\xdb/\x1c?B\xf1be\xfbt\xa2\x99 \x101\\\xfc\xef\x02ZY\x1dm\xc6\xee\xb8\x91l\x1f\x8b\xc45\x8a.\xc6\xc5\xcd\r\xd4\x13\xbb\x1d\xf3\xca\xd81\xd3\x17\xb3\xdc\xb3t\xd9\x13\xa8\x88\x12\xd5h\xc8\x1d\xa0\x8c\xf6\xe0\xbbp\x08\x04Tv\x90h\xd9\xb0+,lt}\xb0\x9e\x81Tu\xc4@X\x86T\xdc\x0bs\xbc\xcf\x16\xc4\x871\xb7\xeb\x86\x8e\x14_\x8fv\xd4?\xdd\xd7\xff\x12\xda\xac)\xed\x180\x0e\x95\x933\xdb4\xf3\x1e\xb7\x18,4i@B\xc6`V\x11\xb6\x1e7*b\xea\r\x1e?\x9e\x06d\xec\xd1\x0f0\xbb\xfc\xc1\xb3\x82\xcb}{\xa5\xddL\r\xc7\x80\xdf\x8a-\xc7\xf2\xb2\xcb\x81\xdb\xafE^\xd3\xe1?\x02\x0b\xb3\x14\xb8E\xd2\xcf\xe4\x0b\x91\xab\x02\x9cS18\x84\xc1\x80\x10\x88J:\x0b\xfc\x84APd]\xd1i@\x86k\x02\xc9!\x14\x03q\x9b\xe5\xb1}E\xeat\x10Dn\xa6\xb9\xff\xff\x19Xy_\x8c\x16SRd\x8e\xc6\xa63\x9c\xc1\x89C\x98\x884U\'\xf1\xb1A\xf0\xe9F\xd1\xc5\xd4\xc5^\x8b\xc4 \xbe\x10\xf0D\x07\x98\xc9N0T\xd0\x1d\x88\xf1X\x14g\xf1\xfeO;Qj\xbb\xeb\r\xb9\xc3\x16\xf3\xf7\xe5SF\xd9R\xc0p0\x1e\x04\xea\x89\xd5\xa8\xcey\x16&\\1\x81\xb2E\xa4\x94\x9f\xb0v>\x85\xe5v\xd9\xc8\x12e\xfdQ\x97\xb1\t(PO\x8f\x83\xa7^@\x9b2\xe0T\xf4:t"\x11c\x9azt-\xa3C\x82\xe6\xc4\xad\xfa\xc7N.\x8e\x1c\x90\x82\x8ck\x03\xaf\xfa\xafrU@t\xa8Aw\xa6\xfd\xec\xa6\xcd\x02\xad\xffSF\xc9\xea\xc5W\xd4\x82Q!\xe8\xf0\xfe.c\xfb\x10\xe2\xb9Q\xba\xd0&\t\x0c\xc1\x85\xa1g\xbe\xdf\xcfsN\x1f\x03\xe7\xff?\xe3{\x0c\xee\xc3]\x19{\xb7x\x1f\x00[\\\xee8\xed\xd0\xd97\xf6\x9d\x15\xe4\x1d\x92q5\x95\xcb\xb8\x829\x1c\xcf\xe3\xd8\x12\xb2\x97\xb4Id\x14\x1f+\t\x10p\xa3\xc0\x00!-\xc1k\xfa-\x89\xd8qza`".\xe8\xea\x81\xe3\x19.\xfc\x84\xc0\'\xd9\x0f\x1a\xd7\xad\xf8\xbe\x8e\xfa\x8aL\xeb\xa1\x92\xd7\x9d{65y\no\xc9=\xeaW\xd9;\xe5_\xf3\\\xc4\xf5\xf5\xd5\t\xd5\xb7MHE\xac\x0e\xa2\x93\xae<\xfd\xd3\xef\x84\x92n.\x19\xd8\x0e/\x92s\xe5\x13\xd8\x1elHGR5&\xd0\r\xd6[8\x14\xee]^\xaf \ri-\xa0\x1b"\xe2!f\xb9X\xc7\xa7\x10\x0f\xa1\x0c$\xd1\x97\xe1I\xe2\xae\xeb\x0c\xb2L\xdb\xdfca\xc7\xbc|\x98\x8c\x959=wZ\xca\xfe\xb1\xb7-T\x03\xa5\x82*O\x991rM\xcc\xa9\x12L\x81 \x1ehx\x1aCP\xb0\xc0\x08C\x85\xcd\x7f\x8f\x80S\x9d\x96!\xda\xe2\xa2\xef~\xf3f\xa6k^iQqd\xfe_|\xd1\xac{$\xd4\xf6\xafx\x00]\xe3\xb7,\xb2\x96m\xd0(\x8c\xc0\xf4s\xbc\x86\xe4\xa2\xb4\x83\xea\xfa\x15`\x92\xae?#\xd4\xc1\xf3\x88^\x85G\x87^5"\xd1h#\xd8\x1f\xf5k\xc5\xe6\xda\xc0_\'\xca\x9f\x18f\x0c\x0f\x07*\xfa\x91\x16\x14\xa0\x0f\xbe\xf2\xd2\xe5^\xa4\xc2\x0e\xb1\x1c;hX\x8d\x18\x87\xb8\xc3\xde\xfc\xe0\xc1\xa7\xf6\xc9H\xd1\xa5\xa07V~\x9b\xc2\xbb\x8bH\x1eo\xdb\x7f\x7f\x92sU+\xe1\xb9\x8d\xeb\xc4\xe4\x9aP\x80\xc7\xbe\xf7H\xd1B\xd2Yx\x9f\r\xb9\xd3\x01\x16\xa3g\x1b@Ow\xd7\x08\x04i^ \x1bz(\x9d\x984\x80\xed\xf8r\xb2\x1b\x1c\xeeb\xd0w\x1ej-\x9a\xf2\xee\x9eM\xc2~\xed\x1d\x92\xac\x8b?\xc6{\x17d\xebmB\xc1\xc2p\x95\xd5;Jy_\xc6\xf2\xdd \r\xb68\x0cR_k\xf1\x110.\x04\xa6i\x16\x1d8j\x95)\xa3<\xe7"\xcfE\x10\x9aSm\xe4"\xd7\xe3n_\x16\xdc\xd5\xad\x8a\xf4\xa9\xc9\xeb\xda\xf5u\xa467\x19:\xddH\xfb\xf2\xe9f\nrq\xf8\x0e\xed*\x1a+^)\x02\x97\xc4\xc6\n\xfc\xfd\xe9\x1e\x0e\x0b\x84\x0c\xa1c\xa5{\xdc\n\x91\t\x1cW\xc7%Y\xcf\x84N\xd3&z\x1e\x89\x10\xd2\x1e\xf9\x0e-5H\xda\x8b\x0b\xa8\xb5?\xcc`6\xa1\xbe{\x15\xe6P\'\xcfs\x9f\x84\t\xf84B\xe7\x04\x8a\xf9\xbe\xf9\xcad\xcf\xd3\xf4x,>\xa00i\xea\xfeH\x80\x1d@9<\xdc,\r\xd2:p\xbfH\xdac\x88\xf9\xce\xe5\xae\x1a\xd3nB\x8c\xb0\xa5\x91\xca\x93\xde\x86z\xabk7Y\x99\x85m\x94\x1e\x14\xeeDd\x0c\nm}U\xacP\xd7\r\n$+z\x1b\x96#9\xa3\x9d\xa6\xd9\x12\x01\xea7\xc6\x8b\xb8\xc6\xaa\x7fi.o\xc1\xd1\xef-\x08\xcf\x9a5h\xd0[V\x88a1\x88\xe2,3\x99\xa7"\x8d\xc2\xa8\xd2\x0f\x96i\x1d\x82)\x96n\xd81^-5\xf7\x9b\xaf\x7fN\xd5M\x7f\x94\xa0\xd0\xe0\xb8rKh\x00\xf7\xe2YS\x06\\=\xcc\x8e\x9c\x03H`V\xdeK\xd7\xed\x03\xcecx\xc3c\x01\xb8?)\x87W\x87"\xa2\x85\xd9\r&n<\xb2\xf7\xdaSr[\x82\x0cU\x9dI\x00\xef\x10\x8c\xbd\xae\x0c\xef\x037&q\x02\xd5+)\x1f/\xdf"r\xc8\x9c\xb3R\xf5\x05[\xbc\x02\xb3N\x9dy[r\xa9r\x95jmzbl\xe4]\x9f\xbd\xef\x94\xc9\xe8\xca\x14T\x88&Oy\xe0\x7f\'\xc2\xd3\x16\xb7\x9f2j\xe4\x85\xd0\xf5\x8bd\x0c\xb9\x98\xc8xB\xb5\x7f\xc5c\xa2\xed\x88\x9c\xc5\x9c\xa1}\xb9[\x07\xbe\x15g\xa2Y\xbb\xd4\xac\xef+\x91\xcd\x9a\x18RB\xc8k\x9e\xd5\x8as|*\x17M\xd3\xfe\xff\xc5\xc7\xd8\n\x88pW\xb3\xfeF&t\xbc\x94\x93\x94nX\x0eC\xaa\x8fl\xc7\xf0;\x84cz-\xd5mf\x08k<\xe9\xe5_TT\xcb\xc4h\xf1F-\xc3*\xbf\xa7\xb8\xae\xa0\x05I\x89@.\xa0l\xd4/\x15\tca<\xfb\x95\xb2\x7fz\xfe![G\xf7\x1dL\x97\x96zq\xc7\x9d\x11\xf0R\x81\x9b!\x9a\xa8\x16\x8a\x1b\x0eXh\xb3\xff\x9f-6Vz\x1a]\xf3^\xe5\xd8\xd2n7E@2\xb5\x16\xeby\xacs\xb2\xcb\x14\x9c\x8d\x89\xde\xa1\xeaR.\x8e\xd2\x96\x03?\x97\xc2\x07i\xc5\xb58\x95v0M\xc5"_\x1a:\xab\xbd"\xd6Bq\xc74\x88\xcdb\x88_\x1c\xfdO\xd7\xc1\xd8/\xc8\xcc\x1dh\xbf\x7f\x8c\xda^+\xcd\xef\x140S`i\x8bv\xf5e\x19\x90Lg\xc3`\xc8\xaf\x95,\xa9\x1b\x7f,?\xf0ib\xf2\xe2F\xc1o\x87O\xfc:\xb5\xd3%\x1e\xdf\xf3\x06\xb5\xea\x07\x08\x9f\xdb\xaf\xd5\x1c\xe4*\xca\x07\xb0\xe3A\x8838\x8f\x97\x15q1B#\xe4$\x8d\x83\xb9L\xf5!Ai<b\xa0\xf4\xfd\x83%\xfb>:\xcb\xd2\xb5g\xbaV1\xf4\xf0\'^\xe1}o^\xe1\xf4\xafO\x08\xdd\x8a?[m\xe5\xf8\xeb\xc5\x9f\xfb\xa7\x86\x07\x8a\x13\xe2{\x94\xc9\x0f`\xbe\x9b)`k\xd4!\xd8WoJ\x9b\xb0\x02Z\xb0\x13\xd8\x99o"a\xf5G9\xbf\xf6\xe2\x85\x03\x05w\x00z\nu\xf0K\x97\x1d\x8c$\x8d\x05\xc8\\h\xee\xd4\xfc\x87\xf6&:\x93\xd2\xb6/\xf9\xbe%qt$:\xfd\x14\x19gcM\x90bW\xdd\xf6\xb5\x03\x0eA\xba\xf4>\x7f\x16G\xaf\xe2O\xfeyy\x98\x00]\xf9od\x158\xcf\x91\xe5k\x99\xaa\x985\xb5L\xdb?DmYS\xd6v3\xfb\x04\xa8\x1c5\xd4\xef\x9e\x8f\x97\xd8E\x03\xc9<v\xcbJ\x8aS\xf1\xd4\xd3|\xd9.3\x92\xf3#\xc9\xa5/\xec\x19\x9dj\xdf\xe4\xfejx\xa6H\xa1y{\x8cA\xa8\xc7z\xcb##\x82\xd2\xa3\xf3\xda\xe9\x06\xedNx\x0b\xecc\x90c\x8dVe\xad\x1e\xab\xb9{\xf8\x0fwd:\x15n\xba\x02\xdc\xbb\xee(\xe7\xa1\xe7\xf9\xe1\xea60\xa5:~m\xe1p\xdakm\x12\xf4\xc1i>\x87#j\x9c\x8bYF\xf2c\xaf\xf7\x0e\xf9\xaf\x90|\x87\xe2\xdfN\xb7\x83_H\xd8}\x90J\x05\xbd\xac\xa7\xa2;H\x01MPzlXH\xb8\xbe\x8a\xbd\xa7\xd26,\xa8\x9e\xa3\x92b\xb2@\xaes\xd4c}\xf7\xf2\t\xa2:1]\x12\xc6\xb3\xcd\xdc\xf0t|\x9b\x1d\x07\xb9[o\xb7\x18\xad(\xaa\xe8\xd9h0\xba\x17\x1e\x11\x1b\xab\xbb\x03\x0e\x10:SN:\xc9\xa3\xbd\xf8<[\x8f\xddX\x83X\xcd\x8f\xd4\xa2\xd7\xf3\x15\x81/C\xe3\x80\xbc\x12ms/\x89f\xa3\xbcO\xe9\x8b\xd9y\xd4\xee\x8d\x04\xed9@\x0f\xeb\x0eV\x12\x97\xeb\x03>e\r\x86\xc6\x8cr\xbb/\xc4)CT\xcc\xca\x86Q\xe0y\xf0Xu\xf0\xd3w\xc6\x16\\\x0f\xbcgr\xd4\xa4PX\xa3\x19\x18\xf04\xb8\xa4\x81lMX\xb0\nfO\x06\xc4(\r\x81N.\x94Gs\x8c\x05\xf2\xc1\'bW\x11\xa0\xf7\xba\xdaq^\xe9\xb0>6C*o3u\x93\xa5\xe9vDH-\xa9N\xcd\x85\x14\x87\xd1\x06\xf4\x1c\x83\xed\x88!\xacZ\x1f\xbf:\xe38oE\xe6\x1b\xf5\xa6==l^\x99L\xb3\x91[:i\x84`\xce\xe0\xd1~R5\xbb\xa3R\x0f\x1eo\xf3\x1b\xefT\xc6\xc2\xc4\xa7U_\xe6\x92}\xef\x01\x88\xc9\x03\xee\xb8\xb4\x99\xd7\x90/\x82SunA+\xc0]\x0c\x9b\x86\x8c\xc8\xb9>\x1f\x9a\x84\x0b`\x07\x18lI\xda\xb351d!\xb9\xe6\xb5\xbf\x91\x94!*c\xd3\xe2\xe5\xae\xf1^\xccP`\xd7Q\x00\r\xf8\xa2\x12m%@\t\x1aC\xdd^cD\x07,]\xf2\x92\x9d\x9c\x04\xad\xd1\xf7\x05\xee\xb4\xb1o\x8d\xb1U\xce\x89\xcf\xd3\xbd[\xfb$\xa6\x90="&\x17-\xbe\xc8\x9dj\x85\x1cl\xc1\x110S\xc6p\x958\xc8\xef~\xab>\xc3P\'\x96]\x91N\x9a\xfa\xf5I\xc4\xacq\xe8\xa5~"\x97]d\xb7%\x00&\x7f\x81-&\x9dS\x8f?\xa4\xac\x7f\xd9\xfd\x11\x10\xc2\xa9\xaf\xaeqr>\xa3P7f\xf4\x8ehP@l)\x89\xc8=wO\xdc\xa4zY\xef.\xce\x1e\x15\x1c\xab\xff\xaec\x89\xd8\xfe\xb9`)\x8b\xe3\x97w\x1a\x9e~\xee\xce(\xd30\xeb\x16J&\x01\x11\xdfU\x08-\xc1N\xad\x81_\x18\x0cl\xd1\x06\xc5\x13D\xaf\xbf^$\x01\xe8\xcf\x7f\xa0\xd1\xc7=\x10\x99X7_@\xebk\xe2\x06_\x06\xb3\xfe\rP\xb2-\xaf}\xe6\x1b\xce\xa9\tn?!\x01a\xc0\xc9\x0c\xa2\xbb\x94\x06\xc7\xd6\xf9\x9f\xc7\x91\xbdE \x19\xb8\xf3\xf62\xaaD\x9eN \x8e\xa358\xeb\x96\xf0rK\x8d2p2\x8e7\x83(\x1bm\xcb\x85\xe8NR\\w\x83Z\x80O\r\xecx\xf1F!T\xb3\xc1\x99I<\x80\xbd\x86M\x16:1ci\xcb\x8c\x99\xa1/\x87mk+=_\xb8\xe0\xb5\x06\xa1\x1e)r\xeep=\xe1L\x82\x8f\x8f[P\xae~S\x1c:\xf1Ojpa\x99\x82^\xbb\x95\xf50\xe2i\xdd\x88>\x19}\xa2\xd0\xb2\xc5\r\xaa\xb4GL\xfe\x81r\x8aJ\xcf?\xa5\xc4\xe60\x90Y\xf9\x14\xa3zy\xea;C\xf2uCq@\x00SL\xfb\xc7\x01D\x88\x88\xbf\x9c:\x12\x94pri\xed\x8f\x03r#[\xd3\xb4\xefo\x85\xcf\xce\x181=@\x92\xf7\x1b\x11\xacV\xe5e\x8c _\xb57V\xb2\xc2.\xd9f"\xf2\xfa\xce\xfd\xaaH\xb6\xde5\t\x89\x00\x9bG|\xab\\F\x04\x1eR\x88Q\xdd\x05[\xda \xe7\\\x05\xaf\xf5\xd2.u;u\x16\xee\xff\xd3\x96|k\xe6\xb3\xae\x9f/\x8a5\'\x05\x85\xff\xffN\xe7\x92\xfdP\xffx\x90k\xaaGS?\x0eG\x94\x12\x11\x15j?,\xd8B\xcd\x132\xe8\xdb\xc8\rsZ!\xffm\x16\xdf~>R\xb7B87\xb3\xe8\x01\x82\xf1$\t\xddj\xba\xc2e\x0f\xc8;\x11\xf07\xce\x06\xbf\x81\xdd&\x86\xc7#S\x81V\x95\x84P.\xbf"\x94w\xc2g3\xfcL\\\x97\n\xa0z1<\x1aB\xb1\t\x94r\xc9\xbb@Y\xec\x13\x0e<\xb6\xdf\x98\xba\x05 {>K\x10\x8a\x13|d\xf6\x89\x19\xe1\xce\x0b\xb6YI\xc2\x05\xa5:&\x87u\x896\x1c\xcd\xa4-\xf1\xba\x08\xe91\xe6\xb8O\xf4\x05\x01\xf0\xc5@\x87\xbc`\xa1\xe1\x8e\xa6\xc6\xcd\xc0@\xb9\xcfBL\xff\xc6J7\xcaU\xc2\xab\xe8\xf7G\x1733\r\xec\xf6W\xf3\xd5f\xdc\r\xb5\x9c\x9e<\xb5\x9e\xd9\xa1V7\x16O\x10(C[Aj}\xc7xv\x03CS\t\xaeV\xe1_y\xd0\xd2<\x94w\x05b&\xc0\xfb\x006\x142f^\x0c\x0f\xde\xbe\xc6p\xa7 \x12\x9a\x03\xf4\x13\xb7\xf3l\xb2\xab\x80\x9d\xaa\x92\xc8u\x0f\xe0Nd\x81\xc8\xf4\r=\xe9\x0f\xb3\x91\xef\xc7\xeaa/\x8e\x01\x8brh\xed\xc65\xb4\xb4I]\xd8\x03\x91IJ"\xac\xf96\x02&6 8.\xef\\v$\x04\x17\x8f\x81^\\\xb8\xb2\x86\x02\x93bP3\xe4\xa6\xd5\xbb\x88$hl\xf5Vc\xa1\xea~*\xd7\x928\xbc\x99\x01\rY\xc9\xddq*\x86A\xd35i\xa3%\x94\x01fr~\xe5X\xb5\x91\xe8b5kG\x10O\xf0Y|\xe7\x05\x02\xc7w\x9a\xd0\xd7\xf8\xa6\xa3.\xad\xb2\xb1\xbcym\x04\xfa}\x1a},\xd1\x02\xa6dv\xb3\xe2,J\xc7\xce\x0b\xad\x82\x81\x8e\xbb\xcf\rz\xe0\xc4\x9c\xf5\xc8\x19Y\xb0R\x81\xdcj\xd6n\xa2\x194\xe8\xeb\x14\xfau7&u\x98i-\r\xf9\xcc\x0e\n\x92\x8ehqk\xe3\x13\x8c\xe3v^|\x87\x80H\xfaWFETl\x92;\xfdB\x0f_\xc0a\x9e|\xac\xbe*O\x16\xc1\xd8x\xc92\xd30\x07MU5\x86\xe5\xcb\xaf4B\x08te\x87\x08s\xfe\x8cOR\xc2\xe5\xcc\x9c;+\xce\xf0mj\xa0eH\x1aJSG\x91\x94\xf6e\x84Lu\x9ax\x91\x8f\xa48[K\xf3\x8b\xac\xf1\xb16kEWG\xaf~\xe1f&\xd1B\xb7\xde\xdd\x1e\xf3F\xa0\xfbpB\xa6\xa4\x0b\x07\xe4\x8d3\x97T\x96z\xbf\x88|\x7f\x0c\x01c\xdeW\xc1d\x1b=\xbb\x91\xba\xcf=\xe6\xd9\x93\x00\xec\xe2\x1e%+\xaf\xa18\x17\x1bwNc\xe5\x8c\xf7Dkz)\x080y\xe6\x0c,\x95\x1f\x16/\x1b\xf2|\x0f\xc6\x01n\x18\xccy\x04)\xf2\x02\xbbH\xfd\x84\x86\xf4(E\x8ai\xe9,\xe3\x1f\x89\x98\x00\x1f\x80\x0b\x96\xe6\xeb\xe4\xc5\xd5\xa5\xe6\xd6\x85\x9dS\x02.\\\x94\xf4\xd7\xdfy\xe3\xea\xb7d\xd4\'\xccZ\xd5xO\xdc\xdbo\x84\xf2\xf0\xfe\x00\x07\x83\x1b\x99\x90\r\xa5q\xbbil\xf5P\x80\xb4%\xc5\t\t?\xdc\xc1dNe\x8e\x92\xa3\xa5>\t;\x1al\xe2\xecU\xb0\xbbN\xda]\xf6\x82Ci\xd3\xa7G\x9dJ7\xdd\xd8\x90g\x82s\x88\x14\n=c\xcf\x9eD\x1c\xdaE=\xe3\xcd\xe3\xd9\xf1\xbdhb\xa3*\x9fxL\xd1\x7f\xbc\xf8~\x8a\x1cL{CC=\x1d\x03\xc6\xa0\x1dR\xc2\xc3<c\xcfP\x03~\x05\x00wZ\xf7\xf7\x8f\xe0G\x1a%\xd9`\x14\xddw\x89\xf5\xf5~\x15~\x92v!_>7\xcd\x1e\xf1\xcf\x1dY\x8emRl\x85\x95r\x9aP)\x9e\x9b\xab\x9dP\x02U\xd6\x17\xb7j\x8f\xf3?d\xdb+\xdd\xdd\xd9\xe49Z\xd2\x19p\x8d\xcf\xb4\x1d\x150c\xc7\xd1\x98^\xaa\xef\x86\xa92\xdf-\'\xb3\xdf1\xe7\'\xbff\xa7\xf9:\x98Qxh\xe0WbSQMO\x10Y\x04\xd3G \x1c\xd1\x8b\xdb}a@\xa8\xe3\x8eQ\xb410\x18`\xce\xbc\xa3\xce\xe1X\x8f\xc5\xae`8\x9fq\x9cz\xe01#\xdca\x9c\x12\xc8\xfd\x8e~\x94\xcbV\xd6Q\xfa\x91v\t\x0c\x0c\xc37\xe1\x05\xa1\nv\x19\xbfs\xc2\xe3\xe8|$\x13ZmE\xda\x9e\xca\xfc\xf1\x99d\x9b-&\x17\xfd\xf4yG\x16u\x19,\xd00\xae\x1eg\xfcZ\xf1\x89\x1f\x15\xe0\x9a\xf9\x16By;\x91C\xc0\x89\'t\x8f*VM\xb2\x94\xe2a\x02\x88\xc5;\xe3z\x1a\xe9},L\xe5\xbe_\x8d\x9a\xf8!e\xe6\xf9\xe5\x82\x9e\xda*8\xde\xf5wD\xf6\x90\xfc\x08N\xab\xbb\xad\xcf\x15\xcb\xd1N\xd3\xf5\x90cC\x1d\xcbdKk\x17\x1a\x8d\x14\xd0M\xb3\xa8\x113 $\xe4\x86*\xe8\xa2\xb6n\xc5\x80o\xce!\x08\x1a5\xfb\xf8C\xd1\xbf\xbf/\x86\xb2\xce\xce\xdc%F*Z&\xf1\xabA3@h\xae\xce\xa0\xd7\x0c!\xfb\x8f:\xe9\xbam\xe6|\xdb7\xe7\r\x7f%\x9eJj\xf92>\xfe|\xfaB\x87\xe4Lz\xbf\xb0Z\x06\n@\xcc\x88A5\x05\xb4\xb7\x1468\xe1L_d\xe7\x97\xa8\xa5\x8a\r\x9334*\xd3S\xddd\x15\xde\xf9O\xb2U\xfcW\x1d\xfcBb\x97w\x1e\xf8\xdd\x999\xf4\xafrG\xd7-\x97\xfa\xf6&\xcd\xf9\x85\xd3\x07\xa4\x0b\x7f\x86\xdd\x94M3\x85ig\x98\x0c\xa9&-\xcf`\xa6\xb0K\x05%\x80\xbf]d\xe1\xe8\x0b\xa4\x97\x0b\xbc\x15\x9c\xb7m\xa7\xa5.\xb0\x86\x08\x85\xa9_I|m\r\xea\xa9S5j\x14t\xdb\xe4\xb4\xa8\tJ\xac\xaf\x9f\xf5\x1e\xfd\x7f\xde\xf3\x84\n\x18\xa3\x12\x104\x1e\x97]\xef\t+\xc1TS\xc34\xb4\xb5\xb2ukh\xe0\xc4\x9d\x10o\xe4\xba\xa2\xac\xe9$H\xd4\xe4\x17\xe5`\xaf\xa6=\n\xcfH\xfc\xb2(\x10\x9f\x8f\xb3\x1bQ\x00Wx\xdf\xdcd\xd7\x8c`\xb7\x8b\xca\x05\xe8|\x1az\xde\xab\x01\x00\xf4z\x07\x80y\xa9\xde\x99$\xa9R\xfd\xdb\xc7\xf4\xac\xd1&\xf6\xef)\xcfr\xd7O\xc7\xbc<\x13}\xc0\xc9u\xd3l\xe6\xa5V\x9bm\x92\xbf\\T\x1c\xce[\xd3\xbciP\x88\x1e\x1c\xa1N\x99@ef\xe4\xd7:\x036\xb6X~\xfel\xdf4\x80\x0c\x8dO\xaamX_\xd2\x9a\xd5bQ\xd0\xfa\x9c \xc4\x82a\x91\xeep#\xcf\x82>:n\xd5\xe9\xe35]O\xc5\xe0A\xc8\xe7\xd8\x0f\xder\x8d\xef\xa3mz\xbeB.R\x1a\xdf\x10\x8e\xa5S\xd6\xbb\xe1\x9d\x08\xf5\xb8\x03\xc4\xba\x1a\x1d\xef3\x00\xddF\xdd\x06\xdc\x86x\xe6\xe8\x82H`\x8c?q')
|
1
|
+
import xtlsapi
|
2
|
+
from hiddifypanel.models import *
|
3
|
+
def get_xray_client():
|
4
|
+
if hconfig(ConfigEnum.is_parent):
|
5
|
+
return
|
6
|
+
return xtlsapi.XrayClient('127.0.0.1', 10085)
|
7
|
+
|
8
|
+
def get_enabled_users():
|
9
|
+
if hconfig(ConfigEnum.is_parent):
|
10
|
+
return
|
11
|
+
xray_client=get_xray_client()
|
12
|
+
users=User.query.all()
|
13
|
+
t="xtls"
|
14
|
+
protocol="vless"
|
15
|
+
enabled={}
|
16
|
+
for u in users:
|
17
|
+
uuid=u.uuid
|
18
|
+
try:
|
19
|
+
xray_client.add_client(t,f'{uuid}', f'{uuid}@hiddify.com',protocol=protocol,flow='xtls-rprx-vision',alter_id=0,cipher='chacha20_poly1305')
|
20
|
+
xray_client.remove_client(t,f'{uuid}@hiddify.com')
|
21
|
+
enabled[uuid]=0
|
22
|
+
except xtlsapi.exceptions.EmailAlreadyExists as e:
|
23
|
+
enabled[uuid]=1
|
24
|
+
except Exception as e:
|
25
|
+
print(f"error {e}")
|
26
|
+
enabled[uuid]=e
|
27
|
+
return enabled
|
28
|
+
|
29
|
+
def get_inbound_tags():
|
30
|
+
if hconfig(ConfigEnum.is_parent):
|
31
|
+
return
|
32
|
+
try:
|
33
|
+
xray_client=get_xray_client()
|
34
|
+
inbounds= [inb.name.split(">>>")[1] for inb in xray_client.stats_query('inbound')]
|
35
|
+
print(f"Success in get inbound tags {inbounds}" )
|
36
|
+
except Exception as e:
|
37
|
+
print(f"error in get inbound tags {e}" )
|
38
|
+
inbounds=[]
|
39
|
+
return list(set(inbounds))
|
40
|
+
def add_client(uuid):
|
41
|
+
if hconfig(ConfigEnum.is_parent):
|
42
|
+
return
|
43
|
+
xray_client=get_xray_client()
|
44
|
+
tags=get_inbound_tags()
|
45
|
+
proto_map={
|
46
|
+
'vless':'vless',
|
47
|
+
'xtls':'vless',
|
48
|
+
'quic':'vless',
|
49
|
+
'trojan':'trojan',
|
50
|
+
'vmess':'vmess',
|
51
|
+
'ss':'shadowsocks',
|
52
|
+
'v2ray':'shadowsocks',
|
53
|
+
'kcp':'vless',
|
54
|
+
'dispatcher':'trojan',
|
55
|
+
}
|
56
|
+
def proto(t):
|
57
|
+
res='',''
|
58
|
+
for p,protocol in proto_map.items():
|
59
|
+
if p in t:
|
60
|
+
res=p,protocol
|
61
|
+
break
|
62
|
+
return res
|
63
|
+
for t in tags:
|
64
|
+
try:
|
65
|
+
p,protocol =proto(t)
|
66
|
+
if not p:
|
67
|
+
continue
|
68
|
+
if protocol=="vless" and p!="xtls":
|
69
|
+
xray_client.add_client(t,f'{uuid}', f'{uuid}@hiddify.com',protocol=protocol,flow='\0',)
|
70
|
+
else:
|
71
|
+
xray_client.add_client(t,f'{uuid}', f'{uuid}@hiddify.com',protocol=protocol,flow='xtls-rprx-vision',alter_id=0,cipher='chacha20_poly1305')
|
72
|
+
print(f"Success add {uuid} {t}")
|
73
|
+
except Exception as e:
|
74
|
+
print(f"error in add {uuid} {t} {e}" )
|
75
|
+
pass
|
76
|
+
|
77
|
+
def remove_client(uuid):
|
78
|
+
if hconfig(ConfigEnum.is_parent):
|
79
|
+
return
|
80
|
+
xray_client=get_xray_client()
|
81
|
+
tags=get_inbound_tags()
|
82
|
+
|
83
|
+
for t in tags:
|
84
|
+
try:
|
85
|
+
xray_client.remove_client(t, f'{uuid}@hiddify.com')
|
86
|
+
print(f"Success remove {uuid} {t}")
|
87
|
+
except Exception as e:
|
88
|
+
print(f"error in remove {uuid} {t} {e}" )
|
89
|
+
pass
|
90
|
+
|
91
|
+
def get_usage(uuid,reset=False):
|
92
|
+
if hconfig(ConfigEnum.is_parent):
|
93
|
+
return
|
94
|
+
xray_client=get_xray_client()
|
95
|
+
d = xray_client.get_client_download_traffic(f'{uuid}@hiddify.com',reset=reset)
|
96
|
+
u = xray_client.get_client_upload_traffic(f'{uuid}@hiddify.com',reset=reset)
|
97
|
+
print(f"Success {uuid} d={d} u={u}" )
|
98
|
+
res=None
|
99
|
+
if d is None:
|
100
|
+
res= u
|
101
|
+
elif u is None:
|
102
|
+
res= d
|
103
|
+
else:
|
104
|
+
res= d+u
|
105
|
+
return res
|
106
|
+
|
107
|
+
|
108
|
+
def hconfig(a):
|
109
|
+
pass
|
4
110
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
111
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|