hiddifypanel 3.0.0.dev64__cp38-cp38-manylinux2014_x86_64.whl → 3.0.0.dev65__cp38-cp38-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.
Files changed (70) hide show
  1. hiddifypanel/Events.py +27 -4
  2. hiddifypanel/VERSION +1 -1
  3. hiddifypanel/VERSION.py +1 -3
  4. hiddifypanel/__init__.py +7 -3
  5. hiddifypanel/__main__.py +13 -3
  6. hiddifypanel/base.py +88 -3
  7. hiddifypanel/base2.py +40 -3
  8. hiddifypanel/models/__init__.py +10 -3
  9. hiddifypanel/models/child.py +26 -4
  10. hiddifypanel/models/config.py +105 -4
  11. hiddifypanel/models/config_enum.py +207 -4
  12. hiddifypanel/models/domain.py +106 -4
  13. hiddifypanel/models/proxy.py +55 -3
  14. hiddifypanel/models/usage.py +58 -3
  15. hiddifypanel/models/user.py +171 -3
  16. hiddifypanel/panel/__init__.py +7 -4
  17. hiddifypanel/panel/admin/Actions.py +170 -3
  18. hiddifypanel/panel/admin/Backup.py +80 -4
  19. hiddifypanel/panel/admin/ChildAdmin.py +122 -3
  20. hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
  21. hiddifypanel/panel/admin/Dashboard.py +70 -4
  22. hiddifypanel/panel/admin/DomainAdmin.py +195 -4
  23. hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
  24. hiddifypanel/panel/admin/QuickSetup.py +127 -4
  25. hiddifypanel/panel/admin/SettingAdmin.py +224 -3
  26. hiddifypanel/panel/admin/Terminal.py +51 -4
  27. hiddifypanel/panel/admin/UserAdmin.py +277 -4
  28. hiddifypanel/panel/admin/__init__.py +82 -4
  29. hiddifypanel/panel/admin/adminlte.py +13 -4
  30. hiddifypanel/panel/admin/commercial_info.py +23 -3
  31. hiddifypanel/panel/admin/websocket.py +9 -3
  32. hiddifypanel/panel/admin_2.py +33 -3
  33. hiddifypanel/panel/asset.py +17 -3
  34. hiddifypanel/panel/cf_api.py +35 -4
  35. hiddifypanel/panel/clean_ip.py +125 -3
  36. hiddifypanel/panel/cli.py +172 -3
  37. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  38. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  39. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  40. hiddifypanel/panel/commercial/__init__.py +50 -4
  41. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  42. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  43. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  44. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  45. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  46. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  47. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  48. hiddifypanel/panel/common.py +98 -3
  49. hiddifypanel/panel/custom_widgets.py +71 -4
  50. hiddifypanel/panel/database.py +18 -3
  51. hiddifypanel/panel/hiddify.py +655 -4
  52. hiddifypanel/panel/hiddify_api.py +70 -3
  53. hiddifypanel/panel/init_db.py +393 -3
  54. hiddifypanel/panel/usage.py +85 -3
  55. hiddifypanel/panel/user/__init__.py +25 -4
  56. hiddifypanel/panel/user/link_maker.py +416 -3
  57. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  58. hiddifypanel/panel/user/user.py +233 -3
  59. hiddifypanel/static/css/custom.css +6 -0
  60. hiddifypanel/templates/500.html +1 -1
  61. hiddifypanel/xray_api.py +109 -3
  62. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  63. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +67 -69
  64. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  65. hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
  66. pyarmor_runtime_000000/__init__.py +0 -4
  67. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  68. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  69. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  70. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,235 @@
1
- # 2023-04-08T16:23:20.286877
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xc1&\x00\x00\x12\t\x04\x005\xde_\xcf\x85T\\\xc6\x9f\x9b:\xf9\xfa\xe3\x99\x91\x00\x00\x00\x00\x00\x00\x00\x00\x85<xR\x10l\xe5\x13\xfc\x1b1\x8cu\x87c\x0b\xac,\xc8\xbd\xcc0\x98\x8au|\xf1\xe1\xd8\xad\xc7\xe6V\xfc\x80\xf7.\xcc@\xdc\xed0\xd2\xf0\xdb\x14\x03D\x9a\xf6\xd5\xd1\xde{\x99\x84\xd8\xed\xe7*,r\xee\x13\xb1\xb5\xe8P\x9a\x04\x1a\xa7\x05\xb0\xfa\xefp\xdc\xea5s*n\xd5\xe8\xef@\'1>\xaa\x8cn\x8fR\x8e\x9d\xe3|e\x0e\xd3\xbf3?\x11cA\x1b\x0c\xf5\xdb?\x93\xb6\xd8\xac\'\x04\xe9\x95%\x01\xa5\xa0T\x07Kj\xf8l:\x07\xdb\x85\xd1\xeb\xb0Y)\xa0\xaa\x1e\\\x9b@\xc10\xd8\xed\x97Q\xc9W\xeb%l.-l\xd7\xb4\xceG\xb8\x05\x9d\xdd\xfaH\xd3\x9d[\x00\xc7\x8b\xb3n\xfch\xaf\x8b\xc5\xe7#\x84g\xdc\xa80!\x81\xd5@\x04\xc9\x90*\xfa&@$\xe30\x87\x03q\xcb\x9bH/\xed\xday\x00z\x95ty]\xc5\x17\xc0\xea\xa8u\xf8\xf4\x9e\xf5x\x87\x9e\xdb\xfe\xa9\xb8\xa1\xbb\xcc\x80\x8b>\xbcM]\x95\xe7\x0c\xfa\xc0VX\xce\xb5\xe9\x0e\x08\xd4vC\t\x00w\xfdX\x08\xd2]o \x19\x06\xf0y\xd2/y\xed\xd5\x13\x13aIb\x99z\x84;\xab\xe8\xbb3\x8c\xf5&\x95\xd8\x0f\x04\x17L\xd6\xe3\x1bg!\x9a\xcaf G%\xaeS\x97\xc6\x99X\xb9\x12\n\x84\x97\x05\x1cJyG\xbb\x0bv#%J$\x9e\x0cBS@\x1cd\xae%P\x1b\xf28~\x13\xc64\xf0\xad\xcb\x9ej\xd7\xff\xe6\xe6-\xad{\xc4\xc5\x12\x8f?aQ\x95;\x85\xac\x12\xf3\x07W\x88.\xa3XE\xe7X\x94\x05f*\xbf\xc4|9\xe5\xd63\xbe\xb3O\xdb\xc5P\xf1\x1d\x1f\x1b\xa0NPO\x0c~\x190\xea,\x80\xa1\xccc\xf2\xe6R\xe8\xcb\xae\xf2\xfbw\xa5\xea\xd5\x00\x87\xa2O\xe9\xc4=\n?\xa4rA\x82\t\x13\x0e,-)5_\x03\'N\x18\x85z\xaa\xfd\xb3K\xe2\x1an#cU\xb1\xb8\xcb9\x8e8\xbe\x18\xad\xf1q\xa6\x89\x1blh\x9b\xcf\xf1Q\x10\xaca\x0b\xcc\x87\xb4\xdd\x0c\xc26V*zd\xea\xcbBd`\xda\xdd\xa6\x1c\x8do~\xe1\x07y\x0f\x93\x8f\xba\x03\xec\xe1d\x1c\x06\x16\xa5\xb7\xc6\xd4\xa9n`=\x8f\xa9\xdbv\xcdtf\x03n\xd6\x1f1\xa9\x80-I\x8f1\xbfcF\xd4\xbcW\xa2\xc0\xeb\x9a\x96\xbb5l\xb8s530\x18\xccC\x91\xf6\x94,\xd2^j\x14\x03\xa6\x84\xae8c\xc98v\xd0\xa3\xae\xc7Uy\x9b)\xd5\x9e\xcd\xefD\x1e\x98\x83\xc0\xf8\xaf7\xf9\xcd_J\xb1\xe1\x12\xf45\xf7\x98\xc1\x87\xae;\xaaB\xd3\x0f\x08&\xf8E*\xda\xbd\xdb\t*\x7f\xb5\xb5\x84\xcd\x11\xc5\xffx\xf1\x9bl\xf7(W\xb2\xd2\'\xca<\x8f\'n\x94|g^\x0f\x9f\xc15*\x07|s\xc8\n\xf4G\xa4\xb7\xa9Wi\xfbBk\xfa,E\x12\x01\xc9\xf9\xe2\xa7+p\xea"\x06\xc6#F\xde\x0fA\x1c\xe90\xcf\xdaM\xfa\xe0\xf6\xa6\xeb\xe7\xe6\xc6}\x1e\x87\x9b%\xaesp\x94w\xf4H\xc3w\xac\xbf\xc0\xfc9\xeb\xffL\x86\x14\xa9\xb5dzL\x8e\xe9\xe1&D?\xaa\x86-\xf6\x85\x84\xa3G\r\x94\\\x12\xfb\x9fxJ\x95\x0e\x8edMFx\x0f\xa6m\xb5|\x06\xe9F,\xaf\xe5Y\x83=f\xb6\xee\xf3\xe4\x1a\xf3\xbeV\x94\x02\x86\xb1\xe6\xea\xfc\xf2\xa4\xd3\x0f\x07p7C\xd3#O\x81n?\xbc.\xc4=\xaaX\xed*\xf0HO\xae\xfc\xe4\x04\x19\xa2r\xde\xe0\x8e\xff+\x86\xc1k\x038\xd0\'\x8d\xdd\xe12\xe6Q\xed\xa2zA\xe7\xaeG9!\xec{\xf8\xcc\xca\xe4\xe5\x15O\xe2X\x80(c\x9e\xfb\xd3\xd3\xc9\xce\x9b\x9a\xffr;\x9e\xc1\xe6\x02=\t\xech\x13\xf0\xb1m\x9b\x93\xd6\x03\x93\xeb\x93\xf2\xed\x00\xe8.\xb7\x9d\xb3\x96\xaa\x7fd\xd8\xd2\x17\xf0\xa6\xb8X\x9b\x10\x1d\xad\xffg\x82\xbd&5\xa4\x80\x8cw-k*K\xdc[\x10\xdc\rJP\x05\xc7\x8a8&\xd2p\xa5\x83\xb1\x0c\x05t\xc3\xb4\x08\x16\x07\xd1\xdb\x13\xdfY\x90\xba\x96\x04{\x90\x92\x80\xc0\x01\xaf2\xe0q\xe5F/\xbb\xf1\x16<\xd7f\xa6.l?\xc6\x1b\x83/C;<\xcbSQ\xe2\x16\x8f\xe6cC\xb3\xe2\x87"e\x00\xb5\xf1\xd9$\xf1k\x16\x0f,\xa6f\xd5\xd8\xaa\x90\xfb\x88\xa3-Y\xd6\xf2\xf0+\xd1\xb8\xd1\xcc\xfa&\x81c%G3\x16[i\xea\xcc\xe8\xa6\x1bY\xd1\xb6\xce6@x\xdf\x08\x87l\x10\xb6\xc3$\xef\x1b\xe8\xd2\xaa\xa9I\xdcD\xa8\x814\x1c\x07c\rR\xdc\xc3\xce8\xe3\xa11_\xa7\xef\n\rTx\xd4\xce\xfa_\x0f\xb7\xd6\x82\x0b/f\xde\x1dh\xec:2 P\x08\xbf\xd8\xb4\x13\xcd{~\xe6\xc1&e\xf5\xf3\xb8\xad\xd9\xef\xbb4\x85>\xcd(\x11\xf4\xc6\xebD\x90n\xdc\x12+\xd2i\x1ano7\xd5\xec\xcd\xedk\x06t;d\xbc\xe5\x9d\xa1-\x00<\x97\xbbU\xcc\x1e\x14\xaf8\xf3\xfb\xa7\x9d\xb0 \xda@y2\x9b\xcb}\xc0F\xb5\x87$>\x89,|\x14F\x87\x8ea\xf5\xdc\xb9Z\x0fO\xce\x06.\x14bqs\xc9\x87+\xc1\x1dK~1\xba\xab!\x93C\xe1\xe1\xb6\xb0\x84\x8eV\x85\xfa\x93\xbc\xe6\x8a\xb1X\xa1\xcc\x8d|\xac\x06\x1d\x8a"\x9b@\x182# \xba\xe4\x05\xef\xde6\xe5\xecW\x05$\x9c\xc8qc\xf1:\xe2$\xa0\x94&o\x05\xf7P"\xe4\xe8\xd2\xe6\x82\xcc\xdd\xb1\xceBr(\xfe\xfa\xb3V\xa3\xd2\xe4\xe0\x8d\xec\xe0^}\x84\xbc\xb5\x85\'\x00E\xe9\xc2\xd9\x17\xb2l.Y\x93\x90+(\xee\xcc\xb5\xa9\x18\xfcV3\xba~L\xf0\xf0_X\x13\xd3\xa2k\xbf\x95\xf7\xfe\xea\xe4n+rQF\xb8\x15\x9f~\x10\xd2\x00\xd8X\xcc\xe9\xd4\xcb\n_\x1e\n\\\x1d5F,\xcc\xdb\xcb\xf1\xe88,\x13\x99\xff%\xf6\xdab9\xa1\x00\xf9\xfd\x0b\x10\x7f:\x19\nq\x00\xcc0V\xc6\xe3%\xe3;\r\x97\x98\xfe\x94\xc0\xbe\x14f\xc4N\xbe;\xa4\xba\\\xf8\x98\xd3\x8f\x98\xd3\x0c\xd1\xcd8\x03S\xef/4\xc4\x96\xab\xec\xba[\x8b#r\x1793\xc6\xc9\xab\xdc\xa3\xa2N\x97\x94\x120\xdc\x88\xc6Ip\x04\xa4\xc1\x86\xf2;\xb1\xbc\x168\xc0u\xdc\xd8|\xa3\r\xce\x0c\x8d<\x8eG\xf7~\xb0\xf3\xd4\xb8\x97\xb9&8\xba\x01\xf6aGzh^4Ah\x81\x05:\xbd\xff\x05~\xe8}\x7fn\xb3\x95\xcc\xfb\xe7\xfc{U\xc0T[\xbc\xaf\xd9\x00\xf2\x03\xc9\xc6 \xde\xea\xa9\xb3U\xc1UVSs/\x83{\xdbXIc\xdc\x18\xda F\x9fs=\xf8\x97i\xe9^\x9b\xa4YM^CZ\x86en=\xf1\xfac\xd2\xe8\x01\xbbBA\x00\x8d\x1bWm`\xbc~\xfa\xa8"\t}uf)b\x90\xe4\xf6T\x1c!\x8d\xfb\xa1\xb0\x16\xc58Y\re\x08R\x83[s\x9a\x8d]\x8d\x0e\xf7\x1aWsw\x98=\xa2\x19!0\xc9\xdf\xc8\xdb\x9e\xd4\xed\xdey\x08\xe5\xec\xd9\xcfQ7\xd9\x0b\x99\xd4{\xc3>\xc8\xed\xb7\xd4X[\xc8\xeb\xd4\xc9\x7f\x92E\x1a\x85bJp\xeb\x19\xec%J\x9b\xf0\xd2\x11\x1a\x82l\\\xaf\xc4\x01P\xe7C\xe9\x86Y\xd7\xc6\xb6_!\rF0\xbf~\xd2\xbc\xdc\xeeD=\x82\xb1\xe0\xa8gqS\xc1\xab\xb3\xb4\x12k\x18\x9d\'Q9\xdb\xb0\xa8p\xec\r\xb4\x1ck\x8dMu\x00Tn\x1e#\xb4&[1MN\xdb\x88\x9d3\xac\xd8\xf1{K\xa9oM\x17\xf5\x0e\xd44\xc9\xa9\x0e\xbb\xb6F\xb00\x0f/\xbb#_ez\xcfQp\xbf\x87\'\x11\xbd\xbc\x94k\x9f@\xef\xad\x82\xb5\x9d^\xcd\xb76\xc0pp\x1e\x1f+\xf0) \xd1\x8bB\xf7\x96\x9fy\x02\xabWP\xed\xc0\xb8M\xf9{\xad\xff{\xab1\x91d1\xa1f\xbc/\x9e^\x80\'wQL\xd2\xcb\xa6^>\xb4\x84\xba\x954\xcd=\xea\xae]\x80a\x98\xb3\xf6pz"P\x00u\xce\xecQ\xe6\xe4\xe8\xa3?\x8a\x9c5NS[\x1a\x86\x9e\x18T|\xd6J\xfe\xf8\x00\x93\x95\x88\x8d\x14\xc7e\xb6\xee\xfbICM#_\x07\x88=h\xc0U\xe51\x02l\x14\xb3\xbc\xcb\xb9\r\xbecq\xcb\x13\n\xbf\xc4|\xbdFs\\\x94\'\x8a~t\xf5V\xf5/V\xca\t05Z\\\xa7\xd1\x86=\xb4\x08\x84c=\xb4\xd3AL\xe2\xbb\x0c\xca\xd7\xdcB\xee2Hf\xf9\x0c\x7f\xf7@\x997\x82\xa9\x0f,\xc8n\x8f\x01G_\xea\x93\n_O\x80\xfec\x07%jt\x1c\x94C^D\x17\x02\x1eP\xd2\xd2\xc0\rTV\x0f\x7f\xc1\xee\x05\xfa\x1d\xe1\xcd\xb7\xd7\x94\x88I\xd6}\xf5\x9b\x0c\x93\xbc\xc4\xd8\xb6.\xca\xc4n\xfd\xeb!\x01\xa5\'\x8d\x98\xad\x00\x84I\'_V\x98\x98\xfaw\xa5\xa3\x87\xd1\x0f0\xab\xf4\x8c\xee54\xfd5\x94,\xfaz\x9f\xab:{W\x97\xf0\xeay\x9df\x0f\xe9z?\x01\x08\xb8\xed\xf4n\x87\xfb8\x02\xd4\x1c#*d\xc6.\xe2\xd47\x9a\xb1\n\x08\xea\xa5.\x8f\x1eV\xc1\x19\x8e\x07\xf0\x8dJ\x92Ign\x9e\x18\x9cd\xd7\xf3A\x9b\xa0\xd3 \xf7\x9b\x19\\\xa0\xa9\xb5X\x86\xcd\x8eW\xa74,H^3\x9cz\x10W\x99\xd3\x1e\x15S&\xa4\xdf\xa3\xe4\xd6\x91\xfd\x8c\xbb\xb5\xcas\x83\x8a\x0f\x8f\x99c\xec\x0e\tMT\xe9\xe22M\xf3(=\x04h\xdd{E\x0b\r\xc1\xd7"\x1e\xbf\xcdu|D|3\xfb,\n\xefQ\xcdW\xe5\xc7u\xae\xd6\xb4\x8a\xb9\x14\xd1\xbe6\x01\x81G\x15y\xcc\xc0\xd3\x9b\xc4(\x1f\xfcQ\xb80\xdd\x9dI\xf0%\x196%\x88\xdf\xc9B\x7f\xef\xc5d8\x1b\xc4\xcb\xbf\xaf\xb2\xca\x86\xde\x9a)\xcf\x92\xc9\xd5\x9a\xc9\xefRP\xa2.H\xe8\xd7\xea\x8dW\xad\xd2\xac\x07\xcb\xfc7R(\xcd\x19D2\xbd\x91\xc3\x9f\xbbT\xe9\x9b\x18\x99h\xc2\x06\xa7\xb4j\xa6\xb1\x80)\x1fg\x15 v=o\x8f\x9d\r\x98\x81\x1f\xa5\xb9\x86\xae\x0e\xd0\xec>l\xca\xf8\xf2\xa7\xa3\xca\xe2Q\x8c\x85\xa3\xaf\x1d\x84E\x9a5\xa7\xa9\x1e\x13\\\xb60\xfa\xf2\xd2\x0be\xdd\xcd\xfeFn5p\xb9\x04`%\x105\x1b\xd4\x1b]\xd1co\x15~W\xd6\xbd\x91\xb39\xe7\xe9\xc8\xd8\xa8\xb5\xb7\xe9\xd7\xc3\xbc\xc1\x025,yp3qk\xb6AVM\xa6r\xe8\x91!\xef\xf9+s\x1e\x8a\xe7+S_\x0c;3\xe9\x7f*\xe9I|\x1abH\xd0\xf6\x85x!D\xda\x0fN\xb6Dg\xf2A\xa9\xf9y5:Y\x1d\xd1\xb1\xae\xb0F9\x9bn\xb1\xdf\x87\x07\x15\xafd\x82\x125\x13|U\xcf\xe3[\xbe\xcc\xdb\xba\x8d\xda\x10\x1a\x85\xaa\xfd\x8dp\xcb\n\xf12\xb4\x9e\x8c\xb1\x91\xce5\x96\x7f\xf0H\xaf(\xb7\xa3\xa1R) \x08\x97\xd6w\x19\xa3\xa2\x91YV\x84\x9eg\xab\x9f0\xfbn\xaae\xa4\xe8\x07\xb7hR\xdf\x80\xb4\xfeV\xd7\xce\x8a=q\xc3e^\x9d\x1a8s\xc8:\x8b\x1d=\xd7y\x95\x1e\xec\xdb\xa2\x88|\x8c\x7f\xa6\x1c\xe1 \x15\xe27\xac\xe2\xa8\x9by\x9c\x1b\xff\xae\x11\xfa\x0bL\x00\x8c\xc6b\xe99R\xa9\xd5%m$\xeb\xda\x9bYM\xb6\xec\xc88\xbd~q\x0b>Wq\xd3\xa9/\tXUv\xbb\x7f\x1dR\xbd\xcfU\x9b\x04\x83\x02\xcar`\xce\x16\xc2\x8f]G\x81\xfc\xc5\xfe\x90\xadC*\xa6,\x12\xa9\xd6\x144\x85\xec\xe5\x9c\xd4\xf0&\x1c\xff\xb8:^\x03\xd0\n{w\xe6\xb6\xe5+\xca\xfb\x9a\x14\x83\x8b\xb4\xee\xb6\xb7\xe0\xd1F!\x90\xfa\x1eZ\xaf\x97\x87R4\x08\x15\xdbw?\xd3F\x8d\x86\r\xb5m\x1d\xe3\x98\x0b\xf8}\t(\xa4\xde\x7f\\\xfaV~8.\xa4\xd8\x1f\xd0%w\x86t\xa5\xc3\x94\xe4l\x1ek\x87F\xcf\x01\xc4\xedBU\x18\xa4{\xea\xa9\xfcJ\xcd\x99O$\xdfo\x1c\xe4ztH!\xb4\x8e\x1a\xaa\xe0\xb5B*P\x1e\xacX?\xd2\x84\r^\x1d\xc4x\xc7\xb9\xd3\x8a\xe6\xe6\x1cc4\xd8\xfc\x1aDHB\xeb\x93\xd8\xc7\xe5;V\xe2vjK\xce\x9c\x91jYw\x9eZ\x08m\xf8r\xbd\xc9\xe6\x08*!}\xb8\xea\x83\xb0N\xf1\x88\x0fBM\x7f\xf8\x84\'\x85w{\xb3\xda$\x0e8&4{\xfc\x87\xba\xc9\x18\x0b\xa158"\n\xdbW\r\xa9\xbfk+\xd0~o\x9e\x1b\xb2\xc2G:\xe8\xa0\x1e\x95\xdb\x9fM\x1f\xab\xd3\x10\x12k\x10\x9b\x12fcH]p\xb3@\x13_\x80\xfcBqph>\x0bb\xbc19A\t<8\xaak\xff\xbfH\x9d0\x00\x88\xd1Mk]q\xd2\xe2#\xcf\x8d\xc2\x04\x08Xn\x84\x12\x86@\xcd*lg\xac\xf0j>\xa5\x9a\xe9\xf1\xb6\xb2=\x08c\xab\xac\xc5\x02\xa6">\xc0\x17K\xdb#>K\x98 \x9bi\xaf\xc2B\xdd\xea\xbbK\xb7Z\xbc\xb6\x18)\xf3?\xc1\x8c\x99\xfc\xcb\xdd-[\xba\x0e\xc0\xa2\xdf\xd1\xfcQ\xee\xb7\x17\x9c\x19\x9f\xad\xed\xfdR\xc2\xba}OTN*\x01\xaaOtf\xdf\xf2\x1b\x14g\x1c\x1a\xdb\x01\xdc\xdb\xefs\x9c0\x88\xc5X\xd6\x15\x9c\x87>\x93\x92;rm\xaf\xa9p\xe6\x87\xe0\r3\xae!\x90\xb9\x8b\xd6i>\xd7%\x8e\x97aI\xa7\xae\x80\x0c;\x88>T\xfc\x05IE\xfc\x1ft\xb4%9\x95\xc7\x13n\xe2\tT*A\xd2\\%\xd2w\xfc\xb1\x8c\xa4\x95\xea\xac\xaa\xa7\x0f@"\xe9\xdd!\x82o\x15\xb0\x88a\x0c\x7f\xc4j\x82\x9b\x99P|4\x89\x9c\xbd^A-h\\\x02\ts\x1b$\x1b\x1b\x84\x97\x02\x13\xd5#\xc7\xee\xd0^\xf7\xfe\xa4\xf9\xcb\xf7x\xf8\x0e&M\x1c\x81.\x8bI+_?[\xed\xa7\xfaW^\xc5\xbe?:{o\xa9s\xce\x13\x9b\xaaj\xdf?\x01\x937\x8b>\xc2\x0c\x90_\x9bG\xe3Ar\x96\x162P]t\xf0\xc6|\xa4\xb8\x80"\x1a[\xb7D\xf5l\x1ae\x8f\xa3\xf2\x15?\x03H\x1b\xbfs\x8a\x8e\xf2\x980\xdf\xf6\x99Nn\x8b\tL\xefniv\xfa\xf8\xfa\x92a\xa8\x8di\x8ec\x8a\x8b&\xfagz\xf1\xdc,\xe4Q\x14)\xa8Z\xba&\xa9\xf8aa\xe5\x80\xf0i?\xb5\x01\x88N\x85\xfb\xbf?\x19\xb5F*u\xb8\xe7\x1eYiV@n\x0f\x8bC\xca\x1b\xc9Bb\x07\xe9e\x13E\xf2\xf8dvF\xc4/\xe88\xa2&\xf9P\xe5B"\xf1\xf1_\x8bGK\xae\x17\x9c\xcd\x88\xd6\xd01\xa3\x03\xccAlQ\xcb\xaf+u-\xb1\x02\x1a#\xdd8\xebQ\xda\xbf\xd7\xc1S\x131sH\x1f\xeeO\xbe\x0e\xfb\x00Tn\xc2\x95\x98]d^\xc6\x7f\xfe/l\x19a# \x1e\xa6ia\xca\x92zr\xa9)\xe04\x8c\xa2\xdbwh\xd2\xde\x1b^\x1e\xf36\x9f+\xd5WU\xce\x1b\xbbOGK\xbdr\xdb\xd4\xe1\x89o41\x8b\xec\x0f\xeew\x03\x81zqh\xd5t\x03m\x83\xdf\xe2\xc7cn\xd3M\xd9\xaa\xf2\x8fE\xcb\xb0\xbeI\xfeh\x00\tw\xa9`\xefJ/\x99m\xef4c\x06XFe\xc0\xf73\x19\x9d\x92?1\xdd\xe0\x94\xa0P|o\x9d_{\xad\xba\xafyy\xf6\xb9L\x92\xac\xb36\xd7\xc0\x1d\xa7n\xf2m\xf61h*P\x0b\xf4V\x838\xc6|\x87\xef\xb4\xdf#\xc8\xa22:\x1f\xe1\xb5\x80\x873\x1e\x9e:f\xc2$\xe5\xadFz\xcc":g\x87\xcal?\xb7\xd5Vt\xca\xfa\x843\xda\x1ap\x82\xbf\xb1=\xde/5\xeei\\\x1f\xe2C-3\x99\x98\xca\xf6\x89\xba\x01hR\xea\xda\xd2\x1c\xbb\xdaz!\xeeb\x01Wj\xa8\x9d\xc5\xf7{4S\x0e\xbf\x16`6"&\xe0\xf3\xe0\xce\xf7\xd4~M\xa1K\xb6\xe3^!\xa3\xd0\xd9Q\xd9\xa5c\xde\x08\x1b\xaf-\xb8\xd5\x00W\xb4dSf\xe0\xba\x7f\xd2%7@t(JH\xc9\xea\xa9\x81\x10[\xfa\xbd\xfc\x00\x1d\xe5\xce\xd2\xcc\x8d:(\xa1\xc9\xad;\x10\xdex\xad;r\xa2#\xa0\xd3\xea\xbb\x00\x88\xfab7\x9c\xe9\x1c1P\x18\xc1\xe7/K\xef_0c(\xd9\xfa\xb3\xe0\x95\xd6\xe5*\x03F\x06\x04\xad\x13\x93~.\xccp\xd3\x9c\x07\xde\xaf\xdb\xd6R\xa81\xd0\xdf\xa4\x0fm\x00\x13\xdd\\B+\xb5\x0eR\x0c\xc9~\xcff*7\x8ci\xb4\xc5]O\x85)\x14jc\xf02\xbb\xd9xR\xd2\x84\xfb\xf5\xc2\xdf\xdb\x84*\xcc\x97\x8b:\xafs\x03*\xbc\xa5&\xf0\xe3`\xf9\xa9:;[w\x167\xec\x8ek#(\x0c\x19\xdc\xdb\x11\x1a\x85W\x9a 6\xcf\x0cg\x89\x1d\xfe\xba\xc3\t\xd4v\xc9\xe8\xae6\x14>\xcf<\x13\xbf\xe7%.m\x95\x8a<R\xc8\xb2\x83\x0f\xe5\xd0\x81\xe5\xdc\xf8cBn\x01(\x02\xe5\xb8c\xf4M\xd88\x7f\xd9\xf6\xd4\x91\xd0$\xfaF\x03\xa6s%\x84\xd4\xe0\xea"\x0eJ\xf7\xdb\x86\xeeJa\x0c\xca|E\x8bdF\xbf\x9bEF\x9em\xb5Aa\xd4\xc2\xd1z\xdco+N\xc1\x03\x86s 4k\x93\xb7\xd1\x90\xe2\xab\x06\xcd\x8c\x83\x11-3C\x1a\x9b\xe1\xe5#e\xcd.b]\xfcWJ\xc5\x88\x7f:\x9f\xcd\r\xd8\xda\xb4\xde\x97\xa8\x15w\xdf\x04z\x06\xd5,?\x1c\x01E\x15\xa3\xfc\x956b|\xeaK\x07e\x8b\x95j}8T\x9f\xd2OqU\x05\xf0\xf0Qi\xb5\x02\x1c\xb0Y\xa0{\xcfE%h\xe4\xf8[\x9bA\x7f\xf5/b\x13\x06Y\x94\xa5]\xfc_)\xfb\xffA\xe0\xc9\xc0\xd6\xa5Yc\xa9&^\xd7\xc7\xc8\xa0*E\xb8\x84\xc9\xf9\xbc\x06\x9f\xf5\xaf\x8f%:\x04>\xe1\xae\x8c*c!\x99z\xa9 \t(&P\xeaX\xe3w8\xf4F\x86E9\xd5\x97~Y)m\xfeRe\x80Z\x1b\xf4\x17\xf1\xa1hEsIJz\xe6\xf9\xa2\xec\x87-kO\xef\xab\x04\x0cY\xeb\x1bJ{<\x1f\xf5\x85w\n\xefG?\t3H\x97\x99\xe1\xa3\nr\x9b\xa2\x97\xc0\x95aH7\xf4\xd0\xa8\xfc\x97\xac\xdc$\xf6\xd2\x06\xe1\xee\xfe2\x8c~\xa9\xcan74\xfeM\xfaZ\xc4$\xf95D\x05\xfb)\xa6v\xe3\xcb\xae\xc9O\x05#\xa5\x12\x92s\xd6\x8d\x81\xa6\xad@\x88\xad^~\xea\xa1\xa3\xae\xdeF4\xd77\xf6\x8a`O\x07\xe2\xf6\xaa\x17\x16\x1fC7\x85u \xa3L|R&.[}\xbaEF\xe0\x12\xb7\xd0h\xa0\xd3\x03e\x1cH\x83\x01\x9fF\x0c\x9br\xdc\x7f\x11\xae\x98\xee\x1d\xba\xee\xcd\xac\xfe\xe1\x16\x89Z\xb4\xff\xc5\xa7\xda4\xa6\x9d\x17\x0b\x1e\xb3\xa4;\x0b\xedF\xfa\x06\x1c6\x8f\xe1\xf4J\xdc \x96k\xac\x19\x17z*B\xc0[\xd7\x10}K\x7f\xbfCN\x99\\\x83r\xb4\xbb\x9d\xb6*\xf2\xd0\x8b\xf2\xd9X\xe9\xc4\xc0\xb8/\x97TJB\xa5}77l\x02\x94\x97\x84\x96\xb8\x17\xfd\x9b\xe5H\x17\xec\x08c\x9drN\xf7\x0b\xc5l\xcd0\xbag\xf0\x80i\xeb\xacA\xa2\x92Y\xbbm\xd1\xfaX;BB\x86\xc1w\xc3\xd0C)\n\xd1q@T\x87e\xf5\xcb0\xb7?,\xbc$&\xd4\xe52)\x99\xa7\xb0Gg\x18\xcb\xa5Yt\xe2\x9e\xb7\x90Q\xd1\xb2gp;\x1a\x13L\xb0\x02=_\\\xb5o!3\xa2<\x1cv\x8d\xa13\x87\xf5\xad\x00\x13\xbfa4\x00\x9a\t\xd7\x17\xf1E2\xfd\x06\x0c\xfc\xb8\xe3\x03\xdf\xb3\xb3\xaf\x0b\xad\x13|i.-v\xe6\xa8\x07\xb3\xd7\x14Y)\xfa\xc9F\x9bS(E\xb20=\x8b\xf16c\xf98\xffw:\x01\xe6\x1f\x0c/\x17X\x1b\xff\xefN\xe9\x18\xa4\x8d\xaa\x86\xb1q\xea\x8c9Y\xd3@uR\xc3\th0@#X(\x1aW\xd1t\x0e=Db\x88\x94`\x07\x16\xb6\xb9\xd6]}Jh\xd3\xef\xcdH\xfbDG\xd2\xe7\xeb\x0ft\x1c\xdb!\xc8`\x90\xec\xae\xac\xe5\x9ePw\xa3\x81dV\x1d\xa0r\r*F\t\x83\x06\xe1\xde\xc8\xb7P\xb2\xd2\xb3\xde\x93\x81\xdc\xf6\xe9\xc2d\xc3<R.\xa8\xae\xfd}Y{)z\xc2TH}~l\x18"U\xffp\x13t\xbc\xe9\xe8\x08\xf7\x10\xc1\x8a\xfbw\xcb.\x90\x1c\x8e\xd3\xf2\xa4\x0f\xad\xd9\x82\xf8\x93\xb7\x01\xfa\x1dY4+\xb8\x0e\x9b\xa1\xfb\x97\xb30\xf5\xc5Q\x19\x11cH\x9dm\xdd\xe6\xd7\xde\xb7\x95\x94\r\x94[~\xac\x00\xf2\xd1\x12\xb9\xcbM^Y(L\x19\xabc\xdd\xce\xe0\x86\xbdv\xddI\xcf\xb1\x05k\r\x14\xe7|\xeb\xf5\x97\x82\x12\x8c\xb5\x87o\xc3ZN\xc97/T\x83\tS\x8b\xaf\x9b\xfb\xa7x\\,p\xd7\xe9?-\x01\xb5\x99\xc5\x19U\x04\x02\x8f\xef#\xe6\x7fFrE0\x1f\xea\xabn\xbf|d\xb1\x80\xc7k\xda\xa4\xc7.\x03\x95A\xcd\xa7\xe4\xa7\xe9\x8a"Pe\x1e\xc5\x90\xe6\x1c\xb6kO\x02\x1b\xe0\x98\xfd>R\x97\xd8B\xb5\xbb\x91\xc5\x851_0&\xd7g\x8f\x90\rl0\x84\xe3\r[>\xf1(\xccU\xddss\xc5\x0e\x18A\xf6\xdc\x02V\xf7\xe8\xf3\xcd\t\xcb\x00\x8b\x1d.\xc9M\xaa\xe6\xb8\xf7\xc1\x05my\x96@!\x86Bc1`\x03\x82\x98\xbe\xf9x\x919\xc8K\xf6L\xeb\x04>l{4i\x9ax\x9d?\xaa\xd4\x80\x1a?\x14\xa9\x06\xda.\xf9\xf4\xd5\xe6\xee2_2\xe0!\xf8\x9cXz?6#\xfb\x80\xe3\xce\xde\x14\x83\xe4(R\x94\x1f\x899\xd2<\xc60\xc3\xe5\x18\xe4\xaa\x03\xf9\xfb\xfew}F\x0ed\xca\xee]6\xb4\xe3\xd2\xd4\x1d\x1d\x83=h($\xf4\xc3\xb0\x0c\xd0\x90MV3j\xc4\xbag6\x9f\xe8D\xcb\x10\xe6\xaa|\x15\xb6)e\x0f@q\xc1\x03nDG\xa4\x0b\xcd5[\xdd\xac\xb6\x04\x0b\x07<>\x1du@T\xfe\xaa\x85\x0fm\xbb\xf9\xf5\x00\xa6\x17c\ra\x8c\xca\xe6\xe8\x0f\xab\xd6z\x07\xeeJ\xfd\n\xf7}\xda\x0eX#U\xf7Y\xd7\x1f\x8dxg\xbd6\x84*\xd5\xab\xd8]\xffk\x98\xb8\xd7\x9a\rPY%>\xf5@\xcb\xd8\'{\x82\xe6\xabv$\xa2\x86\xf9\xb7=*\xba\xc18\x16\x18g"|\xb3\'\xdcV\xc5\x1d~\x85\x9c\x06 \x0f(l\xfd\xb4py\n\xdd\x98\xd2\xa5\x13Eg).\x892k\x7f\xd4V\xf0\xe7V\x19\xa5\xf3lg\x93\xb5\xfa8\xa0t\x01B.\xae\xfc\xf6h\xf7s\nz\xbdV\x88\xa2\xca\xd1\x07\xb6\xa4-\xc8\xcf5\x9f\xc4\x05\xdc\x8e\xe2\xaa\xe7\xbe:D\xddM\x8b\x9fh\xeaY%\xe0\xf45\x1aj\xda\xdc\x19\x08\x8c\xe0\xf7\x15=\x8b\xa2M\xb3|]\x15|\xe2?\x99d\xc4mp_\x9e\x17;\x06\r#\xadD\xc8#\x00\x81\xfcR\x812|h\xb3\xeevic\xa0L-<\x83\xa7\xe4r\xc8\xad\x19\x81~\xd2!k\x9f\xa2\xc3.\xaeZ\x17\x9dZ\xc7\xde\xda\x90\xbf\rjw\xec\x13\xc8\x8e\xcf\xd8{\xa7%P\x86#2\xb8\xd2\x025:\xcb*%\xb8T\r\xe9\xbd\x90\x86\xf2r\xcey\x93\x9f\x1d\x87\x19\x12!\xcf\'\xee\xe0\xb6=\xa4\x89<Q\xd6\x9f\x1d\x88\x1a}\xb5\xf5\xfe\xbb\xd1\xc2\x819V\xe3\xf6\xdd*\x928\xfe\x9b\xa5x\x0eS\x0bu\xe0\'\xc2\xff\xdc0\xf0V\x06\xb6\x13of\xf8\x8a\n\xe7\x8c\x08P\x1d\x06\x15\x15\x90\x01\xeb\xb3\x14\xb0\x16i\x88\x83\xf7\xf4\xe5\xa4OI\x13k#\x12\xab\x83\xdcW@\x7f&~\x03\xae\xa6\xb2*\xcc\x90Mu\xb6\x8b#W\x02\x00-e*\xb6\xec\xb62V\xa97\xa07h\xaeVl\xd9\xc8\x1e"S3\x821B\xfa\xc9Wy\xefa\x08\xcc\xea\r,\xcf\x0c\xe0\xc4]\xb5\xd6\xd8\xb75\xdf\x81\xdc\x9c\xef\xeb\r\x9b\xf7\xc8\xee\x8e\nt\xf0\x86\xd0\xdb\xd6\x112\xd9*C\x07\xde\xc8\x01\x90Y\x1b)\x07\xff\xfa\x0eN\x0c3`OZ>\xe2\xe5/0\xa3\x89\xc3\x8dt\xe7\xe5\x86\xcf\xc4\x0c\x8d$\xe35\xe9#*\xfe\x11\xa2\x89\xb1\xb5\x08ky\x03\xf9\xbbf\xae\xe7\x88\xcc\xe9\x19\xf1\x11\x98u\xc5\xc5\xd9}\x90C7\x05z\xb8\x13`-\x80R\xce\xe3\x99\xd0jvFn0;gA\x9e\xd3t\x8fKs\x92\x08\xd5\xd1\xe0\xa3m\x8e\x93\x00\xb0\xd0\xe3A\xf8\x9b\x03\xab\xc7\xed^;3\x9c\x91\x04\xd5\xbf*-;\xd6\x85\xdf\xff\xff\tg.iu\x83\xd1\x16\x901\xd2\x05\x84\xa6\xf0\x07^\x87D:\xc8\x9c\xe9\x8e\xdaM{\x16\xc5AU\x84T\xb4"m\x884\xab"\xbcV\x97c+\xcb\xb6\xb8\x96x\xef\x14\xf6q\xb7\x12\xfb}\x9e\xae5\xee\xbb\xa8\x83\x90\x00\xd6\'\xfar\xf0<$\x94\xfa|\xf8\x06-\xf8\xd5z\xf9\x8f\xd7mt\xado\xf2J\xeb\xbf"\x9cC\xf1\x1f^\x98`\xd1\xe0\xcdC\x06\xc6\x151\xe1\xa2\x0c\xe4/\xb2\x95#^\xc3\xeaqj\xc6\x0e:\xd7\xc0\x8a\x89\xd1\xc9\x07\x14\xf7\xff\xe4P\xe7\xd3\x10\x1c\x99\xa3\x06{\xee8yh\x7f\xc4\x0c\xfd\xc2K\xf6B\x93_\xcc\x1b\xf9\xf7Hr\x1f\xc0>Mau\x0b\xcbH\x94\x1c.\xce \xf9-\xcf\x16rP\xc0J\xaf\xb0Cp\xf2\xaa\xd0\xcd8\xfb>\x06\xc8\xe619?\x1e\xc4\x019%\x12\xe7\xa6\x1d\xec@\xf7\x9f\xfb\xd4_\x97\xe2A\xfe\x83\xec\xcf\xb4u\xdetj\x9e\x96Z\xc1\x973\xbf>\r\tV\xf4\x97\x80\x9e!I\xa5\xd2\x81\x8dr\xdd\xde\xc4\x04\xefr>R\xf4u\xae< e"\x83\xf6\xca\xd5\xa8\xa4O\xc5"\x8e\xd1\xb6\x1egr\xce\xc0\xc8\xa6D\x9b\xc6\xff\x8c\xcc\x12Z\xb6\xfd\xb2\xff\x94\xedYF!?R\xabv\xe6\xa6\t\xa1\xc7\xc8w\r\x11\x81Q\\+%\xe1X\xb55\x9f\xfb\xb2(d\x8c\xe0ud\xe4R\\P\xc4\xc6(9^I\xe9l\x10CW@\xd0Rx\xbf-\xb7\x8a\xa0\x03\xb8\xcb\x904\xc3:=\xb5}A\x04\xeb\xc5\x8ai#\xa7@\xd2@\xd4Z\xfc|#\xe51\xbe\xbe\xfe8\xdc9\x9b6,\xbe\xa1\xd1\xc1[\xbeer\xc2#\xe9\xe0"\x93\xb7F99E\xfd^;K\xcd3H\xad\x9e\xa0r]\xc2*\xd5[\xc7p?Z\x1b\x06\x10\xdb\x19=R\x94>\xc7\x10\x0bH\x13\x06\x0bv\xef\xb6\xf8_\xbeo`\xad \xb4\x80@U\xdf\xf2\xdc\xf6O\xe8\x18\x1f\xe6\x8c$\xab\xbc\x82\xe0\'(\x8b\xd2\xda\xea\xbf=\xa4\xc6\xf6\xef\xb3\xd5\xa6O=\xe2\xcd\xe25gX\x8f\xbd\xd7\x9e\x1e+i(\x87^\xd5+\xa9i;\xc4\x00\xffM\xdb\xac\x01(\x17\xb0\xe2\x9a\xf9\xbe\xd0J]\xef}4\xee\xb2\xf0D\x914\x94\xb79\xbad\xd2\xa3\x19\xd2F\x98vQ\n@MU\xac\xdc\x97f\xe0\xc7\xf3,""\xaf\x9a\xc1-\'\xdc\xbc"\xf6i\xac\xb5\x11\xd6\x9d\x14v\r\xdd\xfe&\xac\xe0\xfb|\xa2\xcbZ\x12uo\xd03\xb2\x1fU=\xf8\n\xe6My\x97\x95>\xbd\xf5\xf9})\xcc@\x87/\xaf\xc3m\xacS\x1c\xe0swQI\x04r\xe9\xaeVz\xf4Y\x9abv\xd3\xf3_u\x18\xa1\x85\xadx\xa8DrE\x16C:M\x13x6\x9f\xe1p\xb2\xdf\xc4\xdf\x0b\xb0\xd2a\xea-\\->\x9e(\r\xb3S\xd5\x8c{\x01\xf2Y\xaa\x9f\x95cZ%1w\xe0\xb8-\x8b\xd6\xa2\x17?\x89vI\x8e\x05A\x19\xbd\x1e\xc0?\xa3c]\xb3\xd5t,W\x98,\xcb\xab\xdbU)a\x87+\x8cJ&\xd6?q`(\t\x95Lw}\xe3\xdd\x9a\x13Vi\xc5\xe6\x17(T\x02\xbdu$\'_\xf0f*\x84\xcb-\xfd\x97\xe6\xf7\x040k0C\xeb\x81\x9e\xbe\xe1|8\x1aY\x07\xfd\x90<\xac\xb1\x16\xe3\x0f:\xab\xf6\x95\xf4:\x11`\xa1\xa6\xd0y,\xfbe\x86\x16\xbd\xef\xbe\xa7\xcfc\xc0\x0c\xa0\x9e\xb9zQ\xc0\x86^`J\xda\x98\xa6\xf4*\xe3u\xeb\xbb|\x88\xf0X\x9d{\xaa\x82\xfbs\xd6\xad<\x88t\xf6\xea\xc7\xd4\xe7\xee\xc5\x1a\xcbOz7\x979\xd3\xc3\xa6ONmJ.v\xdc\xf8j\xad2t\x9eqZ\x1f\xe5so[;\xe1X\x8f\xee-&\xa8\xba\xb8\xf3\x90\x9a\x82\xa3\xd9\xd9\xb7\xf5b/3\x14:$\x81\xe6\xe6\xb8\xd1\xfe\x1e\xa9x\xdb\x07\xf8N\x90\x98\xce\xe6\x1aOL\x8bT\xe4\x0e#K\xa3\xdez\xb4KT..\xd1\xfc\xb7\x9b\xa7\xc7\x07\x9c\t\x07\x0bLu\xa6\xb6+\x04N\t\x11^\xcd+\xd6H&\x12\xcfM\xa4e\xea\xa6\x94\x923T\xfa\xa9\xd0\xdc\xb8\xb0\xfe\xa0Y\x04\xb5E\xe3T<P\xd2o\xf5\x02\x92\xb7\xac\xb0\x93\x99\x06(\xcf\xb1\x81\xf0h\xf6Z\t\xb7\x13\x8c*j*\x15\xf9\xf6yhL8\xe0c\x96\xe3\xbc\t\x8f1\x06\x9b\x95\xedx\x87c4\xf6J\xa4\xd3\xe9\x1e=\xe6>f\xc8I\xc45\x7f\xbf1\xdc\x08\xf7\x1fA\xcfGg\xd3\xd9>^\x14\xdc\xcbeX\x13\xde\xc9\x9d\t+\xfdW5\x99O,\xf2p\x93n-\x99\x95~\x08J3\x0c\xfe\x8fS\xc8U9\xc2n/+\xabT\xd8\x91\xa4\xe1\xcb\xc6\xab\x82\xa0\xec\xeb\xab\xee\xc4\xbc\xdeg\xce\xba#H\xe1{h\xb0b`\x81`N\x9bD\xad\x0c)y\x03\xbf\xdc!\xb0a4<g,\xf0~\x19\x0b2n\xdew\xfe>K^\xebN\x9f\xbe9;\x0f\xb6\xe0f\x18~\xe7\x8d\xfdOEJ\x14\xc9\x99\xc1+\xc2\xba2\xa5\xfc\xcf\xffB\xb4\xe1\x07p\xa1\x1c\xacA\xaa\x9e\xbfLp\x93d\x97,z\x88\x17F\xf1\x9bO\x19\x9d(\xed\xf6\x13jE\xceF\x84\xf2Tj\x8cJb\xeb\x04\x8b\xfc\xf6\'\xf76P&Fe\xadx2\x93\xd6)\xa2\xf6&\xa1\xdf\xc3<\xe2\x9b\x82\x87\xd1\x12)\x9a\n\xc7D\x0fI;\xca\xcd\xbd\x87\xab\xc4\x85\x99\xe5eG\xa7\xff\x1a\xe1]\xa6\xe0\xd2\xca\xb8NM\xe7%\x83w"\xb9\x90\xb5\x07\xb6\x9cB48\xf9\xa5\xc9\x8e\xccw3cXR\xd9?\x08\xa2\xd8T\x88\xe0\x81 \x18\x1dh\xac\xf0\xa7\\\xcaUF\x0b;\x88x\xd0t?\xf2rV\xae;M3\x95\x11\x85G3\xfd!\x1d[y2\xb5\x91\xb6/\xf2\x97X\xf3\xf7\xe9m\xda}\x97\xbdo\xfb\x9b2\xc7\xbf\xf8\xe7\x92\x17\xbb\xb2*\x11/R(\xb1F\xe2\xfb\xeeU\x16#\xe1\xad\xd1"\x14\x9d\xde/\x9ah\x80\xa3WN\x1fK\x81\xb7\xf8)%\xec\xa9\xc2U=\xff"{+m0\xe1\xb5+A\xee\xec\x89\xfdF\xd6\xfa\xaab\x84\xccH:\x8eV\xf8\tZ\xf4\xd8~\xdc\xc1\r\x97\x1aK:oJ\xabT\x83{\xfa\xab\x9d\xb9XA\x99\x08\x0cJ\x18\xf0\x01\xda\xb0`\xd9#[\x8a\x90\x7f\xd6\xaa\xf8\xfdc\xd7<\xcc\x0c\xffr\x98\x00\x8c\xefJ\xc9g\x0f\x0e\xe6\xf8\n\xb1\xf4\x16\x19N$\x89\xf1\x1e\xd2q\xfd\xf1\xe8\xf4\x0b h\xd2e\xe6GN\xa7D\xb1\x85gl\x15\xb1\x0c\xbd:\xc5\xff{%\xff\x83p\xec\xf9{\xb4\xf5\x9c\xa6O\x1cW\t)l\x8f\xf1{\xc2>\xe3Y\x90d\xba\x83\xf6\xd9m\xc0F\x86\xe2\x8c\xabZL\x1e\xe8K\x05\x914\xee\xf5\xe2G\xa2\xfe\x9bN\x154$G\xe6\x19%\x97\x00\\T\xa7\x1c7\xec\xc7\xf3\n{\xa0\xd7\xc7[\xe0X\x0ex\x15De\xf6.\xdf\x13\xbfLnS\x94\x95 \xa2[wWS\xfd`\xe7\xdd\xe8\xc2\xa5\x10<\xf3\x97\xb3\x92r\xdcw\xcc+\xc9\x05\x97.;b\xcc\x0b\xe0\x14w}\x89^\x8a\xa0\xa4\xeb\x0f\x87\xe8\xdc{}\x81,*\xa2o\xadl\x02cG/t;c\xd3\x01\xa9\xe2\xdc\xf91\xa8\x1e\x984\x1b\xc7\xe7\x81\x11\xc5\xb19\x1b\x83\x96kk\x89\xda\x8c\x1c$Sf\xdc\xe9=P@\x18\xed\xebU\\+ \xf0S\x85\xf8\xd5X\xb7\x9f\x8aj\xab\x8fN*!\x0e;\x8e\x1b\xa1_\xb3\xf7\xc6H\xfe\x14\x1a\xd2CxU\xa8\xc6U\x0c\x1a,!\xa7P\xc1H\x083\xe3\xa4g#\t}\x95\xbc\xe9"4\xfa\t\xbe\xbf\xc9@\xac\xfdlK\xc5\xac\xc9\x04\x8dLUh\x95\x9bB\x9c\xd7\x7fa\xf5#\xcc~\xf0\xe5k)\x8d\xab\xa6\x84;}\x9dr\xb0\x94\x8d\xbd\x80\xbce\n\x01\xefH\x84\x91\xf6\xac\xfdj\xb3|\x93\xc3MWa\x88\xfc\xe25\x84\x98\xc8\x95\x02\x1d\xbc\x08\xd7\xfar\x11\xbb\xec)\xb5\x03j\xd8Je\xa8\xfd0\x13T\xbe!\xf5\xd9\x15.\xc4I\xad\x90\xee\x1a\xce`\x8f\x81\x9f\r\x12\x88\xee|\xaf\x0b\xad\xc4p\x03\xedN\x9b\x8cv\xe9\xd9\xbd\t\xfbr\xeaBJ\xbb\xd8\xa5:\x0f\xc0\xb7 \x9eR\xf5al<\xebM\xb7\xb88Ecb\xf0\x16\x19\xbf\xe3\xd8\x85\xc6\xb4{\x1b\xc2\x95\xc9\x86nw~Q\xafV?\x06\xf7c\xf8\x93\xc2\xbdVX\x9e\xa5\x06\xf1\xa6Ky\x82\xd2\xd7\x10\xdb\xca\xd4,:\xa8.=\x14\x00\x18\xbb=\x98\x12\xbc\x14Ko\xdc\xa8W`\xcc\xed\xbc\xda\xd4Y\x0f\x82\xe39\x16\xb9K\xf1\x02\xcd\xbbC\xf4\x87n\xb0\x8b\x92\xa8\x89>)p\x8e"\x9eK4\xae\xb3\xb1J\xbf\xd4E\xfah\xe62\xc4\xb9\xbe}\xba`{\t{<\xa5tv\xdej\x801\xec\xe7\xea\x9b\x15\xb8v\xfa-J\xf5\xa4D4Om\xd2\xfcK\xb1\x87w\xff\x18E\xb8\x9f~6D\xf8\xbf\x19Z\x90s\xf3U\x0bW@\xc2}_\xd0:E3\x16G\xaa\x0f\xba\x99\x16\x84o|\x80\xf2\x8d=\xd6M6fY\xa6\xc6\xef\xea!)W:P\x01\xa9\x00\xed\xcb\x01z\x06t"\xd7\xc9bw\xa8\xef\xa3\xd2)*4,9\\\xf4p9\xd1\x81\x19\xea\x7f\xb3\xd0/\xb0~=\xc0\xf5\xd3\x8c\xbc\xf7k68\xc4\xe5 <\x84y\xd8\xef2\xe3F\xf7\xf8\x83\xbaj]{[\xeb\xf72\'5o\x19\xc9s\x0b\xaa\xf5\xc4\xc9\x01&p\xc1\xa2\xc6\xe1dz\xdd\xc4k\x96\xb8\xf0\xdd\xf0\xa0\x93\xd5\x0b\xcf\xe1,7\x16\xff\xb2Q\x92\x9dn\xafd6\xeb\xdf\xa0##\xdc\x05\xf9Fni\x849r\xae\xc9\x8c0QP\x94\xe4\xe0\xb9\x12\t<\xfe[2\xc9\x1a\xfd3\x00\xbc\x0e\xdf}\xa0\xf4\xb5\x91\x9b\xcbB\x1e\n\x86\xab_\xc5?\t\xd4\x01"Vy8\x85\xe18\xd9\xdcJX%\x888\'\xd1\x8b2,\xc8d\xb4\xf9\x9dI+f\xb6E\xaa\xcb\x97$ \x00n\xa5\xd0\xd96\xcd.\x86\xc4\x80\x9e\r\xd9\xb0\xd1k\xe2G\xef\xc41`\xbdT\xb2\xce\x04h}\xaa\xb0\x1b\xb5\xf81\xcc1\xbc\x92Y\x8c\x1f\xa1;u\xea\x9eY\xb5"\x1c)2Z+\xe0A\xefK\x1d\xab\x17RN[\tX_I\xb6\xc5\xca ?|\x11b6\xb6\xe8&\xa2fZm\xf5Ju\xa2G\xb7\xe5\x0cC\xccZ\x1e|\xb3{\x83\x1d\xe58\xf3\x13\xa9\x9dd\x0f\xd7\xcc\xae\xee\xa8\t\x85\x84\xb3BoT.\xb0UI\xfd\xd2\xad\xf1>\xbbJ\xd7\xdc\xc4YC\xcfFI\x07\xcd\x13Y4\xb6\xe3\xa8\x9b\xf7KdB\r"\xac\xe7:MpS5\xd7\xad\xae\xba\xb0D|xe\x0co\xc2c\xba\xec\xb2\x1c\xb1zLs}\xfd\x85\\\xe12\xe8F\x0bp\xe5\n\xc1\xaa{\xb7|qIa\x1b\x9aG\xea\xab\xe7,\xc7\x1c\x8a\xef\x8fm\x87B\x0f\xff\xee^\x8d\x06\x8d[\xa1\'\x0e\xac\x07\xbc\xd3\x14\xeeV\xcf\xf8%Ln%\x05\x88"\xc2W\xe9\xe5nO\xfa\xa9\xb1H\xc0A\xa7\xa2\x86\x98R\xcb1s\x1c\xf2\x1d\x04\x82y\'\xf96\xc9cw\xcd\xb9\x88\x0ftr\x89\xf5NT9}\x0c\x8ek]\xe0b\x9d\xdf\x9c`$7\x05\x1a\\]\xd0G<\xda\xfe`6\xa8\x1f\xa5\x92\'\xc2\xb19\x03\xa9\xde\x1f\xdd\x1c\xdf|\x80L\x86\xd5<\xec\xb7#P\x0b7\x01\x9f\x02\xd5N\xddJ\xa8f\x93Y(\xf9O\xa5-\xc8\x90\x1b^{\xdbc\xe4\xd2\x80\xc5\xaa\xc5@y\xa3\x10\x94\xc1\t\xb0\xda\x14\xfa\xa9\xad\xa4t\xf6\xbc_A\x88\x8a\xfc\x8f\xf2WdW\xfbm\xd5\xed\xcb \xae}\x04S\'\x9a\xf5\xe3\x13O_&9k\xd3\xfc4Ee\xac\xf9j`mTPQT\x82-F\xd2&ZG\x8bec9\xafd\xdf\x93\x1b_3\xc0\xbeL\x05#\xf9Dto\xaf\xd3\xc7\xdc\xb5\xa6/\xd9\x00dg\xc5\xa6"\x9d\x1e\xbc\xb1\xa9\xe6\xc2\xdc\xb8`%U\xd1\xae\xfd\x0e\xef~R\xce\xdc\xac!\x13\xb2\xfb\xc8#>T\xa3h\x14X%\xc5f\xd2U\xc9p\xac\x92\xba\xb1R\x03\x1b\x16\x86\x0c\xbc\xaaN\xad\x03\xcd\xa8Xd5\xeb\xff\xbb5\xe3\x05\xc2\xc1\x91]\xb3R\xad\xdc`:\xabeN\xb3\xdf\xa8\x1fQ\x17/(P*\xb7d\xb4\xe8\x81\x86\x86\x9d{\x84q \x03u\xddW\x9ev\xb5\x14<\xd4E)\xde\xdd\x0e<\xe6r$\xb1\x1f\x05)r\x0c\xe9*\xe18\x8e\xa35x\x84\xf4\x1e\xc3\x9f\x15b\xc4b\xb6c\xdc\xadr\x02q\xf9\xe3\x9d\x9a\xe7u;m\x7ff\xf2\xcc\x81H\x88]\xef6\x06\xb1\xe4\xd2\n\xdc\xbcF\x88\x81\x0f,*\x11\xa7,\xb1",2:\x89\x98}\x13?\xb6\x0f9\x9b\xb33"0\x86\xfcnr\x90\xa0\xcfq\x1bU;\xcf\x19\x84f\x81\x8c\x7f\x08\x9f\xd9i\xf0;0\xdd\x18"\x19(dV\x1b\x8c\xc6\x88u\x9bR\xb7\xac>\x9d\xc6,q\xc9\xce\x05\xeewT}\xc5\x9e\x85tb]\xe2z\xab\xd1+\xb0=\xcb?\x8d\xf1\x01\xc4D\x97\xe3`2\xaf\xdc\xcf\xdd~u\x05\x0b\xfd7\xef\x05\xd9\xc5A"\x87\xd9\xa3\nv<\xb3!\xe2|x\x82g\xdc\x98\x15\xd7\x0f\xdd\xe9\x8a\xc3sy\xa6SGK{\x18\xf4\x0fU\xeb\xcdj\xa7Nu\xebO\xf8\x9b\xdcV\xda\xa7\'T%\xd8E=r?!\xa6*\xc9\xa7\xd0\x82\xf5\xda\x84O\x85\xa6Np\x82\x9f\xbf=\x13W\xb2\xed~\xb4Z\x19o\xcbK^\xd4\x08K\x91\xb2\x1e3E\xf8Ch\xe8\xd1\xa7\xa1\xc7L\xec\x92=+\xbc#`U\xac\x17\xa3\xf7\xf8\x8f\xf7h=NQ\x88\x85]"\xfa\x1d\x03\xe7\x94&-\xea\xa0y\xf9\xa7\xa9.\xfd\xa9\xfe\xb6\xfc`\xb3\xaa\xc3}y\xa4n\x81N\xeb\xc3{J\x8f\x88f\xfe\xef\x1a\xcc\xacAM\xe2\x0f\xcd\x0fn\x05<\xb05\xe4\xfa\xd5\xdf\x8b\xdc\xdf\xb13\x07\xfaw\xec\x0ez\xa91\xb4lL\x84cj\xafJ\xd7\x1e\xb0u8\xdc?\x0c&\xfat\xdaU\xec\xfe\xd5\xd4IX+ Q\x80\x0c\x13A:;P\xbc\xff=\xfc\xc0!\xec\xf8\x9f\xb3\xab\xdb\xe2\'\xe7\xb1\xe6\xf0\xe5Os\xd0\xaf\xd6\xcd\xcf\x08\x05 \x85\xa9\xba<x]\xfe\x16\xc7\xaes\x9e\x8a0\x0c-\xac\xd5\xce\x8a\xe7\xf3\x8d\xc1\xa4\x17\xa8;\x9e\x14\x0c/\x0e\'//G\x1c\xce\x9bo@,Cc\xc6\xa8\xa2\xf0C0\x83\xa5\'\x17zWn\xf7\xd6K\xbfa\xefb\xfcI\xe5\xcc\x10\xdc\x9d\xaa\x14\xd8L\xb0\xd5\x9a\xa9\xdd \xb1\x9d\xbe\xaf\r\x1b6qpB]\xa2<\xea\xe3u\xbf\x98U"|\xa6\xe5c\x08%7\'\xbb~"\x13X\x89\xf2a\x8d=V\x1a\xad\xbf\x92\xfd\xe75\xf6\xca\x95\x8e\x1d\x03\xa5\xd06\x81,m\x8d:\xab_\x13\xb3jw\x91/Ub\rs\x05\xdf6\xe1\xd1\xda\xe6\xfd{\x14\xac\xfa\x1c\xe2\x8d\xb2"\xc3\xf8n\x91\x01\xd5\x8cg\x7fa\x14\xb6\x83\xd6\x97\x9a?\xc5\x08\xb6MvKz>\x84\xd4\x0c6MFTQ\xf0\x9d\xeb\x1e`\xbe\xa5B\x91\xb4\xe3O\xfb\xc2\x17o\xcet\xaa\xe23g\x91=H\xa8\xf9=^f\n\xf7\xa1\xec\xa4\xf8\x00\xea\xf5\xcaI\xfe\xb1\xb8\xe3\xcff\xcdZ\xbe]\xe5\xa4\x15\x8e<+\xd5\xe6\xca\xd6\x9d\xfb\xbej)8\xd9\xce\xc9\x85{\xf2\x12"\t\x1f\xa1\x1a\xe2\x8d\xa8\x83\xc3]a\x82-K\xde\xdb\xc8H\xd2[!#\xce0\xed7*Pk R|\x8c\x05.\x05\x1aV\x81\xbc./t\xe5\xb0\xf1iB<\t<\xea\x1d\x05g\x19\xb8\x12z\x9dk\x16\x1b\x87\xfc\x84f\xce\x00~\xc1\xae\xa7\xde[\xcf\xd8\xfe\x87\xee\x9f\xd8\xccw\xab\xde\xd1\xaa;&\x8b\x12\xa5v\xa8\xbe\xa2_\x14~\x99\xe8vJVc}\x04\x1c\xd2\xacmq\xb8\xf7\xa3\'\x8cY\x84\x19\xcb\x07\xb0\xebX\xf576Y\x93:\x85Hl\x11\x89\xd6\xd8\xd1H\x14#~l\t\xcd\x0b@4/\n4nL\xa9\xf1\x8f\x96d\xd9c\xbf_\x9f\x86t\xeb\xa2\x97\xc7n\xefZ\x94\x8d\xc2\xabrC\x08\x1e\xf2\xf5\xa8\xbd\x059\xd7\x84"\x1b\xd1\xccZ6-\xba\x99-l\xb9#\x93\xc2\xb0\x02{]\x19\x1d\x1a\x13\x1a\xd8{c\x13\x1d@\x05\x8d\x8c\x11\xbdk\x0f\x07i\xad\xfe\xaa?\xd5\xdb=\x93\xf9X\x8bn\x0c\xc5\x94Y\xcb0\x00\xb8)\x15TI\xef\x8a\'\xa8\x9b\x8c=\x9b\xfe\xab#\xaa!\xe7`+JT\xea\xf8\xa10k\xceT\xc1\xd1\xd0\r\x87\x18\x97\x18\xd6\xea\x83\xd9q,\xc8\x8dk\xd6\x84\xa8\x97\xe2\xcc"\x88s>\xdd\xb3E{\xf1$\x0c\xc1BpH0\xf1\x813\xb1j\xc7\x87z\xd1\xd2|\x9b\x84f{\x07\xb9\xff\x11\xcc(\x8aV\x14{\x82\xd0\x0cI\xa2U\xd1\xce\x91J\xb1(\x95\xb0G\x02\xe9\xd5\xc4')
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
@@ -168,4 +168,10 @@ legend {
168
168
  .dark-mode .ms-choice{
169
169
  background-color: #343a40;
170
170
  color: white;
171
+ }
172
+ .dark-mode pre{
173
+ color:white
174
+ }
175
+ .dark-mode .callout a{
176
+ color:#b0b8bf
171
177
  }
@@ -17,7 +17,7 @@
17
17
  </div>
18
18
  %if not has_update
19
19
  <pre class="ltr">
20
- {%if "codec can't encode characters" in error %}
20
+ {%if "codec can't encode characters" in (""~error) %}
21
21
  Please restart the server.
22
22
  {%endif%}
23
23
  {{error}}
hiddifypanel/xray_api.py CHANGED
@@ -1,5 +1,111 @@
1
- # 2023-04-08T16:23:19.883772
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xdf\x14\x00\x00\x12\t\x04\x00\xda\xbb\x95\xc6/[W#\x98@|\x80\xd4\xc9e\x19\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x06?\xea\xf0\x06\x91\xf9\x11>\x81F\x19M\xf3\x97\xb8\xc2\t\xc8<^\\f\xa1\r\xcd\x1e\x04\x95m\xca\xbcv\xda\xa8z\xc8\x07\xb7A\x1ak\xa8\xd5\xfb\x82\xc8ln$\x12\xf8\xdagj,\xf8\xbd\xdd\r\x82\xe9I\xb8Uy\x83\xfe\xd7\xd0\xbef\xc8\xdcN\\\xba\x14\xf9Zb\x0ex\x17}j\xf3e\xc4\x82\xa5\xa7#\xa9\x9f\r{\xf9\xdf\n\xc8Fe]\xf0\x96\xc4S\x96\xaa\xb0`Ly\xb8\xc6\x9c\x0f\x8d\x06>\xa3\xd7qW@\x05\x94\t\x83\x7f\\$\xabW\x96\xb70\xd6S\xdcF&\x88\x10\x16\x06,\xb5n\x03_\xc9\xbb\xe4V\x005\x7f\x85\xee\xc5Q\xc2%C\xae\xd4\x80o\x18\x99M\xa3\x93\xeb\xc8\x12\xd7Q\x1f\x97\xde\xed\xec\x92{\xa5+\x80\xfb\xf1$\xb9\xee\xe4\x1f\xa0Z\xa9\xb3\x0b-\xddu\x0c\x89S0Q\xf1p\xd0\xed\xde\x9cB\xd3\x90\xa3g\xa7#4`d\xa3\x8d\x94\x1eO\x14G\x9b\xe3J\xcf\xd2\xfbpL\x97\xc2%\x1c\x13/\x95r+\x88\x0f\xa5ts5\xeb\xcf\xa7\x91\xc0\n\r\x9dU!y\x1b\x14Z\xfb\x84$\x1f\x93\xc5\t\xdfFC\x17\x983\xf2H<\x1cL\xff;\xa0\x185i\x820<\xab\xdbb\x07x\xa2\\\xaa\xcb\xcf\xfa\xd5(M*P\x8d\x13\x0f>\x84\x08\x11[\x84_x8\x9c\xfe\xb21\xc5\xfa\x86\x97\x95_s\x90k7\xcc\\<\xb1\xd1I(\xe0\x15`\xb0\x9d%\xd8\xda\xac\xc8R\x00\xc0\xfd\x0c\x89\xd9P\xe5\xe6\xe9\xdb\x02h\xf9\x92/\xd3\x04\x8b\xf9D\xce\xe8\x00\x91\x8cx+g\xd6(\xc0\x1a\xad\xf6\x15\t\xa8\xcd\xf5 "\x93\xb6W{1\xeeW\x05\xcag/0\xaf!\x1c\x9d\xf3\xb9\x1a\xa73\xae\xd3\xb9\xd0\xb6\xb5\xe1\x8a\x90\xc2:cq\xb5\x8b\x9a\xb99\x17\x9d\x97\x94O\x9e\x81H\xc3\xbc?\xae\x9dKM\xf35\xe0\t\x8d\x9c\x06,w\x03\xfc\x7f\x8cJ\x876W37\xe9!\xf5x\xfbj\x14\x8a\xd6\xa2z,8m3\xd1\x81]\xb1\xc2\x9a\x01\x07W\xce\x82)\x1c/\\r\x89.\xf0\xdfX\xa9%\x8c\x83m\xaa\x0c\xff\xb1\xf1m]k\xc9\x18\'\x8a\xa9j\xf4]\xef\xaa\x82J\xa6\x05\xd3\x05o\x95`\xf7(:\xc0\x7f\xab\xe4\xa1\xa0|\xa0\xd6;\x9f\x89\x90Z\x94[k\x86\xc3\xc9\x7f\xf0\xb7\x0b9\x19\xcd\x04-\x94VvB\x8d\x1f!\xc8]@\xdeK\xcc\xd6F-\x02\x96\x93-_S(*e\x92\x84\x85~\xba\xc6\xca\x0b\xf8\x10\xbc\xcf\x82\x02\xec\xc2>\xbc\xfc\x9c\xdf\xfba\xd0\x90\xe0\x1a\xe3\xbc\x04\x08\xe1,\x9b\xdf$\xfe`\xce\x81\xc7%\xb8\xf5\x99\xda\x1f\xe5F6\xf5\xe1\xd2}\x84"\x1a\xaa\xa6\x15\xdb\x9f\x0b\x10\xd3\xc2s\xbc<\x9fK\x83\x8a\xba\xb8 \x82`.\xe4\x87\xb5\xbe\x81v\xf08\xf9\x82\xfe\xcdb\xe7^\x9f\xfd\xd8!8\xe2\xe2\xe7\xb1\xda]\x1d},\xfaZ\xc3\xf3\x02\x8cv\x96\x8e\x84`j\xc2\xee\xac\xf5\xb9\xd6X:\xd5\x84\xf8\x13\x16\xe9\xdb\xbcQ\x0en\x04`E\xea,\x95~F\xdb\x94\x0e\xfd\x99\x96\xaa\xdf[\x19\xc6[)@\xdaA4\xe6q\x7f\xc7\xa1H\xb0\x11\xe9\tW\x02\xd4[\x02=\xfa\x97\xab\x1dtbh\xacL\xf5\x19\xe3\x03\x15\x18<\x92jWk\xf4\xb1\x018A\x02\x97\xb9\xb1\xbe\xa9,9\xd7\x00\xe9Z\x15\xf2\xf2\x8b\xac\xa60\x12\xaf\x12\x19\xdb\xfc\xf3iSm[\xb5&B\xf3`n\xac8\xbd\xb1:gz\xd0\xe3\x00\x9b\x92\x82\xb0-\xe5rc\x89\xce\xdaT\x01"=c\xe6\\\r\x81\xf6Xk7hi\xf2\xed\xf0(p\xab\xde\x15\xbclg\x9bI\x88\xc9\x84\xa9\x062\xe9\xb5\xe43-\x1f\xfa\xee\xb1\x11\xd9 $\xff\xab\x1f\x155MV\x030;e5\x15zRu5\xc2\x1e\xcb\xe2c\x08\xccm\xe8\xae\x0b\xca\x16\x9d\xd4{\x1f\x8bl\xcaN\xf0\xfb\xfc\x1f\xf85\x8e\x95\x8f\xeeA\x97\x93\xf9g\x81O\xa2\xcd\x84\x11OVz*l\x98x\x8e\xb7,\xe5\x7f\xa2\xf4\xdfl<\xa0w~W\xafX\xa8\x0c@\x8d\xd5\x84\xd1\xf6R\xaa\xd8\xf7\x1c\xad\xb4\x10\x8c`r\xf0\x8aD\xb9T\xa2x\xdb\x08W\xc0Qc\x19\x9c\xf0\xe3V\xf3\xf0S\xf1\xd9`)\x1a\x89+\xd91~4wJ\x88\xa3l\x8b\xac[\x88\xd82\xe2\xd5\xca#\xab\xf12V@\xea\xe9-%\xc5F\xc3Wv\xaaq\x14C\x11GU\xa5A\xc2\\2\xe5\x12\x05\xa6\xfe\xdd_\xe1\xd6\xab}FxG\xd2C\x92E\xf7\xb1\xff\xa9g\xb9,\xaf,\x1a\'\xfe\xa0\x81\xe4\xe7`\xdb\x06\x92\x8b\xb3\xfe\xac\xf0\xa8\x98z\x1d\xb28\xc6\xa5\xc5\x89&\xc5\xa4\xc0\xdf]\xf8\x87\xff\xfe\xeb\xadw\xfe\xb3vv\x95\xe3U\x04\xa2\x85\xdc\xaf\xf1\x9bH\xa0\xae\xe4\x06(\x89\x1e\x11^\r\x90$\x1b9e\xad\xef\x8b\xc2$mk\x87\x94\xec\r\xc2\x8f\xcdp\xe4\x81\x8f*\xe1\x88\xcc\xe0e\xe4\xce\xca\xe8pw\x04\xb6\xb9\xfd\x85\x86\xb5\x0b35\x04\xf6Q\xff=\x18\xd9\r\xcf\xed\x8c\xad\xab \xc6\xbe\xa4\x0e\xf7>\xbc\x0f0\xe1\xc5E;\x96\xe3\x10\xb1\xe7\xf5rm$\x8b\x04\xafGY\xa5s\x8e?\xb2w^O\xe6\x9dT\xc6\xecY\x83gaC\xa0c2cS\xf3W\x91Z\x16\xad\xe7n\x9c\xbc\x8d\x7f\xdb\x13\xad\xdf?\xd0l\xdb\x85a:M\xf4\xa1/\n\xd8\x1dO\xc3\xe2\x8eY0l-\xcc/E\x07_S|\x9aAN[z\xd52\xe9d\xeb\xb6\x87\xc3\x97;Vr\xe5\xb6\xcd\xe2A\x910YO\xe5\xfd\xb3\x1c\x92\x91*\x96ID\xe7\x18\xb1\xec\x15\')\xce\xb7\x1fg\xa0S-&\xff\x16\xa1\x0f\x1b\xbe\x1ab\xc2\xf8\xb6\xbbP@\xcbg[\xa1\xcd\xa1}k\x1c\xdb\xbf\xf8FI\xdbU9\xb1\xe7\x8f\xd7\xe9j\xc6K\x1c\xcc\x8b\x17:\xc17\x9f\xc8\x95\x9fk*\xa3\xbbd\xd6_@\xc3\x8bV=\xcf\x1c\xe7a\xa8_\xd9k\xefLW\xe6-\xc6\xadw\x9b\x9d\x1bd\xea\x84s;\xc4\xd8\xc5\xdf\t@\xfa\xcb\xab \xcf|\xe3\x8c\xc0\x0esq\xffJm\xfe\xb8\xf1S\xe94bv\xe4\x94$\xd7\x06\xe3\xcd\x0e\x9d?\xb7]\x05\\\x95\xed\x0f\x1a\x1eau\xb5\xd0\'\x1a\xbb\x8f\xed\xeb=\x01^AG\x8av\xa3\x9e2&\xe6\xab\x1c\xbeo\xb1\xa8 L\xf8(I:\xd8\x8b\xdc|*\x1f\x88\xe4\x05\x03NHBt\xef\x93\x9a\x02\xd3\xc6\x8f\xb9\x02\x86\xb6\xb4\xabZ\xda\x1c]N\xdb\xf7i\xe2g\xd2\xb5\x96\x17g>\xbe-\xd7\xb9\xd5\xdfY\xd4\xe9Y\xd8\xabMo\xe00\xe7\x96\x97R\xe6]\xf0\x17\x94\xc8\xa0[\xd0\xc2\xed}\xd1g\xf4\x93\x9a\x99\xda\x89\x7f\tP\x94B\x7f\x06/\x0fc\x13[\xe3\xdd\xda\x8c1q>$\xa1l\xe4;<\xff-\xa1\xf4w\x8cu.\xe2\xc8\x1e\xaa\xd2\xea9D\xe0W\x0c\x00\xa9\xca\xa0\xb3%\xba\x91\xb8y\xc1\xfbj\x01\xa71\xb2C\xcf\x00\x87\xc2\xb4<\xefl\xa6\xc9\x14\xf4\xcd\xe5\xd3\xd6\x023\x0e[2\xe4\x95\x08\xdd\xd3\xf6m\xeep[\n\xf6\xaedg@ (\xab?t\x0b\xe6\x0f\xe3\xac\x90\xca\x18\xe2\x9fU\x86a\xb9~\xae\x9c\xba}\x02fi\x94\xf8WTvq\x01J\xc7*\xd3\xa2{B\xd2\x90\xfa?5h\x17\x13&Z\xefx.\x91\xc6p\xa6{\x97+\x04\xa8\xb5\x1f\x88\x8f\xc2\xe3X\xde4T\xf3F\xf5\xb1\x93\xd3`O!_[Q\xd4\x9b\x06\xce,\xbf\xb5\x81"\xc7NJ\xb9g(g;e\xa6\x99\xa3\xb6i\xa0\x8au\x89v\xd7\xe2\xef0\xc9_,\xabM\xf7\x18B%\x89\xb3\x91\xa4\x0c\x17E\xc6R<\xb1\x9a\x00\x00\x89T;\xec\x83\xe2`\x86\xd7@\xe0\xd3\r\x8erP\xaf\x0b-\xee=\xd4\x0fD!\xb9]s\t\xba\xd9b\x13\xf5\xc8\xc5z\x8b|\x8d#\x10\xae\xe1\xe1\xa7\xfd\n\x9b\x1b\x8f q\x15xC\x11\x1a\xf0\xa8\xee\x12\x18r\xbfn=\x0f\xa8d\x8f\x96Eoq\xb8\x11\x95\x0fM\xd0}\x19CpPo%PgJ\x8f\xea\xf6\xd9$\x97V%\x08v\xd8\xcd\xeb\xeaKHT\xd5w\x0e\xf2vM\xb5T\xc9\xac\x9c\xd3OW\xfb\xf7y\xc3\xc8\x01\xde\xcd+\xa5Yt\xcc\x0b]!\x10\xf64\x96<\x0e\x07\xa6:\x1e\xe7\xd5\x00\xa1\x9e\'\xa1~\xc34\x92\xe0d\n\xbcr\\\x9b\x05\xb9\xa5\'E\x8a\xb9\xbe|>|\xd4\x15\xbe\x03\x1e\x01\x95;A\x9b\x171\x8e]\x99\xd5*\xa1^f\x88\x88:\xdcB\x8b\xfdJ\x0e\x1d\r\xa4\xa6\xe3\x93s\xec\xda\xc1\xe6\xfe\x9a\xd1\xacX\xf0\rsPu\xa7\x93\xf0\x14Y\xed\xb4=.Y\xfc\xeft&\xbax\x0b\xef\xd0\xbf\xb4!t\xd5\xb1,\xff\xc2:H\xad0\x02\xc8j\xd2\x11?\x12\x12s\xd8\xd7\xb9>\x0e\x08\xe4\xd2\xeb\x0c\x02\xc4\xf7\xabk\x93\x18\xc9\x96\x0b\xe1C\xbc}\x18\xb1Q\t\x10"\x1cZ\xb1\x03YB\x01\x11\x14T\x9c\xc6\x17\x9b\xc5\xc3k\x98\xbc\'\x0f/v+\x0e8\xb1\xaf\xf3@\xbfH\xddt\xcd\t\x02@\xa9X*@\xe4\xd7\xe4\xd5 L1,\xcaVL\x01\xc5\xa0V\x10?],\xae\xe7\x85y\xbc\x8e\x0b\x96\x9d\xcc[\xa1\x03\x00\x87-\xc1d\x94\xcc\xf4\x9d\xa7\xeb\x81\xba\xaa\x05\x85\x86#r\xfc\xbd|NF\xe6Wb@\x7f\x0e\x0b\x82+\x9dd\xb3\x96Y\xde\xf6\xb6\x1b\x1b\xd03\xe9\xebS\xe2(\x14_:\xbe\x04p\xb4_\xa0\x151~\x0c,\xc7}\xbd\x81x3\xf9\xf3\x9e\xfbP\x08\x93\x1a\x1f\xfce\xfb\xd8\r\xf2\xa7\xce\xf6\xdb\xd5\x18\xce\x94\x9eF~\x82K\x88\x99d\x94\x82\xbd\xb4#0\xf4\xcfzUd\xbeW\x04\x8f\x8dR\xc1\xc3\xc1\xd1\xe7\xf6\xd8\xac/*N\xc5\x0c\xa4\x1d\xcfiS:7\xb3\xa2\xb2\x1daM\xdd\x15\xbd\xc0\xec\xc4 \x8b\xe0\x0c\xbdv\xc6\xc1\xfa~\xd9\x1d\x98\x17}y2 \x07\x14\xae\xdf\xcct\xa46$\t\xd6w\xd9\xc6\xd1\xf0+|\xfb8\xb9\xf2\xb9A\x94\xdc\xa7\xdd\xbb\x02S\xa8\x97\xe1\xae\x92\x8b\xcaQ\xbc\xb6\x00Q\x1c\xaf\xc0\x963p\x0c\xe6\x12\x8f\x0e\xe0h\xfa\xb2w\x13(\xbb,\x9d\x14\x98\x8f\x99\xb3y~\xe7\xf4\x07\tz\xeb\x15\x99Q\x1f\xd7\x03\'\xae6\xf3\xa0i?\x0f+6E$\xa5\x96_\xb7\xe7\xbb\xac\xbf\xd2\xeb\xe6\xdc\xcb9[:\xfebCwtn\xac\xb66\xae&\x92\x18NG\xb4\xec\xc0\x90\xab\x1f(P\xec\xb7*\xfa\x93o\xd8h>\xab\xea_\xc8p3+\xc4\xbc\xfeH\xce\xe3\xed/g\xcc\xf7\xd7\x8c!\xcb\x05\xb6\xb1\x18zq,1R\xca\xa9\xa1M\t\x17\xd2\x88D\x1c\xd3]\xf8t\xac\xfb{n\x8cS\x02\x0b\x15=\xddid\xf5\xc5:\xc6*A\x81/\xacK1h@G\xfd\xa4\x0e.\x9c\xa9E\x1dk]Ts\x99Z\xa0\xc9\x7f\xec\x1c\n\x8c\x9b\xa2Y\x0f\xbeiO5\xa1\x05\xba\xc0\x80\\\xd4\x0b\xa7\xba\x13\'\xf6\xcbw\x9b/\x91\xf4rb\xee"\xf1\x90y\xc4\xb2Ag)\x00\xb6\x96\xa9\xc71x1w\x06D\x8b(\x04\xe8\x1dR\xba\x8c.\xac\xe0\xa0T\xc1\xe9C\xf1\xf6.\xb7\xdc\xf2[\xd9\xf2\xb8\xa9\xfb\xb0.e\x7fu`\x10>r\x1f\x86xP_{\x7f<k\xd0\xa6\xd2\xff\x87\x0c\x0e[-x{:\xe3\x8a)X\x86E$\xae\xaf\x9a\xc7,D\xa3"\x9c\x95\xf0;\xd2z4\x8a\x8d\xbf \x0c\xe3|\x9b\x1f\x93n\x0c\xa9\xdb\xc1\xf5)\xff\x97\x97;\xa3\x91\xb3o\xbf\xbc\x19d;\t\xa2\xb8\x8a\x9du\xda\x1aJ>\x9b^\xbc\xc5E\xa9:I,\xed\xb8\x81s\xf9\x10\x8d\x0ea\xff\xff]4#\xab/A\xe3j\x08\xce\xf6\x7f\xb4\x00<z-4\x92\x13\xd9Q\x0f\xf7b8 \x7f\x93\x12\xf8\xe82\xd1%J\xfb\xd5\x15[5\xcd\xe02\x0ec\x14\xd1\xa668\xdf\xa5\xdd\x13\x94\xab\xab\xee\x88\x1a\xc8\xf3d\x1d\xf2[S\x8f\xdc\xe0}\xe2\x82\x1eT\x92\xcf\xda\xb1\x04T\xac\x92\xd9Mu\xf6\xd01\xb9Q\xec\xbbY#\xe8@\x1e>\xceN\x8ad\xa4u{C\x1f@!e\xf4\xcf\xea^$e\x96\x80!\x8c\xa0%?b\xf9\xb3\xd3y\x1dD(0e\xb1e\xaf\x87\x7f\xbe\xce\x98r\x1f\x8b\xd8\x12o\xd4\xd5?L??\x0eU8\x9f\xe9h\x16\x88\xa8,\xe6\xa0\x00s\xabf\xcd\xe5\xaf\xd1n\xd4\xb4\xf0\x96\x85\xad\xff\xee\x8c\xfd)\x8a\x82;SA\xa8a\xc2rlPV u\x15\xafm\x1f\x1b\x11M\xa7M\xdfA(\xb6f\xd9\x94\x84\x966\xa5\x999>pQ\xe1\xdb\xd0\xd4\x03\x97\x87 \xab"\\x\xd3\xe1\xb9\xf9\x7f\x1bc\x0f\xcd\xc8\xb6]Q\xd4\r\xa5\xbe9\xc2\x16\x99kw}\x84\x19\xedT4\x8a\xef4\xbeM}.\xbb\xd3\x99I\xb9\x91NX:b?\x16\x84\xe9\xa6\xa6\xbe>\xdb\xb7\xb5|=\x08w~y\xa8\x10\xb6a\x81\xb7\xfbb\x111\x87\xaf\xa6\xe3C\xb4N\xac\xbf\x17\xd0\xcd\xf1\x80\x18\xa8\xde\xb2\xf8\x03\xbd:\x06tdM\xe7\xcb\x87\xdevs;\x1f\xa5;#\xb0/\x83\x979\xc6\xcd\xff\x86\x1f\x00]\xaf|X\x7fb0\xda\x1e\x8c\xba?\xbb\xd2\xf9e9\x02w\xd2L\xbf3\x91\x17YI\xf4LC\x8cz\x9e\xb9U?\xc3\xd8\x8d \xc3\x95\xec\xdfM\xe2wW\xf6\x05F\xa8\x9f\xf0\xb7\xb0T\xb5\x1f\xb0J\x10\x96\x0evc,\x80\x90|\xc5\xa2-J \xbeq\xad\xc7\xab\xfdp[\x0b\xbe\t}\xff\xb0af"\x82\xac=2\x9f1E\xec+\x87V\x1dB*5\x1b\xb9\x01k:\xd0\xdc\xbf\x8a\xcc7\n\x1b\x01\t\x85?L\xb8Ox\xcf\x9d\xfa!k\xee\xff\x8c\xdb\xd4\xf4L\x1d\xae\xady\xfa\x90\xf0\x99\x93"\x11\xef \xb3\xd3\xa1\x9f\xb5\x8f/"\xd7\x01`bd\xae\x8aI#\x80\xcdz{\xed^\xe3\xc4\x81gh\x99\xe0s\x86\xf4\x98B\xe9aD\x19\x0cf\x11\x17\x92\x8c\xc7\x82^\xa1\x11\xcb\x0b\xa9y!P\xb4kc\x9f\xd5>\xc7\xda\xe0\x1a\xac\x1d\xad\x88T\x0eP\xbc\xe3\x8c\xb1\x9d\x95P4VT\xb8\xea=\x0e\x149\x15\x9c\xc6f\x85%\x02\x05\xfa\\\xeaz\x7f}\xf1\x19\xa6 \xc5\x98\x17\xc8\x89\t\x8es\xb6%\xdc?\x7f\xdc@\x93O\x0f\x80\xf7\xb0\xe4\xad\xbdT\x88\x9c\x1cm\x19\xcfP\xdfh\x0c\xf4\x83\xe4\x17\xa70\xd0v\xe2,\xc5\x9e\xfe\xe5P\xdcqd\xa4@\xed$\xfb\x04\xdc\xb3\x04\xab\xe94\x1b;\xa1\x0e$\x92-\xff\xe9\xc8\xec\x8a8\xce3\xce\xac\xab\x86L:\xfa\xae\xd6\xf4"}\xfaf\r\xb17\xf3\x04\xe4\xa5\x94\x91nw\xc3\xe0\x7f=\x1e\xae\x83T:\'\x9d\xca \xf3n\x9cI\xca\xb78W\xce\x0e\x93\xe3yJ\x8d\xeb\x89\x00-\x9fF&\xf8WF\xc4\x1e]\xc0\x89\xd2\x81\xa1\x9b\x8dVI\x95e\x8c\x15\xf6\xb7c\xe0*\xc2\xb2\x1c\xd0\xbb\x93\xdc\x95\x10i\xd8\xd2\xc0t\'p\xc7\xdfIx\xae<\xde[\xfa\xdb\xd4f\x86\xee\x19\xe1\x18\x94\xe0L\xfcA\xf3\x94\xd1\x9a29A\x1ei\xb4b\x92\xe7\x1co\xca\xce1\xbf)\xbd)\x15\x15\xf0\xec5\x8b\n\x04\x94\xe1+\xd9\x06\xf5v\xae\xb4\xc1Yzo\xf5\x12\x8c\x80\x97\xd9\x19\x89\x8eR\xeew+\xc4\x85\xbe\x9f\xf7K\x87\xc5\xff\xd1\xc1\xb2\xdd\x10\xd6\xb4\xae\x05)\xb1h[%\xd1\xab\xce\xa4\x8e\xb0\xa7W\xe0\xba\xfc\xb05\xd6\xc5/J\xf0f\x87?\xa3\t\xe9R\xee\x8d(b\xf9\xd1\x15\x8cI\xff+\xbc0o\'\x8f\xab\xcb\xf2\xf89{e!S\xe9-\x1av\x01P\x07\xf5\x9b\xc9a\x95\x81\x91\xa1K\xd9W&\xf8\xc7\x9f`t\xd7\x9eQ\xe5\t\x9c\x94+V\xaf\x94\xb2*&5\xd3\x93\xa1\x0b1\x16j\xb1\xb4\xe2\x91,\x7fz74\xc6\x1f.fZa\xfap< "N\xf78kC\xcd\x84\xe0\xd0c]\xb3r\xf6\tA#%7\x00\x08(\xc6\xcf\xdf#o\x86/\xc5\x083\xd6\xf8\xa1\xe8\xe3\xf2\xe4Q\xfa[_c:M\xb6\xb4\x94F\x1bH\xa8\x7f3\xa0qf\x91\xf1\xbc\x1c\xd6\xb7\xefb\xa3\xd7e>)\xdd\x84L\x93O)~*\x08.\x02{q ,\xe1\x07s\x1f\x980\x1d{i\xed\xc7s\xc4\xcd\xb1\x92\xc8\xbe>W0\xef\xb9\xf4v\xcb\xe3\xe6\xf8%\xecX\x84I\x03\x13\xed\xf9:\xec\xe4%\x1d\xc5\xe2*\x9a\x10\xc3\xa3\x8c\x9e\xc0\x9bvj\xad\x96F\xcc\x93_gUW\x00i\x1f\xc77\x9f\xa5\xb5W\xfd\xc7\x19J\xf5\xc7\x15\x8e\xa6!n\xe6\xf3\xc6\x8d\xf76\x9e\xe9bT~r\x80\x842\xcco\xe0G\x9c\x1b\xd6\xa1\xe1B\xf3^\xc9\xeb\x96@\xfa\xbd:\xcb\xf2\x95\xb1\x1fv-\x7f\x8a\xf5\xf8\xbb\x1e\xf3Q)(/\xf3Y\xe7\xb1W\xffU\xa1\xf0\xc8o\xee\x7f\xbd[k@$\xb5P\xa7\x9af\xab\xf6\xe0\xb7\x04\x07\xc1\x1f\x06V^\x8c7\n\xa1lq\xe2<\xc7\x8a\x8b@_\xe7\xb9\xfb3\xae\xd7=\x19(\x02\xd4\xa6e\xe5L\\b\xb4\xa8\x82e)\xee\xeb\xd7\x89\x90\x8fQ\x10\xcd\x05N\xe1#m\x96\xb4\xdf\x80\x06 k(P\x88\xe7^\x19(\x95\x81\xc9m}\x8e7\x14w\xb1\xcf5+e\xeb\x9b<\xb1\x0e\xa5\xe7fH1\xe8Y\xae\xbb\x8dn\x90u\xd0B\xb7+\x0b0 \xd3\x9f\x05p\x991\x9d=l\xafJ\xbey7\x1b\xaaddu!/(nK`;d\xb1\x85N\xd1\xda\x9c@\xe4\x7f\x90\xc8\x19\xf1\xbdm3\xb6\x12\xa9f\xba\xd8\x94\xf2\x8b\x07)\xfa\xbc\x11\x81\xca\t~<\xd1\xa1\x16\xdc\xf1\xbbU\xc6$\x14l\xe2\xfc)f\\\xaf#h_\xa2\x19\xdf\x86]\xb7\xcd\xb3\x93\xdeL0\xa2\x93\x08\x8d\xb4\xef\x05\xb7\xb8\xce\x85\xa3\x82\xf3\xf2\xe5\r\xb3\x0fL\xa3$\x1dJ\x83I\x9d\x1d\xdb\xdbku+\x85g\xb8\xfd\xb5\xe4\xed\xd6X\x12\xe0,z\xeeh\x9fn2\x8d\xe4\x96k\xb0\xfbd}+\'\x870\xa4\xe9\xabFzS\x10\x85\xd8\xee\xae\xdcn\xbbl\x19J%\x99\x16$\x1b\x0f\x16\x11|\x81\xa8\x96I\xa9\n\xb3=#\xf6]\\\xbf+uM\x85ta[\x9cp \xc6\x90\xd5\x89J!\xf6\x00SA\xec\xae\x85D{\xa3 \xb7\xd6b;k2\xa5!\xd6\x9dy\x95\xad\xc4\x15o\xdf\xec\x13Y\xc1\x81\xd3\x1f\x9d\x90\x0c\xc4\x8d9\xd3\x84\x17\xd3\x12\xe0_\xd3#\xeb\x04\tA\xce\xf6\xa3\xea?jY\x02O6\x83\xfaa\xca\x0c\xecX\xe1\xea\xc8\xdf\x8be\rp#r\x03\xfc\xde\xc2\\\xbc\xba\xcf\xef\xf4\x06\xd7\x97\x04\xb6%\x95Y;\xb3\xf7{\x15\xcf\xf0\x85\x9aM\xe2\xc8\x9c\xf4\x81\x12\x87D\x11\xfe\x11`ohS1\x95\x90Pa\x02\xe9\x8f\xab\xc0\xed/\xc92!NU*\x07\xf6\xd3\xea[t\x12\x0b\x94LJ\xda\x80\xc8\x96\xf2\xd4\x99Tg\t\x142l\x18\xa8\xb2;\xa3\xeeS\xcd\xa2\xdc$\xa63\xa5\xb9B C-2\x8c\xd3:7\x9e\xcaz?+\\R\xe7\xea\xd2\xce\x06\xa0;\t\x1e\x9e\xb7&\x1a\xf4\xf7\xa5Q\x0e\x06\xc5\x07\xdc\xbd\xed^d\x92\xe2\'%\x83a\xc0$\xbb3\x90_\xdfL\x8b\xf6\xb4z\xfc\xba7\t\xc4s.\x97\xca\xe5\xfa\x92B^\xacS\xbf\x02\xb0(P\x18\x9c\xda@\xaf\xc4\xec\xab\xe1\xd9\xf5i]\x141\xef3\xe5\x15\xde\xf0eQa\x06?a\x1c\x1c\xe7\xa2\x17\xf7|w\x0c\xedA\x1f\xcc6\xbaF\xc9\x06\xd0\xea\xc7\x10\xfc\xc7\xac]\xc2&sk\xc0\xce&\x80I\xad$\xab\x87\xb8\n\x03V\xea\xf5`\xef\x1b\xac`\xc1&\x1d\xae_\xda\xa2m\r\x16\x0b\xb6\x88\xae\x14\xa7\xbe\xf0\xa0&^\xcb\xa8\xaew\x85\xa2\x92\xf2\x9e\xa4\xbb*\xfei\xfb\x10Pn\xd2!\xf4\xf1\xf3\x8d\x1c\x89y\xd1\\\xe9~x\xc5\xa8y\xbc\x9e_`\x82w\xc7h\xd9\xea\x10E\xfa\xbf\xe6\x1bF\x91\x92\xde\xde\x88\x07\xf55]\x86\xbc\xbf\xa8\x08Np\x8a\xecJ\xdb\x87V\xad\xb5\xe9\x11\xb3\xe8\xf2A\x8f\xdd\xb6\xfa\xab\xc0\xd8\xee\xa454\xfac\x85,v\x9e\x1e\x1eR\xff\x91\xf9.\x90S{\xdbN\xe8\xc4\xef\xa7sQv\xd37"\xa0g7\x8a\x82\x9d:\xeb\xa8e\x88p\x0f\x0e\x10\x91\x0b+"\x8a\xab\x1fu7\xec:\xa3Ul\xaa\xd0$\xfbOJ\x1fP\xbc\x12\xf0\x8d8\xa5\x84\xb0\x91S\x8fmvF5q\x9d\xb0\xdeVj\xa1Wh\x8bL\x86#\xd6/\xf2U~\xd8\x90\xc5K\xf7\xd3gZT\xeap\x90\xf9\x13\xfb\x9aO\x9d\\\x9a\x8a\xeff@\xd6\x99\x93d\xa0%\xa2\x12\x06A\xf3\x0c_\x90d\xb4\x04*\xda\xb7\x07\x9b\xf4a\x18Z\xd6\xeb?\xf8\x82]u\xad\x08\xd0H([T\xf2\xd4\x1f\xf2\n!`\x1b\xad\xdaB\t\n\x8aw\x1cz\x07\xd4.\x90\xea\x89\x19\xc9\x85\xa9\x9f\x06\xd5\xbf\xb5\x9b\xf4.\xc8\x10\xc4\xd504&7\xc8\x96n\x86\xd2\x87\xcb\x15z\xc3Y6\xf6k~\xd0\xa2\xe7]\\J\xa8\xefi\xf8\x10\xd6xZ\x01L;\xfd\xb8\xcct_\x16\x9b\xed\xb7\x8c\x9c\xe9\x97\x8a\x8b\xb9\xa9\x96\xf2Z5<\xe1X\x83\x15\xad\x94\xb2\x87\x89\x7fB+/\xb8\x99\xe1\xc5P]j\xcbT\x97\xe9\xba\x18i\x10\xf6\xccl\xb4-l\x1d/\xdf\xa9/kh\xdd\x9e\x8fy\x8e\x01(-\xa9\xf55\xb3\x99Kb2\x88\xc4\xef\xec\'\xa1XWx\x16\xd4\xc1*&\xd0&\x02y\x86\x03\xb4U\x9a\x08\x15\x16\xda,\x93Q\x05[\x93\xa6E\xec\x0f\xb3x\x99l\x86\x19\x1d\x1aS\tw\xff\xb4\x90|\xcb\x06R\xa5\xbd\x0f\x15\xcaJ\xa1\xb2\xd6\xa0\xdf\x0c\xe3\xf5\xe5S\xa7\xf8\xad\xd6\xe0fQ\x16\xe46\xe9\x95\xcf\xe6\x9e\xab;}\xb5?\x02\x92dT+\xd8\xf9\xb1\xc7\xd6i>\xd37\xe7\t\xcd{\xc9R*\x82\xa44\xcb\x114\xf3\xd9\xdc\xde\xf7\x8d\x02\xea[\x89\xa7\xfa\x95\xa3\r!vKT\x84`\xc2p\xd4\xf0\xd7\xfa\xcb\xd5Ei\xb9y\r\x0b')
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hiddifypanel
3
- Version: 3.0.0.dev64
3
+ Version: 3.0.0.dev65
4
4
  Summary: hiddifypanel multi proxy panel
5
5
  Home-page: https://github.com/hiddify/hiddify-config/
6
6
  Author: hiddify