hiddifypanel 3.0.0.dev64__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev66__cp310-cp310-manylinux2014_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) 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/clash_config.yml +1 -0
  58. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  59. hiddifypanel/panel/user/user.py +233 -3
  60. hiddifypanel/static/css/custom.css +6 -0
  61. hiddifypanel/templates/500.html +1 -1
  62. hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
  63. hiddifypanel/translations/en/LC_MESSAGES/messages.po +194 -190
  64. hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
  65. hiddifypanel/translations/fa/LC_MESSAGES/messages.po +123 -120
  66. hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
  67. hiddifypanel/translations/zh/LC_MESSAGES/messages.po +123 -121
  68. hiddifypanel/xray_api.py +109 -3
  69. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/METADATA +1 -1
  70. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/RECORD +74 -76
  71. hiddifypanel-3.0.0.dev66.dist-info/top_level.txt +1 -0
  72. hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
  73. pyarmor_runtime_000000/__init__.py +0 -4
  74. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  75. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/LICENSE +0 -0
  76. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/WHEEL +0 -0
  77. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/entry_points.txt +0 -0
hiddifypanel/Events.py CHANGED
@@ -1,5 +1,28 @@
1
- # 2023-04-08T16:23:31.219758
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00%\t\x00\x00\x12\t\x04\x00\xab\xb5\t\xceZ\x80*\x8e\x02\xb1\xb0\x13\xe0\xf2#\x0b\x00\x00\x00\x00\x00\x00\x00\x00s\xc6\xb6y\xb5\x9aqLL\xd8\xb8^\xe2\x06,\xf7\xe4\x86\x0b\xfb\x0bX\xff/\x8c`,p<\x1f@\n\x02\x902o|\xe7z\xc5 \x9b\xd32\x0fxak\xd0\xdbR\xe93e\xe2\xb8\x00}Od\xb0\xcc\x866A\x0c\x98F\xedE\xcbk \xcb=\x9b=\x1e\x7fa\x9e\x9e\x922\xdb\x1f\x06\x0e\x01\x9f\x7f\xae\x96\xc7\xf12\x18\xa9\xcd\xee\x94\xe8R\xb3\x91V\xa7\xcb\xce\xa3\x19\x11\xe6\x8f\x8f\xac\xad}\x1e.e>\x1f\xe8\xf5\xa5\x12%\xc2_r\x829\x1a\xd1\xbb\x11\xe1.\xf4\xfe\xe3\xfa\xeb\x10!U\xdc\x95A\xbf\xdd\x9a\x8c{A\xf5\xbd\xcc\x0c\x04\xd5\xb6A.\xf84\x03.Y\x1d\xc2t\x00\xeb\x02\xaa\xea)\xe8\xf0\xf3\xed41\x18\x1ct\xdb\xf7\x11\xb6\xde\x99\xa2\xc3\xf1~\x9b\x89\xaa\xed\x134\xfc+\x89\x91e\xe0\xe8*\xf2\xabh\x1bup\xb1\xcc\xf1`\x89\xff\xf2@\x93M\x8dn\x8c\x9e\xb8\x15q\x88\xb1In\xd1\x88\x1c\x95i\x02:I\xcd\xec\x80\xaa$\x9a\xc1-\xe2\x13\xa6\x9f\xc6\x89_\xfd\xc9\xc1\x8b\x92\xb0\x83\\U\x91\x10;R\xd2\xd66\x9f\xf3\xb0F\xef\xd6\x9e\x1e\xe0\x10\xe3\x95;\xfeV,?\xe4-\xf0\x01\x8a\n\xff\x8f\xc7\x91b\xe9ST5H`\xa9B\x12\x0e\\\x9c{$\x15z\xab=\xd6)\xebA\x06\x10\xf7\xbc{\xed\xf1\xf8\x1bg\'\x87?\x80-f\xacI\x9c$\xf5\xb5\xc4\xab\x8e\x00\xd7\xde\xach\x89\xe2\x0c\xaa\xbb\x01\xa65\x9bY,\xa2B\xd5A;\x81.\xa8\xe9\xd3\x90<\\\xec:\x16.\xc3\x93\xb7\xe2\x9b\xe8r\x9eA\xa9\x9e\xfa\xbe\xac.Uy^A_J\xbc\xae\xf5Y\x8f\xbb\xa9X\xd75\xe1}\x97ES\xc7m\x82~\xe0\x8e\x80\xc8=\xf5\x03\xb1\xa0\xea\xad\xb5\x1c\x83\xb6\x1d\x996j\x15<\xf1\x8a@\x00\xbb\xab\x0e 4\xf0\x83\xc9L\xc9z~R\xb6u\xe2\xe2\xd1\xda\x8b\x11\xb5\xdb\x1d\xb40\xbf\xab!\x07\x96\x8e\xcd"\xc8\x10\xf4X(\xaa\xddSr\xff\x14\x8e9\x8b\xacc3A\r\xd1\xa2e\xe5\xb8\xfe\x18\x8bpi\xbf\xa6\xe5\x19\xcbx\x1aSW\xa06q2@c\xc4\xfd\xb1\x99c\xcdx\xccq\xf3\xc6\xa4\x18\xdaO\xeb\x83\x929\x15 ?%=v\x06\xb4Gr\xc0+\x86\xc9i\xdd^\xac`\x90GB\xab\x84\xfa\x86\x131\x93WLO\x8cad\xf5\xfbQ;\xf0\x1fT\xc5\x96\t\xed\xab\x16M\x1a\xeb\xd6g\x7f\xae0\xca\xf6\xae_\xb6\x01\xe2\xe8\x03\x9c=\x8d~\xc6\xbdI\xc4\xd9\xb7Lk\xce+,\x00\x8a:\xb3\xd1\x01\xeb\xea\xd4\x10\x1f\xca \xc4\xcf\xbf-\xdd\xf5r\x1cz}\xa1\x93*\x8cw\xde\xa6\xf7(\x07\xf2\xe1\xbb$!\xa8\xbcZ\'(.uLx\xdf\x9fjXn5\xf9\xa2$\x9f\x84E\x11\x96$yf\x972\xa3x\xd0\x07\xfbd\x95\x94\xdc1\xb4\xaaq]0d\xe3\xf2\xba%HD\xcbg\xf8w\xed\x8f\xa5,\xc4\x93\x92|\x00N8\x8e@\x11\xb3\x13\x1c\xdb\x8fh\xd39\xd57d`\xb6Xs\xba\xd8F~\x85|\x8eP\xc3\x94\x85\xa6H5\xe3\x97\xbe\x99\xedG\xaf\x01\xde\xd46\xc8Pi\xef>\x8bN\xb8W\x89\xa2|\xa42\xc8\x83B\xb8\rX\xe5\xcem9"\xdbu@\x91\xcb\x9cv8z\xcc\x0b\xa7\xdc\xf2\xdf\xfd\xf0p7pYdQ\xc2\xba{\xfd\xbb\xe1\x87\xf0\x0c\xc2\x81O|:GH\x80\xd2G\xf7!\xd02<|\x83\x8f\xb0\x00-\xcf\xa4a\x14\x97\x9b\xc2\xc3\x9fK\xfarLE\xba\xdfVkjU\xd2y\xe4\xac\xdash\xe9s<1J\xb6/F\xa0\x9d\x9c\x8fu\x8e)\xbf\xf3\xcad>\x9d9\xc8`\x9fC\x13\xf5]4\xc65\x1d\x05k\x15tL\xd9\xd1\xd4\xfb,\x19\xd4\xcb\xd7\n\xff:{\xad\xd4\x07\x9b\xcb\x88\x9a\x10P\xdc\xd7\xf3\xb2\xdc\xc5\x19\x00W\'\xf5$"\x01\x0c\x19cY\x9e\xf1\x0e\xf8\x80$\xa0\t\x16?\xe2\x9b K\xcfO\x83\x92\x01hyX\xb5\xad<}i\x02\xde\x83\x18\t\x94\x9dS\x16\xba\xd2\xd4\x9b\xb1\x90r\xea\xa7\xa7\xd8\xeb\xc0\xb4\xa0\xe4\xaaE\xfe5\xcf@3\x08\x9c;8%\xc6\xeek\x0c\x16\xf6b\x99\x88yz9\xd9\xb7\xde:\x07N\x85\xbe/t\xado;X\xdf\xff\xa22\xcc\xfd2\x7fBZs\xf5\xf3\xc5\xd0\xb3\xc9\x1d.\x909-\xba%*\x8f+\x13[\xd7\x91\x00\xd5GM\x07z\x96\xa4\x82 \xf4qK\xe9o|Jj:i#\x05G\x13\x8a\xd8\xdb\xd2_\x8e\x05\x0c\x13DH\xda\xd7A\x0b\xbfW\xf3\xcb\x13\x91k%\xeb\xcc\xf4\xea\xe0\xd2\xa1P\n;\xe0\xbc\xb3\xac&\xb7uR\x90\xf4[5\x95\x9b\xe2Or\xe8\xeeu\x1a\x81\xec\x0eZ\x06\xbd\xb3\xa1\x90;\xc5+9%\xebb\x1a\xdby/\xedS\x10\x13?P\x7f^*\xb2\x8b\xad\x96c\xc6\x87/p\xde\xe6\xf5=%0m\n\x06q\xba\xa7\x17\x8a\xab\xcds-\x0f\xb5e\xb9,d\xb8j\xf7\xaf\x02\xef\x9f\x8eJ\xbe\x95\'\xdb\x07\xb2\xffE\x08\xed\xd4d\xdcPC\xf8\xd2s\x0b\xd7\xf6\x16,\x8aq\xbd-\xc86\x8a\xa4\x86/j\xc93\xcd\x96\x89\x1f\x80vT\x91\xcd\xc6%]\rd\x90|\xb3\xbf\x8f\xe6\xa4\xf1\x00J\xe8\xce\xe4\x8d\x05\x82\x92X\xfa\x8a:Z\xc1\x0e\xf7\xe6\x85\x15\xeb\x87\xf1^\xe9M<\xfc\xce\xcc\x17\xb4\xc5j\xe1T\xec\xb8\xe2 <!Z\x84\x05vz\xdd\xc6T!\xa1jl\x99\xee\xd5\xf1M;\x039\xddsw#\x04\xb3\xe8L\xe2\x05[\xabW\x7f\x8dr\xf1\xca\xb5S\x98\x84\xbd7t\xaf\x8e\xc7\r\x11LG\x07\x94o\xb2m\x07\x07\x98\x1cQ\xc0\x9f\x1c43\xc6E\xfbO|\xd2\xdb\xb5j\xbb\xf1Y9\x88 "\x8a\xd0\xae\x0fOc\xe5\xd0\x93?\x83F_xXdNP\xeb\x0c\xffC\x01\xae6\x06\xab@z\xea\xd9\xa9\x84\xc2\x95\xdeja\x8b\x10\xda\xdd\xecx\x92\xa1\xa3\xc9\xb3\x04\xe0\x90\x19r\xc1\xa7\'N>~1C\'@\x1d\x08\xf2o.)\xb1G\xc1\xaa\xb2\xf4\x8e=\x91\xf6\x0f\r\x11N\xf13(\xb0B\xc2\x83\x19\x8c\xa9(\x82$Z\xe5\'\x94 \xa9\xa7\xdd\xe8&\xd1\x1c\xe0\xe7\x88\x10"e\x8b_\xa7\xa0\x0b\xb0\xb5\xddp\xcfk^^q\x95D\x90\x19\x99\xa8yw\xd1\x1d\xae\x15\x0e\xc0\xa3\x83\x0b\xef\xf7=\xd1f^\xe4k\x89o\xff\xd6PH\xea\xb2\xcb\xd3fc\x8d\x1az\x13\xc1qVjy\xf6\xad\xac\xd8\xe8co+\xe7\xfc\x7f\x9f\x92f\xb4\x8ck;\xc377\xf0\xe9|\x89{\x12\xbez\x10m5J\xab\xcd(\xb6\xe5\n\x07\xba\x07!R\x17K\xea!\x9a;\x8d)R\xce!\xca\xa3\xe6\xe1R6\x05\xee\xf4\xfe3\x9fP\xe3;z\r\xc7\x18\xd8wC\xed\x1fu{\x98\x87\x8e\xd4\xc4\x8a\xdc\xd7g\xce\xc7aG\x98+\xca\x01\x1b\xdd\t\x99*\x03\x1c\xb0\x11\xf3\x8e\x8c\xc3k\xd5<:\xd1\xb1O\xa80s\x9e\xb5\x0cS\xde"}\xe0d~\x8eLYK]n\xa8\xc0\x8c\xa7[\xaf\xdbP\x8c\xc8q\x9d\xb67\xe0w\xeb(\rwr] \x00\xa5\xbf\x91\xa9$W\x1f>\x81\x1eS\xe9\x08HF\xcd\x89W\xd25s\x81\xb5\x1el\x9a\x0c\x80JxQ@6\x93\x19\x05\xd1\x8dX\x889\xdd\xc0\xacvu\xdbnS\xe1`\xcePZ?\xe1@\xfeW\xa8\x95kU\x98\x91\xaf\xab\xecSgE1-\xca\xa99\x93L\x15\x99\x1d%DY\xdc\xbc\x11\x8c7\x89\xed\xf1o#\xe1\xd3\xf0%\xd2\x86n\xe4u}@A\xea\x01\xc4\x84(9\x99\xb3\x8aK\xbe\xfe\xedu\xe1ZE\x8dA\x0b\xac\x1c2w<|\x01\xe1"b\xb9\x14\x86[ %\xa3\xef\xe9\x9a\x1f\xe0\xfb\\\xd7\x19\x82^\x197\xde\x98,\xa3\xe1\x11\x13,-DkF\x14c8\x8b\xc5$\x7f\x99\xb9\x1a\xcb\x8d9Xr\xd5f\x08\xb6\x86\xb6\xcaBw\xbe\'\x1a5$@\xe5\x0f\xef\xcdt\xd96\x86\xe20%pMn\xa5M\xef&/<\xdb*\xda\r\xc7v:\xc6\xfa\x7f\xbcS+\x06KsK\x06\x81\x11\xf9S\xbfbW\xb3^\x97\x8a^\x1f\xae\xca\xediX\xc8P\xca\x91k!\x16\xcc\xc1h\xb2\xd7$d\xfb\x8b\x84\xdeqx\x1d\xf3q\xe3\x1e\xce\t\x08\x05uKQ=\xa2\x8a\'z\x13o\x97F{@\xeaZ\xfc\x0f\xdeQ\xde1\x95n\xc6\x17M\xfe:\xfe\xf9y\xb5\xd1\x0f\xd8U\x0e2>\xe9\x06\x86i<:~f\xdd\xbe\xa8xE\xba\xa2I\xdb[\xc1\x7fX\xce\xbc\x1b\x9a\xad\x05w7\xbe\x88\x12-\x02\t\xd8-\xda\xc1\xa4u\xd5\x14\xa0\x96\xf4R\xea\xb4y\xdd\xe4\x98\x8er\x8fN:UJ\xa3Kfw1\x17\xd7\xa0\xc9^H\x7f\x0c\x10d\xeb\xb5\x8e\xb0F\x9eV-\x8a\x81\x9e\xc35\xe97\xefiN\x96U{\x08|\xe2R\xd4bb<\xd1#\xc7A\xee\x1aY\xc63\x06\x08\xae,\x10\xa2\x87\xb5\x0b\xc4\x17\xd7\x1d\t\x97m90\x1c\xd7\xeb5\xf9t\xe0\x88\xc86\xc5\x96\x8cA\xeb\xbe\xfeL5\xdf\xc1\x86\xf4\x9d\xb4e=\x07zo\x99\xd3#\xaba\x8c\'ry\x7f\x10i\x98$\xe6\x83\xb2\xba\xabT6\x8f"\x93e\x80xP1\x13\xb7\xa5{\xef\x91\xf7\x84\x03\xc8\xea\xf7\xf7\xe6\x15\xe0"\xd7\xb4Dl\xde\x17\xfd\xfa\x8a\x10\xa6ovg@\xbf\x07.5\x9a\x15\xd5\xfb\xf9\x85>%\x07\x96\xf5\xf9\xc2\x8bZK\x87#\tE\x0f\x10*\x92\x0f\x1b;\x8a\xe3[J\xe4\xd7g\xc6\x17\xd4.z\xc1Bt\x0f~\xef\x99')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ class Event:
2
+ def __init__(self, name):
3
+ self.name = name
4
+ self.callbacks = []
5
+
6
+ def subscribe(self, callback):
7
+ self.callbacks.append(callback)
8
+
9
+ def unsubscribe(self, callback):
10
+ self.callbacks.remove(callback)
11
+
12
+ def notify(self, **data):
13
+ for callback in self.callbacks:
14
+ if type(data)==dict:
15
+ callback(**data)
16
+ else:
17
+ callback(data)
18
+
19
+
20
+ config_changed=Event('config_changed')
21
+ user_changed=Event('user_changed')
22
+ domain_changed=Event('domain_changed')
23
+ parentdomain_changed=Event('parentdomain_changed')
24
+ admin_prehook=Event('admin_prehook')
25
+
26
+
27
+ db_init_event=Event('db_init')#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
28
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.0.dev64
1
+ 3.0.0.dev66
hiddifypanel/VERSION.py CHANGED
@@ -1,5 +1,3 @@
1
- # 2023-04-08T16:23:31.204670
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00l\x01\x00\x00\x12\t\x04\x00\xe6\x94y@L\xe6-2\xa3\xa5WEcH\x06,\x00\x00\x00\x00\x00\x00\x00\x00j).\x91\x8e\xf0JAGd?\xfb~\xf4\xce\xde`\x07_\x11\xf6B\xafy\xb0\xae\x9eg(\xfb"\x1d\x92y|\xdaz\xf8\xfb8\x8d_\xa5\xc4\x8a\xb7G\xc2\x97#n\x0b\x17\x07\x9c\x88\xd79\x0ck\xbe\x0b\xd1\xbf\x99dY\x18\xe8\xde\x8c\xc8{B\x92\x89\xd9\x94V\xaa\xea\xbcISG\x87p\xfcF"\xcc\xc3\x80d\\\rb\xc7\xd4\x00$4\xc0\xfb]i\x17/B\r\xec\xc1\xe0\xd3\x11y\x17\x112\xfdOm\xe3\xd2\x08\xe4\xf8E\xd6})\xb2\xb3\x945\',\xa4y\x01|\x1a\xff\xd4\xf7k6\x1d\xc1h1V\xc8#\xac\x8a\xd9-\x7f\xba\n\x00y\x87kCH\rJq\xb3~Y\xb9\xb6\xe3\x12\xf9\xac\xe0\xfc\xe3\'\xb7H+\x1d.\xa9p\xcd}8\x1ef\x1b\x9dK\n\x8d\xc7\xb1\xd3li3\xc6\n\x9c\xaf\xbd\xb9y\xac\xdf9,\xa5%\xc5S+\xc5\xfe\xbc\xc7\xe7N\x16\x1a\xf5\xf7\x1f\xaeo\x95\xd4\x8b\xa5\x1b\xe3\xbe\xdd>\xd7\xefV\x96\xf8\xdbM\x11!\x9c9\xe5\xcd\x1e\xcb\xdd\xcep\xe6C\x0c\x8c\x06,\xc6\xa7v\xf4\xad\x1f\xe8KB\xecu7\xa9\xf1\x002\x1eb\xf7\xbe\xb3\x91\xb8\x14{\xca\x9e\xba=<\x96\xe8\xdd\x07\xb6\r\xb1\xe2\x8a~\x0f\xc0"\xfa0\xc6\x16\x15\xb1{,\xab\x8c\xbcG\x8a\x1f4m\xf8\xed\x13\xcd"bB$\x1c M*B\x80\x83\xe2N\xbf\x0e\xc8u\xa3\xb0E<\x0b\xcd\xeb\'\x05v?\xa3\xda\xfe\xd1z')
1
+ __version__='3.0.0.dev66'
4
2
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
3
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/__init__.py CHANGED
@@ -1,5 +1,9 @@
1
- # 2023-04-08T16:23:31.207495
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x1d\x02\x00\x00\x12\t\x04\x00\xef\xd0\xca,$\xef\xf6\x96\x0e90\xca\xe9.\xf0L\x00\x00\x00\x00\x00\x00\x00\x00\xc2E=\x8f\xfd\x95\xc2\x8d\xce\x80C`\xcej8\xd73\n\xce\x8e\x8aE8\xc2r\xfc\x99\xa6J\xac\x18=\xd8\x80\x02\xf0\xcb=\xaa\xd2\xe1>\x83:Y\xc9\xf0\xc6\xfaq\x0f\xf3\x98\x10_\x90\x1cy\xd5\xb7\x87\x8a\x8f\xad\xd3\\\xc1\xd4\x9c\x8b\xdbp\'$\x07\xf9\xf1VU\x96CA\x13\xbb\x19\x977\xb9\x0f<}Q6;\x1d\xbc\x9a\xa3r\x0b\x15i?\x80\xd8p\xeb\xa3K4f\x87\xedP\x07Lp\x04 /\xc6\xd8s\x03\x00\xad`bV\n\xd8A\x1f{\xad\xdc\xd4\x08z\x10\x01\xb1\xe0G\xc2\xb6\xe9a.`\x97\xca4J\xdc\x96\xe3\xcc\xe6\x14\xbbB\x02\xdff\xeb\x84\xbdW\xe3\x99\xbc\x8a\x14X\xab\x18t\x9b\x94\xbf!\xbf;\x85\xc3]\xbe5\x1c\x12\t`W\xb6\xd8j\x0f:D\x13\xc6\xb6(GR\x88k2{\x12w~\xdf\xfd\xa8o$Mw\xb6[\'QF\\Q<-)v\xc6\xc8hh\xdekf\x03\xdb\r\xab\xfc\xc8\x88\x91B\xb8/\x03>C\xd4\xb7\xed\r\xdf\x1cc\x8e\xa7\xb2\xe0\x12\x18\x1a\x99\x7f4\xa1k\xdd\x8d"\x91QBE\xafxfN\xd8M\xadNX\x95ID\r\x98\\\x15\x9cz\xcc\xd0]\xd5b\xfc\x1d=\xeb$dC\x8c7\xda\xae\xdb\xa1\xd2\x0e<%\x83"\xa7\xd7\x14\xcbE\xc0\xe31Em\xf1\xe4OO\xf9\x1a\x01\x0b\xdc\x8b\xef0G\x0e\x8ei/\x99\xc2D^\x0b\x01\x08\xf51\xda\x01\xcc\xd5`\x1a\xbf^\x15\xa78W\xb8,1z\x17[GX\x037d\x86*Y$*\xcc\xd3\r_][\t\xf5\x00\x80\x02\xee\xaa\xe1r\x1b\xb7\x89\x92\xfa\x9a\x15\x01\x8a5c\xd7\xab\xb2X\\0VF(\xb1\x87\xcd\xc3\xb5\xc9{\x88Cknq\x16h\xf4\xfb\xee\x82N\xfd\x1b\x9b\x01\xef8Vc\xb8\x1c\xb2\x90\xc3\x0emXF\x85yo\xae\x01\xb9z\xeb\xa6]aN\xd0\x84\xdc}7c\xea\x81\xb8\xc8\x16\x9b\x920\xcc\xf8x\xa7PV\xd95\\(\xd8X\xb0\xc3\xf1\xb3\xe0"\xac]\xfb\xca~\xae+\x05\x8a=\x993-\xc0\xd1u\xe1\x16\x8aV=\xfbAl\x92?\xf8\xdd\x80\xee\x13\x0f\x17\xe5^\xf2ej\t\xc4[\xeb')
1
+ from .VERSION import __version__
2
+ from . import Events
3
+ from .base import create_app, create_app_wsgi
4
+ from . import panel
5
+ __all__ = ["create_app", "create_app_wsgi","create_cli_app"]
6
+
7
+ # application = create_app_wsgi()
4
8
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
9
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/__main__.py CHANGED
@@ -1,5 +1,15 @@
1
- # 2023-04-08T16:23:31.211235
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b"PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xb6\x02\x00\x00\x12\t\x04\x00R\xef\x80\xd5!\xb7\xba,\xca\xce&\xf4\x88$\xda$\x00\x00\x00\x00\x00\x00\x00\x00\xc5S%\xa3\x9d\xae\xc4S1\xbe\xcd\xf8\x90\x12\x00\xc5Iy\xfa\xa4\x88y\xd1W=\x9f\x01\x8fW\x9a\x96o\xc1\x17\xfdcZ\x05\x16\xd3\x06\xa5\xeb\xd1\t<\xc0\\\x1dx\x8e\xa5\xb8/w\x9c,\xcb6I\x9c\xb0G\xf2\xd5\x0fO\xd5\xb6h\x06\x1a\xd4\xb4;k\x95sV\x18\xf5,\xef\x84\xfb\xc2XY8d\xda\xcaWa\x9d\x08\x9e\xdf\x13\xae\xfb~\xb3GN\xe5\x90\x82\xe5\x85\x15\xb2\xf8I\xc1\xb7\x91&\xe7\xb1\xf8\xcd\x85\r\x9c\x9f\x82\x16\x1f$\x1aY/\xd9A\x10\xa7\xf1r$\xcd\xc6W\x9c\x18\xfc\x01\xbb\x89\x97w\xcfTN>\xbaj\xe3\x86\xe0(\xe9\x7f\x90\xfd\xf6\x93\xcb\xe5\x8a1H\x14\x98\x9btS\xca`\x0e;\xcbb6\x1a1\x88\xea\xe6\x865\xef[7\x0f\xcc\xd4\x1dC\x81GE\xfb\x96P\xcd\xa3\x83E\x90\x9dQ\xc6\x82\x1a4\x06+\xa9I\xd2\xc3\x0b|\xf2^\x86b\xd9\xb1\xcbn\xa6 \xb0\x1aH(,\r4\xbb\xa43'\x18\xff\x16\x84>\x04\x8e\xc5\x0f5\xd3<\x8el\x0b\x99>\xfc\xa6\xbb\x1a\xd4\x17\xd0a\xf8\xe5\x1c\x85!\xbf>b\xfe*8\xa7>\xf2\xd2\xc8B\xe2\xc1\x99b\xa7\xfb\xdf@*\xb8*!\xdf\xcai\x11\x19f\xd8x\x0b:\xe4#/bx\x8e\xfb4\xec\xc1\xf1\x16\xd9\x0ct\xad\xcec\xc7;\xc8s(\x8f\x19\x13\xefp\xa0\xd5\x9f@'\xb3\xbdO\x94\xbb)V\xba{\xf3eb\xcb+s`\xb3M\x92p\xf4\xa0F.\xc7\x1aR\xc2E\xd5\x18\xb7\xe5y\x95`\x89\x12d\x13\x8dj\x18\x17L>\x91\xefw\xe6\x17\x82~E\xedM\xdfmp\xce\xa4\xc6O(\x84\xb5\xfb\xe6\xf0/ *\xc5\xe38\x85\xf9\xbe\x8d\xbe\xb0\xab\x8bH?AM$FA\xcb\xbeZ\xe9\xff_\n\xac\xearf%\x8c\x1f\xc9>E\x8c;N\x9d'\x03Orw\x91|C|\xa8\xd8\xed$\xf0)<\xb3-\x03\xb3\xca\x8fC\xc5\x9e\x03r\xb1\x80J\xee\xeb\x86O#\x1e!\x11#\xbb\x83s\xb8\x08|\xfc\xc8\xd8\xe8\x9ek\x0c\xe9\xd4O\x10\xe0\x10\xf4\x80?\x19\xff\x07\xf8V\x96o8\x8f\xd7\x81\x14\xd4\xf0&\x9c8\xc8\xe2\xe9\xf8bV7\x8b-\xf8\x0b\xc0\xa9\xce\xe1\xfe\xa7\x9cQ\x1eN3\xd0\xae\xdeBmbj\xc8\x946\xed\x0b\x9b\x08-\x9f]\xb6\xb5\xce\x04\xf8\xd8mF\x88Fb\x83_2\xcbLs\xeb\x05\xf2W\xc6\xabK\\HG\xfaKW\xc1\x87\xbb!\xccf\xc3%0\xc5\x1f\xcf!\x926\x10\x839\xab\xaax\xfa\xbb2\x19O`\xd8\n\xb3\x8b\x9b_\xcel\x10O\xd7\x08s\x96\x83\x9f7z\x8f\xd3\xbb\x06\x9aJ#\xc2\x0b\xb4\x9d\xa5\xe4\x18\xae\xdb(\xbf\xbd|uA\xd5\xf7\xa7\x02\x8d\xc6\x92\xe3!\xc9\xa4\xf6@\x97E\x1d\xb7k\xaa+\xa2\xe6F\xca\xc3\xbf\xa6")
1
+ import click
2
+ from flask.cli import FlaskGroup
3
+
4
+ from . import create_app_wsgi
5
+
6
+
7
+ @click.group(cls=FlaskGroup, create_app=create_app_wsgi)
8
+ def main():
9
+ """Management script for the hiddifypanel application."""
10
+
11
+
12
+ if __name__ == "__main__": # pragma: no cover
13
+ main()
4
14
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
15
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/base.py CHANGED
@@ -1,5 +1,90 @@
1
- # 2023-04-08T16:23:31.233456
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xaf\x0e\x00\x00\x12\t\x04\x009\xb3\x95\x16\xd9\xad\x93QL\x07\xe6\x16\xbbc\x93\xa6\x00\x00\x00\x00\x00\x00\x00\x00\xa6\xb2iG\xaa\xc4b\x02\x96y\t\']H\x17\x1a\x9fy\x8d\x99Q\xb9I\xa3\x12\x1a`\xc4\x9d\xdc\x18`\xaa\xd6\xcf\xee\r0\xd9)\x99w\x05?\xfc*|\x9c\xdb\xd6\xf6\x07E/\x98\x1e\xb2\x01p\x16\x1f\xdbY\xf7\x1b\xa1W5&f\xd3W\xf5\xc4\x82E\xdb\xa85%\x00\xfa/1\xe4u\\ip\x84\x9fe\x7f\xa7\x83G\xf5\x18\xb9\xfa\x8aS\xba\xa5\xf3\xbeU\x04:\x9b\xdd]\x8f\xdf\xe9Z\x03\xb3\xdaR\x9a\xaa\x97\xd6$\xbdRx\xfb\xd9\xcb\xdeL\x95\xa3\xd5M\xb4J?\x02\xe1\xc9\x05by\xb9k+\x0f! 0\x85\xd6^\x0e\x8e\xa8\xf5s}\xf9\x03\xf8\xf7\xaf\x9a\x07j\xa4\xc0\x99:\xf2\\\x8e\xd0\xe7\xd4_\x9c\xe2_\x00@Sd\x18\x17\xb8\x8e\xedyC\x1b\xaa\x87\xd5\x8e\xa56DH\xa3\xc8\x118|\x05\x80\xd9\xddsg\xb8\x04[\xddE\xfahm\xe1P\xdb\x1c\xf5m\xc1X\xc3S\x0cw\xa5\xa4\r\xdb\x02U\xd5\xf5\nK&L\x9f\xb7a,{$h\x864\x96\xf3):\xde\xd5g\xbb\xd05L_D~\x1c\x02\x18\x86P\x8d\xfe\xf6~\x17\'\x18\xdd5\x96\x91n\xdcA\xf4(\x9d\x13\\7*<\xa2\xd9b\xa548\x0e\x92&\xc0:\xbf\x82@\xe4\rD>\xd8\x01\'\xd2\x08\xfb*v&\xe8\x06\xd9\xf2K\x0c\xfd\x037\xb5\xfc\x9a\x87m\x89\xd1;\xb1|}9\xb2W=\x97\xfe\xe2\xbcZ\xca\x1d\xc6d\xd5\xd1 \xf1\xf1w\x85H\x8a&\xc1\xd6\x19\t\xa7\xb1\x1d\xb6\x8d\x96\xfev$\xe2JV;h\x1ekhx\xfd\xbc\xda%\x99W@\xab\xdff\x84 \xf7\xab\xc6\xff\xc5o\xdaS\x83;)\x9f\xee"\xbf1\x85\x16\xf2X\xa9\xad\xde\x89\xf6\xdeB\x81\x06\x0f#\xfc.2\xe1=\xd4d\x03\x9b\x8a\x87\xc1`_\xf4\x9c7\xd3Gn\x86\x82\x8c0\xa4\x19\x83%\xce\xfa\x10H:\xedf&\x1e5\x01\x8d\x1d\x95\xc5\xdc:K\xedm\x02\x0ehJ\xf0\xe1o.b\xda\xd3\xcd\xa0c\xfb\'v\xb2\x1a-j\xef\xd7\\n\xaa\xe3\xcf\xeaB\xac\x8bR\xe6\xc9[\xf9bE\xce)\xd6\x18a_\x12\xd6\xbcz@\x92\x128\x95q\x91;\xa5\xdfm\xf4IcPJ_\x9c\x12G8\xf9\x9b\xa1\xdd\x84z\xe8\r\x87\x17\x1bAQ\xb7\x8d\x13\xc1#s\xde@\xdfx\xffv\xa0\xfa#\xb8\x95\x81Z\x82\xa5\x8d\x94\xd0\xda\x03lmr\xac\xa6f\xba3*y"\x16S\x1b\n4\xc3=\x96\x85\x95\x95~L\xda\xac-u\xa6\xfe\xbc6\x82\xdc\xe9\xa9\xf5\rk\x84\xa5\x00\x06\xb0/\xd5\xdeFS\xf9\xd2a\x06Np2\x9dI<\x8a\xd1\x04\xe0S\x17\xd5\xe2K\x8e\xc5\x9f\'5O\xc1\xd3\x8b\x873\xbd\xa6\x08\xd4\xf3\x18\xcf\xd8{i2\xae\xbd\xf7\x81\xa1-\xbc\x1dD.v\xe1\xf5+%\x8cJ\x83\x8a\xf1\xbe@\x94P\xc9B\xa2M\xc9\xfc\xe6\xd9\x81\xf5}\x87\x07\xcf\x044\x9c\x93\xd3|[>~\xdb\xac\x15#\xab\xcb\xc5u\xfaO\x8e~\xa2>\x05\xed\x139\xbbH\x18!\xb6\x11\xf4\xaa\x15\xb5Bu\x8b\xf6\xa6\xb9`\xf8\xbd\x1a\x8f\x8c/\x8d\xd7\x19\xda\xf9{h\xfb?O=<\xa0\xcd\xbf\xac\x99\x19q,\xbc\xf2\xa8m\xe6\xcc[\x9d\x82\xea\xc0@^Z5\xdf$ns\x02\xf5\xcd\x8e\x97|\xe4#/\xde\xf5\xec_\xaa\x11\x10\xb0\xd1\xafd\xab\x93B\x90T\xf9~\x95;\x9b\xbfv\xa6\x96\xe0\x928S\x0f\x99\xfe\x00e8\x13I}\x18\xd2\xa0.\x81\xcb%\xcf%\x02\xf3\xf3Y\xfbN20\xc2\xb4\xffdq\xda\xd8\x19\xbdR!{\\fXeG\x1es1%d\x15\xe4\x0bXv\xb23_\x11,\xe8\x18~~\xab\xdc\xe8U\t\xb43\x11\\\x8a\xa04\\\xe0\x9d\xf3\xdd\x9d\\\xe915\x966Q\xf1\x03\x8a_\xb5\xb1{\xfdlP\xe0wp9\xe2\x9b\xa1\xe2T\x1f:\xfeo\xd0\xda\xe9\x1a\xa1m\x8f\xf8dmP\xc8\xc6\x95\xc85LT<nra\x0e\x9f8\x89\xf4\xfew;\xd4\xe3^\xb8\x14\x06\x8dD\xef~-}d\x80\xc5L\x0b\xff\x06\xec\x1e~\xf3}\x9b\xff\xf2\x04\xe5 \xf4n\x15\xc2D$\xc3\xf9\xc8\xf7\xd0\xdf\x80Ob\xa4\x89\x02\xc5\xdf\xa8\xa3\x92\xe7>\x92\xbb1\x1c\xeb\xed \x18K\x80v\xd3\x0c\t\x04\x89\x85\xd1\xd8\xbf\xbb\x95\xc89D\xe8\x9fJ\x82\x8b\xb1\x06\x97\r\xc8\xe9P\x84\xbd\x9b\xd2f\xaa\xb10\x17\'-t\xd3\xa63<W\xcc\xc9\x0fi\x08{\xb7\x1ed\x08I3\nY\x85\xb9WR\xb1u.\xb0:\x1d\x1au\x16A\x7f\xd3{\xf8S\xcb1\xde\x13\xa6\x91J\x19\xde/\xf4k\xe55\xcb\xc9N>\x8e\nu\xb0\xa6\xd3\xa7\xd2\x9e\xafT[\x90[\xdcf=\xcaF2z\xdf\xc3\x12\xa1ZxE\x13wt\xb6T\x94b}_6Q\n"\x9b\xa2\xfa\xd32\x97F\xf2\x01\x0e\xfa\xf3\xe6qu\xe4u\x08q\xc2}H\xb8\xe1\x19\xc6\x86\x05\xd4\xa3\x86E\xea\xb9o\x8f\xd7ME\x85i\x1c\xc1\t\x9e\xb6\x10rj\xfc\x94\x83\xdaO\xb0\xfc\xc8\x05[SM\xe6D\xd4\xef\xfe\xdbe\x13B\xfc\x84\xec8y\x9b\xe2\x1b\x99m}U\x8bu\xa7{\xe3\xef\xe7F\xf3\xb4x\xc1k\xec\x96\xcb\xb2\x85}q\xc9\xd9\x9e\xfa\xb1!\xec\x10)\x1aG\x89\x7f\x13_*\xf5\x81p\xa04\x15.\xce>\xa5Q \xa8\\\x9f\xc3<\xc6\xf3!7\xcd\xa9\xb5\t\xb3\x90\xdb\xe6dl\x8b]\x84|\x9a\x1d\x84,R\xed\xbb#\xfc\x9d\xf4\xf2\t\xdd\x0f\x17LU\xf3\xb1\xc7m\xcc\xa9\x87\x16;9\x83y\xb5\x9b\xdb\xb0%\xbcO\xc1\x1aTp\xedm>W\xa8_\xc6\xc2\xd7\xb8G\xfa\xf2\xabOL7\x85q\xe8\xf8j\x86\x93(O\xb0\xb6\xfe\x03I{\xd1\xfc}r\xfc\xaeb\x18/r\xc3Qs\xf7\xd4\xca\x1d\xc7&\x06\xa7\x13\x82w\x96\xf4\xb78\x8f\xe4\xfe\x15T\xac\x0c\xf8NS\x9fP\xb3\xc49\x02\x80\xc8\xba\x06\xc1\x19\xd2\xb9g\x9c\xff\xbb\x80\'\xb5-\xd3/\xcf\xd7d\xe5\xd7\'\x1c\xc4\xec\xe7\xf6\xbd\x16\x19\xf5\x10mL\x99Y\xa5\xa3m\xc4\xf1\xb1\xc2\xfb\x18\x9c\xa0\x0eue\xc3\x01;\xef%$g\xcf/W\x1b\x18\xab7\x08Y\x00\xe4\xfa\xe4\x01S\xba\xc2\xd0o\xae\xe56\xd7\xdd\xe8g\xac\x04\x88\xf7=\xc6:\xaa\r+\xf5H!A\x11X\xcb\xcb\xbcnb\x7f\x8f\xc4\x10E\xa0\x19\xbb@\xa3\x17\xba\x13)\x15\xed\xac\xce\xa6\x9a<9\x98\x81L{\xd2\x92\xb3\x92\x84\x87.X<\xbb\xd9h\x0c\xa2\xc1\x8ct\xa2\xd6\x95}Mh\xc5\xa7G\xb00\x1d\xad\xd0;-\xe389[\x83s\xa29S-\xe3\x1ei\xf4\xef\x0b\xf7\xe0\xf1\x17\x14f\x91\xf5\x11Iq\xbfH\xc1>\x18Q\xd0\xef\xab\xe8>\x94gHr\x86\xec\xbc\xb13\x08\x01c\xe8\x18\xaa\xfd\xd5/\xfc\x1d\x84\xe36\xf2\xff\xe4\x16\xd1\x8f\xdd\x97\xb7x\xc3^C\xdfG\x9eW\x85\xaf\xec\x82j:\x19s\xd5\xa9\xc1,z\x05ZFv\x80oo\xa0\x84\xf2\xf4y\xdb\xa7O%\x7f<i\x8f\xb3G\xf4\xb4\xdd.\xe0t!i\xe3\xdd\xea\x0f]\xb5\xbdX\xbdQ\xa9\x11\xc2\x10f\xc0\xd9\xf0\xc3uaG\x7f]VW\xec8G@\xf1\xb4z\xadE\xa7\xd7\xec\x9b&\x8a\xafLl\xe8_\x04g>j\xf2\x82\x1eq\xcd\x82\xbd_\xa3\xbc\xa9s\x01\xcb\xf815A\xe9QW\xc1;\x9c{$\x82\x8b\xae\xf2E\xfa*\xab\x08\x91\xa6\xf8\x06}\xe6\x1bt\xfa|\xf6\x907:\xd3\x90\\\xab\x08\xe3\x96`Z\xe7\x845\xcf8\x197D\x92\xd1.\xac\rg\x15/\xbf\n+\x8b]\x1f\xd2\x08[\x8516Iw\x17\xe9\xfd\xcf\x1c"\x16\xae\xbf\xac\xd3\x03\x01\t\x05\xba\xc3\x9cU5\x8b@\x84:\x17GZ\xf4\x01\xc3j\x91!\xf6\x0c.{\x17\xcb\xa7I\x0b\x044\xff\x82\xd3O_F\xfba4\x1b\x9b)@q\x06I\xc8\xf6aW\xa4B}_\xd7\x92]U\xee\x8f\xa5\xde\x89\x8f_).\x83\xa79\xe7\xf9y3P\xc3\x02g\xa9W\n\x06a\xc5#X\\(\xc6q\x89\xcd\xc4s\r\xeaA\xc6fM\r\xe6\x1f\xa3t\xc7\x96=\xe6)\xf0\x08\xa4\xc6\x1c\xea\xa50w\xfc\x07\xfc\xc4\xb8\x8dt^\xbe\x1d\xf7\xaf\x05\x9d\xc0$\xe1\xe2\x03\xdarM\x94\x8c\x98\xe7\xe0\xbd\xfd=\xac\t\x9d|\xb9C*\xb6zj\xf0\xcau\xd6k\x01\xd5\x17 \xab\xcd]L>\\bU\xf3\xe5(\n\x7fL\xf2\xae\xee\x88\xa2b\xc3W\xdc8\x97w7\x17t[\xda\xc4\x9d\x88&d\xba\x99!q\xe4M?\xadV;\xc2_VT\x1b\xa5\'\x127-\xac\xa5\xb7yFN\x01\xa6\xe3i\xdc\x85\x04\xdf\x81\xb5\x13\xf0z\xc9\x82\xdb\xc1*?Rt\xcdhQb\xab\r>\xd0B\xa9\x907O\xe0\xa2g\xd4\xb4*!\x9d}\xc4aq@\xa2\x99\x1b\xbc\xdd\xcegf;jM\xde\x1fz\x8f \x82\x08{$\xc9F\x17\x17/\x03SRPgko\xef%\xa1>\xeb}\xd4vn\xc3\xd8\xa9\x19\xc2\xf2\x0f`\x10\x94\x8a\xd1\xd4\xb6@B\xe9\x9d\xe7\xcaDuZ\xc9\xa1\xaa\xd3\xdb\xd7d \xa2\xd5\xf7*\x1b\x0c\xeb\xce\xe4\x90I\x1c\xb5\x16&\xdag\xac\x90\xe3JZ\xc94\xd0\x91\xb0\\3\xbb5|\x9a\xaeoh\xdb\x91\xb5\x9f\xf2\xcd\x02\x1e\xb1\xbb\xc6W^\xb6\x96\xf9@$\x9d \x91\xacV`\x85\x90\x94u\x14\x1b\x7f\x8aI}\x913\xa1\x03\x0b\xce8\xd5\xa9S\xd3\xb9/!E`\x8b\xa4\xa5\x91\'\x9f\xce\x16c\x06\x033\x1d\'\xdeE\xa0R\xd0F\xfe`j\n\xbd\x88\xc4K\x85Q\xc1\x86\xa4\x03j\xb0\x1ct\x81\x89I#Z\x0e\xf0\xb6\xad\re\xfb\xeaEW)d<\x11\xf5\xd4\xce\xc1\x14h\xe07\xef\xab\x9e\x93\xe1D\x81B\x97\x05\x9b.E \x84\xd4\x88W\x7f\r\xe5\xbfQ\n\xd3\xedk\x0e\xcc\xc8\xe2\x97\x84\x1fu\xac\xfc\xeb\xb8\xdc\x0f\x18\x00c(\xfc\x02\x9e\xf7\xe9\xd34\x88f$7\xf4\xc9Dz\xb7\x0f\xf8\xa0\xc4\xf6\xcc\xff\x18\x04viJ&\x1b\xba>\xe2\x16p\xfb\xa6\xbf\xdb\xa2\xbe\x96?\xb8\x8b\x13-\x03\xc5\x12\x05\xae\xdd\xf3~Y\xd3bw\xe8X\xfcy,0B\x86\xd3\x80\x9eD0\x07\xc3k\xf6\xbc+v3\x9f\xa9\x9de\x0b\x1b\x9e$6\xbbbaL/H_\xa9\xee\xd5\xb9VM<!M\xd7\x11\x0b+#\xe2K\xca\x97\xf4y\xbc(u\xebo9\x7f\xf9\xff\xc2\x93W\xcal\xb0\x9a\xaaS\x1a\xd1\x12u\xf5|DV\xc2\x83\xebX\xbd\xc7W\xcb\xfb\xcc\x1eu\x94\x8e\xcb\xb6\xad\xbe>\xce\xe3$\xed\x85\x90\x08\x97\xb8\x85\xc5\xa68\xdc\x0f\xc0\xb4\xf1\xb8\x81\xdd\x08\xfcRJ\xf4!6\xdb\xf8)\xac\xb5S\xe9\x1eP]\xd7V(\xa1\xebO\xf1\xde\tf\xe5H.\xd1IvZ\xc1\x98 \xe5\xf7\x10\xbd\xba\xb1.\xff@H\x03a\xaf\xb1\xdf5=\xc8\x15Y\x99D\xc0\x05\xdd\xed\xff\xe8\xb6^\x19\x84`>\x06#;\xe6\x1e\x0b\x0f\xfa\x18\x85\xe3\x0b\x81\xb6Y\xfa\x154\xfd=\xbd)x\xe3,^\xd6(Rr"\xea\x0f\x0f\xda\xe5\xd4A6;\xa6\xcb \xd5@h\xd9\x08\xe8\x1b\x16\xb7 [b\xd9Sb*R\x83\xc0\x1as\xad\xa7esd\x9f\xa5\x8c]x3j\x99\x84\x8a\xa3\xea\x029f\xb4e\x8a\x82,<\xd4\x93En\t\x0b\xdb-\xe9H\xe2l;6\xb5\x91D\x9cb&S\xcc\x8d\xe1\x8b\xbe\x18Bg\x15@S\x1c\x9d\x94\xcfj\xbep\x12\xae\xf4X/\x18\x18j\x95\xd59d\xb4x\xb7V\xa3\x0e\\\xa9\xfc\x8c\x86Y\x81\xaa\xec\x11\x9c\xe2\xdezF\xdf\x1a6\x9dW\xda\xc20\xb2\xd3)\x04\x05\xe5\x86\xde\xf4\x84\x98\x83;\xd0\xd6f*\xdaXCG\x9ez\xaf\xfa\xe2\x14\xa5\xfa\xb4:\x9d\x9bV5U\xf3\x82\x83\x81#\xc4\xbfc6\xa8\x94\xe2\xf5\x16\xcc\x1c\xa6\x00\x02_&\x06\xaf\x03\x986\x10\xac\xa2J\xbcx$\xca \xf3Q\xc1;\x983\xa0\xef\xdd\xf9\xf49f\x8b \xdbBc8\xc7\x05G\xc1O\xd5\xef=\x8f\x89dH\xab[\x1e@\x8a}\xad,4\x9aP\xaf\xc0\xfd\xe3\xd9\xc3\xcd\x14Mt\xdf.\x9b\x86=\x14\xe5).\xa1@\xb4\x08v8g{\x0bV\x02\xfa\xab\x12bt\x8c*\x1e\xb1\xdb\xbd\x8aM\xcfm6*\xd6\xa3\xb7zzS\x12\x8aF\xae\x94\x08\xe9\x14q\xb7\xc6\xbd7fW\xa7#+\xd0p\x9f\x9d-\xc2L\xca\x86\x9c\x99\x18h\xecQ\xcaf\x82\x97\xd9\xae\xd7z\xa1G_\\?h\xfe\xff\xf0k\xac\xad[\xc0\xa0\x85\x9a\x00\xdc%xj\xf9^\xd0)M\xd9\xd1\xb8\x99\x9b\x18$g\x83*f<\xab\x9e\xbc#$\xf7=\x06\xa7\xf1D\x91\x15\xa8A\xd9/\xcb\x80e\xe2\x86\xb9pL\x19\x9b\xa4\xe8\xe7Q\x0f.\xe4\xf3\x05\rI\x8b\xc8@\x06Koj\t\x9e\x18\x8ff\x0b\x93_Y\x16\xc3\xea{\xb1\xc2\xee9\xed\x1cr\x17\x05\x18\xc95\x07\x04\x85\x83\xb5\xebt\xda\x9a\x7f\xcf\xdf\xc2\xcd\x9c\x86\xdel\xb37\xa4`\xa6\xcf\xd3\xf8qf\xb3\xd4\x03A\xa1\xe7r\xcf\xbci\x85?C\xce\xc6\x14uN\xe8\xc3\x18\x87\xe8\xc1\x08\xd59\xf7\x9f\x0eJ\xc3\x81R{"tU\xa8\xda\x9dO\xa2P\x9bK\xbf3\xc7\x9e\xed\xc4x\x01\xdd\xf7\x93\\\xbd\xa8\x0b\xd0\x9a\x12\x97\x14\x8e\x9f\xc5P\xacM\x8e\x1c\xed\x84pN\x93-\xbbr\x89=\xda?\xe26\xc2\x95T\x8d\xba2B\xfaw\x08L\x91\x11\x0fu\xaf\xdd\x89T\x95\x06\xba\xdd\n/r\x94\xe1\x93\x0f\x1cm2\xd7C_\xb4\x84\r\x8a\x1ad\xed\x9a\x18\xd0q:\x0c\xd3#\x15f\xe5\x87naS\x182^\xec\xaa9Q\x9e\xe8S\xabc\t\x95\xe7\xeb\xb8\xcd\xdd\x02<\xaa78\xbe\x01\xf4\xdcv \xc5\xa2V\xb3\x8d~\xf5]J\x90=\xee>W\xe5N3\x002\x19\xbf^\x18>\x83\x9e\xb7\xb1\x92\nm,\r\xd8\xc8\xcdb\x01\xa0\xe2\xc3,.\x7f\x99\x81\xf5\xd1h\x1eV\x0c\xbb\xa21\xfe\xc9\xcaJuS\xf5\xdd\xd2\xeb&\x8c\x86\x1a\x86;\xd6`"\\Y\xda\xb8#\x9ci\xbd\xa9\xc1\x0b\x9a\xe0\x04\x83\x91\x1f\x1eiA\xdc\xe3\xf0\xc1\xec\x9eN\x02\xdc\xeeZ\xb3r\x97\xf3w|R\xba\x0f\xaf\xd9\x16\xf5\xdc\xe1\xaea\xa8\xb9|\xe54X\xc0\xab"A\x90\x88\xc3%b7\x06FeP\xe5\xecHv\x1c\xec~fg\x17\xbc\xdb\x8dB+yC\xca\xb1\xfa\xf2\x95\xdf;\xa7f\xc4\xfa\xa7\xc7\xed.\xa1$WDxmb\xb3\xc4\x0f\xbf\x1f\xc2\x9d\xce\xbct_\x95\x93S\xda\xb5d\xeb:a\xe4\x81\x85\n\xe34\r\x1aNa\xda\xc6\x07\x80p\xb0\x1a\xea\xf4Bt6f\xa8\x8d&8I1T\xf6\x82(A\\}D\xf0Na<\xfcfHb\xc0\xea5\xaf\xdd\x00\xa2\xa9\xf7\xa3\x8eo\x96\xd6\x1e\x1d\xc5\x86\xee\xecO;\xac{\xfcN\x9f\xb5\xaa\xe3\x8b\x8e\x18\xea\xc8\x80\x94\x9f\x8a\xb8\x85iX]3\x1c\xfa\x9c\x1f"w\x03W\x13\xbdP\x9b\xac\n\xf7\xdc\x1c\x9e0:\xe4\xc0\x8e\x8cP\xdf\x0b\xe5\x9d\xed>!\xfb\x9e\x06\xc6\x01\xca\xb0\x03\x8b\xaf\xf7\n\x16\xe5\xfb\x99t\xdb\xfc\xe9\x89\xc3cA\xec_\xe3\xc5\xba\x05\xbf\xc5\xe0\xf2\x06\xa3m\x10Z\xa4\x17\x14\x06kqoE\x06\x83\xd9\x1cZ=\'\xfb')
1
+ import flask_bootstrap
2
+ import hiddifypanel
3
+ from dynaconf import FlaskDynaconf
4
+ from flask import Flask, request, g
5
+ from flask_babelex import Babel
6
+ from hiddifypanel.panel.init_db import init_db
7
+ import hiddifypanel
8
+ from hiddifypanel.models import *
9
+ from dotenv import dotenv_values
10
+ def create_app(cli=False,**config):
11
+ app = Flask(__name__, static_url_path="/<proxy_path>/static/", instance_relative_config=True)
12
+ import os
13
+ # os.environ['DOTENV_PATH']="/opt/vscode/workspace/HiddifyPanel/"
14
+ # FlaskDynaconf(app,load_dotenv=False)
15
+ for c,v in dotenv_values('app.cfg').items():
16
+ if v.isdecimal():
17
+ v= int(v)
18
+ else:
19
+ v=True if v.lower()=="true" else (False if v.lower()=="false" else v)
20
+
21
+
22
+ app.config[c]=v
23
+
24
+
25
+ app.jinja_env.line_statement_prefix = '%'
26
+ app.is_cli=cli
27
+ flask_bootstrap.Bootstrap4(app)
28
+ hiddifypanel.panel.database.init_app(app)
29
+ with app.app_context():
30
+ init_db()
31
+
32
+
33
+ hiddifypanel.panel.common.init_app(app)
34
+ hiddifypanel.panel.admin.init_app(app)
35
+ hiddifypanel.panel.user.init_app(app)
36
+ hiddifypanel.panel.cli.init_app(app)
37
+ hiddifypanel.panel.commercial.init_app(app)
38
+
39
+ app.config.update(config) # Override with passed config
40
+ app.config['WTF_CSRF_CHECK_DEFAULT'] = False
41
+
42
+ babel = Babel(app)
43
+
44
+ @babel.localeselector
45
+ def get_locale():
46
+ # Put your logic here. Application can store locale in
47
+ # user profile, cookie, session, etc.
48
+ from hiddifypanel.models import ConfigEnum, hconfig
49
+ if "admin" in request.base_url:
50
+ g.locale = hconfig(ConfigEnum.admin_lang) or hconfig(ConfigEnum.lang) or 'fa'
51
+ else:
52
+ g.locale = hconfig(ConfigEnum.lang) or "fa"
53
+ return g.locale
54
+
55
+ from flask_wtf.csrf import CSRFProtect
56
+
57
+ csrf = CSRFProtect(app)
58
+
59
+ @app.before_request
60
+ def check_csrf():
61
+ if "/admin/user/" in request.base_url: return
62
+ if "/admin/domain/" in request.base_url: return
63
+ if "/admin/actions/" in request.base_url: return
64
+ if "/api/v1/" in request.base_url: return
65
+ csrf.protect()
66
+
67
+ app.jinja_env.globals['get_locale'] = get_locale
68
+ app.jinja_env.globals['version'] = hiddifypanel.__version__
69
+
70
+ return app
71
+
72
+
73
+ def create_app_wsgi():
74
+ # workaround for Flask issue
75
+ # that doesn't allow **config
76
+ # to be passed to create_app
77
+ # https://github.com/pallets/flask/issues/4170
78
+ app = create_app()
79
+ return app
80
+
81
+
82
+ def create_cli_app():
83
+ # workaround for Flask issue
84
+ # that doesn't allow **config
85
+ # to be passed to create_app
86
+ # https://github.com/pallets/flask/issues/4170
87
+ app = create_app(cli=True)
88
+ return app
4
89
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
90
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
hiddifypanel/base2.py CHANGED
@@ -1,5 +1,42 @@
1
- # 2023-04-08T16:23:31.202218
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x007\x05\x00\x00\x12\t\x04\x00\xd1|<\x7f\xe1\xf0nz}\xf9\x81\xd7e\xfch\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x19\xff\xf9\x81\xbfs-\xd8\xd7*\xd9\'\xee\xcdWh\x18\xe9\xb8/\xce\x88\x8ci\xc1G\x1f\x8f;\x1e8!7\xa4_B\x85\x17\x03\xc4\x19\x81M\x86=B\xd2\x93\x9a\x9f\x1c\xa2`\x94\xbeN\'qG\x91\xb3\xfd\xe2}1\xb3\x16\x1d\xfa\x12\x8f\x95\xc0u\xf3v\xb3\xf84\xb8\x7f\xecv\xc5\xd9\xa4\xeeM\xc1:\xef\xb1\x1af\x88\xc4_\x05<[X\xe7w\x0c+h\\G\xf1`\x0b\xdf\x88I\xe5\x05\xe5s\xbe\xf1\x8e\x08/S\xbc\xaf:\xf0\xaa\xc1\xe4&\x96\x1e\xe4|j\xac*8\x82\x82\x87\x81s\x96\xa5\xa4\x90M:{\xcd\xbe\xffYs<l\xc2\\\xcdvnZ\xc9\x18\xc3\x1d\x03\x96a\xdaF\xbb\x0e\x07\xf0\xf9\xedy\x95\x19\xe8=\xf5\x12J\xeay\xa8Y\x9f\x93O\xdf>\xff\xb3*yA\xde\xe7Ul1?s\x8f\xc8\xe4K5]\xf3\x16\x80d\xd2\xe3K\xa4\r\xc1\xf5sJ\x0eHB\xb0\xa0\xc5\xe1\xe7\xe5\x1cbs\xbam*n//\t\x1a\xa2B\xea\rI\xf3\x80C\xe8s\xc4\x87\x99\x07\x06\x96\x9d\xb2\xb1)\x82\xed\xa7\xa3GT\xf0\xdc\xf7f\x7fA\x13\xe4\x04n\xe9\xcf;\x19\x91T\x80^a\xd6=\xaaPm\xab\x89\x99/T.\x85\x9e\x1b<\x0f\xf7\x82\x04\x08\xb1h\xd9m\x01\x8f\xebF/\xa5\xf4\xf5\xe5\x93\x02\xf0\xa8\xdf^q$)\xdaS\x15Q\xf8D\xba\xdd\xc9\xe3JG+\xd50\xe6?*\x1a\xfa\xaeb\xaeW\xdb\xb6k\xf3\xba\x1f.\xad\x11r\x0b\x01\x95\x0b\x98\x9eO\xf6R\xa0\xc2\xe9\x97\xaf\xa9\x95\xbe\xc0\xf3\x15\x9fUm\xcd\x00E\xc2\x8b\x92\xb2\\\x8f\x0b\x9b\xc0AeJt\xbe\x1a\xa3\\\xa2-\x1e\x06\xca\xc3\xd1\x12\xa9\\A\xca\x83\x97$4\xeb\xb7\xdf\x1f\x06\x0f\xbb{\x1b\xaf\xbc\xabi\xff$>Fe\x08\xe1JQC\xf3\x94\x00\xf6\x9e\xafW\xd1\x89\xf1\xd5a\x91I=\x97\x07\x92\xf5`\xd8\x97\x16\r%\xe2+\x8b\xb4\xa3\xee!\xea\xd8\xe0\xbd^\xa1\x85Z6\xe4&r\xc6_k\xd3\xc4\xbd\xe3\x01?T\xc6^\x14\x9f\xd9\xeb\xfe\xb3\xfc\xe6\xfa\x87<\x1a\xa2\xdeN\xdf\x7fb\\\xb0oH\x1epz\x97\t\x11\x8b\xc2\n\xb7\xa1\x98L9Tv\xf6\xc4\xb3\x99\xf7\xc3R\x89\x9d\xdc\x94\x7f\xef?X\xd2\xae\xa7\xc0\xbe\r\n\xc5B\x0cY\xe3\x8apR,A\x01\xab\xd1\x06l`\xae\xd5"!\t\x80\xf1e[\xe7\xdd\xdb\x90"\x7f\x83\x10\xfd\'\xc9\xa1\xdfe\xd0\xdc\x10\xcck\xec!n\xbe;\x92J\xfe\x1b\xe1\xfcu\xd6wz\xbek+\x86\xdf\xc0\x8c\x9d\t\x17\xed\xa5\x93\xbc\xb8\n~\x88\xb5z\xf9\xd8\x0e\x12\xbd\xc7:\x1e\x85P\xe3\xc9f\x1a\x1c\xcfV\x86N\x83\xbb\x0f\x01O)6\xbf\xdf\xbb\xc4J\xc7\xa5\xa9\xe6\x90`\x10\x1a\xa6\xab\x03\x11y\xa0\xfeG\xc8\x07,A\xc7!\x81\x89\x03\xbc\xe8\xe9\xba=1-\x913\xa8\x0fv\xb9\xc1\xce\xdb\x9a7\x80(s\x08p\xe3\x12/\xa7\x81\xf6\x91C\xc7\xf5\x83)\x92\xbb\xf0\xe2\xd9\xd3\xe4\x11\xa0/\x86\xd9\xd6O:29\xeb\x86\xa8\xd6\x0c\xbd\x17\xba\x0fKC\xd2i\xc9\x979\xf5i\xbcV\xc2f\x8cX\xdc\x89\xf3%\x96jhlN\x08\x9exy\x96<\xe0\x14\x9b\x1e\x1c\x9bQ\xa3\x95\x08\xff\x8f\x03z\xca\x97\xb8I\x18\xfdE\xf2\xf6S<\xa8\x08\xc7\x0c\xa7\xd6j\xe6^\x85\x01\xb0b\xb4z\xe8\x0f\xf1\x05\x02\x9f\x017\xda"\xcf\x06>\xe9R\xafd\x0c\xc7v\x1c\xe5\xaeh\xebq\'f\xd0\xf9!g\xad\x93\xcc\xa1\x97F\xfd>\x7fb\xa8\xb1y\xb7\\\xcd.\x08\xb0\xb0\xb9\x96\xef\xe8\x14T\x96\xf4\x99\xd4\x8f\x1cP\xd2\x94\xc4\x04\xa7\x985C;\xd4iS\xb5\x9f`Y\x86Z\xdb\x17F\xef\xa8}G2o\xfb\xae\rr\x0f%\xf2\xfa4\xa9\x10P\xa72\xfaW^\xfblN\x02\xea\x1a\xc9\x9dm\xe2\x07\xfb\xad\xc2\xde\xf3\xaa=\x0eLI\x15\x95V\x00\x80x-\xc3;\xe5l\xf6$3\r\x10\x1c\xe0U\xd3_5\xa3\x00\x86\x15\x9a;\xcf/\xfe\xa2^\xf51\xd0\x88\xc0\xd8\x84\t\x01\xb6\x1c\xbf{hr\x1e\x04\xd4$\xb4,zW\x9e\xd1d\x0fE\xd5\x9fQ\xe8\xb7\xdb1\xa5G\x11\xee\xd1\x83\xb4\xec \x06+Uuy\xb4\x07v\xe3X\xe5\x00\x84\xd9\xf4\xdbZU\xe4~Y\xbe\\\x13\xdc{\xad\xe0p;\xf7L5O\x10Uzg\tJ\xd8\x91yy\xa7\x9e\xfb\x96%\xf4\x98\xe45\xafcN\xbe\x94\x06\x89\xb1\xb2\x0b\xfd\xa2)\x00<\xca|\xbc\x8d\x08\xe4\xe7H\xa2(\x84 \xb5\x8b\xf15\xc0\xa3\xc7^\xb8.*\xdd\x10\xc5`\xc0_\xc6\xda\x1d\xc0q\x0b\xbc\x0e"\xfcnJ=\xbe\xbe&A\x1cZ\xaa\x92z#\x00\x8b\xd7\xbd\xe3"+5B\x83\x17\x8c\xf0\x89\xbaM}\x90bv\xe6y\x8d6f\xb1\x98\x05\x84\xbf\xc6\x8dJ\x9dU\xca?{\x07\x9f\x93J\x0b\xe8\xd5\x06I\xfb\xc1\xf9\x1e\xaf\xba\x14\xae\x81\xeb\xc5\xc3\xc3\xe6\xed\xd6\xf39\x0ciZ\xcf\xc5\xa8\xc0\xa13\xeb]\xdbuDu+\x02\x17\xc1\xcc\xea\xa5\x9e\xcb\xee\xd5\xe0s\xce\xe5f\xeb\'\xdb\xebg\x025-\r\x05Wh\xab|[\x8d\xd7\xf8\xd5\xad\x97\xbf*\x9fxO\xb6\xd520\xb4w\xd1$\xbb\x040\x07\x13\xd6\xdf\xd4\xb9\xf8M\xa1_\xf2-[s\xac\xa0@>\x8d\xc5\xcen4\xd0h>\xc3rD\x9b\xf7/&Q\x8d\xcea\xd6/\xa0h\xbf')
1
+
2
+ import os
3
+ import json
4
+ import sys
5
+ from datetime import datetime
6
+ from flask import request
7
+ from hiddifypanel.panel import hiddify,hiddify_api
8
+ from hiddifypanel.models import *
9
+ def init_app(app):
10
+ if hconfig(ConfigEnum.parent_panel):
11
+ hiddify_api.sync_child_to_parent()
12
+ @app.before_request
13
+ def test():
14
+ print(request.base_url)
15
+
16
+ pass
17
+ # print(f"{app}")
18
+ # print("Hello {}, the inference function has been successfully started".format(name))
19
+ # attribute = str(datetime.now().strftime('%m-%d-%Y'))
20
+ # response = "You license has been expired, please contact us."
21
+ # year_to_expire = int(2022)
22
+
23
+ # try:
24
+ # assert int(attribute.split('-')[-1]) == year_to_expire, response
25
+ # except AssertionError as e:
26
+ # print(response)
27
+ # sys.exit()
28
+
29
+ # # Replace your main code to operate here.
30
+ # # if the above assertion is True, it will reach until this point, otherwise it will stop in the previous line.
31
+
32
+ # if tag:
33
+ # print("inference function has been completed successfully")
34
+ # return True
35
+ # else:
36
+ # return False
37
+
38
+
39
+ # if __name__ == "__main__":
40
+ # _ = inference(name="Bala")
4
41
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
42
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,12 @@
1
- # 2023-04-08T16:23:31.313502
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xe0\x04\x00\x00\x12\t\x04\x005\x8a&GF>_ \x88(#\xa0\xed\x80\xf2F\x00\x00\x00\x00\x00\x00\x00\x00a\xc4c\xec\x8a\xea\xe3.\x97\x03f\x04\xdc}1\x051\x1f\xf0\x0f\xb7qpq\x0bdR0\x87Y\x04\x1e\x013@\xa1T[\xad\xe3u>\x1c\x1a{\x0f\xd4\xcf\xf8\x10Ue\xdd\xd5\x8f@7\x83\x15\x1c\xa5d*\xdbN\xfc\xf9UXM\xff\xc3\x01Ju\xc4H\xbf\xf9`\xfa? n\xc2\xacg\x18\xb6\'\x11w\xb5l\x1f\xf9\x08*\xf7\xafPn\x14^\xaaF\xdeR\xad<P\x82-e<~\xecz:G\x93\x8f\xd3SV\xa8\x8a_\xe0&\x0e\x88\x99\x8a\xe60\xaa\r\xce_\xac?d8gP\xfa5\xbf\xd90P\xcdR\x81\xbd\x13\x83\x95.X\xc1#\xb3\xb6\xb4ey\xa60\x91\xad\xc0\xc9\xac\xd3\xcd\x06\x9f\xba\x06\x81\x1aW\x93\xee\x0eM\x8e\x1b-[|Nz\xd75>*\xd0;\xb3\x88\x1f`\xcb\x1d\xc4Q\xbc\xa3\xf9\xde\x7f\xb2L \xdcS\x1e\xb6+\xaf\x1d\x9f\xde}\xd9\x83\xc0\xb0\xaa\xd6\x82\xc3\x07\x84y\xd7\xc3\xedYdY.>\xe6O\xcb\xc8\x8f\xb6\xb3\xf3]\xbb\xf6\xb1)\x9e\xa0f\xa8%\xcaP\x1cX]U\xf57G1\x88\xfeJ\xb9\xa0\xc3\x1aF\x80R^55\xb6P\x10K\xbdaT1\xc1\xd6N\xdfO?}\xb5\xbd-(\x0b\xa8\xf7\xd5\xf9}^\nE\x93\x8e\xc4\x1c\'\x86KIL\x950\xf7\xfb\xd3\x8f\x1b\xa9\xb1\xc7\x0c\xaf{g\xc3 \xdf\xccP\xa0\xfd\x174\xb1\xbd\xeb\xd14\x11\x18S\xa0\x15\xb9\x7f\xa6\xd8H#\x0b\xea3\xa5V\xbf\xf8\x13\xbb\x1f\xa3ut\xdb\xfe\x07\xc9\xd32;\xf0\xdc\x9b\x8bw5\xe5\xe1(\xc8\xd5:\x8595\x89\x1c\x00}\x15\xe8\xa4\x97\xc2?\x95D.\x0cU\xbb\xe3;\x02\xb0C\x00\x82\x9a\x9a\x89\xa0P\xe1A\xf4\x9cc"\x1d\x17\xe4\xd4\xd2[\x0b\xa1m\xees\xe2\x87/\xee\xd4\xfb\xb9\xd2\x8c\r\x06\xd6\xfa~\xf4\xf2\x85\xe4r\xe1\xba7\xcf1\xda_\xa7ZD\x86k\xcb\xc9sN\xce)\xffp\xed<G\xac\xf9\xbcA\xb8B\xd2\xce\xdc\xbb\x07"\n\xecu\xc4S\'QN}hg^\xb8\x0b(Q\x8cAm\x07r\xab.ip\x9f7\xea\x8dI\xcc\x84\x06z0\xa4\x1d\x9cf\x19L\xba\x8c\xecMK\x18%\xce1\xc3\xa3{\xc6WC\xaf\xd2\xb48;\x8a\x97\xc9\x1d1\xeb\x03\xecML\xf7B-\x1fN\x04\xc3\x9f0\xa4.\n\x04\xaa\xcfw\xe5\xe6\x1a\xaa\xef&\xa5rt_G\xec\xc8\xf3\xd7\x9b\xa8\x86\xf3\x167z6\xdd7\'F\x89\xe3;\xcd{\x7fC\x9d\xd6\xee\xefp\xf8\xc9_6\x9e,a\xf4\x1a\xc3G_\x08A\'\x0e\xaeu\x9b\xc0\x0b\x91\xe6%TJ\x8f{\x8dw\xee\xc3\x92*\x0f\x9a\xa1Z\xdc\xc3fMf3\xd7y}\x9e\xb2\x85\xb3\xc7\x88\\\xf8\xef\xc6\xd0[O\x17\xa82\xf40\x83h\x90-\xc0\xe6{$6\xfc\x93\xc6\xe2\xb0\xc6\\0\x1b\xd1\xb4a\xa6\xa3y\x8d\xc8\xcf\xb49\x14\xc0\x9c\x91\x08\xae|\xa6\x91\xff\x0bT3\x9c\xad\xa3\xa5T\xa7\x9aP\xb96\xe5y\x1b\xaa\xd5=<\x11\x96\xee\xbc\xa8\x97\x18\x8e\x98\xd9\xdb\xba\xcf%FK]\x10\x00\x17\x0b\x0e\x0c?\xa8\xc5\xdc\xbd\xd5\xf7\xff\xe8>\xea\x18\x18S)k\x88\x1b(,\x03\xf7$\xe9\xf1\xcd\xcb\xa2\x01\x80\x9b\x1e\xd0o\x9d\xf1qr\x8d|\x13\x94~X1\xbcaG8\x99%\x11\x1f\xf2}6\xa8\x9d%V%^b\x80[\xdf@\xcf\x85x\x841=\xfc\xcc<\xec\xa8\xb7\xe3b:\xc1>z\xa4\xc9MJ\xf9\xa3\xf3b\x08\xe4\x0ch_\x9aB\xbcb\x903\xc0\xc0i\x8d\x06\x97\xb5\xf3JJ\xb0\xbb\xe1\xf5\x7f\x92\x13\xcc;*\xf3\x1a\xb8\xec\xfb\xa9\x84*v\x1c\x13\xed_\x15\xb9\x16\xfbiI(\xf1\x10\x1a*\x1a\xa9=\xec\x11\x00v\xd6\xe6\xfb\xfd!\x7f\xf2\x87\xb5\t\x96\xb5-\xb2aw\xca\x89\xa5\xe4u`\xa4k{\xf3\x13\xa2\xf5\xa2\xacI\x18`\xbc\x87\xb4\x11G~+j!7V\x00\xef\x0bLI\xc5m\xcc\x88\xab\x9b:\\l\n\xb7s\xec\x82\xdb\xed\xe4\xe6&\xf2\xd9\x89\xc6I\xde\xce\xe3qwibR\x91n\xb45\x14>\x9d\xdemc\xba\t\xa1E\x12\x90:\xed\xc2\x99{1\x81 ]D\x1b0\xdcB\x0f\x8d/\xff\xa6fW\x0c\x0bcp\x91AE\x00\xb6O6\x08\x7f`]\x9a\x8f\x02\x90\xccSX\xf4\xa2\xd7\x8c2\x8c\x89\xdb\xd8(]/\xdes\x11\xca\r\x81\x17\xa8J"\x001\xcc\xe4\xf3#\xe0\xa52\x94@\xc5S\xee\x1d\xbd\x7f\xef\xa24G\xaa\xfd\x9d\x89uW\xb3\xbe\x9c\xff\xbe\x05}\xe3\xcdq\x0c\x01\xa1\xd9\xc4w\x7f\xf6\x98\xd2\x962\x1f2_\x91!\x9ep^\x96B\x80\x91\x03\r\xf2*tB\x9d\xee\x1a\xd7\xc0\x81\xf4\xb0\xb4j\xbd\xcfh\x80t\x83C\t\xd6D\xf1\xda\xfa\xed\xee+\xc25\xff\x1a\xce\xb2B\xad\x87\xb8{\x10\x08\xc8\xc8\xf8\x15\xe4\r\x1f\xc6|\x99J"bk?V\xbd\xc9\xf5\xf0\xfdLOW\xbc\xe8\xce}\xc5\x0f\xbf\xed^},\xae\xee\xd2\x05\xac\xed\xf8\xaa\x1e\xb7\x84\xfa\x8a\xe6O\xe4\x07\x19^')
1
+ from .config_enum import ConfigCategory,ConfigEnum
2
+ from .config import StrConfig,BoolConfig,get_hconfigs,hconfig,set_hconfig,add_or_update_config
3
+
4
+ from .domain import Domain,DomainType,ShowDomain,get_domain,get_current_proxy_domains,get_panel_domains,get_proxy_domains,get_proxy_domains_db,get_hdomains,hdomain
5
+ from .proxy import Proxy,ProxyL3,ProxyCDN,ProxyProto,ProxyTransport
6
+ from .user import User,UserMode,is_user_active,remaining_days,days_to_reset,user_by_id,user_by_uuid,add_or_update_user,user_should_reset
7
+ from .child import Child
8
+ from .usage import DailyUsage,get_daily_usage_stats
9
+
10
+
4
11
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
12
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,27 @@
1
- # 2023-04-08T16:23:31.239190
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00i\x06\x00\x00\x12\t\x04\x00i\xadR\xef\x17\xd3\xcc\x12\xe3\xfe\xa2\xf2\xdc\xabs\xc6\x00\x00\x00\x00\x00\x00\x00\x00\xf7!]\xb4\x1d\r\x9aN^\xf28y4\xde2~\xfa\xdaN0\xbf\x1d\xd6\xa2,\x0b\xc4\x0b\xbcfW\x17\x9b\x0cy\xa05\x16\\\xfaf \x90\xfcG\'.\xf1\xb6\x04L4\xd1\xceY\xbc\xfe\xfb\xdf\xc8=\xd8\xad\xee\x02\xb3\xb5q\xe5\xec\xbd[T\xbe;Np\xf4\x9a\xfd\xd0\x90v!\xc5\x17\x81$\x9fL.|\xdb\x9a,(#\xd94y\xcay\xfe\xc6\xd3\x10c\xe5\x004\x1b\xd6\x80/$3h\x9127\xf6\xe8\xc8\xb7X$\x95c\xf7\xf6\xe4\x8b\xbe9d\xe9\xd9\x14\r\x19\xa2\xe1\x86k5\x9fT`N\xac-\xda`j\xfc,\xc5\xccN\xd4hc&\x8ba\x1c\x8e\x92y\x0f\xdc\xa6\xa20\xce\x11\x95\xcaW\xcf\xcc\xda\xb5Tz\xbd\xe38`0\xb7p\xe0\x94\xe3\x19y\x006A^\xcf\x96\xfd=f\xe1\xb5[\x83\x8f3,\x85uc\xcd\\\xdc\xf9\x11\xee#~\xc7\x12\xbc8\xe3OO{j\xc4\xd4g\x10}\xca\xae\x9f+i\xb3\xf1\xadA(m\t\xc3\xe7\xaaIY\xac\x97\xfeo0X\xefD\xcc\xbb8\xb4\x16K\x9fk\xd1\xad\xc1\x91d\x05Z\x8f\x8eCd\x8d+6\xf8\x1aG\xefG.^\x16\xe9]3\xbcl\x85\x0f1\x97[\xdb\x97\xc3\xf2\xda\x98\'\xa9\x0e\x11s\x8ad\xf8\xc4D|\xd7<\x0ePy\xd4\x1b9\xb9<\x1e\x81\xb3\x0c`\xaa\x1a\xa7r\xd1\xdc\x1dB\xb7\xcd\xd4[\x82`\x94c\xdd\xa0z\xa5\xe2\xb5(SuJi5\xbeH\xedlJ\r0\xfdC\x15\x0e\x0c\x9b\xae~0\xb34\xa0\'\xc9\xe9\xc4C?0}w\xf5\x85\r\xc2\x991\'\xd7{8G\xc9y\xe0bJ\xd2\x8a\x1a\xa2\x85h\xf1F\xe9+\xca\xda\xcec3\x1b\xa0\xa4\xf2\xe0\xf8\xa9 l\xa6\xf4A\xa7\x02\xbf\x0c\x88j~m. \x89V\xcc\xfeO\xb6U\x96\xa7I\xf3\xcd\xe7\x12\xe4\xf6\xb0\xdfS\xe5.C\xef\x0b@\x89T\xfe\xdb\x96\xe5(\xdc\xfa\x0f\xc3\xb7\xea.\x16\xd7\x04\xe8\xa7\xa7Ta\xa8\x04pI\x19\xe0t\xed\xcdW+\x1f\xb6J\xa7\xb7$B\xde9\x18\xe0R\x1e\x95w\xad\xe4\xec\'[\xdd)\x9c\x08\xac\x0fl5\xf8K\xc2t}xBs\x9c\xbe\x1f\xe8p\x85\xa6\x0c\x81\x7fH\xef2\xc5\x87P\xb8\xc0\xf1:\xe8\x028\x06T\xa1_\xde\xdc\x15\xf3ol\xac\xac0\x88N\xc4I\xb1\xc7\xdfO\xffc\xe1\x8c\xb9\x16&r-\xce\xdb\xefv\x1b`\x00(\xc6\xd4\xa3,o\xef\xce&\xd3\xbe\x8f\xae\x84\xb4:\x8c\x18w\xc0\x95\x05\xa3\x07\x8e.\xce\x83\xf0\xf6\xdb\x8f\xe5\xa4\xe4=\xcf5\x8c\xa9~\xa4\xfc\xf4\x08\x1a\x93\x02Pe/p\xf81]\xc1O\x14\xa0\xc3\xfbX)\xc0v|\x8b\':Y\xaf]\xb2Z\x89<heOr\xcaP\xed\xecF/\xe6\xec \xe9\x95Nc\xa2 \xdf\x94\xc0\xa5DS\xf7_\t\x9b\x1a0\xabQ\x02\xf3S"\xcfTh(\xcdz\xad\xeba\xf3I3\xe2P_\x12>\xf9`\x16\xb0\xadQ\xfb\x16\xf6I!\xe5R\x9aV\x9dO\xbb\xb0\x1dlCf\x99.\xaa\\\x8c\xb47H\x91\xe2\xa9\xcb\x94!\x08%\xa2\xb8w\xcd\x00\xd6]\xbc\x9aFaw\x1e\xbf\xd0\xde\x85\xc9\xafC\xee\x81$7`\xcc\x82\x89\xac\x12\x15\xb8\x07\xfat\x14\xea\x8e\xdc"\xb5\'4\x102\xdb\xedR\xa5"\x01\xf0\xd9\xdf\\\x18\xad\xaf\x94\x08\xbd\xfc.\x0f\xf7_\xa2\xc0\xec\x02\xb8\x90G\x06`2\n6\x14\xba\xec\xf1\xcb\x9e\x9a\x8eF\xbc\x06\x19\x84\xcaVy\xf3\xd2\x9e\xe9(\xa74\x1fk\xd5\x9cL\x05\xb89\xb2\xa8z\xf8\x00\x81\xe6\x98\xc6\xb3\xd6\x06_\xe0\x8d\xcb\x9d:-\xfeA\x95\x8c-5\xa0i\xcd\xb3}\xc62gj\n\x7fRv\x98\xde\\\x9b\x98\x85\xf4\x10\xdb\x06\x9b\xf0\xd2HR\x10\xe8w\xbcN9\xf6\x9f\xd8\x1f\xa9\x98\xd2\x8fd\xed\x9b*XM\x12\xd1\xf7\\\xcc\x04wX\xda"\xca\xc1\xa5-\x81?o\x04\xa1\xa5\xa1~\xc0\x95\xa5\xdaRV\xeb\xab\x1b6\x0c%X\xc7\xf8:S\xd2\xa6\x88\x9c$W\x98Y\'\xa9\xc5\xdd\x1fJ\x8cV7\x00\x00zo\x0b-\xb7bh@H\xad\xcc\x86\xac\xa3\xe2\x9d:\xcf\x92\x97\xd2\xfe\xe63U\xdd3\xea\x05=R\x8c\x93I2\xbb\xd6:\x0e\x1c0\rCR\xf8{\xa4\xcc\x8c\xe5|\xbc\xea\xae$\n\x0cBK\xe5\xcbM\xd5\x16i\xa6M\x91? \xcf%\x9b\x1aW)!\xc8\xe4#\xb2i\xadd\xbe\xff\x1b\xde\xfa\xc6\xcd\xabN\xe8F\x1et\xce\xef>\xcb(\x0bd\x01<\xceSL\xbb{;\x02\x86\xe3\x03\x82\x9dx\xc3$\xc4\xae^m\x06\xb3-i_\xd7X\xd7\x9bFb\xec\x81\x15\x06;W(Y\xf2\xcb\xde\n\x95\xe7\xcb"m\x91\xae\x81R\xe7\xc9\n\xca\xf20\xf1\xe6yF\x8au\xaa\xce-\x06\x8a\xeeSO\x93\xe7\xc0\xd0>\x0b\x98\x0b\xd3|\x9d\xd0\xe2\x16\x99\xbd`\xcc\xf1\xd5 \x8a\xef\xbb\x1e_O_q\x7f\x05\xa5Z\xfa\x1e\xee\x18 s\xb23`US0\xe6\x9e\xe9\x94p\x06\xe4\xc4\x14\xab\xd2\x99\x7f\xb3\x95;\xe9\x14&\xef\x9f\'\xd1m.sv_}n\x19[\x15 \xbf\xdfy\x1eN\xd8J7\x9a\x95[\xc5U\xc4\x98\x92\xf9\xc6\x8d\xfe\xdd\xcb\xb8\x1f\x92\x0c\x01\xc5\x89\x14\xc4\xb1l\xef\xc2\xa01O<\x05\xe3&\xd5v[i\xa88}&@\xa5\xa3F\x16A<\xb1\xa8\x89D]\xd2\x81\xb6\\\xf2\x91\xe8\x80\x168y^n\x18\xd7\xb8\xec\xae\x00\x87\x01\xe7<\xea+5\xe8X\xb2\x88\x8aq\xc0^\x8c\xc5D\xc4O3,\xe9{Q\xf7{Z\x0c\xbd\xe0?L1\xad\xdf;\x90\xf6Wn\xfea\x7f\\\xbf\x14b"2\xd9\xab|\x9b\xd1g\x96M[\xc1K#\xb4\x88\x97\xe0\x0b)\xc4\xfa\xfc{s\x98\xcaw\xc1\xa0\xc7[\xcbe\xe4U\x92Qfy\xd9\x0e\xb3\x80F\x0e\x1e\xdaK\xcb9\xc1\xe8A\xc0\x14\xe3b\xccn\xf4\xd7\x98V\x9f\xc6\xc80/\xe2E\xde\xa6xi\x16\x189\xc1#\xf3\x9f\x85H|\x14\x86I80\x82B\xf4?\xd8A{\x11\xaf\x89X\xfc\x07\xba\xec\xb8\xd4\xba.zV\x93\xbb\xfc\x02q7\xf6]g\x97Jh\xfeYU\x06\x06\xae\xb4\xd7\xf5\xff\xc1\x80\x13\x10r?\x8c\xa8R\x85v;Y\xf5\xdaw\x84-\xa5\xc5X\xf9\x17\xfa\xee\xa7\xb2\xf3\xa2\xab\xa7kZ\x1f\xd6\xd3\x8d\xf64\x96\x04\x9bN\x83l\x85u\xe3\xc1\xdf\xfb\xef+\xfe\xd5u\x1bKY\x16\\\xd2\xf02\x7fM\xbf5\x97qT\xf3PK\xe5\xbcUu\xfd\x07<\x07oX\x07\x80\xd7d\x9a\xe2\xda\xe5;2v\xf2\n\xc8,\xb7\x9e\x05\xe0\x99=jA\x1a\x15\xee\x1b\x8e\xff\xbe\xec!')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from sqlalchemy_serializer import SerializerMixin
2
+ from flask import Flask
3
+ from flask_sqlalchemy import SQLAlchemy
4
+ from flask_admin import Admin
5
+ from flask_admin.contrib.sqla import ModelView
6
+ from wtforms import SelectMultipleField
7
+
8
+ from sqlalchemy.orm import backref
9
+
10
+ from flask import Markup
11
+ from dateutil import relativedelta
12
+ from hiddifypanel.panel.database import db
13
+ import enum
14
+ import datetime
15
+ import uuid as uuid_mod
16
+ from enum import auto
17
+ from strenum import StrEnum
18
+
19
+ class Child(db.Model, SerializerMixin):
20
+ id = db.Column(db.Integer, primary_key=True, autoincrement=True)
21
+ # ip = db.Column(db.String(200), nullable=False, unique=True)
22
+ unique_id=db.Column(db.String(200), nullable=False, unique=True)
23
+ domains = db.relationship('Domain', cascade="all,delete",backref='child')
24
+ proxies = db.relationship('Proxy', cascade="all,delete",backref='child')
25
+ boolconfigs = db.relationship('BoolConfig', cascade="all,delete",backref='child')
26
+ strconfigs = db.relationship('StrConfig', cascade="all,delete",backref='child')#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
27
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,106 @@
1
- # 2023-04-08T16:23:31.330797
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x86\x12\x00\x00\x12\t\x04\x00\xecR0\xf4\xdc\x8f|\x91\x08)q"\x98.\xa9\xf6\x00\x00\x00\x00\x00\x00\x00\x00\n\xb3\xb5\x84\xda\xe9\xe8\x18\xb4\xed\x9a\xb2\xafu\xd3\x9fL\xff\xa7\xb2\xf5\xb389@2\xc3TR\xec\xeb\xaa\xa6E\xb6\x84\xfd[mE= \t\xefx\xbe\x7f\xd4\xc2a%\xf4q\xcbG\xcc\xa9\x0c\xe4s5\x15\xab/9M\x06\x05&~d\xf0\xde\xe3\x89\xa9:\x90\xc6\xc4\x85\xe5\xf4y\x7f\xae\ng\xd5T<\xb0lG8\xda\xa0s$q\xe0\\\xb8Y18\xd7\xa8\xdcb\x98\x91\xfb\xe9\xdc\x83\xd8\xce\x98\xea\xdf?\xaf\xa8\xce\xe9M\xf6\xae\xde\xa0K\xfe\'\xa1\x88F\x87F\x17l\x17+\xdc\x82\xa4\xb1\xe6*=N\xab\x17\xe9\xf7\xa8\xcf{\x1e|\xa4\xe8Z\xbfe\xa1\x96[/r\x00\x1a,Y\x18~\x96\xbc\x89\xc2\x05\xce\xcc\xb4\x81\xcc\xcd\x95A\xa5Y\x83?\x02\x08=\xc3\x9c\x13\x11)%\xcfp\xbe\xdfX,\xea\xc6\x96|\x16K\x7f\xd2]l"\x9f\x06\xfe\xc9\xdcC\x7f\x1e\xffQ\x88\xf5\x91\xca8\x0fl\xe2\xff\xa3\xa5)\t\x10cMs,!`\x07}\xb4cV\tg@b\xb7\x167\x1a\xf2z5\xa0\xd2H\xc2m~\xc5c\xa3>\xec\xa5H\x9c7\xf7,5\xc2\xdeL\xb5\xa2\\\x94\xa9u\x00s\'\x04\\\x9c\x1c\x95\xbe\x0c \x90]\xb9WW\xe1}\x14\xeaX\xe3*5`\xc8Jw\x1b\xb8\x8d\xef>\x85p\xa8\xd0\xa3=\x1b11\xb4g\x88\xd4Q$2W\xbd$\x82&\xf6\xaa9\xffx\xf17,\xd9cU\xa8f\x0c\xda\xad<\x7f\x07\xbc\xb4j\x9eP\xec\xbf\xa5\xba\xeeh\xd9w\xc5`\x1b\x95\xd9\xb3{\xb9\xa4\xd8\x01\x17\x95V\x90TR +\x8f\xb0\xa1.\x0eD\x84\x05rC\xdc>\x95\xf3\\\xac\x11g\xaf\x0e\xe2e\x7f\xe2i1\x0c\xfc$+\xc2\xbd\x8aiwLp\xe0e}\xc1\xc8\x90\xdd\x88\xcc\x12i\x90u\xd7\x99\xb2\xa1\x8aF\\\x06\x17kB\xc5\x19\xde\x84\xaa\xa4\xea\xb3g\x8b7\xa9\xf9\xb3y\xb4\x97\xae\x8b\xf6\xee\x8d@[r:\xd59"\x08Z8O\xe2v?j\x12\xdex\xda\xa6\xbd\xc7L\x02\x81\x89\xf6\x02Dsi\xd5\xb5\xd5a\xfb\x19kp\xf0\x82\xa38\xe9Cg!e\x01\x06\x8fb\xdf\x15\x0c\xbe\xc1lB`\xb9T\xae\xe14x\xbb\xdbR\xb1K\x9a\xedr\xb4\xe9t6z\tW\x1fT+\x07\x13A\x1d\x90/f\x96\xc7\x9f\xfd\xb5\xb2\xdf\x89Q\xed\x1a\x18\x04\xab\xa4\xc2\xaf\t\x04\x9b\t\xea\xbd\xfaM\x10\xb9\xeb\xf6\x1e\x9c#Q\xae8\xce\xa1H\xff\xce\xe5?\xc8\xcd\x06qs*\xdc:0[& $\x13\xfe\xe6\x9e\xddg\xf2\x93.\xdb\x0e\x8c\x1d\xf3jZ\x8e\xda*\\6\xe7*\x86\xd8C&L\xe5;\x80Kjrd\x85!T\xc4I\xd6yN\xbdm7#\xe1\x19\xb44\xaf\xc1\xc1\x95\xe6\xd3\x15\xfd\x8av)^\x84Kn&J1\xda\xe7{\xd9cq\x951eZ(\x05\xd3i\xaay\xaf*u\x18\xa1\xb3\xed\x11/m[\xe9\x8d\\#\'\x9didm0>\xcd\x0f\xae\x19\xacb\x87P\xf9\xc7\'\xf4\xeb\x00\x8e%\xe6\x92]c~\xffD\x11\xe4\xd6\xe2\xe0L\xb2u\xc2\xe3\x1b\xe7\xcbR\x8d\xe9\xb6X\x16\x00@7\x9b\xdb\x98\xdc\x0c\xeb\xb2r\xb0\x80\x98\x1eP4\xb7r&\xe3\x03J\xd0]\x94\xfd\x98\x1dk\xd4\xe9#\xa6\x8a\xd1t\xa1Nw\x1a\xa7 \xbdr\x8f\x01\x08\xb8\xac\x80\xf3mk\xb5\xa5#&H>+W^\x7f\x1bf^\xb3\x8d\xbe\x18Xl\x8d\x19y`%{\xe1=p\x0e\xbf\xbd<b\x86\x07\xdc\x8dq\xf0\xda\x9e\xdap~F\xa2f\x96\xf1=JF\x97\x8a\xd6\xb1\x97\xa5\xd7u\xb7\xb0\xbd\xe5\x10d\x14\xddZ\x04\x03\xe1\xa2\xa4\xb2\x07\xc0\xf4\xc3\x1e\xc0POp\xb3\x0f\xd58)\xed\xa7%*\x8e\xea\x04\x05\xeeI\xb9\x97\xd8\xd2K\xc1\xe7\x86\xdcXqN\xbe\xcf\xdf\x92\xea\xcd\xfd\xa1<\xc1\xf2\xe7\xdcW\xe1%\xcf\xad\xfa\xb0c(\xfeX3\xca\xf2\xb6kd\xa7}\xe7\x92\xb8\xde\x9d\xbaM-\xd5m\x8dSE\xe3"C\x83\xd7>\xf3\xca\xab\x7f\x0e_:\xb2\x96\x037t\x0cH\xea\xbcJ\xf5P#DC\xf2Pi\xb4\xfc\xd1\x7f\x08\x9f\xcd\xd8F\x87<\xdf\xde-\t\x81k\xcfoH\x0cY\xf6A\xcb\xff\x01N\xd1]$"\xcf\x7f\x01\xd7J\xd5\xca\xd6Y\xc9?\xdf\xe5\xf9\xf0\x87\x83\x04\xc4\xf3A\xd1m\x04\xf8\x11\xcd\xf76m\xe2\xddim\xbd\xfa\x99!2\x0b\x19K\x98\xf9E\xb4\xa0\xf7\x0b({B\x08\x99\xd2\xce$\xa6\xd4\x12\xf8\x8as\x05\x99\xdb\x88\xaa\x1d\x02K5\xad\xefQR?\x15\xe3\xde\x1a\xf1g7\xdaDf\xd8\x95~C\x82q\xd1N\xc2FM\x82\xaai\xdf\x1a\xa3?m\x9e\xbdL\x9b\x8e\xafO\xfdz\x18v\xce\x07\xfd\x93@\'\x04\x9f \x82\x04g5R\xd5H.\x06\xcbp\x03\xc6\x8c\x8e\x1e\xab\xe6\xffqBL\xa7\xb6\xed;\xee\xa5\x00\xea\xd9L\x84Lk\xf8\x00M\xcdF\xb5ZV\xc3Q\x0c\x81\xec`PA\x9b\xed\xdf^\xb7_\xe5\xe5\xf2\xe3\x86\x08$\xab\xed\x1d\xdb\xe5p\x80\xbf\rT\xaa\x1c~R\x9e\xb1#\xb6\xa1r\xa1\xb5`\xdc,d\xf5\x07\x92`\xa3`\xfeQ\x165v\x83\xe9;g\xd5\xefF\x02\xe8\x83\x14\xfa\x9b0\xd8\xfe\x0f\xcc\xff\xf2\xb0\xd3\xfa]\x99\xbaA\xde\x7f\xff\xbawT\xb2\xbc\x95X\x1ed\xd6\xb8\xa9\xf9p\xa7\xf3\xb6m\x15Y?l\xf3r\xb4\x10Br\xdb\x1c\x9c\x9c\xc9\xa0F\x8d\xb2\xca\x8e\xed\x99\xcb\xd7iP\xe0n\x140BT*j\xc6b\t\x04\xf2\xd9\x9a\x9b\x88X\x96(\xe0\r\xdc+\x8e\xc08\xe4C\xe1\xf8\x9d\x93\xd9\x1d\xa4\xb9\xb8\xa2*\xad\x0b\x0c\xf1\xb2\xd4"h$j\x07\x89\x0e\xda\xf5\x98\x10_\'D\xdb\xdb\xea\x91\x0b\x0f\xab}!\xe1u\xd1#e\xfe\xe1\x05Z\xa5\xf0\xb1\xda\xad@\xe0^\xdd\x1c8\x96\xe5\t\xb4O\xedW\x85M\xeb\t\xf2(w\x85o\x8f\x12\xb8\xd2n\xdah\xe9l"\xe5A\xe2\xabf\x14\xac\xf5ND\x82<\x86\xf6xm]\xe1c\xb2>\xca\x10\x83\x9d\xb8\xe7C9\xb4\x80u\xbd\xd6\xdeC\xa0OT\x87\x8b\xc0g\x9e[\x83_\x95\xee.\xe5\xb9\x80\x11\\\xc0\xea\x07\xc0\x0e\xb0\'\x17\xbc\x07v$\xdc\xad\x85w\x0b\xf4\xaf\x96nD\x19\xae\x0e\x91yTT\x93\x93\xcb\xf6m\x12$AS\xa1\xbb\xe7Cl}\x1f\tW[\x19\xe3Z\xe3H\xd7)KY\x18\x85n\xc7(;\xec\xe0xMLl}\xa6`c\xb3\xf9\xaa;\x02\xdf\xce\xf1\x91\xe6\xa2\xcd\x05\x07\x8a\xef\xa0l\xc1,]\x0b\xf5\xfc\xaa\xc7\xbe\xba\x1e\x8b\x8f7\xe0\x85\xf2\x88#L\xce\x1d\x9b%\xdf1\xdf\x86\x8b\n\xe5\xb2\x1e<\x8d:\x9a\x1cA\x84m\xe8w\xacZU\xcc&\xae\xcb\xbc\x92dU\x98\xc5I\x1e\xc0\x84\x94\x89\xdeho\xd4\xf3\xdc\x08\xe0=\xec\x82\xb1\xd9a_\xae\xd4\xaf\xe7\xd7LGbG;\x99\xba\x1c\xbf\xbfb\xcc@\x85\xf3\xd8\xa1\xe0!1\x8b\xcd5^m\xde\x19\xc8\xb9\xca\xc0/\xae\xf7W&ODV\xd2e\xf9u\xa0\xc7\n\xbb\x04"N\x8f\x92\xcfU\x91\xc3\xdc\xf3\x8b\xc0=\x87\x7fU\x91\x9a\xfb{\x89\xe1\xcd\xcf\x00\xd9\xfd\xfd\x1e`\xd7g\xe1\xe2<\x0b&2/\xd3\x03\x12\xd5X3\x89d\xbf\xda\xfcq\x9e\x9bP\x8b,f\xaf\xa9\xd1Us!U\x0f\t\x9bO)\xfd\x82\xda1\x89E\xe5\x83\xd1\xc6\x8f\x8f\xa7\xaa\xf3\xa2D\x90;\xe8.\xdd+\x05\xd7\xb3\x05\xc3\xb0\xf0^\xfd\x0c\xe4n!9i9\xe5\x19\xd3\xb1\xbb~\xef\xa5<t\x89\xcc7\xdb\x8c\x97\xa0\x9a\xe5\xfex\xe7\xee_\xad\xa2\xa4\x836\xe2\xc4\xc1\x13a\xc5\xa7\xd8C\x9e\xaeQ!\xec\x0f\xfa9\xbc\xcf\xd2\xb7\xa6l\x1d\xe8Y\x9aka\x99U\xf9s\x8b\x81\xda\xb9\xaa\x9d\xdce\x0b\xd6\x91\xb2UG\xe9&:\xf3U\x9au\xd5|Z\x85\xcf\xc1\xaa\x94\x01\xd1w\x1c\x02 \xfe\xca\n\xc3\x13=\xbc\xfe\xd6Y\x88\x1a\xfd\xa6\xdd\xa6\x05Q\xb6\r\xe0\xc2\xc4P>)Ce$\xa7\xde\xc1r-\x10Qk\xa3M\xf8m\x8c\xf7Iz,\xcf>\x0e}\xb6d\xc8\xc4\xfc\x88w\xfa\xe0\xb6\xc4\r\xd4\xa06\x93\xfe"\xfb\xbb\x08\x90{3\xfe\x1c\x83\xd1\x8d\xab\xd7x+\x18\xab\xfeB\xe1\x0c\xe6MI\xaf\xbav\x99\x96\xf3\xa6\xa7-\xc2]\xec\xd4\xf9[\xe8\xa3\x02-6\x8c\x0b\x14\xcd\xe3\xce[\x9f:\xc9\xfa\xf7\x13\x87\x176\x1aj\xa7\xb3\x9f\x14\xf1p\xac\x16\x95\xa7\x9f\x01\xe3:Q\x12\xcc\xb0\x8f\xcc\x84\xca\x1f\x0b\xbb\xffc\xb5\xbd\xb4\xe1\xc3.\xa7C\x0b\xf9\x01\xae\xbe&`\x103m\x13\x1b\xe1\x1a\x83\xc9\x0e\xa7\xb3X\xf8\x13n\xb3\xee/A+]\x99"&\xee\xfd,\xfa\r!\xef\xf2<\xcbJ\xe5\x12\xbd\x8a\xdfL\xa8\xc2\x8fL\x189\xf4\xd4]\xb9%\x87\xe5w\xa7p\x1fm\xb4\x9b\xa7R\xe7->\xeb#\xdc\xe6\x978\x89m\xc0&\x106\xe9{\xa0fh\xffl4\x99\xfai^}-[\xce\xa7f\x01#\xc4\xc7b\xdfi\xaa\xeb\xf2\xe1\xb4J\x08\xcd<\xa6\x1d \xf8\xe5\xd8\x8a?\xa0\xbbLkI`\xa3\x13\x16\xc3{\x0b\xb4\xfe\x1f\xc6\xe5\xe4\xa52f\xec\xe4>\x0ey\x0c\xc1\x87\x9bl\xd6O\xbc\x02s\xe7\xbe\x99\xbc\x80\x0bw)\xf1\xa7a\n\xc5r\xbf\x17\x9b3\x1f\x11i\xaa\x1a\xe1*\x92fa\xf8\xf9\xa7\xdf\xc3\x93kyM/\xdc\xbfj\t\xfd\xdf\xa1\x83\xa8\x8a\xafG\x1d\xc9\xe8\\@\x11P\x96L\xa88!\xe2p\x83\xdc\x9c\xab\t\x9b\xe4\xda\xdeb\x06\xec\xfe\xd7-\x00\x06N\xb9\xf4p\xf9\xaf\xea\xc74\xb2\x91\xcbIk\xdf\xd5r\xff\x02\xc4\x17w\xe6t\xfc\x919`@_$\x91d\xbc\xa8\xaa\x18\x04\xbb\xe7Ch\xa4\xe7\xef\x8fFmO\xfb\xc4\x81\xac-+>\xe1m\x13\x15\xcd\x8dP6:\x95\xfa\xd6lpM\x0e~\xb1pR\x10\xe6\n\x8c\xa9\xb7eGc\x04\xdcVb3\xb4\x84\xfe\x11\xb9HG\xe6\xa5\xc9\x98\xdaX\x1b3EU\x1d\xe0^\x90PXpg\xde\xf08\xcf\x95\xdce \xfc\x1eq2.?\xc7\x15\x06\xb6\x98E0\xc4\x8c\x8dO\xdfs\xc1Qam+\xa74\xfb\x82Z(\xfe\xf4/\x94\x19\x06\x93\x07N\x8a\xe1\xf9t\xf4\x8b^l\xb3\x01\xad/_o\x94lX\xea\'(\x89Vp#\x95\xf7\xbbt\xf3k\xe3\xdc\\"\xae\x13Mh\x8d\xc1v\xee\xb0\xa0\xf3\xc1\x982\xe7\xa4\x9b\xde\xe7\\3K5!\x84\x8a=xP\xe9lGt\xca\xfcV\x95\xf2\xa4\xb3\x14]\xca/\x19_\xec\xec\xe8b\xb8\xd6\x88f\x92\xecn\xcf\xa9ma\xae\x92\x8b\xc7\xc3~\x8ec\xaf"\\@@>\xc8!\x0f\x8a\x1f\x9b\x87\xfc&\xa1\xd2\xc1\x86\x9c\x9d\xbbA\xd1\xb9\x8d\xea\n\x8ar\xa7t\x0b\x88\x14\x19\x1e\x1e\xff\xc7\xe8\x94\xfa\xb6\xb9Xx%9\x12\xf4\xc71}`\x19`3(\xad\x17\x1eg\xde\xe3\xd5=\x8b\xe7Q\x1d \x0f/\x0e\xdcz\xddS\xa2\xe7B@\x16P\x8c\xce\x86\x06\x85\xc0\xcf (n\x05Ds\x19\x9d\x89\xe3%:\xad\x8a &c\xb6\xefR\xb7\x99=\x05\xe2k\n\xca\xd7\x1dmXa\x12\xdc\xf8\xd3\xb9\xf2\xeb4g\xaf.Ge)G\xb0\x01\xb83\xc6\x1bS\xf3\xab-\xf4\xb0\xa6\xdeB\xc7\xfbiP\xb1\xc3N\x10\n\x88\x14\xc9\x93\xff[\xa4u\xb9Y\x87\x9f\xc4y9\x80\x93*\xe2v"[F,\xeb\xef\xc6h\x96\xd4p\x17\xd9\xf7p\x02{\xd8\xf2\xe4\xf87<\x02L\'\x83i\x80\x85n\xfc\xc4\xb7\x8d\x88\xd0[\xdb\xe2s9\x82\xf6}U\xf9\x0f\xca\'\xd6\x1f\xfes<Y\x1aZ ;\x84\x97\xf2%\xa3\xef\xae\xe4\xa1\xa31eLa=\xf4\x9e\x0bb\xd3\xdc\xf5Q\t\xc6\xee\x84\xafF\xfd\x1d\xe7\xb1i\xdeSZb\x86\x1e\xad\xc8\x07\x04\x1fa\x803:&\xca\x12\xd3<\x076^\xf3po\x8b\x0c\xb8\x9a\xd1e\xe6|\xd8N.\xf6\x7f\x15\xd7$\x0fM\x802n\x00\xbe\xdc\x88\xaa\xd0\xb2A\xc9,@\xb5\x85\xa6\x9b\x95cf\x15\xe5\xfa\xfa\xa6l\x8e\r\xbcM\x98\xb4,\x97\xff=3Cr\t70\x9bnMp\x8f$i\xbcC\r\xe7U\x16\xc6\xa3\xcdQC\xcd\xfd\xf6\xa9\x9c\xe6\xeaD!e\x82n\xd8\x1f\x05\x83\x80"<\x93\xa6~\xde^\x98\xfc\x961\xb2\xf8-\xef\x08\xb4\\\x8c\xb2\'\t\xbd\xc1\xd79\xdfvv_\x11\xdf\xf9y\xd4;\x9d\x1c\x1e/\x08\xc1\xa98\xc57f\xc2H\xdb\xe5\x95\xf2\xa9\x1b\x05=\xc9\x18[\x85\x1f\xd2\xe8\x1f\xd1/\xd8\xa6\x97\x99\x81\x82\xe0\xe2\xf1\xeci\x10H;Xj\xbc\xbd\x86q\xea\x8c_\xb4\xa3\xb6V-\xe2\xad\x98\xef\xd4x+GR\xecl\xc6i\xd5J\xb7",QX{n\xa2\xa3\xce\xd0\xb83\x97\xe0\xdbjp\xa0\x11\xdam\x04\xa9\xd6!\xc3\x821c-\x01\xd2+\xdcWy_\x97\xccu\xc9\xf5F\x8e\x8c~\xf9r\x7f\xa6\x0bSC\x8b\'\xf7\xea\xea\x1d\xc98\xfe\xbb\x8eB\x9b\xe3\x84\xdd\xaa\xb7\x84\x03\xe1\x0b\x90\xb4\xe8F\x9f\xbe\xd9]\x07\x0f\xe2}\xc6\xce\xf4\xe2\xf1p;8\xaa6\xc6\x07\xb3\xe4\xb3a2\xbfR\x95a\xea\xd8\x1e\xa9^\x12\x82|5\xa3!-\xfd;O\xe45*\xad|\xcc[\xe9J\xdbO4\xa7\xf7\xf7\xc1\xe2a*k\x06)\x87s\xd2>\xa2\x88\x89\x18\xce\\\xc4\xa9\x97\xbbY\xd2\xf1=\x80k\x88P\x0e;\xa4\r\x85\xc8\xe9\xdd\xbe\xe0"\xd0\x16\xf8\x9dW-\xb9\x06\x85\x01&\xba|\x96$\xfd\xecn\xd5Wm\xa8\x99\xd0\xa9\xb1\x15\x97\xa6\x15K\xce\x02~\xd0\xf5\x14\x97\xa8Q\xda\xa3\x08\x83F>\xd1\xbc\xfb\xa8\xed7\x97\xba\xae\xde\xccjl\xb7\x0c\xd3W@\x1c\x84\xe8\x85\x82[\xc3\r\xe4\xbd(\xfb\x173G\xb7\xce\x84\xa9d6Z>\xad\xf7\x0e\x1a;\x8co{HM\x16\x9f\xa73\xab\xca>s\'\xa9A\xfa\x98h\x18\xd3\x1b2n\xa8\x146\xaa\x9e\x9a\xbeHx\xa6\xee$}\x15\x06\xdf\x9e\xdf\x98T\xf1\xb5R\xb6sK\xc5@\xa0\xa0\x80\xe8\x80w\x1d#(\x9d\x0b\x17\xe9\xe1\x18\x99\x00E\x82D\x96\xa5\t*e\xbd\xe3\xdbq^[DB\xe3\xb2\xaa\xe33x\xba\x1ey\xc7S\xf6\x97>\xf81_.\xffV\xd9v\xad\x10\x8d\x00\x8c\xe9\xb4\x10\r\x9c\xd2P\x1a=\xa3\xf2\x82\x04\xfd\x13\xa6\xf3\nE\xee\\\x0f\xafKx\x89\xb5\x85/n\x1e\x8a#<S\xb4\xbf\xd4\x04\xa6)G\xa64i\x7fR\\\xef\x90N\x9f\xdb\x92 \xaf\xa3{n4\xc1\xee\x85\xd9#\xe6\xa2Z[\x86f|q\xa9}\xa1\xc0\x14m\xact\xf1\xb5\xb2P\xf8\x94F\xe7\xb3\xd0\xa16\xc3^\x91\x94W}\xca\x07\xd2^A:\xca\xbd\xc0Lq{\xc7\xa5\xe9\xec\xd4\x1bT5\xbe\xcec\xb3\x9c\xbda\x84n\xa0t\x89\xd8\xe7\x03\xf4\xec]\xb7\x90$\xd3\xb2\xc3\x91\x0b\xe4\xe7\x13K\r\x19g\x87\x81\xa7by\xc5tI\x80\xf3\x02\xbes\xadP0\x1c\xd6\xb6\x15(\x85[BF0\xaf\xe3\x13!\x93v)\x8e\x86\xce\xa3Q\xcd6\x0f\x03\xdd\xc4zfe&/fzS\xa1\x0b\x02\xd5\xdd\xad\x0f\xa5I\xbeA\x83\xb3>\xd0\xe38B \xaa>n_\x0f\xaf\xbf}\xf32\xe9ieh"\x17\xb9&\xed&cMixN\x98e\x0e\x1b\x1a\xf3\xde\xf4\x9c\xed\xb1\x06r\xac\xe7\x89\x9fpm\x0f\x89\x90\xfb\x84\xbc\x92i\xe4C\x00\x96`5+\xe49\xf6A]\x81\'O\xd81\xb5c\xa0Y\x17\xc3\x8a\nE\x1e\xa0H2\xeb\xee\xbe\xee\'\x1b\xd6\t\xaa\xf2\xb9\xcayI\xf6\xa0\x1f\x95\xbfM\x00j~$\x16\xf1\x16\xc1hW\x1eT\xed\xe6v\xc1\x83c\xd5@\x80\x94E+D\xb0\x17\ts\xb4` W\x90\xbf\xe9\xd2\xd8<\\\xebG\x14P\x9ao5K\xaf\xa6\xef\x1b\xcc\x94\xdd~\xf9\xca\xe1\x0e\x81h\x92\xb72\x8a\x81\xd9kUS\xb4\xe99\xf8\x98\x96\xe4\x9b\x8f\xef\xf9yi\xb2\x86\xd87M\xcb\xd8\xf7\x95\xe3\x97F\x99\xf13U(\xfd\xc8\x8d\xc1\xf1\xe7\xc4F\x03\xb0\x9e<\x95\xab$\xc8L\xde\xd9n\xb5\x80h*a\x92\rT\xbd\xfb\xecn\x1b\x1d\xff\xb5\xd8\xcf\xd6\xb7\x1b\x93z\x14K>\x93(\x81&\xb2\x95\x90\x1b\x9c\xf1\r\xea\xade\x07\x05\xb32\r\x8a\xccv\xb0\xb2v)u\xff\xe7\xce\x14\xb7\xfe"\xee\xa5$\x8a*\x04\xad\xde\xb0\x9a\xf1\x80\'G8\xec;>[\x87@:\xcc\xa1&\x9c\x95\xaf\x155\xb8\xa3.\xd7\xe8\xf9\xfb@\x1ao\xfc\xb3X\x0ckF\x84C\x0c\xc7\xed\x95\x0e\xd2\x8e\x7fhkZ\xa6\x13P\xd0\xce\x047\xbb\xea&\x7f[\xb5\xb2_"\x9ep\xe1\xf3\x84\x93\xdaM7W^\xdb?\x15I-!,!\x19\xaf\x8d\xcek\x8f\xd8\x9ew\xa4\x8b\x83Ti&X\xc6\xb8f3\x908PR\xd3n%1a,\x10J]Uv\x7fP;y\x95\x0b\xa1\xf5~\x9dX\xcc\xd3_t\x91\x9a\xcc\xcf\xff#{w\x9dWG\xc0\xe6\xdd\x01E;\xbf\x8e\xa4HT\xcb\x01\xfb\xd3&\x80\xfe\xc5p\xcf\x04\xf4\x10\x80\x90L\x11\xb56!lYqi?\xd6s\x17<\xe7\xc5\xeb\x8f\xd9e\xbf!\xc9!\xfb\xbbR\xb1\x8bP\x8f)\xd3\x0e\xc9\xb4\xddg?\x19|\xb9\xb1!\xe8\xb4\xee\xe2nl^\x7f\xd1\xf3\xc6\xbbM|\xb7}Yg\xcfq\xf1\x95#l|\xb1V>H\x8f.\x9c\xb9\xb7CG\xcc\xb8\xde>\xa0\xcc\x9f\xbbj\xb3\xef\xda\x13\x84\xf9T"/`?D\x08\xedI\x7fn\x00\xc5lUz\xf0\\\xf9V^yX\xe3\x14C\xfa\xb3L\xa7\xc2\xe4C\x0e\xa4u\xf9\xe1\x9d\xef\x15)\xf8\xe6\x06\xdfO\xbe\xde\'&\xb8:\xda\xbcS2T\xfeG*\xf8\x9d\x92\x1f\x87\xf9\xae\x9dQ\xf0\x01\x9foh\xf1\x94}B\x18\t\xdb\xe1q@ie\x05l3X\x80\r\x1d\x07\x95\x06\xdf\xf01QM\x18\xd7\x8d,\xa6\xaf\xec\xecO\xaf\x97\xfcg\xcbj\xe1X\xdeq\x01\xd2\xde\xcb\xcahlF\x17\xd4E<\x12\xeb\x15\x1cu\xdd\xe5\x8e\xe2\x12\xf3\n\xc3\xf3\xa3\xe6\x08\x06\xd4\xf6\xdf\xf9\x87\x908\xc1\xe2\x08\xafC\x8a\xb3\x10\x18\x9f\xc0\xf7V\xb7\xc4\x96i\x92\xc0\xa5\xcc\xad]Wwk\xbfz\xbd\xdf\xbd\xdd\xb5\xe0g\xf5-=\xab\x104\x97d\xc9uP\xa4\x03\x0e\x16\xc6\xc9Is\xe5|\xe4\xecJ\xfd\xd3R\x96<\\\x90\xe6\xd1r5\x1a\xfb\x03\xba\x14*md\xb2@\xfc\xcf\xcc\xf8\xf5\xe1\xb9B1\x0b\t\xa8CJi\x05c\t\xb7\x1co\x84\x9b+\xa4\xf7Z&\x97Z\x9c\x8fd\xf6q\xc4Ko\x85`}\x14uS\xaa\xe4\xd7\x9cmiG\xc6\xfa/_\xff}\xd2\x8f\xc1\xb3\xf5_F\x1a\x9e\xcf`GR\xa80\x15\x84\x10\x9c\x93\xa28\x01\xc8\xa3\xae\x93D\xd2\x85~\x89x\xd1!\xa1\x0b\x07\x80\xdfn\x9f\x0e\x92\xe9\xbf\xce\x1c\xa2\xa4\xe9\x87*\xf3\xd4\x1a\x9a\xad\x91Sde\xb3l\x8e\x00\xbd\xf7z\xf9KhV9C\xd4V\xb1+\x0f\xe5\x86\x1cS\xd3\x1e`\xe6\xa2l\xe0K\x16f\xd0=H{\xff\x16\x98\x1f\xfe\x02o"i\xe4c\xb67Q[w\x92\x18 \xe2\x90?"\xe3\xb4\x07\xd9\xe8\xed\x02\xcf\xf5A\x9e\x0e\x9e\x82\xab\xae\xa4\xa6+\x1a\xce5h\tn\x99\xc8\xac\xd6\xc1')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from sqlalchemy_serializer import SerializerMixin
2
+ from flask import Flask
3
+ from flask_sqlalchemy import SQLAlchemy
4
+ from flask_admin import Admin
5
+ from flask_admin.contrib.sqla import ModelView
6
+ from wtforms import SelectMultipleField
7
+
8
+ from sqlalchemy.orm import backref
9
+
10
+ from flask import Markup
11
+ from dateutil import relativedelta
12
+ from hiddifypanel.panel.database import db
13
+ import enum
14
+ import datetime
15
+ import uuid as uuid_mod
16
+ from enum import auto
17
+ from strenum import StrEnum
18
+ from hiddifypanel import Events
19
+
20
+ from .config_enum import ConfigEnum,ConfigCategory
21
+
22
+
23
+
24
+
25
+ class BoolConfig(db.Model, SerializerMixin):
26
+ child_id= db.Column(db.Integer,db.ForeignKey('child.id'), primary_key=True,default=0)
27
+ # category = db.Column(db.String(128), primary_key=True)
28
+ key = db.Column(db.Enum(ConfigEnum), primary_key=True)
29
+ value = db.Column(db.Boolean)
30
+
31
+
32
+ class StrConfig(db.Model, SerializerMixin):
33
+ child_id= db.Column(db.Integer, db.ForeignKey('child.id'), primary_key=True,default=0)
34
+ # category = db.Column(db.String(128), primary_key=True)
35
+ key = db.Column(db.Enum(ConfigEnum), primary_key=True, default=ConfigEnum.admin_secret)
36
+ value = db.Column(db.String(2048))
37
+
38
+
39
+
40
+ def hconfig(key: ConfigEnum,child_id=0):
41
+ value=None
42
+ try:
43
+ str_conf = StrConfig.query.filter(StrConfig.key == key, StrConfig.child_id==child_id).first()
44
+ if str_conf:
45
+ value= str_conf.value
46
+ else:
47
+ bool_conf = BoolConfig.query.filter(BoolConfig.key == key, BoolConfig.child_id==child_id).first()
48
+ if bool_conf:
49
+ value= bool_conf.value
50
+ else:
51
+ # if key == ConfigEnum.ssfaketls_fakedomain:
52
+ # return hdomain(DomainType.ss_faketls)
53
+ # if key == ConfigEnum.telegram_fakedomain:
54
+ # return hdomain(DomainType.telegram_faketls)
55
+ # if key == ConfigEnum.fake_cdn_domain:
56
+ # return hdomain(DomainType.fake_cdn)
57
+ print(f'{key} not found ')
58
+ except:
59
+ print(f'{key} error!')
60
+ raise
61
+
62
+ return value
63
+
64
+
65
+ def set_hconfig(key: ConfigEnum,value,child_id=0,commit=True):
66
+
67
+ if key.type()==bool:
68
+ dbconf = BoolConfig.query.filter(BoolConfig.key == key, BoolConfig.child_id==child_id).first()
69
+ if not dbconf:
70
+ dbconf=BoolConfig(key=key,value=value,child_id=child_id)
71
+ db.session.add(dbconf)
72
+ else:
73
+ dbconf = StrConfig.query.filter(StrConfig.key == key, StrConfig.child_id==child_id).first()
74
+ if not dbconf:
75
+ dbconf=StrConfig(key=key,value=value,child_id=child_id)
76
+ db.session.add(dbconf)
77
+ old_v=dbconf.value
78
+ dbconf.value=value
79
+ Events.config_changed.notify(conf=dbconf,old_value=old_v)
80
+ if commit:
81
+ db.session.commit()
82
+
83
+
84
+ def get_hconfigs(child_id=0):
85
+ return {**{u.key: u.value for u in BoolConfig.query.filter(BoolConfig.child_id==child_id).all()},
86
+ **{u.key: u.value for u in StrConfig.query.filter(StrConfig.child_id==child_id).all()},
87
+ # ConfigEnum.telegram_fakedomain:hdomain(DomainType.telegram_faketls),
88
+ # ConfigEnum.ssfaketls_fakedomain:hdomain(DomainType.ss_faketls),
89
+ # ConfigEnum.fake_cdn_domain:hdomain(DomainType.fake_cdn)
90
+ }
91
+
92
+
93
+
94
+ def add_or_update_config(commit=True,child_id=0,override_unique_id=True,**config):
95
+ print(config)
96
+ c = config['key']
97
+ ckey = ConfigEnum(c)
98
+ if c == ConfigEnum.unique_id and not override_unique_id:
99
+ return
100
+
101
+ v = str(config['value']).lower() == "true" if ckey.type()==bool else config['value']
102
+ if ckey in [ConfigEnum.db_version]:
103
+ return
104
+ set_hconfig(ckey, v,child_id,commit=commit)
105
+ #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
106
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product