hiddifypanel 3.0.0.dev63__cp39-cp39-manylinux2014_x86_64.whl → 3.0.0.dev65__cp39-cp39-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\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x03\'\x00\x00\x12\t\x04\x00\x96\x9d\x19\xd9r\x80d~\xd6Y\x97b\x116\x8c\x87\x00\x00\x00\x00\x00\x00\x00\x00\x88\xab\xd3#\xbe\x1a\xa6\x95\x89\xe7~| \x8d\x19\xfc:\x9dU4\xdasN\x9f\x14\x9d\xd3\x06:\\\xd6`\xec\xb5)`\xaa\xcb\xa6\xa8h\xf1O\xa2\x0b,f\xf5\x9e\x0c\x9b\xefE\x0cHK\x08c\xa7\x8a\x0f\x06\x8d\xfe\x85\xfe\xf2\xe5\xc7Y]\xa4w\xf3\xe1\xfa$\x8c\xf2\x1a\xa7\xe2\xf1\x99\xe0\t\xed\xf5\x7fU\xe7\xab\xe7\x12\xc23\xe0\x93\xd2=\r\xd9\xd3\x1c\x0f\x9f\xbeG\xc2\xcc\x9e\xe9\xd3N9J\x99;\xb4\x03V\x87\xf6\xbe;{\xe8veE\xc1\xcc\x11\xdf\x95\x07\xcd=,\xea\xfe\xc1\xbe\x96\xcb\xb7\xaa,\xeb\xaf\x10\x98\xcfxN\x9e\xddo\x82\x82,\xea\x1b\xa9x{\xfe\xe7\x893\xa6F\xaaRxl\xa2\xec\xd1\xbc\xee@{\x00\xc9l*A\x02 \xab[\x1a\xfa\xce\xea\xcf\x1bG6\xd0\xdeV\xa0\xec\xbe@\xbb\x1cR\'g\x11\xeb\xb8\xa1_\'\xe2\xd0c\xc9\x94=\xef\xafy:e\t}JN\xb6\xbe\x11C\x12`n|J\x85&~#\x8f\xb7cL\xc6\x97\xa7LC\xe5\xcco\xc2\x067\x05v\x94K\r\xa7,\xf4\xbftV\x02\xec#\x12~t\x7f%\xcd9\xeas\xf4\xdd\xbb\xe2\x80\x00j\xd7\x9a\x8d\x08D\xa5\xc9\x87\xb0\x95\x02"\xd1{!H\xeek\xa5N\xc4\x94\xba_\xd0k7ced\xfe\x15=\xe6\xbdo\xb7\x91\x06\xb5\xd0\xdb\xdc\x06\x1d\x8a\x81\xe3\x1fl\x02=q\xf0\x91\xd1\x9al\x1f\xa0"\xdd\xd7\xb8u\x7fG\xd9*3\xe5\x07\xf7\xe8\xb0 z\xd2B\xcb1\x8dHE\x18\x04\xf6\xbdQ0\x005\xcfT\xa3\xcd\x01\x10\x90\xcer`=\xcd>\x8f\xc4\x9c\x85\xb8$\xd3Gh\xa5"5Q7\xfc\x84\xd6\x80YU\xa1/>\x9b\x9dTQw\xe0\x0b4\x90\xb1\xb6\xd6\xf1\x8e2\x00kT\\rca\x15\xa6\x051\xca\x90\rf\xef\xf4\xeb\x8b!\xa2\xfaY9\xdd{\x9b\x00\x15\x1f\xa5S\xd8R!@&\xad1 \x86s\x8ar\x18\xaa\xf8c\xa3\x05\xdd\x12p2\xfa\x84\x01\xef\x06eAA\xd96}\xd9(\x8b>;)\xb1=\x8b\x16$\xb8^\x18\x925\xf5Tb\x0fz%Z \x86\xc5\x82\xf3\xb8,_\xf6\x18\xf4\x9c\x0f\xcd\xf2\xf7\x0e`\x91\xf9\x87&|\xa2\x96\xe2\x06Ba\xfb\xaa\xech\xf7\xc2\x87\x03\xc9L\x0cD\xa5\xa7\xa4O\x00\xa5\x92i3\xc0\xb3\xd1\xf38Q\xbe6\xbf\x03xz\xe5tw\xc5\x80A\xb2t+\xb6\x8c\x85N\x17\xe6]\x1d\xf9\xb8;:s\xa1@\x8a]\x12\x9e\xbd\x8b\x82\x87Rw\xad\x9c\x06\xa5\xed\x89\xd4\xd2\xe2A\xbc\xa3b{#3kd{\xb8\xe4\xd7<X\x05BTj\xb2-X\xe9?\xad\x91\xa0\x94\x8b\xae\x0fg\n.\xbc\xa4\x9b\xe5<\xbb\xcb\x10\x06\xcd\x0fU\x0f\x15J\xfd\x839\xd5\xa3\x01}s\x94\xe6;*\x14\xd6\xcc\xc2yV\xe2U\xdeK&\x06AD\x04x\x8aH\x01\xc1\x8f\x1f\xd0\x90\xe0\xce\xe4\xb2\xb0\xaf\xdfK\xa4\xae\x10*\x17\x19\xcf\x0f\xdf?\xcd\x90}\xca\xcb\xbe6\x1f>\xba\xaf/^L$6\x15v\x1c\xf1g\x10k\xe3\xf3\x83\xfe\xdeJ)G.\x06\xc7\xc7\xaf\xca9\xe8\r\xcfr\xfc\x8b\x0b\xad\xd7\x86\x9f\xc4H\xea\x0cn\x1b\xd4;b\xecnS\xa7:\xe8\x11>\xaa\xa4\xe5\x0er\xe6vR\t\xe6+\xe9K\x02f\rs\x96!\xad\x8e\xc6\xc9I\xcb\x84\xbb\xa0n\x1cw\xafm\xfd\xc3\x15\xb3\x8d\x1f\x10\xfa\x03\x83\\\xf06\xfe\xc2\xdd\xac8\xc5\x9a3\x9b,\xe3\xec#T\x9e\xab\x86\xeb^\xcex\xa5"\xdff\xe5\x94\xfaI\x87d\xaeCw\xd4\xb9F\xfe\xae\xeay\x97\xf7>\xb9\xf4"\xce:w\xb1}\x85\x80\x18\xd6\x7f\xe1\xdf\xca\x8bH\xcc\x03\xa9\xc9u/^\x11\xea\xd5\xa1 \'p\xf4\xe2\x05\xba\x02\x86.\xe0\xcaR\xf0M\xebCi\xff\xa7\xc3\xf0Ae\x936\x01,\xfe6?\xf4\x95\x95/*\xb2J\xdb\x19P\x00\xd2\xa6(\xca\x1e\xc5\xf3c\x9cy7\xa7\xe4\x04UD[\x1a\xfaM:(#&\xfa\xbf\x838-\xe2x\x04\xfb\xee\xfdO\x0fXw\xe9\x12\x80\xe1\xfa*\x10\xce\x18\x9d\x95\x03\x1c\xfc\xd7\x8b\xd3bN\xd5g\xcb\xf1P\xd1\x94\xfe\xc2M\x0f\xc3\xa5n\x0f9\xeb\x0e\xcc\xae\x07\xe54\\\x8f\\\x0f\xf44\x8e\x93\xb0\xc2T\x08\xf7\x84\xc8/\x88w\xf4\',\xbd\xd5\x1b\x92\xef\xcd\xe9R\xaeA\x92f\x0f\x1av\x0bDH3\x90\xff\x0c\x1e\xf9+\xc0\xcd\xd9i\xa5\x15\x7f\xb8\xc0\xd4\xdb\xc9\xc6\x08[\xc0\x8eI\x91\xe6\xc8\xa1\xa6\xc6pGh\xed=\x0c\xaaYs\xa3W\xd3\xd6\xb5\xe0X\x7f\x17nC\xff\xd5\x1d\t:\x1e\x1d\xc9\xa4`Q\xc5G\x04\x9b\x08\xb8{\xf3\xbeft\xb1\x88\xf3\x94D1c\x94\xe21\x99\x0b,~\xd9\\Em\xf0\xfc\xe7\xb2\x08-aW\xc2\xcc3\xaa\xc3\'\xdcY\xe9\x9f\x81<\xf4\x0c\xf6\xc2\x19\xe9]u\xcd\x9e\x90\xc78\x17H\x86\xee=2%\xbc\x03xV\xd0\xab\xad\xdc\xbc\xa3\x0f\xb1\x0b\x8e\t\xef\x988\xbbtJ\x13\xcdv\xb9\xd9GS\x06\xcb\x997$ld\xcd\xff,u\xbc\x0b5\x15\x05?1\xa5\x89\x82(N\x8b\xa9\xff\xd6\xff\x87\xd0j\xba\nb\xbdx\xe1ai\xd7\x89\x82\x17\x10|u\x1cs\xed.\xaa7\x08\x10;\xfaPS3\xfd\x90@\x82\xff\xea\xa2\xe6joL\x05q\xc6\'\xcd{O\xd4\xe4H\xaa\xb1R_\xc6\n\x7f\xb4\xa4xS\xd7\xbb2\x04se\xd0\x81\x96\xfd\x9ao\xc2Y4\xea\x7feuj\xde+\xfc\x01\xffz\xc7\x8b\xe7v\x05\x04Y9\x04\xd9\xc6^hb0Q\x07}\xef\x10\x17\x05\x19z\xb8RM\x95\xaf\xc4=\xa8\xeb\xe2\xef\xfb\xcc\xdcN)q\xf7*D\x17\xb2\x9b\xcd\xb6\x1b/\x13\xad\x05a\xdb\x84\xe2g\xec=\x02Bg)\xa3\x1c\xe2\xda\x050\xe7\xc1\ta?\x9cG\x1a\x96v\x905\x1dk:\xd8\xe2J6R\x8aO\xc8\x1e\xb1\xb7\xfd\'\xd42u\xb4B\xec\xe8\x92c\xd5N4O{\xe2\xc9@\x9f\x8fU\x8e\xf5=\x97\xdf[Z\xc4\xad/\x07C\xb1|\xf3\xa7\xe5\xfb\xbbTN\x07\x0f\xc1\'"\x95:\xc0\xaf\x0c\x98#k\xa2\x04\xba\x7f\xda]\xc2\x97\\\xd6k\x9cQpK\x04\xde\x19\xbd\x0c#\x83m\xc6\x86\x9f\xed\xae\x84&\x11\xcc\xdc\x9a\xe2b1\xaf\x87\x97az;S5\xe8\x8a\xcc)3\xfa,\xfa\xafh\x80\x13d\xf0\x81\xb4\x84\xfe\xa3Ot\x89\x8c\xf0\x1a\xc00\xe2P\x85N5\n\xa2\x12\x93\xfd\xf7\x01\xa4\x06\xf9"\x19"\x94H\x93D\xc3A[\x80\xe8\x98\x93\xa8=Mc\xd6\xe5\xb2\xcd\xe3FX<\x82\xe5\x0f\xb2\x9aY\xbd\xe2\xc0\xb0\x05\x1d\x1a\xb7\xe9\xfd\xa5o(\xc6\xca?\xf0$G\x8f\xbdS\xc0\xd1\xe8b+jL: 9\x19\x96_ 5\x00[c\xcf(\xbaX\xef&\xc1\n\xd60\xf2\x84@*Cl\xe4\xad]\x80\xe08\x9f]|\x80\xbeBXP\x90\x8a\xecl"\xb4\xa5{\',\x1f\xdf\xd8\xac\xf3\xd0\x95y\xcbS-\xee\xfa\x14n\xd0\rYg\xfe\x82\xb98q\x7f\xb2\x0b\xff\xfe\x8f\xd7\xce\xca\x85\x07\xa0\x13\xba$\xca\x9ew\xee\xb8\xd9\x1f\xcc\x0c\xa0y\x02\x8d\xf6\xae,C\xc6\xf7}\xda\xefI\xee\x00$4\x8e+2\xe9\x15B\xce\xc8\xf5x\x1e\x0f$p\x1735\xef\x92\xdb\xe9\xf4i\xa4\xe8\x11\xe8\xc6\x80N}\xf4+\'O\xd0\x00\xc8>f\x84i\xc9J\xca\x1br\x19\x9f\t\xda\xa8\xae\xe8\xac\xea\x9b\xbc$\xb8\xef\xff>T|\x17p\xde\x87M-\xd9>"\x02\x9c.[\xf7\xb6\xe7&\x99\x0c\x9d\x0e^\xb7\\U\xdc\xa3z\x8e(L\xfd\x91\x1a\x7f\xee\x99\x15|z\x9e\x16\xa0\xe8\x8d\xb4V\x1b\x9c9\x88{\xf7\x81\x0f[\x96\x0c\xbe\x1f\x8b\x0c\x8b5 :V>1\xebH&\xa0\xefZ\xc8J\x90\xff\x9a6U\xb5e9\x17&k.\x0e\xf0\x9dg\x8e\xe5\x93>Q\xa6\xfavt\x8d/\x8f\x80\xd7S2\xf1\x10\x0f\x85\xb2\x08qKQ\x9c\xad%\x0b}\xa1\xf8L\x99\xcc\xae\xcb\x01G{h\xeer\xd9U.TK\xd4\xab\xb7\xa4\xf3\x0fD\x81\x9d\xe1\xb3K\x97-f\xfd"\xd4\xe6\x9au\xd7\xbbI\xf5\xf2E\xd6\xc7\xfb\xb6TL\x9f\x1b\xf5;\x96\xe0L\xfb\xd78f\x0esQ\x92}xE\x0cAX3\xbe*\xba\xd3 \x0fx\x9f\xaf\x94BR2\xb6\xcc\x9fN\x1a:\xf5aT\xe9\xea\x89\xc2s\x85\xa8\xfb[yM\xa2\xb2p\xc6\xbe\xc8\xb0\x06\xba\x0f\xacR\x980\xb1\x1c\xb4\xa2\xec\xc6\xf2?Ed\xc1\x05\x99\xca\rix5\xb6\x00\x98\xb8\xd7kT^\xf5\xd3\x9ep\x1ax\xe2\xe9u\xe3\xcd\x1d\xfe,\xfeR<\x1e`\xe3\xe5\xb5\xd4\xcf"\x1e\xc7\xda\xd0\x86\xb72\x99\xda\xa5\xf2\xbc")\x1d4\xfb\xc3\x02XBr\xad\xbe9\x98\x0csB\xbbQ\xa5\xa56ll\x1bY\xd6V\xb7\xeaJ\xbdt\x07X$E\xad\xe1\x7f\xf9V\x80\x89\xe7\x9c;F\xabal\xcd\xcb\xc3G\xd2\x04\xa0&_\xc5v\x82T\x04\xd1\xb0\x00\x024\x83i\x02\xc1\xc3\xe3\x18\x103<\x86\xb6[\x14\xf2;\x80\xabW!\x9d+\xee\'\xa2\x80V\xab\xbb\xa4\x99^\x97\xe2!m\xc9\x8c\x10\xc5\xf6\x08\xa9\xa1\xac\x1f\x7f\xc4\r\x1a\xfb\xae\xca\x16\xd6\xc5\xc5*\xb4\xe7-\x92\xb0\xc5S\x1cZV\x1aq\xf1\x13^;\n\xa2\\\xf2\x05j\xde\xd6\x04$\xa3\xec\x17u\x93\\c\x10#DA\x93\x13\x81#\xef\x0eIx\x85\x1c\xef\x18~\xafW\xea\xa0\xc6ei-?\t\xc2\x1f\xc5%x\xb6).0.\x1e\xc3/\xda\x8ap<\x01.&\xaf\xfd\xe6e`\xbf\x88\xa9\x1f\x98?\xf6\xa1\xed\xee\x84t\xfb\x84\x86y\xe8v\x81\x83\x83\x01\x1a\x0810\xa0\xda\xb3\x864 H\xcf\x15\xadV\xb5\x91\xa9\xc9\x8b\xe0\xa5\xear\xc4\xa7\x1b+es1\x82\x92\xa7\x94\x18\xd2M\x8eTd\xa2Y\xdd\xf0\x07z\x95\xcd\xed\xef\x1c\x8d\x07"|\x9f\x8eJ\xed\xa9n\xce\xe0\xdc\x83\xc6\x9d\xe8o\xf1\x16\x94\x19\x1e\xdc\xe3]\xb0t\xb4\n9\xe1:ha\xb8\xbd =~E\xe7Wo\x80\xd93G\x92\x98o\xc1\x82\x91\x96\xe1\x8c}\x99\x02\xd8\xbe\xa2\xe9e\xba\xec\x08>\xdb\x1fX/ !\xbc\xdb\xa5:\x1b%\x114A\xcb+\x9e3\x14X\xb4!\xde\x06\x05G}\xa8D-\xb4\x18\x17o7Bq:\x12\xc9\x8e\x8b\xcf\xf1\x01\xde\xf2\xa9\\\x0b"\x93$Qy\x0e\xdb\x0c#B\x80F\xd8\xb3f\xca\xd28L\xd5z\xfc\xb2\ru\x8f*M\xcd\xbfI5,\xacS\xe9D\xe4\xbc\xe8Y\x92\x89!n\xaa\xca\x8e\xcb\x9b\xbe?\xcf\xfe\xdaF\xe5T)M\x13\xcf\xf1\xdarf\x0e\xda\x9c\xe4\xa9v\x19\x1d\xeaR\x98\xc1q)n[p\x8aq\x9e+\xab\xad \x92Uy\xc8\x8c\xe9i\x9a\\pB\xe2{]\x8b\xa14I\xe6\xcaQ\x9a\xb6\x90\xf0\xc2Uk|g\xc8\xe7\xfa\xf1\xe8\r\xd6u\xe2M[\x0b\xaac\xae\xde}\xcb\xb2)V\xdasz\xd0\xb9\xa3\x046T\xb1\xc9\xf7F\xd7E\xa8\x89\xd6\xa6:\xb9\x9e>\xb2\xdd{\xa6\xe0\xc7\x9bE\x10\x81\r\xa3L#\xc5\xb0%\xbe\xc2%\xa1\xcaZp\xae\xa4\x7f.\x17\x939[\xa3\x95\xe5me\xe5\xc9\xe2^p\xd6q\x81uq\xbb\x80\xdet\x03\xcfy\x1d\x91i\xb7\xac\xcf\x9fD 2ha$\xb3W\x84Ri\xa6\x9f-\x8a\xca\xa0\xba\xd3\xe2`\t0^\xba\x10?\xf8\x8c\x9c\x92\xce\x9d\xa0\x1ceE\x9e\xad\xfe\xd2\xf2\x83\x97\xfa\xf1\xf9\x88\xca\xfb-\xca\x1d\x14\xdd\x93\xdd\xedgZ\xc5!u\x9a\xb4Z\x17\xb45*!\xc0N~\x18\x1f\to\\&\x1f\xda]\x9bZK\x02\xb2((\xa0V.\x1d3$\x0b\x19F\x10\xe4mtD\x13\xf4\x1bM\x9c\xc0:\x0b\xa6\xd9\x1fY\x05|\x16\xe2\x18D\x1d\xefH;I\'\x0b\x08.\x84\xed+\x87\xbe\x00\x1a\xe2f\xb4/\xd9\x80\xe6\xeb,_k9\x86\xe7\xd3\x9d\xcfq\x0blBFB\xfd&nX\x0bv\xe3\x9a\xf9\x14I\x9d{2\x9bf\x0bW\xe2\xb66B\x073R\x9cc\xa3l\x01\x85\x87A\n\xab$\n\x94U\x8d%\x16tRe\xde\xb6ZG\x81\x15\t$f{}\x13^<\xe18J\x85\x9d\x1b\xdfq\xcc\xe1\xe4F(\x91\x80\xbe\xfbUf\xcc\xae>\xdb\x99E\x0e\x18/\xad\x97\xee2c#\'\x1at\x1c\xf8\xd3\x12\x81\xcf[\x95\xc05\xf60Le\x85iux\xce\xe6\x8e\x96\xe5\x01\xa7\x93E\xb0u\x99a\xa5\xbc\xb3\x8eN\x9d.\x14\xfei\xe5B\xdaq\xa15\x01\xa4<\x10\xb0\xf6\xf6\xdd\xe7\x11b{9\x17\xe3\xc1.\xa4\xea\xe4t \x93Q\xbbrn\xfa\x19\xa2\xe1B\x10\xa1Q\xab\xb1Zp\x15\xd1>y\xa5I\xc1\xd1\x9b>\xa1\x87\x85\xec(\xd5-z\xb5\x1d\x1a\xaf\xeeL\x99g$\x99\x03\x9f+\x87\xa9\xf6\xbc-\xbf\x84]\xfcE\xb8dp\xbcK\xcf\x8c\x1aU\xc9\xe9Xj\xdd\x82b\xf2\x9dW\xe7:\xb5a\xf8\xce\xbb&\xe9\x1f\x0e1\xaa\x80\xb2X\xda\xf2\x1ccx\xc3\x117\x1a1\xf2#h\x9b\x89\xcc\xb0+,8\x9a\xf1\xcd\x06a\'x\xa2\x1d_2\x12\x94\xd5!\xa6\xf5\xdf\xbf\xbb<\xa1\x01\xb63b\x99[c\x9dThp\x01n\x0cx!\xa2\x91n\x1b\x96q\xf9k\xba6\xc7\xc2\x91;\xf5f\x17\xa5\x8e\xb9\xa2\xc0\xce\xb23,c\xbeE\x91\x9e\x1a\xb0\x87\x11\x12\xd9+\x90\xfc\x8a\x98[\xaaB\xe4\x04>\xd9\x02\x96A\xc3&\xec\xa39\xa1\x19o\xc0\xb5\xa7\x02R\x02\xe0\x8bNW\xa4{\x04oC\xfa\x8e\x9a\xc6\x02\x13R\xd5\xf1\x19\x1b\x89\xbe\x933\xfc\x94\xa8\xa8\xa6\x96\xb5E\xf8\xee\x04X\x98\x8f\xdb\'\xb9\x99\xf5.Gr\x08\x9c\xb9\x08\xf2X\xf6v\x1de\x08(\x1c}\x8bdFQ\x96\xcd\xa2\xb6\xd1Jh\xa2\xc7\x15\x00\xe5\x1a!;]j\xb2\xe5K\xe6\xcf\xc4\x1al=\x9a\xe2\xeec\xe2-"\xe9\xa4\xdd\xf4\xc3\xb3\x04\'\x0f%q\xde\'S;UBP(\x87\xc1o|GiC\xa0{\x9b\xff\xce\xc6\xa4\xde}\x91\x81\xf7c\xf0\x9c\xd6\xd1\xe0\xbbx \x86D\xef^\xda\xc6S\xbd\xa7\xfcC\x1bC\x9b\x8b\xbac\x8d:6\xf6\x1f\xd0\xd3\xad\xd1\xb1\xa2\xcc\xab\xae\xf3\xf5\xb92\xa8\xd4\x17d\x06\xd7\x0e\xc5\x7f\xde(\x92W\xc7\x94v\xd72\xb3\xa0j\xd20\xf2[\xac"v\x90\xa1\xc7I?\x12_\x8e\x17\r\xfc\xbd\x08\x1f\x132>\x98R\x9c\xac\xfd\x17\xb4\xed\xb3dC\x05%>^E\xc2"d\xb9\xc1\x8c`\xc8\x06\xa7\xd5~\x9c\xc4o\xf6n\x84\xb7\xc3\xb4\xc1\xa7q\xbb\xe4\xe1\x81\x0fb\xd0\x14\xde\x1a\xba\x8az\xb6\xc8\xca\xc0\x17\xbb\xd6\xfcD\x9d\xd8<\xe5\x1b\xfa\xf3=\x04B+|\x8e"\x01\xd3\x14\x1e\xa9\xaa\x97\xe9^A4_\xb78\xa0\x97h\x90\n&\xbeg\x17\x16\x91p)c\xe4\x02\xb4\xb9\x96\xb0a\x1f\x90\xd6t\x98y\x99\xb2W\xc9\x96\x83\x8e*\xaf\xf0n,\xae\xeb\x8e\xbay\x1d\x08\x94O\x9f\xf6w{6G\xc9\x06\xf7\x0f\x10\x17Q\x17\x04\xa2x\x0c\xb7\xe8\x8f\xf0\xc4\xd2\xd2\xdbS\xc3\xdc\x9b\xec\xe0\xd8\x1c_ =$\xc3\xd3=xD\x0f\xa21\xecfggmAz\x89\xb6\xb4=\xa4\x14\x04\x82\xde\x16z\xcd:\xf9/u\xa5a\xc1\xee\xc4")\xeb\x96S\x19a9\xc3\x05\xaf\xce\xee\r\xe9f\x1fp!\xba\xea=a\xecw\xc8\x13\xd3\x81o\xc9\xe1\xc7QJw)\xf9|\x0e\xba\xeb\xffp\x9b\xf5"\x10\xd89b\xd2E\xde\xa5\x83\xe8\x13v1\xfcB3g\xfd:Yvb\x8b\xb7\xea\xd2)\xb1\x8c`A\x08\t\xbcf\x87[\x90(\x93\xd9&\x03\\Y\x02F%\x18AU\x0f\xb9\xa3\xd8\xbd\xe2UNkt\xe9\x8f\x0f\x8a\x04p\xc7D?[7\xc8e\xf7\x18\xf3\x94P\xf3\xa2\x80O\xeb\xf5\x86u\xaf\xea\xa3;I\x8eS\xe1}\xe2\xd6\xd9\xac\xfc\x85c\xb0\xd5\x85=X\x05p\xd5r?K\xad\x03OD{)J_\x1c\x1d0\xdb\x87?\x90\xcal\xab\xf8$\xd9\xa4 n!\xbe"\xfcx\xf4\xcav\r\xc4\x1d(}\xb8\x92_U\xe3\x18\xc6T\x17##\xb4S\x0e\x84\xb6\x11\x19\x06.\x93p\x8f(\x99\x0f\xe5)\xb5\xb3[\xf5\xa1\xb1b\x90\x134\xab)\x81J\x97\x1d@\xfd\xad\x876\x81\xa4\xbd\xab\x1b\x9d\x94\xd8P\xfc\x13.\xf8\x1e\x18H\xd5\x99!d\xd2\xe7\xbca\x86\xaa\x8f\x8b0\xfa\x91u@s\x93\xba\xb8\xf1\x188\xf2\xbe\xdc\xcd4-6\n\xd2\xaf\x1d\x98/ed>\xcd\x1b\xa4~\x03(*\x1c\x10\xfc\x17\\Y\xab\xf7\xc1\xdf6z\xd2\x96+j\x06\xb0\xfa\xda\xd6\xdb\xaa]\x8d\x06JQp\x91\xbb\xfe\r\xa4i3%\xc5\x99PZ\x8f\x15\x99\x98\xb0\xc3"&PQ\x81\xcb\xc5\xa3*p\xbaR11\t\xcb\xc0\xc4\xd7\x81\xea\xd5\x9c\xf4I\x8fU\xec\xc6}y\x13\xd4\xdc\xdaM\xf6\x82Q\x1e\xf1Bx\x819\x95-\x93*Z\x0e\x94\xc7\xd5RfV\x9aR,\xb3\x81\xf8\x7f\xedL\x8aW&m\xe5\xf7\x07\xb9\xa5\xbc\x0b\x95\x01\xf8J(\xa8\xb0\xf4\xf6\x97\xde\xee\xb3(\x82\xd4\x98$g\x05\xcd\xd4\xec>\xef\xf7\xcd[\xdd4\x85\xef\x987\xca\xb1->\x18~\xa1QS\x16\xfb\xce\xe3\xf1\xdc[o\xc2|O\x00n\xa7I:<f\x86S\x10q\xfeQ+\x9b\xf6\x0c\xd1\x8a\xba\x00?x\xe3OQ\x13\xeb\x0e$\xf9\xc0\xe4\xbd\xbe_\xf8[\x8a,\xa6\xb1I\x88\xf1\x03\xab \xff\x9f\x80\xb8Jl\x0e9KQA-#.24\x84\xbd\xd9\xae/\x01b\xfcc3c*\x1eA\xd1f\x9f\xfeYu;\xc4\x19\xbe\xb8\xd4F\xfc\xe1PK\x9ey\xd0L\x84\xceH\xd2\x84\xf5E\x1dD+T9F\xa0\t\xa6p\xdd\x1c\x0f\\\xbf\xed\xceK\xfc\\\x1bi\xf9\xbe\r\xd4{w=\x14\xb5\x9a3\x88\xfb\xa2[tv\xd0\xab\x7f\xb0\xc7w\x90)\x14\x8ez\xf0\xf8l\xa1\x18\xcfJ\xbb0\xf3\xba-\x96\xf4\x8bOF\x82L\xfd\xdaS@\xf4\xe7\x1cXhde*\x02"\xe4w\xff\xb9\x13e\xe2\x1a< \xf9)\xc6\x02\x1bp&\x8b\x02\xde=\xa6ug\x7f!&Z$\xb7\xac\xb3G\x86\xa0\xe9}\xbaz\x17>\x0c&\x8b\xd1x\xd2\x0b\xe2\xc9v\x00\xce\xf2|!T\x1d\xf1\xa3\x1c\xac\x17\xdb\x89p)nl\x95\x97\x83\xaa\x9f\xeb\xac\xe5\xa4\x84\x8a\x1dB\x0b$\xfe\xd11\x9e\xad\xf5\xb1P\x94\x17^\xa0\xda}\xabH\xbb}ci \xc5S\x85\xf8q\xc8\xbaR=\xd9\xdd\xd8\xf9\x0c\x0f+a\x13\x06\xc3\xa9\x04P\xc5\x02K\xc49=\x1c\x15\x99\xe2Em\x83Z\x88\xdf\xe0-\xcfz\xa3\x1a\xc0\xe2lv\xa8\x11\x9fI\xe53\x95b\xfd/\xc5\x84>QaU\x1dE\xd7\xd9f\xb2\x8aa\xb7&\xf3\xac\x8b2\xf8\x15,\xe5l]\tQ\xdb\xed25PBn\xb5\xd5X\xc7\xd9w\xea\xc3\x96\xf8-b\x9c\xbcJ\x1c\xb3\x8a\xb6\xb9\x05\x82\xb6\x02\xf0{\xb8\xb2Y1L\x9f\x0e\xfdE\x13j\xb8S\xd7\xeb\xf2\xe6Z\x93\x87\xd9\xa7\xf3\xd7\x08qt\xc4l\x89\xe1D\xc4#c\xb3\xdb\x8d2\xc6\x9d\xe4g\xad\xe2\x02\xe2\x8fD\xc4\n\xaf>\xdfp5\x9a\x14\xfeEFa~A,\nU\xdd\x8c\xd6\xaf\'0\xbc\xca\xf8\xa4\xf0\x8a\xa6\x08\xc8\xb5\x1d\xf1\xe64\xc3nhzE\x87<\xef\xf7}\xa9!\x03\x0bJN\xb2\xe3\xe8\\(\xfb\x11\x1d\xf9\xc5\x0e\x01V(\xf23\xbb\x89\xe4\xfc\xf0]w\x83\xd8{}G&-8\xe7OR\xc2\xcdu\xfd\xa5\xe6\xbe\x80\x83\xd2\xe6\x91\x90\xba\x19t\ntb\x12~f_S=\x92\xd5\'\x00!\xf4\xff\xf4\xf7\xc6\xec\xcbZ%\x9bC\x99\xec\xb0M\x15\xdb\xaf]\xf2\xd4"\xa2z\xbb\xcd\x7fm4\x1e\xc9Y\x17\xd7\x0b\xebJ\xcf\x1b\x1d1\x1a\xc8`ri\xbb\xd0dn\xfa\x0e\xb4\x86s\x90\xe5\xc9u2\xa5\x93\xc7\xe9\xc8\r\\\xcc\xa4\xa0<A\xc9\xa3M\xd3le\x10\x85\xae\\E\xdf\t\x00+F\xa2\xad\x89/\x14n\x9b0\x80^~\xb4\x9f\x1dn\x84\x7fD;\xd6\xb0\xb7\xc6S\\\x0c\xcf\x01\x0e\xf0\x84\xbd[;\x03\x9a\xb1\x04\xa5c\xcer\x9e\xacw\x0bc\x19\xc9H\x9b@\xfd\xe2,j\xe2\xa7\xeb\xea\xcb\\p\xc8\x1a\x0bZ\xb3\x9d\x1f\x85\xb9\xdd\xd6\xa7a\xa6\x94\'\xa2g\x839\xb4\x17\xbcq\xe8\xa2\xf4v\x02\xfb8V\xba\x11S\xed*e\xa3\xdc\r\xd2\t\x94G`\xa5\xb9\xb27\xf0\x80\x86\x93\xcf\xc5#\x1fXL\x14\')(\xa3\xdcL\xac8\x1b\x9ft\xbd\xc2\xca\x12\xac:\xecb\x9aX\xeeD\x03\x16\xc1L\xff!O\x95\x04VW\x92*\xfcYT\x15\xad\x0cV\x97<\x19\xb6\x89\x8e\xa8\xa9\xd6gt\xa6\xd0\xd8c\x84\r\x10\xdc\xf0\xe9\x1b \x0c?\xd1\xdf\x16\xfc\x04\x88\xe6\xc1\x0e| ;\xd4\xd5q+$\\\xda\xe8\xcf%\xcf}\x92\xcaPu\xefH\x94\xbc_P\x7f\x1a\xe4q\xffP\x7f\x02p.\xc2\xf4\xdc]\xa2>d\xa3\xf0\n\xb9\xf62\xa0v\x88\x1fP\x82]\xe5Y\xe5F\xb0QY\xdbI\xba\xa5\xd32Z*\xc7\xa7\x8c-\r\xa1;v\x06\xfcU\xe2\x9fk\x98q$\x16\xcf\xffG\x19\x88\xf1\xff\x83\x8a\xc2\x99\x19IQ\xb8\x02_\x03Gf\xf1\xad%=\xca\xad0\xa6d\x83\x97\xdb\x0b\xd8\x1a\xe8)-\x9b\xb8\xbe\xc3\x85\xe6#\xe6%\xf91\x94@\x19\x1cC\xe4*]\xe8\x1bu\x8a\xc1\xe3%\x16\xe8,\xdb\xf5\xb7l\xbbq\xf8D\x19\xa13:\x07M\xc0%!.\xbd\x08\xf3\xec\x91\xec\xf0{\xc8\x98\xd2\x0c\xce\x8e\xf1\x08\x99\xa8\xd2\xb2>\x06\xb2\xbe\xf5FT\xb10\xfc\x07\x1e\xf0\xde\xed\xc2\xe4\xb1u\x1a}\xc4\xaf\t\x9e\x94\xa0k\xe9;\xb7\x81\xebD\x154[\x95\x05z\x90\x9f\x94mY\xb9G\xeb\x13\xde\x1f\xb8\xe9\xc0\x19)~\x83k\x851\xfee\x9b`8\xc7\x86)y\xcf\'\x80\xcd\x84\x062\xacs\xff\xbf@b\x0e#\xd2\xcf\x1cj\xf2\xef\xfe\\45{y\x8bC\x89]\xd4\xd2\xbd\xc2\xe2B\xd7c\x99\x8a\xb5\x8d\xed\xe32\xe2\xbc\t\xcaN.\x1b\xc1\xcd\xe7*rC\xde-\x9f\xc4\'}\t-<\xab\xa1\xfc\xf7\xc0\xae\xab\x0f\xe7<Z\x86\xdf*\x18\xd4NM\x93lh\xfc\xf1\xd4\x80\x7fj~\x1a\x13}\x7f\x92\x13\x04N\x0c\x03\x19Z\xaeeQ:L*>\xf5,pz=]\xca\xb7\xc1\xcb\x98\xa7+\xc32\xf2*\xf7O-\xec\xd6A\xa8\xda\x07\x14\xc2\xb0\xebb\xa9\xedzY\x01at\x93}\xb4o\xf0\xc9:A\x90\xed\xe5\xbfB\xa48\xf53v\x08%a\xe1?<o\xf8\xa1\x9c\xdf\xc1"\xaa\x17\x03\x03*oe`?\xed\x05-{<\x04\xf49&,\xe2\x85\x84\xec\x18"\x11H\xd9\x19q\xb6u\x8b{AE/\xf3\x80B5\x01\x8bj\x13\xd5\rl\x1e\x88Qxe\n\xbb\x94Y\xb5\xf7]\xf6te\xbb\x82\x8e\xc1\x9d\xaas\x90\x1c\x12\xf2Z\x91\x88\xa8\xccr\xdbqn\xdb\x1fS\xb7b\x1ec\xcdc+j\xdaQNA\x8b@wh2\xafJ\x8a\xdf\xc0\x15\x07\xee\x81\xb9\xb6c\xbd\xae7]\xf9\x02cw\xd204\xad{yq\xc8\xf6#\xc8\x9cA\x99\xf2\xe2\x89\xf1]\xf2\x98\xbb\xe1\xdf\xc8\x17\x0f\x06\xcft\xa2\xfd\xcf\xefvV0\x97\x94%\x05l\xc2\xdf-\xe6\xf3\xa0\xcf\xfb ^\xad\x1c\xc6\xe9<\xdf\xb2\x9f\x08\x84\\i\xeax\x8cF\x97jg\x10\n\xadp\xae\x9e\x0f\xe4\'\x10m7m\x1eG\xcbp\x17%)\x16\xab\xfb\xd2J\xad\xbe7\xb4\x07\xe2v\xb9$>\x81K\xb5q\xa2!\xe3\x89\x8eJ\xcdqPQ\xd1"\x90=\xcd\xf2\xa2L1t\xa6\x7f\xfb\xff\xf0\xb8\xfb\x9e\x15\xb8\x94\xdey\xcd\xb9Y\x0b\t\xe2+to\x10\x05\xc0\xf1\xe6\x95\xc6\xeb\xe4\x1b\xf0\x99\xe7\x8dI\x9f\x85\x05c\xaea=\xe2AT\xf1z5\xe3$\xad\xb0\x1b\xbf^Wk\x19\x16\x81\xbeBU(\xe2\x8d\xc3\xa0\x88;\x88\xb3QlP\x01Z\x82\xbe\xfd!\xefn\x95\x93+zO3\xac\xf9\xfa?\x8b\xca\x9a\xee\nK\xac\xc68\xb5T\xa1\xba\n\x8a\x9b?o\xb1\xbf\x96\xed\xf2\x9el\xba}g\xbe\xcb<\xd5\x9cf\x97\x88\n\xb9\xd8gH4\x15\xf97m\x9df\xea\x97\x1a\xb4\x836H\xb4\xc9\x91\xc4\x8f\xb4\xa4\xbfVn\x91\xcb\x05\xde\r\x8d\xc3\x8ePA\xbc\x179[\xeaj1\\\x83\xc4\x99t\x8b\xb0\xea\xca\xc8Sd\x9a\xcb\xdcT\xf4:\xbc\x87~D\xc6L\xb3r\xb7\x07\xe9\x91\xf4\x84\xc6\xe1\xe9r&0\xbf@\x81\x180,\xca\x05\x18\xab{P\xdb\x82\xd50y\xd2\xcf\xde\xb3\xda\xe5\xc5\xc7Bb\xcb\xcb.\x8e\x98\xf1>,}\xb8\xa6\\\x8e\xc8\x06\x02J\xd7\xe7nybwat\xba\x98UWQ\xe5KJoc\xbb\x00kTB\x01m\xf9=\xff\x07\xe5\xa1\xb9\xb8\x15\x8c\x9d\x99\xc4\xa3~+\xb0\x13\xbaX\x8aVxo\xed?\xa9\xaf\xc3\xaa\x0ex\x84\x85-u\xf2\x94Pt\xda6Nj$\x11s\xa2\xc8\xbe\xd1\x83\x0f\xd5\xb9\x06\x9a\xc5\xee\x17>\xb9H\xaf\xf7%\x9epFg\xfe\x9c\xc8vC$|\x80\xc4\n=\xe70|\xeb\x00\x7f\x92\xbd\x9f\x92\xbb\xc4U`\x9e]\xd7w:\xcfA\xfa\x95\\5\x81\x91\x17\x9cOwi\xbe]\xe9?;;\xf9\xcf\xaf\xdd\x9c\xed\xab\xd2\xf8\x953-j\xf3\xc1\x1ci\xc15*\xbd\xe2\x80\xe6z\xa8:\x10#>\xff.\xa6s\x149\xb7\xab]g\xablY_\x88\xbe\x06AS\xe6\x8aM}\xaa\xfb?\xb8w`\xf5u\x119\xd7La\x91\xfc@d\\.\x7f\x1c\t\xea\x8d\x9e\xcf\xcc|\xb7\r\xe6n7]<\xe4z<O\xbd\x10\xd4=\xb6<\t\xc8\xb5\xdc6\x8f\xb0\xb4\xec7s\xc6\x15\xd9\x10\xd9r\x85\xa4.\x0f\xadM\xdfT\x01\xad\xf7b$\x93\xcb\xc8\x8cs\x95e\xae\x8dR[\xff>\x00\xa3\x15eT\xf9\x9bYB\xa6\x12\xa0\x80F3{\xfcO\x8e\xd5\xcd\x04\xda\xe3\x11\x93\x0e\xfc\x0b\xf7+\x1es\xb2\x83\x03@p\x9ci\xd9e\xd4\xd0\x91U\x90Z\x9eF\xea\xa7\xde\xecq\x18\xcc\xee\x85\xb0H\x01\x19\\z\xff\x91\x1b\x89\x82\xe1\xd2\x08\xc38R\x95\xc9\xf7pv\xad\xf2\xf51A\x0b\xf2^^$\xa8\xf9\x00W\xd6\x15\x91\xac\xd0\xbf\x8c\xe6xL\xdb\xcfX\xe2\x033\xf2\xb5\xa1t\xd7k[L\xbd\x80\xbf\x84\x0f\xf6\x9c\xbd\x0c%?\xd0\xf8\x18\x86\xed\x0c\xec\xb5\xa4\x14\xa6DZu\x19(!\xd5T\x10\x1ee\xecf]\xc4_\xf3:\xe6\x06Q=\x88\xc3\xa5L\xf3\xe5\xcc\xde\xe5\x16\xddi\xa2\xd9\x06\xd3\xbe\xf3\xc2>\xd4\xbeW\x84h\xe1h\xc6$-\xd18\x07I\x80\xc2\x05RMee\x870\xd9\xbc{uC\xdb\xaf \xcc\xc8\t\xc3;\x8b\'\xf7\x91\xb6j\x8a\xd1>\x18\xf4\x8d\x90\x92\x1a\xa0 \xe9\x88R\xe1E\x06\xe0\x80\xb1fh\xdb\xd4\xa2(K\x88\xcc\x82\xa3\x04\x99Q\x9c!\xd1\x9e\x94\xcc\xd0S\x90\x9b:\xf21$\x1de\x94\xea\xed\x83G=R\x95\xfb\x8fF\xddR \xa9\x14\xd7B\x9aD&=,\x0e\xf1\x9c\xca\xfb\x07\x80\xd8\\\x86\'*\xc00\x0e]aQ)#\xa9#\xbc\xf8-r\xca,<z\x1dCJn\xcc\xef:W\x04\xbc\xf0\x85y4\xbd\xaa\x93\x90#\x87\xda\xf8\xbd\xfe\xa80[\xc9\xed\x86\x89\xf3\xec\x0c\xffcQ\xff\x8e*k)\'\xc8\xf5\xd2\x88\xcf\x07\x00\xe7q\xa43b\xc1\xd3\x1b\xfe\r\x8b\xb5\xe3P\xa1\x0fs\xe2H\xd5.\xe2\xac\xfa}\xec\xe5\xf7\xb2\xe4\x16\x10\xc1L+\t\x85\xc0\x95\xde\xedi\x7f\xc4\x1b\xdcg\x9ah>g\xe1T\x7f\xfbB^\x93\xa8\xe71D5\x0f"\x0f\x81\xfa\xbe\x12(\xfbNF\x11\xc3)p\rn\x904:f\xc8\x8bQ\'&\xc4\xc1\xba\xc2\x02\xb1\xb3\xc9\x90\x0f\xcf\x0e\xb6\xebA\xb4M\x1e\x94W~\x81h\x8eK^\x910\x07@b\xf4\xfe5\x80|\xc8\xd1,\x893\x81\x87E#G\x07U\x19a\x060\xa7\xea\xb5J\x93\xcb\xfd\xd4\xda\x1cD\xb7\xbc\x8f%P\rDA\x108\x8f\x1b\x81#56\xf2M\xb5\xeb\x8c\xe7\x85\x1f\xf3Fb\xbf\xbf\x92\xab\x1eoz\x8d\xf4\xd8\xa8\x80\x87o\xd1l3\xc1\xbe;b(z.\x11zkHz\xce\xb5\xfc\'\xd1\xb0\xf7\x8d5\x88g\x80\xa2\xf0j\x03\xb3`l\xaf\xf8_\xed\r\xf2\xe7\x019\xf2\x1b\xbf\'\x84\xfc<j`\x9d\xd7\xec\xa2\xed^.\xa1\x1f\xc9gt\x1a\xff\x1b\nm\xebe\xd2\x18\n\xbb\xfd`_\x9dXc\xdb\x80u\xce\xc7\xe6\xc7&\x10\xdfO*> f}4\x9e\xa7h\x86W\x04\x80\r\x80\xe0*\xcf5n2\xfa\x8f\xef\x07\xa8Z\x85}\xbe\xf8>\xbd\x0c\xea\xd3k\x94\x86\xd0\xc4\xab\x86\r\xea\xfdU\x88p\xb7mq\xbcKoW\xa5[\x8eCS/\xa3\x91J\xca}v\xae\x99\xce\xd8\xe3\xf1\x0bx|\xab\xa7\xef\xa4\xf1\xa7\xc2\xa9l\xb2\xb1\x9a\xc7T\x9d9\xbd\r\xd6\\\x05\xc5\xdd\x96\n\xb4SM\x96\x9bz\x12\x0c%t\x80.\xdf\xf6\x9a\x1b\x11h>\xd0\xfd\xa3hY\xe7\xba\xd8-W=s\xaf\x84>V\x14\xd2\xd8\xfb\x1bG\xb6\xef\x11\xfb@;\xf9\xac\x88\x9c\x0f\xbeA\x0f\x1a\xd8^\xe2o\x9d\x1a\xf8:\x08s\xd7\x01\xa9\x1b\x1b\xed\xb4\x9f\xc8\t\x92c\x82\r>\xb5\xfb\x03L\xd3\xbb%\xc2Z{\xf8\xfb\x9d\xf5\xe3\x0f\xd4w\xf1u8\xf8\x95\xdf\xff\xf9,\x0e1\xbb\xce\xa8\x18\xeb\xe8\xeb\x95=]\xbc#\xe5\x0e\xf50\xd9\x89x\xd3\x97\x9f\x0f\x0b\xb25\xedCz^\xe4\x88\xdd\x1d\xd3\x8f\xb1-V\xab\xec\x14\xe5\x88\x13\r%@\x1a\xbf@\xe6\xf0\x02\x97\x06\x9aZ\xda\xea\xa4\x12Dd\xf6\x9f\xeb]\x8c7/\x8b8?\r\xc5\x91\x04$`\xf3"\x07\xfc+\xc9\xd87\xd1\x16\xfd\xd6\x96\xdc?\xa2\xde\xcd\xf7\xa1w\x88\x8a\x84\xf0X\xc16\xf2-\x82W\xce\x0e\xc4\t\x84h\tD\x81A(\x19\xa2\xd3\xa5\x19S\x9b\xaa\x968\x1d)\x93X\x85Mt\xc1!\xe7\x9agT\x88Y\x99\xa2h\x03L\xb5\xa2\x00\x8d\xe4\x11\x12\xad\x98\xc9\xb6\xac\ni\xd1\xd7\x1e\xb8k\x0f\xa62\x84\x8f\x1a\x07[\x830Y$\xb8>\xe2\xeciq\xb4Wit\x05s.\xde\xe9rr\x8a\xd6\xdd\xbb[U\x90\xf5\xeb\xc8i\xf2\xfbi\x04\xd3\xdc\x91\x90!\xd8\xe4\xcb_\x16\x1a\xe7\xec1s\xbe8\xfb\xf0\x89\x13\x06\xc7r\xc9\xb3*p\xbc\xb3\xbd\xfe:\xdfg\x8a\x10\xf1\xcel\xe9\x80\x03W\x8e\xac"b ^ZLsa\xa1Y\x18\x1a\\}\xb3\xb9we\xa0\xe3p\xc3\x1b\xb87m\t\xac\x8f|\x02#2\xf1\xa7-\xbcn\xac\x1f\xb0\xcei\xb1\xb7\xa8\x96\x94|\x0eOEk<\x93\x9f$\xc8\x8f\xd6M!\xc3D\x1c!iv\xca\xa5\xeaH\xbb\xe8\xe4\xa3:^G\xc0y3<\rE\r\xf7X\x97\xf6\xf0\x8bJ\x86\xa7w|\x87\r\x82\xba\xc6\x03\xf4\xbbv\x9cxf3\x10\x07\xf5\xcb{\xf7bY_\x14\x87yqH\xab\xdb\xe7\x90\x1e\xae\xadH{\x93y2\xb3l\\?-c\x05\xe7Z\xe1l(E\x00*l\xa4)\xb6\x99\x00mm\xc1\xac\xb3\xfa\x83\xdc\xa3\xf9\x81X}\x85\xf0u\xdd\xe5){\xee!-\xa5 \xa8\xf6mh\x9d\xbdy\x03\xb2\x11\xefS\xddjP*\xf1\x9f}+r\xa5^\xfeV\xcc|uT\x9dGAeM\x1efw\xa8=\xa7B\xa4\xe0V\x00$B\xd9\xb4 \xf5\xfa\xf6\xa8\xfeL\xd0\x950|\xae\xb3\'BM\x8a\x0f\xfa*\xc4\xdc\xc0\x1b\x11\xe0p\xae\x16\xf5E^\x8d\x86\xb11\xd2\xd1\xb0Q\xd6[\xde\xc15\xc7Z\xee\xbc;\xc6\xe6sSE\xb5\xca\xbd+\xb3\xd0\x81/\xde\x88\x12Lnd\t\x0c\xda;\x9f4\xac\xb4M\xe6\x9f\x81pu\xffE/\x8a\x11\x96\xbc\xe0Gi\n\xd2_\x11%\x90N\xac\x86\xf8\xe1\x16\x1dK\xef \xad\x11\xcd\xc3\xb1\x81\xfd\xef\xa180\xef)mzva\xd2\xd4\x12R\x1b\x9ei\n\x81\x94\nv\x96\xfcG\xc4j\xe16\xe9\x96\x89\xeb65&@\x1d3A\x0eT\xc1\xccvF\xc0N\xa4K\xcf\x9a\x90\xef\xb2\x0e\xb6:g\xd8\x92CK/N\x86\xcc\xee\x8f\xcf\x89V\xf6\xcb$\xd7\xf6\xf7(\x17\xb8\xd2\xd7\x91DC\xb2\x9dbb\x0f[\xb6\x8f4\x10\xf8\xe9\xbf\xd2\xb2>\xceX^\xd1`}\x8fw\xb0|\xf0\x1a0\xefuse\xd0]\x8cY\xd0\x1f\xfb\xdd\xdd;\xe56\xabG\xd2\x94n\x02\x8a\xb1\xdd\xcf\x85k\xb0\x88qXa\xbf)U\xd2b\x05\xb8\r\xb7\xe7&h\xecm\xac\xb9\x05a-\xe1\x87\x16J\xf7\xea&\xbe\x82E\xe1\xcf\xa5\xef&\xd6F\xd3\n%|\xd8\xee\x920JYJ\x15y&1&\x9e \xf6\xb9\x11\xeb#\x01&#a\xcd\xa7\xe9\x84S\x82^\x07ws\xdf\x8a\x83c\xef\x17\xb4\x89\xb9~L\x0e\xc9I$f2+\xdf\x0f\xdc*d\x01\xd5\xf4\x92&\xf5\\M0\xc0\'\xbe\x10\xfbb[]2xW\xc8C\x1c\xdf\xffhPm:z\xc5\x7f\x9e\xe2\xdf\xae\xd4\x8d\x1a\x97\xec\xa2\x97#\xf4\x8b8\xac\x03f\xa9;R\xa4<_\xfd\xc4\x8c#\xd5\xd79\xc3\xee~2\xa5\xc0\xd6\xad\xb4\x16\xc2J}\xe7}\x7f\xa7\xe9\x14\xb5\xb0t\xce\xbc\xb0([+\x9fzr\x90Re\xed\xf3\x8b\xdeR\r9\x91\x96z\xc3\xbbC\r\xc6\xd6uM$\x06\xb9\xbe\xb1\xfa\t\t\xd0GW\xb2]\x8a\x1a\xfdZ6\xbb\xa1\xf6{\xf4P\xae\xb57\x99\x8c\xbd^\xd7K\xe4\xdaQ\x87\x8fp\xb4\x81-\x95\x1e\xa2\x87\x8a\x99~c\x96xC\x94s\x8fR*\xb8;\x9e\xe5\xb04\x0ePd\x0c>\xc0\x05\x8d\x9a6qL2\xc6\xbc\xd2\xc4\xc8\xc5\x94\xe9?\xfa\x17)K\xfd\x89_\xb2\x05\xc3\xb7\x14\x1c\x1d)\xcek"\xd5*\xf6\x1bW\x85\xbe.\x07n\xfc\x86\xfb\xef\xb8P\xca\x99\xd9Ao\xd1"S\xed\x85\xb5\x1b\xe0\x9d"\xe6\x87V_\x0e}\xa2\\\x83\x8dM\xe3\xdb\xb2\x1f5\x86\x08\xb5?\xa6^Q\xa5\x8d\x05\xfc\xbfVq\xdc8\xf2\xfa=& \x0c\x9b\x86r\xd2\xdbG\xe9\xd9\xecq{2\x14\xa6\x88$K(OY\x97o\xd8\xfbHwF\xea\x8c\x19\xb2\r\x82V\xd4&v\x8cc\xc5\xc9t{"\xcev]\x7f\x9c\xf3&\x103\xdc\xa1\xae\x1c\x9b\xde\x18k\x83,\xd8\xc0x\xe1&\xd6\xe5\xf1L\x8e\xf1\xb3\x8d\xcc\x9a\xc4H\xd3\xefu\xeb\xe0\xaa\x85m\x81C\x7f\xb3S+%!|O\xb9.I\xe7p \x82\xd9V\xe9a\xa3\x16\xeb\xd9\x89,\xf5\t\xe1\xa34\x9a\xd2\xfcN\xb2\n\xb9_3H\xa1\x9dL\x19\xf7\t\xfaL\xddh~k\x16\xc3,1\x14W\x96\xd1\xe0\x9cNf\x19\x94\xfaNR\xb7HyQc\xac\xa3\x08\xdf\xa0!$h\xde\xf5^\xcdE\\\x1f\x89[\xc9\x0fJUo\xfa\xa0{w\x97\x86\xab\xda:\xcaM\xb2\x0c&\xba\xa5\x99\xe5\x11\x11\xf9\x93*\xb3\xa1\'\xf8\x83\x03oi/\xdb\xc0q.f\xa8\x9aF\xa7_\xed=\xf1\xcd>\xc6{j\x08\xc1\xbc\x8e\xaf\xc8\xa5\xac\xe3\xd2\xf0]4\xe4\xc5\xeb\xfd\x13^\xb8J\x0b\xb1\x87w\xc9\x0f\x90\x0f\xa4#\xd7y\xf1\n\xd7-\xf8\xb6\xe4-\x805l6<\xd3\x00\xdf\xce69\xd1a\xec.\xf2\xd9\xbd\xb5z\xb1\x82\x18\xe4u\xdd\xaa\xa9r\xdb\xc4P\x8b7\xd6\x0f\x00.\x03\xd2z\xac\x9bh\x8f\xcb\x01E\x18\x19\xd8l{#\x80\x9bS\x82CS^7\x85\x86z\xa6\xc9\x1d](\xab\xc7\xf2\x84n\xac\xd9;\xc1\x12\xf9\xb5EAM\xd2(\xa5?\x0b\xe1|\xd8F\x8b\xf2{7\xde\n\xf1.xt]3\xf2\xac\x00\xd8r\xbf2F[\xc4\xd0\x8c5\xe7r\x90 \xec\xa7/\xe2z\xe0\xf0\xe47\x005\x06\xb0(\xff\xd2\xab\xaf\xec\x00C\xf7\x02\x7f\x9c\xcc\x84\x7fdf\xc9\x12\xd2\xbf\xfd&7i\xdaf\xeb\xf1C\x91\xb6U?g\xa7\\yv\x9d*_&\x12yE@\x06x\x9e\x8bf\xfdQp\'I\x94\xb6\x9bp\x9eN6\xc3\x1e$Z\x9e\xc6GL\xc9Mk[<\x1d\xf4{\x8b\x7fm\xb7\xb0\xb21\xb8\x92@\xdf\xd9\x87\xc1\xfe\x0b\n\xbd\x15\xb1B\xb9\x07vV\x01\xf5P\xa7\xd7\x9f\x9f/\x89\xf0\xe2h\x16\x84\xf9\xe0\x87\xd4\n\xc2\xf9\xbf\x03\xf9QC\x12\xd2\xf3\xbc\xe3n{\xa6\x18\x0c\xa4\xab\xff#e\xab\x8a\xec\x87@\xf7g4$\x8d\x10\t"\x17\xe6\xa9*\xeb\xe0\xa1\xf4S\xbcCST\x86n\r\x17Wzq\r\x13n}Q\x19\x162C6\x98\xc7r<"\xc9\x8e\xa4\x96\x8fR=\xc5]\x86\xc3\x1a-\x12\x03]7m\x0c\x1a\x826\xbc3!\xe6\x83\xe3\xad\xbf\t\x0b\xbf,\xbep\xcehO\x9f\r\xb5=g\x95\t\xf5\x0ce\xa1~b(\xf1\xfc\xb9\x1c\xfeO;\xd2\xb5\xae\x00\xa0\x87\x82\x0e\xc8\xf4\x81?.\xcc\x15\x9c\x81~?\x84\xbd\xc9\xc0\xeaYmXO\xed\xea\x88s\xc6\xf31\xf3\xf7\xeb\t\x99)b@\x8a\'\x98G\\h8\x0f\x053\xf3:af\x95\xc9\x936@M\xf9\xc01\xee\x15O"\xe9\x06\xd3\xb2\x99\xcd\xeeZ\x9c\xacE*w\xd1\xb4\xb8\xa4\x16\x11\x1d\xa9\xef\xe0\x04\xfecD\xc4\xb1\x02\xb1\xf9^7\xbb\x93S\x919\xdcq\x12FCS\\\x01"\x1cw5\nn\xe9\xa5\xf4\x80dE\nl\xfdBaLGFS,\x0c_\xf6\xd7,a\xf2@\x03\xd9R\xbc\xa9\xdcRb\xf3\xea3\x07M\xa3\x16\xc9\xa5\xcc\x836\xd5A\x91\xc5\xd0w\x13\xc8\x80|Kk\x02\x19\x1dC\xbfx\xb8\x9d[\x81\xd4ih\xb5$\x99\x01q\xbf\x89\xe2\x81~\x93\xec\xb9\x8a\xb6\x87-\xa1O8Q\xbd\x88k\xdf\xa4\xe9I\x0e\xde\x8e\x90\x9dq\x86\x15Jx\xb9\x8d\xa8\x10\xfb\xceG\xfd\x80\xd3\xdd\xa7\x0b-%F!TY\xa3\xe9\x1b\x9f\xa4K]Hag\x01\xe1\x16\x91n+0{\x98\x00\x9d E\xe8\xa7\x90\x99j3\x80FCJlK\x8d\x12\xae\x0e\x11#>"\x02I\x11\x9b\xc2\x87v\x9c\x00,5\x12\x0f\x7f\xed\xae;K\x86v\xe0\xa5\xb0\xa8E\xf4\x95>\xc9iE\x988\xd6\xd0P\xdbc2\xc0$\xf7\xcdj\xea\x85H{!=w\xc7\xe8&\x9c\xd1\x91~bB\xf2d\x1a\xf9_T\xcc\'\x9f0\x95UBn\xc2\x00\xa3\xec\x9b9\xc6\x94\xe4l\x07}\xf8sxh.\xa68>\xbd\xa1\xb0i\xd5\x90\x8d$\xb1\xd0\xedX\x82\xb1\x9b\xd4\xb5\n\xb3dSh2\xdd\xac\x93n9\xfa\xb8\xee\xd1\x9c%\xd9\xe6\xf3\xd8\xd1[\x9cGd\xed8Q\xb1\x1b\xc7yH_f\xd7l\xc4\xfd\xa2\xc1=5f\x1eT\xd8\xfc\x8e2\xc3\x01b\x912U\x9d\xc2Hn\x92\xfc\xea\xecA2}\x8a\xf5Y\xbdK\xf1\xc1i\xd9G,\xd7@\xb5\xe8\xae\xf1\\\xad\x02d\x85\xe9s\xd3}e\xb3\xc9bk\xee\x17\xa8\n\x96\x08\x9e\x1f\x16f;\x0e "\tUq\xbdn\x01\xf44!"\xf2\x9d\xe7A\xc8\x80\xcb\x02T}\x97\xfb\xa1\xab\xf7z\xb8yj\xeeQU\xbb\xe4u\x08]\xd9\xa8\xc2\xf1!\r\x00\xa1.&y;\xae\xd6\xbf\x9cT;S\x84\xf4\xecj\x8cDk\x84\x1c\xebE\n\xe6\xec!\xdc\x0eb\xaa\xc6\xf0\xad\xd5\xe7\x93\xecHV\x83;J\x89H\x8a\x8c\xd0l1\xb9\xff.u\xb4\x84\x1a`$\x0e\x85\xda%\x01\xc4\x10\xf7Q_G$\xad\x85a\xe0 w_z\x82bq\x82\x1e\x8cy]\xf9\x8b/\r\xbcI{8R\xf9\xca\xe8\xfc\xa7\'\x99}\xaa\xd2\xf6\xac4\xd5f\x1c$d\xcc\x82cp\xf9\xc0\xd5\x868\x13\x9f5?T\x1aF\xca<\xa4R\xd3\xd9\xcf7\x16\xe5\xd5\t\x02\x07\x88\xdc\xdf*\x83\xae\x877\xca\x82\xa5\xccz\xd7cK}+\x10\xff\xbca\xfd\xbd\xe9\xff)R2\xcc\xd5pfT\xb6Co\x11\x87Xl\xe8\x836\xf8\x1b\xf4\x1f\xdb\xcb\xf3\xa7\xb3\x85O:\xccx\xe6\xd6\x9d\xf2\x82"\xe9\xd4>\xf5\xa5\x1dE|\xfd;%\xa3J\xb1h\xe3\x94|&r\x93yX^W;>\xb4\xc5\x9e\xacPHj\x1b\xf7\x97\x8b:\xd1\x11\xf7/c\xc1\xa2\xc0e\x05\xc7\x9a\xe5\x02\xf3\xf0[j\xee\x96\xc6\xbf\n.Q\xe0`\xac\xd2\xa5C\xaddV\xb2\x1b\xed\xf4\x96\xab\x9c\x94\xfe5C\x16\xc6ZC\xb1T\xc7\xedR%\xca<\x8e\xee\x93\x86\xb8\xab\r\x11\xb3\xee\x93M\xe4\xb2\x08?\rHR\x07\x85\xa3p\xcc\x9e\xc4\x8d\xe6*$\x95~\xf2g\x11\x13\x00\x03\xd5\x9c\xbb\x0e\xd3\xbb\xf7\xba\xcaq\xff`\xde\x81B"\x98\xcb\x91y\xd1\t>\x914i\n\xea\xfc\xaf\xa5[2\xba\xc1v\xcf-\x180Y\xccCP')
|
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\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00t\x15\x00\x00\x12\t\x04\x00\x83\\\x8c\xcazUs(\xe0y\\8\xa9\\\xaa5\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xc1<_\xca\xd3\xff{\x19\x84\x7f\xb2,\x89\xfd\xdd\xb2\x18w\x10\xf6q\n\x03\xd9\x01\xbf\xf0H\x1a\x07\xea~\xecy\xc0\xa9\xdb\xe7N\'Dnzc}\x9c\x98\xe5\xc8#\xf76X\x9f\x94f\x9d\xbbAT.V\xe8\x90\xf0\x1b\xf3\x82\x8f\xdc\xa4;\xe7]\xedhV\xff\xce3\xc3\xf7${\x8aE\xaa^\xd6\xdf+\xb9\xf7\x86\x1aq\xd0\x01J9\xf8\x1e7H \xe9qV\xf5%\xe6\x8dA \xcd\xbeh\x86\x81\xf4\xc6O31\xecC!\x957\xfa:K\xc7\xcd\xfd\x1fzn\x12\xb7CHaU\x9c\x8d\x92\x7fi\x086\xef:\x8bf%9Y\xd3\xc9?\x08\xec\xe2\x8c\xea\xb8\x92,\xa8\x06\xf6\xf1\x99\xbc\xcd\x82P\xb0\x060\xaa\xca\xf0\xcf\x10\xdd"\xd2t)\np1\xbd\xb7\xd7\\\xcc\xc2\x7fT_\x0b\xa9\xaa\x84\xf9\xccf\xbdi\x92^\xa2\xbf\x98\xdc\xf1\xec\xb17\x14\xe3\x19]>\x8c\x14zD\x94\\\xfd]\xcb\xe7\xa766\x16aI\xdbo5h\x83\xd2F-\xa4\xd3\xaf\xf2\x1a\xe9\\-\x1a7z\xb1\x8c\xe2B.t\xf8\xdbl%uBoG\x01A\xe3\xba\x08\x9a\x96P\x8a\xef\xcd\xf8=\x08\\\xb9l\x166i\x16\xa7`\x81\xaef+sF\xad\xc5\xc1{&\x8b\xf7\xbc\xddR\x9a\x9b\xa9c\xdb"\xb8\xca\xa2\x08\xb91y&e;!M\xc9O\xaa\xd7\xc7(a\xfa\xb0W\x18\x8f77\xd0oP\xd3\tg7\xa9\x16\xf6\x06}N\xf5\xcc\x9f\xa3\xa8\x15A\x1b|\xea\xf5\xbcHv\xe8\xee\xeb;\x19\x17\xe3\xf7I\xbe\x19\x97\xba\xba\x85\xed\xed`]0\x80\xca\x7f\xffc\n\xf7U\xbc\xa5\xca\x83f\xe9\n\xa4%\x04g\x02\xa0\x9f\x18\xf8\x835\xc9B\xc5\xef\x05\xe94g!\x04\xf0\xe8\rK\xf0\xf2=R\x1d[F\x94E\xe3\xbc\x86\xd2\x99\x01kE>Y\xc4\x03ew\x81\x18a\x04\xd2\x02\xb7\x89:X\xd4\xd9z\x1f\xa3\x98\xe7{1\x07\x16\x10\xdb\xb9\x7f\xee\xd4Q\x9aP\r\x08\x9f\x90:;\xb4{\xbaG\xbb\xa6\xbb\x08\xf5\x84\x1e\xe2t\xa0\xc9\xe0Y7\xea\xea\xee\xb15Q\xa1\xc0\xd2\x92\xecy5S\xac\xe5\tq\xd5\x10\xd9\xae\xf6\x0f\xd1\xbb\x13\xe3\x9b\xe4\xba\x83O\xa7\x94\xf0\xa2\x10\x04\xcc\xb6\xe5\x9c\x9b\x9f\xd4\\\xcex\xf3\xfbT\xb3\x0e\xb5g\xc4\x04\xc8\xado\x1cY\xee\xa9\'[{\x18\xd3\xc8>\x1eT\xc43\x91\x97\xcb\xeb\x91[y\xf4\x15\x11\xc9\xb8\xee\x12t\xea\xea\xb6\x12+\xabG5\xf1P=\xdbb\x03\xdf\\\x92\xd3\xd9\xecSB$d\xb0\xa7\xe8\x86\xa9\x87\x15,8\x87\xf2^9\x1au\xe2\x81\xba\x9b\xa3b\x99v\x96I\xf8\x89\xf0;\x83U[P\xf1\xf2\xc14G\x8d\xc0\x89OE\x8b#ZL\x9c\xed\x9d\x16\x9c\\l2\xb6\xc1\xd1\x1bE&\xb6~D\x98\x08ZC)Z\xbe\xf8\xdd\xfb\xed\xbf\xb2\xc2\xe4\xfcc\x92\x85\x9d}\x07\x924\xe51!\x01e\xa4*q\xaa\x11\xef\xba\xb5JfE\xa6\xc8M\x16\xac\xc1zEn!\x9f\x9aX>\x18\xd6e\x8b\xcb%0)\xad~r\xdb\x96\x143\xa9c\xbe\xef\xaa\xffD\xe9G\xb98\xf4\xa8\xb03\xcf\xcc\xf3\xc2\xe6\x1bu\xc9$\xdc\xa7^J\xc4\xeb\xdd"\x88]\'\x9d\xd5il1\x8a\x05\xf4\x8bB\xbb\xaa\xe6\x92\xc7j\xa2\xde\x16\x04}\xcf\xe2\xed@o\x835\xa3iC\x19+4\xb0(\xfb\x8e\x8c\xa4\xfb\xd5U\xaa\xa2\xfd\xeaS$\x1d\\\x08\xd8{\x06\x11j\x0f\x97_\xb9\xa0\xe2\xeco\xc6\x07f\xd9\xb4\xbc\xd2\xf2gM\x02ejW\xa3&\xe4\x1d\x16)\x07R-\x8a$\xa4\x9f\xbb\xfc\xa2*\xfb\x1c\x9dc\xd2I{\xcd\xd3I\x85\x94>\xef\x9e\x1a( 8\x84.Vz|\x8c\xd8\xabC\xbd\xd5.\xfc\x1c 9Js*!\xe88+\x8f"U`U\xcf=b\xed\x90\xee\x073G\xe5\x0c$\xb4\xb0W\xbfO>\xac)IY\x8f\xf3#\x85I"\xdb\xafH=fy\x8fI:\xcdW\xe1\x01\xbb[Jp!\xa7u\x99~\xed!\xc1\xa3F\xf98\n\x85\xeb=\x17\xc5\x88\n\xb3\x98\x80\x95\xf2\x8a\xf7D\x9a8\x8f\xc6\x0e\x82\x8flDg\xa9\xa0\xc3\x13$N6K?\xa3\xe7\x14G\xf8\xb8\xbfh+\xb4\xdf\xc8\x92\xb2\x1f!\x13\x10\xd1zrM\xfa6Xsh\x1cQb\xaa\x88\xfdQ\xaan\xa9\x91p\x088\x8a\x1e \xd1\x81>\xf7\xa6\x18\xc8~\xf0G9\xc1m\xc8\xb0\xdb^_\x88\xb2\x1ey"\x87\xe9\xc3\x98\xb5\xc2O\x96&\xd2\x97#\xed\xea\xe6Y4\xe3\xfb\x8a\x0e\x02\xfe\x94\xdaQ\x0b\xb6\x85\x8e\x15\x14[\x892\xab\xa12\xf1=\xd1\xa3\r\x8e!\x01%\xc4\x1a\x9d\xf7\x15jWF\x06v\xe7\xc5\xdf\xd7~\xcflS\xb8\xea\x84\x7f\xfc\xc1\xdd\xf6\x8b\xce\xd7\x85\x1d\xee\x15\xaa\x8a\xa3&T\x9d\x88wgd_\x81\x9ez\x1c\xa3\x1ejQH\x1bP\x98\xb8QI\x84\x1ft\xeej\x93\x95g`\x18\xf8F\x0b?\x1dY\xfa\x92\xb5\x87\xf1+\xd5{m\t)\xd4P\xfcAc\xd8\x05Q\xf2\x1b\x8b\x01\xd3IN\xf8\xaaCd\xf0[\x86\xbc\xc0\xd0-4\xbc1.\xefB\xdc\xdbi\x8dS5a`\xf2\xadWWv\xa8\x04\xb1Mw\xc8\xbd\xa1\xdc\xcf\xc0\xea\xf1\x05\xd1b\xbe\xca,\xbd\x9e+/\t\x07\xe2\x8b\x15>IjT\x15\xddH\xf0\x0c\xec\x95\x89\xf6\xe2p\xea\xa88\x9e/\xd4\xf2O\x93\x8a\xe5\x8a\xe3\xbf\x84\x0b-%\x1e\x02\xe2u6Q\xd1i^\x9a\x0c{\xc9R\x0b\xf0\xf8\x0f\xbb\x07Zj\x11\xd7t\x17?\x98\xe8W\xcb\xea\xf9d\x1e{\xb0\x87\x0f3\x87Tg\x19\xeb\x18]P\r\x03\xfd>r7\x1d,\x85\xf3\xe6\xc4\x08O@\xb1\xc3\xaf\xc4#V\x16\x9cCU\xa2MB\xe7M\xbeX\xd2\ri\x10\xd8\xb8\x13\xdaK\xc9\xe0\x1c\x14\xdb\x8e\x8d\x10\x19/\xc7\x011\x17\x91\xce\xb2\xa0~\x06D\x98X\xa8\xf1\xae\xda\xac\xca\xfb\x9e\xffVK\xcb\x11?\xc2\x83ym\xe1k\x11z\xc0\x07&\xbd>o\x0e\xfa\xa1\xff\xed\\\x1e\xc0\x0c\x90\'\x9fINs\x88\xfe\xff\x98T\xc6\xb6w\xa0%\x90\xd7\xa2\x05V\\V{\xe9\x82dJ\x88\xfc_S\x0b;\xd8\x8c\xa9\xb7\x8d\x00\x15\xbe\xc3rn\x0c\x93\x1c\xe2V\xac~AB\xf5\x04\x8d\xa1\xb2\x11\xe2k]\xbb\xa9\x93\xfct\xd8\x04\xd6b\x9egv\x14\x9e\xff+\xc6P\x0e\x1b\xbb\x82\xba\xef-A\xf2\xa0\r\xac\xc0\x89|\x06j\xef]\x13\x0c,\x86\x975\x84_\xdf\xc4\xb9O%\xccND\xdc7\x9dW\x98"A\x1e\x91\xc4n\x11\xc7\x91\xb1:\x8ceX\xd2\x15\xf0\xa2\x9f\x86\x88\xd6\xe8\rj\x12RS\xd2B:\xec$\xa0\xb6\xf6\xdd\xaejel*LC\xce\xf7p\xc2@;(\xd0\xd1)L[\'\xd5\xf3\xc8\xdd\xf0H\x84\xd8 \xe0\x03\xac\xd0bi\xec\xdf\xf5m\x8a\x82\xa3\x99\x00P\x13\xfd\xc6\x9c\xd3\ts\xfc\xe0\xe6\xc7\xfc\xc7\x84\x9ey?^\x17M\xda\x02)WaME95\xe0pC\x01C_P\xd6[\x88\xfbP\x0c1i\xf8\xd8\x1f\x18$&\xd4\xed\n\xab\xef\x98\xa9\xa3\x8aP\x98^\xe1D\xb9\xdd\xe1\xf7\xfe05\\\xfb\xdf\x18\xe7\xc4\xea\xea\xf8\x9d\x86\x0b\xd1\xb7\r\xef\xb8\xe5 O\x14\x8a\xac\x9a\xc5w\x0b=\xc9\x90\xc1\x06\xc6\xb4\xec\x18\x96\xf1\xe4#\xbfy\x1f\r\x1f\xaa\xd1\x9c\x100\xe1A\xe8\xadS\xf33\x85\xb6\x1b\xaf\xb1\'x&S\x8b1\x04\xe5e\xfb\xce\x8f\xab\xe1\x0e\x14\xc6\xbfj\xe8\x17\x06\xaa\x85\xbb`\xa9\xbc\x98\xa2\x0fN\xd2\xe6\xea\x11\x03\x80-\x9e9\x80{\xc6\xf3\x17A\xdd\x07\xf2\xfc\xe3\xd3\xeeQH\xf5-\xef\x7f\xd7\x88$\xbetN6b\xfb0a\xc6s\x06\xd8\xee\x08\x93`\xc3g\xac\xfe\x86\xc1\xcf\xff\xe3\xa5\xf4\x06\xd1#\x94=\xb5\xdf\xb0<\xc4;\x03N\x94R\x90\x0b\'tLd\xc8#b\xb7\xa1\xd3j\x8f\xcd;\x19\xc4\xa2\xa1!F8f\x8f=\xd8V\x03\x1bf\xb2\x04\xf5$3Ll\xdf\x8c\xfa$\xee80\xd6xA\xad\x04\xbd\xe0%\xc3K0\xc2%"quh\xec\x9c\xba\x00\xeap5\xa7P\xfb\x83w\x19\x1diZ\x00\x80\xd2\n\xc4,\\\xa6\x1b\x90\xde\xbb:\xea\xd8*\xe9>\xca\x93\x97\x87v\xb8\xd6\xf2]\xf5S`\xa3\xc2o\xba\xd8r\xe9\x88\xe7M\x9bL\x8fB\xd0u1\x13\xf3/\xe0\xef\xf2bp\xec\xb2\xaf!%\x17\x10\xefq\xc6 \xbd3q\xd7\x96\xb10c\x97\xafJ\xa8\xf5\xf5\x19/\xfd\xc1\xf0\xd9K}x\xd9\xfa}+\xe3x\x7f\xd3I\x88\xa2\x1d\xbf\x08\xcb\x9f.\'\xf6~\xa7oe=\xe4\x8b\x8d\x1d,\xd3kP\xf4H\x91Y&\x80\xf7\x0fQ\xdd\xebsp\xe4B)\xd9\xe4\x17\x9e#tp\x86z\xc4\xf3\x89\x90\xfd\xb0\xaa1s\xb5\xbf\x99\xf8\x93\xed\x0fLN\x93\x90}d\x0c\x00\x07M\xf4\xb0\xdc\xb0?@\x0f\x7fr\xca\xd8\n\xb0/\x8cd\xeb\xb5\x1c\xb2\x17]\xbdYq\x8as/\x85\x97Y\x1f\x91\x96\x14H4\xf5\x1eD\xa1\x10fjMW\x9e\x87j\xff\xc8\x1b\x17F)\xf8f\xf1\xea\xc7Y\xec0w\x04\xe9\xc1\x80\xb7i\xa6GrF2\xf8\xe4\xae\x16\xbcMy\xce\x00A \xdaX\xbe0\x83!\xf4\x03""\xafW\xb8\x03\xb93s\xfd\x05\xcb\xd5\xcd\xe3*\x80\xe6\xb42\xa1\x94g\x03\xd0\xab\x9b\xf5_!\x1e\xd1\x07\xef\x12\xff\x7f\xfb\x89O\xad\xe5\xa2\x13\x83P\x18\xfbh\xf8\r\x05\x1a\xf1t\x8b\xda\x86+AWt\x9e\xff\xf42\xa6\xb6\xc5\xcc\xa7\x93\x02\x9aD0\xc6\x95n\x1d\x8b\xcan\xd0#J\xd6>\xc5+\x90\x8d\xf9\x98R\r\xf5\xf7Wy\xc3\x8c)l\xb9\x04\x8aw\xc0\xae\x9f3~\xe9Q\xea\xe5\xb8,\xd5\xbd\x9a\xab\xc5\xa2gN\xb4D\xfb\xd3\x9f\x0f\r\x97\xe9\x8f\xb8\'\xbb\xe2\xb0\xf7\xd1+g\x9c\xd6=\xb7\xa2\x00\xf6>t\xcc&$(\xcd\xb6{\x82\xe2\xa5H\x11\xdb\x81~\x80\xf5Q\x02\xc6\xcfu\xcbb\xa2\x95\x8b\x95"8Tb\x162\x9c\x14i\xe4\xe0\xdc\xf8k\xabw\x1b\xdb\xd3?\xb88\xa7\xbc\xd81\xb2v\x11M{(Q\x9aI\xea\xc9\x05\xb7\xf5\x96X\xe8\x8f\xb4\xd7\xf6\xd6 \x14\xa0\x03Xx\xca\xe3\x1aq{\xb5\xad\x10a\xf2D\xe2_\xa6O\xed\xd9:\x14-\x84\xe0\x91\xd1\'\x99@_\x87\x88\xc5\xfa)0\xe6\xbf\x03\x8fi\x81&\xb9R\x08\x05\xb5\xaaZ8H\xab\xad4\'\xfa\xf8v\xb9\xa2\x83\x84\x0f\xfa\x9c\x88\x1c9s8\x06\xb3\xea\x93Y\xdb\xde#\xbe\x83\xae\x0f\x10\xdc\x8c\xf5\r`\x05rN\xb0wv\x03Y\x81UT"\x9c\xbc1&$\xdc\x8a\xec\x00tk&\xcf\xc1\x88\xda\x80~\xcdXYo\xc0\xfe/}$\xf9\xaf\x08E\x95\xa7\xd4\xb1\x00\xec\xd2k"B\x1f\x81\xde\x89\'\x17DK\xd5\x81\xf9a\x8b\x98\xcc\x85\xd8\xe0\xa8\xfd\x07\n\xca\x12y\xa1i\xdbQh\xb5\x8f\xd0\xcdP\xb87\xdf\xa0`\x19\xd9\r+\x04C\x87\xcc\x03X\x01\x97\xeb\x84>y\xdd\xda\x84\x0c\xde\x94\xe9\xee\'\xf4\xa7z\xbfA\xde!\xfa\x12^\xc8\xca|\xb67\\i\t\xed8i\xd7C\rn?@\xa1?\xa0c\xaa\xecx\x0ed)3\x93pMr\x1b\x10\\\xd2\x9a\x82P\x83\xe1\xa4WQ\xa2\x8e\xa3\xf1\xff$\xc1\xac\x0c\xf6\x1a\xcc\xd0\xae-\xbfI{\xcd\xd0\x90\xe5\xb9p\xe8\x97vM/\x04Q\xe7T\xc0>7t\x0b]\x87\xb1$\xac\xc4i\rU\xee\xedw\xdc\tb>-\xc2\x9d\x9e\xcbv\xd5D\x17)\x83\x13`\x96\xd4\xdc\x86\x02 \xc9|\x9b\xf8\xd7\xfax<\x18\xdeF5\xb7\xdc\xbb\xca\xd7\xb5~\x8e\x93\xd9\xb2W\xcfV\x97\xba\xa3Hw<.\xa8\xa6Q\xd9\xe4\xf9mGz\xef\xd0O\xc7\xc3V\x03\xdd\xc1\x1f\xaf\xc5\x91?\x045\xa4t-\'}\xf5\x9f-Q/\xee\xe3Q\xaa\xbek\xa6\xad\x1f\xe7\xa5\x93\x87M\x0fJ\x87\x95o\x93\x87\xa9hp9\x88y)\xe86\xb3\xbf\xb1,\xe0\xe2\x0b+J?9cF)\x88=\x9e\n\xac\x94<\xad\x9d\xfc\xca\'@w\x1c{\xd4\xce\x0b,\xd6F\xc4\x15\x00M4\\\xfd\\FK\x82y<P\'\xd7\xe4\x87\xce\x9e\x83\x17:+\xa1\xa2\xcb\xa4^sp\xa3\x00\x97\x7f/s\t\x8b\xf3&-\xe5\xe6!\x7f\nr\x15#\x1b\x9c\x00\xad?\x13\xf1h)\xaf\xc1a.\x87O\x8e9*\x9f\xd4\xed\xaf1s\xf7mR\xfc\x1a\xb3w\xb0=\x81\xe1b\xdd\x92\xa7\xbcl\x08\x92\xa3\x88\xe2/\x01\xa7\xf1\xcb\x9d\xb0\xa5\x1f\x12`#\x8c}\xcd\xda\x8eoQ\xcf\x939\x9b\x90(\x9e\x9fs\xfb}\xcd=\xa9m\x91\x9e,m#\xf2\xaf\x91\xb4V\x02\xa2!\x8a\x8a\x80=\xb6\x95\xce)\xe2\xcf\xd3\xca\x97\xe39t\xf7\xc6\x90\xe5\xb0\xcf\x8d\xc2\x84\x97\x84\xc0\x1a\xd1\x16\xa9~\xe6\xd6|!$\xee\x8fEB\x1b\xc8\x8a\x9d&2yN2\x13\x10\xe6\xa7\x9fN\x05\x1f\x00*\x7f\xd2(\xe6\xea\x80\x82\xaf\xe8\xfby\xc8\xf56\xb0\x8b\x89\xe8Ga\x05\x86,8Kf\x1f\xb9\xdf\xa9!@&\r\x7f)\xbaP\xe4\x82\xba\x08\xef\x93\xe2}~h?\x9c\x1e\x1c\x9a\xde\xddp\x1a\xc0\x0f5\xb4\xe5\xea\x1eO\xc6\xac1\xfdef\xae\xb4c\x14A\x1c\x7f\x1d\x84{\x87B\x16\x95\xc0\x93M\x91\xe8~q\x8e\xfb\xbfA\xd5\nt\x8f\xc3\x02\x17\x99\xad\x8b/EBW\xb3\x9c\x0eU\x1c:\xf3\xc2!W\xcf\xc7\t\xd8\xdb\xd0\xe0\x83\xd0\xcf\x87s\x7f\xba\x9e@\na\xa9\x1cL\x92#\xbe\x0c\xd7\r\x8d\x98(\xca%j>\x1bx\x0fc\xb3\xb7\x18N\x17\x82&nN\x0c\xebq\x9c\xd4\x92\xe8\xd2\x82 >\x14!\x98\xa6\'\xb5qZ\xd7\xd9sgG\x0b\x8b\xa6X<\xbb,1\x80\xb9K\xf6\xb6\x82Y\x0cbi\x03\x88\x14\xdb\x89\x87l\xe9\x1bq\x1d&\xcd\x0f\xef\xf9U*C\xd1\x90\xaa/H\x97\xcd\x9fPi\xf2T\xd3\xf5\xf2?\xd3\x99U\x89\xf6\x90{\xce\xb8\xb5\xddU\x02u\xa6<\xc4\x04\xb4\xd6\x8e\x7f\xbc\xd3\x82_Z\x99\xa1\x0b]\xfd\xd2\xb9\xbf\x83_\xbc\x10\xc5\'\x93\x8c{\x87]m%\xda) \xa6\x18@\xd9I\xf8)\xfd\x17\xbeD6\x9df{f\xe9h\xbdT_\xb4!\x8d\xa95\xab\xc8\xd9\xe8\xb2\x00\xbc\xb0\x07iv\x7f\xef\xb3r\x0e\xb5z\xf2\x13b\xac\x04\x85\xf2\x85a\xd1\x1d5\x94\xce=\xd0"#\x9f\xb0)\xadS\xb6\xf9\x1a\xa8z[\x12\x12\xde}\x017\x8e\x01\xe5\x14\x95\xc2\x95\xc69&XK\xbc\xcf\xd2\xa5\x16\xa11+.\x1b@\x00\xe2AW\xa74\x8d^\x8f\xc5k>\xdcf\x19\xfakd\xe3\x1cK\x9f\x92\xf8\x81h\xbe\x9e\xaf\x08\xcbrX\x84\xcb\x0e\x1e\xc3,\x9a\xf4\xcc\x96,\xdaw\xb7\xe4\x94f\x15:\xb2d\x06\x9f;\x11\xa12C\x19Hy\x03\x0f\xab\x1754~\xa5\xc2\x886X\xb2\xdd~\x0f\xf34s\x9d\x19u\xec\x94\x8d\xf6\xeeq.6\x05\'\xe9\xa0\xc7\xb9\xcc/\x90\x02\x82*\x83_\xd9EVV\xef{\xfby\x01Y]5\xdc\xd9cX\n\xd3\x06\xbe\xfe\xec\xb1\xf6E\x9b%\x02\xfbC\x15\xc4\xc6\x93\x18\xb7a\xfc\xba\xac\x18\xa74:\x0e0\x8a\xeeWlK:[\xab\xfc)\xf9\xc2\xad\xfb\x82\x98V\x9bt\x036,\x98\xa9\xdf\x0b\x9d\xd8\xfe\xa8\xceL\x00\x98\xc3\xce\xe9\x19\xdc\xf8\x97\x069\x0b\xc7\xd0>\xcc\x1f\xf7C\xd0\xf7]\xbe.\xf6\xc8\x14~\x95[\xe1F\xaaj\xc3*=\x0egk\x1e\xf1\x9fx/\xed7\xcbp\xfd\x0b\xc7\xe0\x12K1\xa2\xcf\xd8\xeb\xbef\x1a\\?\x80>2\xa9M\xf4\xfbd\x07\xa8\xa5Spw\xb1\x9bI\xf4P\xa8~!7E\x8f\x7f\xfe\x97I\xf8.\xa3~\xfc\x00v\xd4\x05J\x06^M\xbfF\xe5a\xcd&G\xfal\x9b\xe5\xc7z,\'R)\x1e.^.\xc4\x82\xb8\xa0\xe7n/\x14\xf1\xb78"\xfa\xae\xf4\x19fK\xb6\xb3\xf6\x80\xefH\x94\x88&\xa8nu\x84\x87E\xfd\x0c\x1a\xc2j\xe1\x16\r-}$\xe7\x92\xd9\xd6\x05\xbf\xf8\xe9JU!\n\x90\xd8s%\xfe\xb7l\xe7\x83d~\xedRr\xae\xbeGS1/\xd0\x0b1\xda\xd4\xb4\x81\xc8F\x1a\xa5\xe7\xb5S\xa3\x9c\xbf/]s\xd7c\x0fv\x1b\xfc\x05o\xa9\xb4\tr0r\xfa\xe8\xd2\x96\x8c\x85~5\xfe\x15\xcc*\x13\xb0\xb9Rw\xdac_i\xa2V\xa6\x9a\r\xa6]?om\xf1\xa5\xa2\xa6\x12\x84u\xfe\x87ka\xfe:]=\xaa\x98\x87\xd4\xf1\xc7U\xd2\x15\xc5\xc0\xe4\xf1}D\xc3\xc7cQ\xe6\x96\x80\xbf\x96\x06\xb9\x0b\x10\x14V|f\xdbR\x05R\xe5T\xcc\xbf\xaar\xcf=TfU\xa9U\xe3T\xb0\xd7V\xbc\xdb\xbe\xfbP\xcfW\xbe\x94g\xb5\x90\xbcu\xd1\x96\xaf\xeb\x9a\x81\xae\x837U\xc6\x11\xad^\xfc\xb2\xa2\x97S\xc0C\x82\x1e\x9d]\x1e\xec\x866\xb63t\xb5\xb3\xba\xd6\x13%7\x80\xdb\xf1k3\x98\xbf\xcf\xbd\x87\x10QOX\xf4\x94\xb1.E\xa6\xc8\x0f\xc1\xfc*\x8d\x8e\xdd\x97#\x9a.\x81\x01\x83\xd4I\xaa/\xc6\xae#\xad\xae_\xa3fy\x12h\xd3\xfd,k\x00\xf6\x04u\xf9\x8e.\x10a\xbd\x1f\xdd\xbbh\x9c\xeb%s^7\xff\x9f\xa5\xca\xb4\xca\xb9\xa8\xe5\x1a\x13\xa1\xfd"\x08\xf1\x83\x8dq(*\x05rG\xc1>\xcd0^~\x9e\xdbc4\n\x87^\xf4\xbd#\xbcT&VVu\xf9\xa7t\xd4w^\x8c~\xa1\xdd\x18\x9fF\x95\n\x9d\xdeCq\xb4\xddY\x1aEIa\x0f[\x1e^O8\xd1\xdbi\xacM\xbf\xd6\xfd\x1ad\x83\xeaq\xbam\xfd\'\x91\xd6a\xa6f\xf1\x92r\xfd\xebE\x94\r]\x0e\xf7\xb5\x16y\x04\xa4\xac\xd6\x97\\/\xac\x9a\xf2\x03\x92\xb0\x91\xbb%Y\xc7\xbaa\x9e\xf6\xdc&ljD\x9f\x98_UgH\xd4\xbc\xec\xe1\xcd\x82\xe4\xce\xb4{\xc2`\x10s\x92G\x97\xecc\x1dw\xda-!(\x10\xb9_F\xdf\x14\x87\xc0\xa2\xdb\xa3\x85\xed=\x13m\xb4Y\xc4\xeb\x16\xbc5Gw\x97]\xfen\xba\xdfJ\xe9\xbc\\\x7f]3\xbb\xadR\xfbJX\x1fO\x13\xe9\xc1(\x90\x83\x9c\x90=\xa4\x9e\x91\xaa&\x80z\xf9V\x8cf\x13O\x1c\xad\xdcV\xf1\xbf\xdb\x1f\x9f\x8dN\x97\x1c.\xdc\x12\xa6b\xd1GWt3\xef\x85/\xfd\xbd\xf6`\x08\xf4 \xf6\x0c\xba\xbc<0\xabB6]\n\xd8M\xaa%{\xed6\x83#\x05\x1e.\x8e\xcc\x13\xb3\x11v\x90\xb7\x87\xf8)\xd7\x9f\xcf\x89\xfc\xbc\x83\xcbn\xb4\x14\x89+\xa0\xf5\xf2\xf8\x83\x08\'KJ-\xf1\xef\xc6\x98\xbe]\xb7I\xe21\x94<\xec}\xe5\x96\xf2\xfe\xe3<|\xces\xc3\x13\x013\xffV\xf5B!}\xb7\xcd\xb9\x10\xe4P\xd0\xac^\xbd,@A`\xc0\x9e\x08\x81T\xeb\xe0Uq\xea\xfe\xcf\xab\xf5\xceZ\'\xa4\x9c\x80\x98\x91a\x1a\x8f{\xf3R\xc3\xc1\x9e\xa8<\xc0\xc6\xdf\\+O\xae{\xcc \xb9/\xeaoy\xab\xd0\xff\xdb\xc8\x86]n\x17\x0e\x1e\xc1\x01\xc2\xff\xdb\x841z\x80\xea\xce\x1b\xf4\x84\xb4\xe09\xd9\x11\xd6\xda\xf1\x83P]\xf0\xe8\x16z\x89}|DV\x11\x92\xeb\xde\x8d\x88\x9ajs@5\xe1\x8cm\x8d\x9c\xf7|X(\x13\x02\x8b1\xcbK~\xa0\x13\x0f.gT*?3/\x9f\x89g\x96\x9bk\xa6\xde\xbc\xafSb\x13\x9d5.\x15\xb7\x00\xd3lt}\xdd\xc3\x19\x9e\tx\xb8\xb9\xb8\x11\xc39\xbe\xb1\xcd\xce\xc6\x90\x84\xe0\xd1\r\xadLdg\xbc\x97w\xf2\xbc{\x80`\xea\x02zB\x98K\xa2\x8fm\tg\xdbX\x89\xbe\xacX\x82\xc9\xde>\xa9\x96\x8a\x0c\x81\xa7\x16OD\xd8{\xd7Q!\xda\xa7\x08\xf1\xfb\xc5\x11\xbb\xe5\x84\xf7\x01\xf7\xc2\xbc\xf0`Q\xb5y\x12\xb6\x94\xee\x18\x980\xa2L\xc9\xc6_J\xf3\xcaT[\x94\xdb\xb4\xb3\xcfr\xfb"i*|4\xe3\xf2\xd1\x1c\xc4fF\xea3l\xf1/\xdb\x80y{\xa5\xf2\xa6\x9cQ[(\x83B\r\xce\x19\x95\xce\x00\xd1\x87\xc2\xeb\xde\xbe\x04\x01@zR\x8f\xa9<h\xdb\xaaV\xe2a5\xf2x\x01\x16\xdao\xebN8\x1b\'8N\xb5\x19\x8a{.\x1e\x1e_\x96\x03\xc1\xe4\x7fW!\xdb*\xb7;\x9e\nw|\x9d\x17Y\xab\xb8\xcc\x1d\x8a\xa6\x058\x82\x97\xa5\x9b\x03\xb3\xf4\xe01\x85\xf2m\x8e6\xbd\xab\x179i:p\x86\xdc9<\x80m\x07\x87\x14\x9e\r\x08\x88\xc7\\F\x8a\x8b\x88/\x9b\x02f\xe0\xb9\x10\xe2b,\x0cz\x15\xc3\xc6H\xeb\xda\xd1\xceK\xf1K\xea\xa2Br\x87|\x0c\xeb:wW\t\xd5\xa6#\xa0\xaeI_)\x9b6L\x82>\xd3\x93#s[\xed<\xd9\x93\xfc\xe6\xde\xbb^\x87\x1a\xf3{C_\x95w\rf8\xac\xd6&\xd1d\xff\xd0\x10o\xcbt\xd8\x8f\xcfxf\x18\xccSXz,\xae\x12v\xe6\xb5\xda\xf3/\xc2L\x96 \xfb\t\xf6\xe5\x92\x84\x14\x85\x12s\x1f3R\xa1\x1a4\xd40\tg_\x97h\x8a/\x94\xbd\x8b\xfa\xd4\x1a\xed\xfe\xe2\x18\xfb>\xfa\x08\xf8\xd7\x8f\xebd\xfb\xcf\xb0`\x83\xc7t\x1c\x07\x06>\xe7Zq\xe3\xb2\xf4IN\x8d\xc0\x1a\xaf\xc9\xd4TR\x8c\xf1aC\x16\x08\xbd\x96\xc2k\x9a)\x07\x91n]B\xf1\xe1\x87Spk\xe3\xdeS\xc2\x89\xdecR\xdcWNG\xbcz\x9a}d\x93\xf8\xf2\xf1\x8d\x81\x90\xe7\xdf.~\x0f\xae1\x04\x98\xc3\xbb\x15\x87A\xee\x08\xf0\xeaI\x10\x1d\xf2F\xe2z\x14\x06\xdd\xee\xa8\xbb\xb5=\xd8!~\xc8s\xf7\x1e`\xd7\n\xc5\xc6\x97c9}&6{\xf4\x83\xd1\xaf\xde"\xc5F\xac47\x12\x9aX9\x19\xfc\xe9R\x0c\xc2/I\xce\xa4L\t\x13\xf9\x07WI\xdb\x87)\xf7Bo\x90\x01\xd0\x1eY\xfaRL5D\x82\xd5\xe8\xb9\xaa\xa4\x84A\xb4\x00uJY\xa6\xea\xc2\xa7\xa4\x03\xde\xbe.\x90\x18aM\xdc=\xc7\x0e\x0e\xe3Vv\x9bm\'\x8d\x06"\xe4\xfb\x8f\x89nGH\xe5n,7L\x8c\x19\xd7\xef`\xfaM\xd6w\xd1m\xd5}f<P\x9f\x04\x8b\xfa\\\xc0\x86\xf9\xbcIA/$N\x9d\xb1\x11\xca\x95\xda\xcd0\r\xcc\xa6\'\xc0\xee\xa1,\x89d\x16\xdd\x82\xce\xfe\xc0S\xbe\x98\x81>%|hV\xabY;\xf6\x87\x03UO3N\x852\x9c\xdf\xda#\x90\xe4\x03\x04$U\x10\x8f\xe3\x9d\xf5\xf5\xbe\xfe\xb7F)\xbc0\xc9D\x80s\x9a')
|
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
|