hiddifypanel 3.0.0.dev63__cp39-cp39-manylinux2014_x86_64.whl → 3.0.0.dev65__cp39-cp39-manylinux2014_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) 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/templates/config.html +1 -1
  32. hiddifypanel/panel/admin/templates/proxy.html +2 -2
  33. hiddifypanel/panel/admin/websocket.py +9 -3
  34. hiddifypanel/panel/admin_2.py +33 -3
  35. hiddifypanel/panel/asset.py +17 -3
  36. hiddifypanel/panel/cf_api.py +35 -4
  37. hiddifypanel/panel/clean_ip.py +125 -3
  38. hiddifypanel/panel/cli.py +172 -3
  39. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  40. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  41. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  42. hiddifypanel/panel/commercial/__init__.py +50 -4
  43. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  44. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  45. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  46. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  47. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  48. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  49. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  50. hiddifypanel/panel/common.py +98 -3
  51. hiddifypanel/panel/custom_widgets.py +71 -4
  52. hiddifypanel/panel/database.py +18 -3
  53. hiddifypanel/panel/hiddify.py +655 -4
  54. hiddifypanel/panel/hiddify_api.py +70 -3
  55. hiddifypanel/panel/init_db.py +393 -3
  56. hiddifypanel/panel/usage.py +85 -3
  57. hiddifypanel/panel/user/__init__.py +25 -4
  58. hiddifypanel/panel/user/link_maker.py +416 -3
  59. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  60. hiddifypanel/panel/user/user.py +233 -3
  61. hiddifypanel/static/css/custom.css +11 -0
  62. hiddifypanel/templates/500.html +1 -1
  63. hiddifypanel/xray_api.py +109 -3
  64. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  65. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
  66. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  67. hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
  68. pyarmor_runtime_000000/__init__.py +0 -4
  69. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  70. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  71. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  72. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
hiddifypanel/Events.py CHANGED
@@ -1,5 +1,28 @@
1
- # 2023-04-08T15:11:20.407260
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x16\t\x00\x00\x12\t\x04\x00Z\xd9\xc0\xfe\xc6\x02\x81\x83\xc1\xc4wh\xf0\x1b\x8b\x8d\x00\x00\x00\x00\x00\x00\x00\x00\xb5A</\x014\x19\x9e4\xb9A^\x084\xa1r9\x1ab\x89\\@\xcb\x9a\xe98\xc6\xc8ZA\xb1\xd8LRq\'H.{~>p\xb9\xdd\xae\x17\xbc\xd9=\xf7\xfb\xbb\x16?k\xa0h-ud\xe7\xea\xe8\xa6b\x14xH\xf1U\xf3\x91d\t\xe6\x17N\x8e\xf3\xdf\xd5I4\x0e\xc4\xe8\xeb\xd2]p\x1c\xde\xd5\xb52q\xb1\xfe\x1e-\x03\xe5\x8b\xc37\xf2d\x93\xe7\x95\xe7\xf9\x0e\x7f\xc0T2wX\xfaV\t>\x15!D\xffp~\xd3\x8b\xc9\xa4nB]\xa0W%\xee,\x02x\xd4\xe5\x04\x8bN\x86.\x9al/\xe7>\xe2\xa6\xcf\x91\xca\x9e\xdd\xc1b-\xeb\xa1\xbb\xfd\xff\x9a\xdf\x8c\xce\xa1\x8dZ\xf4\xc4 \x1f|\xca\xd3\x17\x7f\x0e;v\xb0S\xfa\xab\x8d\xfe\x87\xee\'\xfc;\xe0F\xdf\xfe\xfe\xc1;\x8c{ub\x05\x1apS\xe1*\t\xc7\xd3\'\t\x80\x01\xbdI\xf5\x8c\xd8&\x0f\xc4B\xbb\x1b4\x97\xf6z~C\xe8U\xf7*\xb9#\xe6\xde\xdd\x1e\xc6\x8a\xc3gVK\x1e3&\xd4\x97N+n\x1bmk\xfa\x18\xef\xd5\x1b\x05\xed\xc7\xef"\xcdmx\x9a\xf2Xn\xc1\xef\xe0\xdd\xf9\x04\xa0n\xeb1Qn\x83\xa4\xd0\xccY\xbf\x83\xbe\xe2\x9a>\xa3\xfe\xb0\xa3Z\x07M\xccC\xfc\xf7\xd6\x08\xf0\x98y\xdd\xb8m]&\x87\x85\xb9y\xf8d\x15\x11p3\xbc\xda\xd8\x9c\x08W)e`\x9a\x95\xcfN\x1b\xd7Z\xab\xc2Jl\x9d<uPU\x1a\xe1\xd0\xact\x11\x8c\xa2\xe4G\reh\x87v\x98W\xf2\xc1\xc8\x9e/aR\xa9\x87y\xf3\xbaY\xd7>)\x97\xb5A\x0e\xea\x8d@\x9f8\x7fQY\xc2\xb91\xbc\xed\x8f9\xe5$\x9a%E\'\x1e~\xf1z?\xd3[#\x8b\xb9\xceU\xbe4\xcb\xfa%\r\xa26\xa1i\xcf\x9c\x95\x18\x01`:\x01\xfbW\xb9XF\x91\x1f\x1a\x03w\xc5/\x8b\x05J\xb8>}\xdfE\xb1\xda\x99\xb0\x9e\x9e\xac\x81\x17o\xfewh\x81\x0b\xbc_B?\xc5\x9eM\xbcm\x94\xedb\x83\x1fJ\xf7A\xaa\xd3Y\n\x14\x99{\xbd\x85\x1e\xf9\x06-<s\xc6Ml\xa8\xc4\xe5\xa7\xb4\\\xc0\x08[I\x95R\x0fZ;\xda\xe7\xc1\xf9\x9fV\x16\x8cm\xdb\'g\xb3\xbf\x93\x80<\xfcD$\xd6\xa1"\x18j\xf0.k\xeb\x8e\x9e\xc3Ds6\x1b\xe8\xa8\xa4\xd1\r\xcc\x92\x91\x08\xf6\xe3\x80\x8f\xd9*\xde\x8cN\x01\xfe\x13^\x8d\x18\xfb\x03=)\x90\x88\xdfCS\xfb\x05\x92\x8c\\)+\xb9\xa5\x86kU\x85\x9d\xa8z\xc8\xbb\x05\t\xdf\xf1\x95B:\xa4\x85\xe9\x05\x88\x05b\x99\xb4\x12\\\xabnK\xc9!#\xe1\x7f\xb6\x06m\x99\xb4\x84k/\xea\xdc\xb6c;\x1f\xb0?\xa8\x13\x9e\xeaV;\x87\xc6*\x8b\x82\x99g\xb9^\x14:A\xa5\x8db\xd4&\xdc\xa8E9\x93\xa0d\xa7<\xde\xa9rO\x8eq\x9fxC\xffIaN\xff\xfd\'\x06\xe0\xcc\xa4\x05\xb1\x933\xb5\xf7\xe6`A7\xdb\x11 \xc6H\x10\x98\x12\xb4\x10]w\xd1\x1f\x1f\xab\x04,\xa2\x8cs\xbb\xfa4\xcfwK\xc8^\xd4<\x8f\xca$8Y\xc5\xe10\xde/\xc4\xca\xd1\x14\rtCJ\xcd\x90\xd75\xb2;**\xc8\x9fdL\xb4\x95\xc7[\xa9\xc5\xed\x0b\x90Q\xf8\xc0\xf6\x92\xf8\xf5\xc7\xb3r\xe9tK\xec\'kU=\xb3\x7fc\x82p\xbe<\xc0AuE\xc3Dh\xcd\x7f\xeaTF\x7f\xce\xf9\x01\x89\x02\x01|?\xce\xa3N\xfc\x06\x18\xd4\xba\xa8,q\xbbo\x85\xa9\x04o6\xb2\xdem7\x07G\x02V\x0f\x14h\xf8\x92\x9c\xd7\xa8$LHS\xe7\x89\xa24$\x90YB\xde\xb8,qu\xbb\x7f\xbf\x9b~$:\xe7\xea\xa3M\xdbN#\xa6\xd1\xb2\x94)\xb3\x923\xb6\xa3\xc2wA\xa15\x1d%~\no\x13\xae\xf1\x07~\xf4\xa2Z\xca\xc8\xcf\xe3\xf9rO\xc0\xbc\xa8\xed\xc9\xc8+\xaa\xe5\xb6\xe3F\tM\xb4\xf4\\\xf4\xc7\x18\n8Px\x06\x83\x10\x02\x17\xd6\xdd\x85\x9f\xc5V):&\x97\xb6!aO\xfa\xfd\xb1\x94\x9a\xaf=N.\xc3\x10I\x99\xc1u\x9c\x8afj\xe5\xf7@o\xda\x15\xd7\x83\x87u\xf1\xc8\xa3\x8b\x19%\xf4\xbe\xa9\x7f^\xcb\xff)\xc4\xc1\xe2t\xf4\x8d\x9fc\xee\xe1aPiO&\xe3\xfd\x92G/\xc3\x83\ta\x9e{\x05<D~L\x9b\xb9\x18\xe1\\U\xb0P\x93\x10\xb7\xb2(\x13q~(\x7f\xdf\x1f\x81F\'\xce\xff9]\xa3\xa7\xeceH\xe0u\xed\xb9\x90*f^\x880`\x15\xb6\x8b\x12\xcc\xb9\xac\xd9\x86\xe9\x9c\xdf\xad\xf6J\xb9\n\x1dQ\xe6\x00*=,\x9dd\x17\xd0\xde\xc9=2\xce\x81\x9a\xd2\xcc\xd6_^<\xee\xcf\x0b\x99\xc3\x88\xba\xb8\xeb\xf2\xf8\x9f\xbf\xdb\x8e\xcc~\xfc\xb0\xd6jD\xad\xb9\xa6>\n\xcc\n\xc9a\xb4\x97s\xbf?\x0720\r\xaa\x07%-\xeeb\xac)\x85|N\xb7\xf4\xeb\x8b\xa3\x0c\x7f\x1d\xa8:\x05\xaf\xe6\xe6P\xb9M\xf5\xf4d\xb6$K\xf8\x00\xadM\x06?\xeb\xed\xd2\xfc\xa6\xb7Xd\xa0\x98\xf3>\xcbd\xcc\xbe\xe0\xeb\x13\xb7\x11\xb6U\xf36s\xea\xf9\x93\x88Ax\x17G\xd0OKk[\xf7\x9a\xbe\xc5\xd8\xca\x10\xd2Y\xd0\x86Wj^\xabN\x80B\xe7\xc5+5\xd9\xfei\x1bj\xbd\xff\nf[\x04\xd9\xb8\tB\xf9\xbb\xce\xe9\xe2t0u\x91\xa1\xd4\x18\xe9\xd6\x04h\'K\xce\xb4\t\x08\x10\xd7"\xbd\xed\xb6\x005P{7\x8f{\xf6l\x1c\xe8s$+\xcf1\x10\xce\x8bl\x9d\xeb\x06\xdfT\xab\xdc\r\x05\xf6\xf7\xa2\xc0\xcbE\x066\x03\x9a\xaf\xe7\xf0\xd0@\x11\xd9\x9cO\x97\xd2\xf9D\x9f\xf1!\xa8\x85\xfcB}\xfdE\xad\xc8[\x86\xb2Y:E\x1b\x89\x13\xdbL\xb9c0o\xd27Rf\x96\xc5\xfc\xd7\xf3\x9f\x82x\xbf\xc7\xdfR\xc97n=a\x00\xb4hZ=\xad\xfcq\x89-#>-t\xf5L-\x0e/\xdeB\xa6ks{Ob\xb2\x82\xecS\x00\xaa#\xed,\xeeAi\x00\xde\xc8\x9c\x00\xe4\x9f\xa97\xc1\xf28\xf4L\xb4r\x0f\xc1\x07\x12\xd9X`\xce\xd0\x85L\x04\xad|\xd9\xe7\xdb\x14\xd6\xd5\xb1YC*\xe1\xdf0\xe5\xb3\xb8\xf6\xf6\x01h\tE\x84\x89\x1b\xf3=,\xf9\x02\xed\xc6\x8a\xc1\xe1\xf4\xf2\x82OM\xf0\x92:\x96\x06\xc8\x1a\x19\x02\xfb7\xb3\xfc;x(\xd0\xf0\x92z\x98\xae\xdc\xddH;\x0c\xf1\xba\x98\xa5\x11\xaey\x1b&2\xc8\x04t\xc3\xde\xea[\x0e\xcf;\x08\xc1*\xff\x0c\xf8\xb4u\xcc\xe7\x1f\xdd\xe9\xcd>\x8a\xb3\xe5\xcc\x1f(K\xe8K\xe2\x97\nB\x93\x81\xe6,\x00\x7f\xb7\x06tI\x9bh\xe9\x95h\xe0\xbd\xaa\xa3\x82#\xd3\x84\xa5\x1e\x01\xf5\xd6)Z/\x01\xce\xfb\xef\xaa\x83/\x93\x1a\x84\x8ey\x11\x9e[{3F1sh\xc1\x17|\x8c\xd7\xff\xa2~\xcc\xc1\xc5R\x08\x01\r%\xb0n\xcai\xe1K\x98\x82\xe9H\xbe\xaa\xea\x0b:\xb2\x98s\xb5\xac\x89\xa4\x1d(W[>\xb6*\x85to\xbd\xa2\x8c\xab\x94\xe2\x02N\x1f|\'\xcd\xac\xb7\x84G\x00k\xf2\xa6j\n\xc7\xbd^\xf6\xe6/<\xe3Y73rbt\xd3n\xa9\x14\xf6z\xf7\xd2aVw\xe0\x91\xb1\xa7z:\xeftvb0\xdf]u|\\\xacL\xe9\xafx\xd5\xa1\xef\xec!pw\x81\xb1\x1b\x07<z\x03|dv\x14j\x86\xfa\xef\x00\x14\xe2\x02\xd6\x9b\xdc\x94O\x1eT\x83\x9b\xd3\xa2\xf8J\x17d\xc2\xa2\xde\xc0\x19\xf3\x14\x85\x8e\t\x06t\xe2\xben\xdb\xeb\xbchjg\x1a\xdb\x82\xa5\xfdX3\xadI\xc1B\xdb\x89f\x04\xea\xe0\x0c\xdf\x93\x14s\xc9\xe2\x99\xabn\xd5\x01\xc6\x0f\xce\x9a\xbc\xaa\x90\xd4\x16\x010+7\xe7\xa0]ib\'\x1b-\x1e\x8b\xa9f\x0b\x08\x03\xcc\xe1\x1bD\xd2\x96\x7ft\x89Q\x1f\x0fn\xee\x97X\xc34\x8b\xb9\x98\xca\xa9\xe2\xbc\x86:E\r\xbe\xce!\xcf$\xfe\xe4\xda\xc3W.\x1c\xfc\xff\xb4 \x9b[x2\x9a\x92\xf7o\xf7f\x9d\x88kUJGh\xa5\x92\x1a)\xe7\xebl!j\x17\x13^\xa2\xc0\xb0\x89 \x04\xdb\xcc\xcb\xc2bs\xe0\xb9\xd6\xee\x9f&\xc9\xf4:UCp\xd1\xae}\xa1\xc9\xac\x0e\xb7X\x1fEFo\x81^u\x8a\xf3\x84\x9c\x92\xdct\\\'\xb3\xee\x1d\rx,\xc3\xed\xfd\x03\xbdmtd\xea\xec\x1c\xc2\xa8\xaa\xbc!>d\x183\x18\xd2\xb6&\xf8F\xfc\x83\n\xd0`\xbb\xe5\xef\x014\xa6\xc9{\xfei\xbd\xe4\xd3Q\xd4\xe3f\xb5{\x00\xc8\xd5\x9e\x08\x9c0~\xa8V\x04[s1\xb6_\xa3n\xe9CO\t\xa4&\xd8\x9c*\xef\xe5\x8f38\x1b\x8cWax\x0b\x85V\x89\x96\xb1\x12\x9a\x92\x86u`\xb5\xc2\x02\x97\xde\x82uJ\xbe\xb2\xb8\xaf\x9cp`P\xbbk\xe1zRZ\xb8\xdfl\xa4\\\x1c]w\xd7\xb9\x9b"G\xabz\xb4i\xf6\xec\xb4\xf5\x13\xe3\x1a\x8a\xab\xbe\xdblA\xdco\xfd\x97\xc1\x8c7`y\xda\xeb \xa2\xd7\xf5\x16\xaf\x9e4\x11\xc3s\xdd\xa7\xa9\'o\xb5\x00\xd8\xb3\x9e7\xa1\xd8GW\xf3\x10\x92\n\xa4y\xf5=\xf4\xa3v\xd76\xb3\xe1\x00\xb0k\xae\xf4\xe5\xe6\x9e9\xa4\r\x0eZ\xb0\x85\xf2]l\x90[d\x9c\xedvS\x95\xbat\xf3\xbb\x8c\x907s\x00\'I\xac\x1d\xb0dv\xd3\x06UV\x8bi\xb0c\xf8-\x89\x06e\x08\x14\xb0D\xf5\x1b\xc1\xbd2=\xffi4\xd9\xda\xb4\xf5;\x14\xcf\xc7\xce\x86{j\x0fZ&\xf0f\xd7\xaa\xca\xa3\n\xde\xa6Vx')
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.dev63
1
+ 3.0.0.dev65
hiddifypanel/VERSION.py CHANGED
@@ -1,5 +1,3 @@
1
- # 2023-04-08T15:11:20.388119
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00i\x01\x00\x00\x12\t\x04\x00R\xa1\xf6\xf3]e\xedQ\xb7\x905}\xaca:\xa9\x00\x00\x00\x00\x00\x00\x00\x00O\xb1\xcdvN\x92Vu\xdd\xcf\x87mj2\xaa\xb8|\x11&H\x0f\\\xd7\xdf\xda\x100fo\xac"Txe(s\x91\xe6d\xf8\xd7\xd1?\xdc\xf0\xe4fM(&\xf3\x10\x93|M\xbcBY\x86\x9e\x0b\x81\xb8\x0ch\xbb\x1d:a\xccJ\x10\xeb\x18\x8d\x02\xd3T$z7\x8d\x970e\x8ay\x1e\x9fz\xa3\x8b\xd8Ef\xca\xd5\xd0\x8a\xa1\r\x84\xdc\x1anS+s\x8e\xcf\x8fu\xdd\xf7\x9e:\xaf\xd7\x98\xb2`\x16\xc8A\xc5\x88\x05A\xfd8\xba\xdc\xfc\xe0\xc9%\x99W:\x93\xe6\xbaI\x8d\xb5X\x83\x18\xb3\\z\x0f\x90\xd9\x05N\x0b\x0fg\x1a\x82+\xcb\x1f\xe9\\\xb3/\xd4\x9f\x14m\x10\x91\xd8}\xc7\xf2^\xf8\x99\x99\xda\x04@yk>\xb9\x1d\xf7Z\x18\x82=\x96\xb2G\xf3\x80:\xe5j\xbbX\x1c@\x8b\x03\xbf=\xdd,W\xc7\x1c\x9f\xf8QS\xa3\xcfq\x9cMI\xd2/\xf4\x06\x93\x03\r\xfe\x93\x0e\x18\xf1`\x9c\xa4\xa2\xc9[y<\x91\x82p\xc2\xa8\xc7mA\xe9\xc9\xf4%\xd8\xe4$l\xe1\x021\x05\xfbc\x9e\xf2\xa4\xf9q\xc9\x91\x0e)\xa9\xe9\x0b\x0e\xe1\x08\xb3#\x16 }e\xde\xbc\x01\xc2(\xff\x96jRPw\xbb*\x99Gb\xa3h]\t\xa8\x89\x9b\x9ab\x82H\xdd\xe4\xbc/pZ\xc9\x96Q\x9c\x19+M<\xdb\x1d\x98\x98\xb6\xa3\xee\xe0\xa7\x88\xf5:\xe6X\xda\xfe\xe13\xa0c(\xa7\x91Y\xce\xb7:\x07\xf0\x12\x0e')
1
+ __version__='3.0.0.dev65'
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-08T15:11:20.391250
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x1a\x02\x00\x00\x12\t\x04\x00^\xb1J-\xfb\x95\xaf\xb3\xf8\xca(\xa7\x9e\xd6v\xf2\x00\x00\x00\x00\x00\x00\x00\x00\xecU\xa5\x0bj\xb1\xf0\xaa\x89X\xef\x10\x1e\xee\x87\x1c\x16F\x04\x9d_\x07\x10N}\x0b\xe8<\xfa)\xf2\'\\r\xb7O.]\x13$\x18\x1d3\xf3\xef\xe1\xad1\x12x\x06\xa4\x89\x1a\x99\xff+B=\xd07D\xb3\x0b\x1d<k\xf9\xb4+\\Z:M\x90\xb9#On\xc9\x05KVS\xfd\xa4\xe9@\x19\xaa\xc4\x914\\7\x93dLoI^U\xfb\xa8\x85u\xe2x\x8b@\x7f\xe9G\x97\x81`\xd5}\xc6\x0e\x88\xc7\x08\xa3\xf5G\'8\x8bc\x05\x0b\xe1\x02\xcdS\xc7\x05\xa0"\x97\x90\xfeI\xefK\xbb|!\xee\'\x848Um\xedfi\xe1\x04f\xb2$(\x10\xe5P$\x05s&E\xc7Y\x8d\xb6)\xe5\xb4\xea\xfeX\x90\x87@Q\xab\xf9\xbc]X\x01\xb0\xcd\xa8H\xefG<\xf6\x13\xda\xab\xad\x19\xb9D*i4\xa8a\xe6\x96\xdb\\\xe8\xe9\x02\xdaPj\x7f[\xccE2F\xb9\x9cY,\x84\x9e!`3r\x92\x96)\xa5kh\x02(3\xe7B\x9f\xef\x8a\x17xxz/}\x14\x10\xf1p\xc4\xcf\xaa\x95\xcf\xcb\x19\x98\xcb\xee\xe1\x93\x1e\x9d\x8e# \xc9\xfdU .f\x90\xee\x9dr\xc5\xc4@n\xe1\xa3.fW\x0b;\x9a\x19\x04\x92\xd7\xc4)6\x8fX\t5#\xba\x81\xfe\x8e\xc1\xb4\xce\x8f\tv\x1e\xe5\xde\xc7\xec\tD4\xce\xa0S\xf8\x89\xbd\xacv5\x87A\x9e\x8ey\xc0\x04\x8ef\x9ej\xcc4 .X\x8e\xd5\x83\xe6\xee\x1c\xb7^\xd6G\xa3\xf4\xf7\xfc\xb6u\xc5\x18\x8f\xfe\xb1|\xc0v\xe2C|\x18>3\xaeS2[EE\xbdg0\xf2\xfe\nwH\x03A\xac\x84/77?\xa3.\xd9\x9e=j\xa8\xd89q\x86\xc4v\x8c-\xc3\x9bl\x18v\xab\x12N\xd8\xeb\x10}sAW\xe4\x86\x85r\x8fD>m\xc3\xda\xfb\x1c\xf3M\x91\xfb\xe5\x9dF\x11\x15\x9d\x1b\xd5\xbb\xde\xe6\x80\xd0\x038\x7f\xa3yT\xb5\xf4.\xcc0\xcf\x17\x8c\xc7\xf3\x86b\xa3\xf4\x8a\x0e\x13\xcf\xef\xbd\xe3n\x10\xf9\x83%\t\xdb\x99"C\xa2\x1bf\xd6\x12W\xa0\xf6\x98w-8|\xb0\xe5u\xb8\xc8\x0e\x13;3\x15\x99\x970\xde\x7f\xb3\xd8Y%\xf2\x1f')
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-08T15:11:20.397568
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xa1\x02\x00\x00\x12\t\x04\x00\x08\x01J\x92sJ\xed\xe0/\xdb\x8f\xceW\xb3$\x07\x00\x00\x00\x00\x00\x00\x00\x00\xacO\x86\xbe2<\xf9\'yf\x0c\x92$\x11@wY\xf4@\x90\x8c\xfa,\x87B\x1a\x9e\x8e\x80~\xc0\x02M\xe6^K\x94\x87\x1c\xee/\'\xa9W\'\xfe7\x94x\xf6\x0c\xccu\x03\xb2\xf9<\x97~\xb7\xc76V\xe5\x8c\xa3\x06\x8aYG\xe5%\xdd\x1d_\xb6f\xc5c\xe8%\x00c\xc3qT\xcb\xbd\x99L\xf7\xc2mu(pD\x9a?\xabH\x0e\xf8e\xdb\xdb\x8f\xd4wc\x87\x9d\xb1\xf1\xe6\xb6W\xc77\xe0\xe8\xdcXpJ\xc6\xdd=\xad\xccQ\xa9\xaf\x01:\x92e#\xe8\x8b\x8c\x8f\x0b\x0f[o\xdb\x9ec\x03\xb6\xcakR\xa6yL\xc4\xac\xe4\x04\xf7\x8e\xbe\x9d\xebv\xef\'\xfd\xa2\x1f}A\xbc\xe3m\x10\x85f\x90B\xa3Q\x0e"\xa3\xf7\xb3\xe6P\xabE\xa84wE\xd6+\xb7\xe8\x86j\xf1\xef\x0fGy\xbbz8aW`\x11\xdd*\x14\xa9\xd0\x1fax\xf5/\xb7\xb8\xceQ\xc7\xb0\x11A\xa5K\xfcH\xe0S\xc9\xf5\x03\x1f\xffg\x92=f\x10"?\x99\x88\xed\xf6c\xd0R\xde\x82\x0e\x9e\x1b\xa8\xe6\xb1\xa0&\x94\x88;\xb5\xb2M\'\xe8u%\xfb\x89\xac\xe0A\xaaN6\xd8\'\xd9\xab@W\xe7\xed\x86(v.\n\x1cm\x83\xfc"\xfc8]\x08\xca\x05\x0cU\t\x13kW\xd2>O\xe8\xfd\x937\x7fft\xdcqm\x030\x13\xf57\x90\xd8%\xae\xbe\x15\xa9$}\xeaG\xa53\xdb\x93\xb9\xc7l\x979\xb4\x08\x0f\xb9\xd1.\xfdiCw \xe3\x1ey!\xe0\x08\xea}\x04-\xcf\x0cb\x90\x8c3\x1a\xb8&1\t6\xbe\xc0\xf3\x90T\xfe\xf5\xb0\x12\x0ba\x06\x9f\xc6\xb17\xa5\xf7B*G\xcd\xe1#rz\x90\xa9\x0e/\xd5\t\xa3\xdf\xe4\xb2\x12M_\x87-,z\xa8\xfeI\x1apl\x02#\xce7\xb1\x9c\xcas\xe2\xdeF\x02\xa4;\x8f\x86\xc0\xb1\x8c\xe5\x00/%\xee\xb6\x84.$>\xeb\xce}\xec\x94w\\\xff\x01-Jn\xc6\xd2\xdc\xf2|\x0c{\x1d\xad\xfa\xceRC\x1a\xfb\xfdy3"\x14\xa6L\xb1X\x1b\xafD\xb0`\x07[\xd4u\x15\x08\xda\x02\x13\xf7\xf1^\x02[\xde c\xf0\x1e\x93!\xa7\xa8\x8aV\xfa\x02)iE\xd9\xd8\xaa\xe4\xca\xed\x85h\xba0\x8bi\xe8\x07B\xbc\xeci$r\xd1\x167m\xc9\x8f\x99\x92$\xdf\xbbh\xf0\x83\x89\xa4 i\xd3\x04\x94\xe4\xc1VUL\x17\x8d\xb4M\x8d\x89\xd7&\xbb\xd1\x1c\xcfS\x99\xfa\x13\t\x96k\xd1\x94\xa4,\xeb\xba\xe1\xd6\x1e&\xeb\x87I\xf8\xba\xc65\x97H\x12\x9c\x8a\xf3\xd6\xe5\x8a\x9e\xff\xc3v|\xb4\xcc\x9d\xf6\x9aC\xad\xd4\xac>\xaf\xb6\xb7A\xe2\x12W\xa6\x8d\xf0H5_Lr\x1d\xb0\x8b\xabq\xc7f\xe7\xe2\xe9\x12`\xcd\xf6\x95\xc7')
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-08T15:11:20.426912
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xb3\x0e\x00\x00\x12\t\x04\x00\xb2\x7f\x85\x94\xb3\x19U1\xcf\xb8sw\xad\xe8&\xbc\x00\x00\x00\x00\x00\x00\x00\x00~jU^\xb85\x92\x160\xdbr\xf3\xec!\xb7\x8dC\x82\xfb\xbd\xf2\xe0#\x0c\xea\x8a\xd5\x1b\x80\x8cm0\x1cJ\xbf\n>(f\x06\xc2i<vkt\xa1\xb1\x92\x1d\x06\x17\x99\x86s\xc4\xef\xcba\x0e\xcbY\x90\x13\x9e\xe3E\x9c\xed\xab\xb7\xfb\n\xef`8\x8f_\xb9\xe5D\x81\x17\x86\\VM )\x03/Y,\x06\xd0\x86\xf7l\xa0\x90\x17o\xb0\x89t\xb0\xf2\x82\xe0W\x13j\xb9\xc3{\xaa+C\xcaHd\x9e\x80\xe7\xa8\x9f\x00#\xb1`\xd5\x83S\xd8\x9b\xd1\xcbF\xb4\xbf\xf0|\x81\x83\xc0.\xf7\xb1\xaa\xfc\xe8\xd5t$\xbcZ\x86\xf3\xe0\x9ai\x89{C\xca\xa0\x8c\xe7y_\x82\x0f\xa5x\xdb\x80\xf0K[\xa1b\x02\x96\xfe\x16_\xe3\x1c\xd6zxJ\x03}\xc5QV4\n/\xdb\x08\x17@`g\x1cC\t\x89\xef\xfa\xff\re\xc3:\x04\x86\xec~\xbc\xa9\xcd\x17\xc4\xd7\tT\x8b\x1b\xab\x031>}\x1cu0)\xda\x8a1\xfd_d\r\xf3\xc1\xa5g9X\xc1\xd7\x01"\x83\xb6@`\xd7\x91\xdfj\x1c\xa2v\xae\xe8\x19h\xe4\xb9u\x88\x9f\xdd\xffv\xe7\xc0\xc4\x8d(\x88M\xf2\xed\x1eP/q.p\xda\xebD\xa2\x0b\x14\xcf\xad\x11\x1a\x11\xa6\x97\xb3\xe9d"R\xbfv\x81\x11J\xf0Q\xe5\xd5K\'\xa9\x0bh\xa6&\x02\x8e\xa3p\xf4\x8b\x8e)\x9aByk\xf8\x0bC~\xf9\xdd\x85\xd9Mz\xe6\xd8\xaf\xb7f\xe8\x0eY\xf3\x96\xb5\xac?\xe2\x0e\xe3\xda$\x9a$^5\x93\xaa\xb07w\xc4\xa2H\xb0\x9e\x05n\xc1\xbe\x1b\xa8,\xd10\x07"r-\xb6\xe4\x97\xcc\x80\xf9\xb8\xf1\'\xba\x86X\x01\xd6`\x8bT\xb7\x008\xbf2l\xfe\xe8q\xf6\x16\x97M\xd0R>hD\xc3&uJ:*\xad\xa9R\x19i9-M\xb9\x1b\x0b\xa2\x9b\xc7 `\xca/{4\xfb\xbd)\x13\xa3>\xf6s\xe9\xaa\x12wAJh\x93h)\x08\x19\xb00\x1ckE\x19\xdbp\xed=\xc4*\xd9\x97\x1eRK7l\xbc\x89\x7f\xb6\xc0\xb9]\t\x06\x19\xff\x10\xcf#[\xfc\xd2z\xd1\xa4\x17*|;\xde.\xb6>\xa5\x01\xe0\x01\x18X\xb3\x91q\xf5G]\xef\x14\x12\xdd\xa2i4\xa0I6\xce\x9b\x18\x99\xe6(\xda\xf69%Y\xaa\x06\x1ex\xd9\x8f<\x01k \xce\xf3a0P6!p$\x9a\xd8\xa4C&\xfb8\xaf[\xbe\x16c\xec\x92/-,\xccp\xe0\x9e\xe4\x8d\x89\x1e9\x18\xf98\xadq\xa34\x03f\xc1\xce\x02\x96\xc7I\xf2t\x96v\xdf!\x94BMM\x0e3\xb2:gby\xd5\xb0\x0bg\xb4\x84%\xed\x90\xe2\xf8\x9aj\xa7`\x0bA\x97F\xe9d|*\x16%\x1d\x02\xd0\xfd\x1a\x04\x9avW\xa0\xc7/\xc0/\xe0\x9aW_\x87\xd0\\#\x1b\x11\x7f\xfcU\x9f}\xd6)\x0c\xa0y\xe3\xd9C\xa7\x8f\x97\xc2+\xd7u\xeaO\xfa_IdY6\xbeO\xea\xee\x00\xcb\xb4\x07\x97\x0bHC\x01i\x147`\xb0\xc5\x05!\xf7I\x9f\x0eTar(!!WaddyCj\xec\x91\x1a\xedC\x19\xc9\xb6\xa8\x9a\xa4\x90\x0b\n\xce^ig\x87\x13\xb0U0\xfc\'\xa8\xb2X\xe1\xa3Jy\xa5\xb0m\\\x92Hy\xcc\x86\xe9[\xe0\x10aM\x89\xb3J\xb5\xe1\xb7\xe6>|MmF\'Vf\xb2\xe2\x7f}\x8ei2\x17\xfa\xa7\xe1\x8e#^\x87\x00Z\x17\xb3\xae\xcb=&k\x04pvU\xd4K\x07\xad\xa7\xc0(5\'\xc2q\xdc\x00\xbbb\x02@U{\x0f\x1f\xcf\x1b\xbf-h\xcc\r\x03\xda\xae\x96q,\xb6\xd8uf\x95\x11\xbe\x88\x10\xc3\xe3r\xcc\xf5\x93\x19 ]8n\xf4\x91\x1d2\xdd^?/\x0f\xe8_,\x9bw\xd1\xadz \x99\xa1\xd4\x85\xb15?\xbf\x99\xc5u\x88+\xf2n\xe0\xa4\x10\x94\tF\xb2\xb1\xbb\xce\xcd\xd3@\xe4o\xa2\x9f\x05N\xbc#\xae\x8ci\xe8M?\xb9\x1eU\x84 \xc7\xe0X\xd9\xb5kX\xbd=\x08\x1f\x16\xc3\xf0\x9a\xe9\xae\'\xe1\xfb\xd4\x91E\xb5\xb4\xec\xa6\xffu[\xa5\x8d\xe8\xdaw\xae\xc1\x9cJ\xb6\xdc\xafk#|\xed\xd7Q\xbd\n\xab\x05_\xc0\xf3,\n\xea\xb1\xa3\xb8\x88\xb02]\x04\x90\x04\x8a\xbd\xe4\xce\x97\x99z\xcc\xebX\xf5\xedU\xf0\x03(W\xe6\xb9\xb8]B\xd2~\xf9\x01\xdd\xbcj\x93\x12\xeb\xa3\x19*R\x02TJ\xeecf\xed\xc1\xff{\xe2\xf7\xc6A\xf8\x14K\x7f+")\\\xb4\x86\xc5\x9cQ#F\xea\xc0\xe9\xf7\xd5\xafl\xc8\xe7\x98\xc1\xa4\xbf\xc1\xba\x92\xaclN\x1e\x06F&p\n<1\xbb$@\xb9\xbc\xedh\x1d\xa8!`\xfe\xb2\xbahf\xca\x1e\x8f\xf7\xba\xc4\x00\xd7\x8d\x86c\xd8\x89\x82~\\^\x0e\xb2r0a\x1c\xde\x94\xc4Gxg\xd4\xdf\xafX\xe7\xb9\xa1\xb2\x80\xf1\xac\xd0\x1a\xafm\x99\x97l0\xb7\x1c\xba\xbdR<~\xa6\t\xbd\xcf\xff\x9c\xbd\x049\x01\xc8\xe9\xbb\xa8\xb7\xbd\xe4\x06[\xf3ip\xfd\x13@\xaaG\xfb\xd0\x82)U\x00`\x99\xaa\x19F7|\x7f\xab,\xef\x8eV\t|S\xa7\x90\x12/)\xbb=\x96V\xb8\x07\x15!\x15\x15W\xf3\x9a\xb7\xf9K\xee\xaai\xc5Zo\xd3\xca\x95\xdc\x8dn\xae\x9f\xf4\x951\x1c\x87\x8aD\xbd\xa54\xf5\xb7\xd9\xa6\x99\xcb\x1f\xe6\xba\xf6\xa3\x8aw\xbf\xa2*\xac\x81D\xf5\x1a\xfb\x16T\xc2u\x82\xef!\xea\xb6\x86\xd0\xfc\xebf\x01\xf6]\xb4}KGS\x0b$\xd1\x93\x9f\xc7\x0c\xfd}\x8c\x11\xb5\xf2b/\xf7t\xac\x9f\xee\x07\x8c\xa1m<\xfe\xd6[\x06\x98\xc0G\xfb\xf7\xb1\x1d\x13"\x89t\x89\xc3j\x19E\'\xa9\xdeK\x03\xaa\x85u)^\x02\xd1m1\xbb@\t_2\xa9\x19\x99oC\x0e"\xfe~(\xf3_\x13\xf3b\xe4\x82E\xfa\x06\xe7oc\x9a\x10\xb22\x87)%C\xde^\xde4\xbe|\x82\xc2\xde\x85\x17\xa25\xdd\xef\xf5E\xd6\xcd\x88\xc6\xb7\x82\xfd3@\x9b\x8ePsor\xfc*\xb5\xff\xc5\xa3\xb6EP\xbd\x1f\xee\xfe174E\xe9\xff\xe3]\xdf\xc9A\x875\n\xf6\xa792St\xc2f\xd6\xae\xfb\xaa\x1e\x18w\x1a\xc4A\xee\xf8\xe5\x04\xd9\'\x8d\\7\xae\xe57\xa7T9\xa4^\xab\x01?\xd3S\xb0U \xe4\x89\x8a/#\xf0\x9e\nP9j\xbc\xb7\xde(:e[\xae\x14\xf9p\xcd\x89\x15vgY,Ad\x88B\xbe\x0cOr\xf0\xc0R\xf3\xf9-\xcb\x0e\xc7n\xc8\xdbG\xd9\x923\xaa}e\xdc\x1b7#=\x16\xa1Z\x15~\xca\n\xff\x08\\\x8e\x1ce\xb0\xaao2~7o3\xe0\x05\xfbZ\x0e\xf8o\xc1}s\xe0B \x87\x9c\xc3\xe4\xd4 \xbc\x04M\x12\xf7\t\xe0?\xb2\x00\x96\xeb\xe8\xc0\xcd\xf2\xb1Hcz\xba\x01M\x87\x18\xd5\x1er\x13\xf4\xc9\x1a{\\\xb8\xcd\x14Y\x18\xba1:\x8e(\xff\x84K\xf2\x12\x88\xc9T\xe2\xcf\xe1d\x80|\x10\xca\x9d\x8bFvRno\x0e\xb0\xe2\xbf\x90}\xa88\x8e8hW*\x889Zd\xdf\xa0\xfa\xd2\x1b%\xa3\xf1\x9b\xb2B\xb3!M\x86\xc5\x11\xb2\xdf\xd3\xf3\xc0\xdc\xde\xbd\xce\xef\xddOYq\n+\xd1\'\x99\xa2\xa5z;\xbd\x94H\xc3\xdcX\xff\xd1\x81\xab\x03\x1f\xf6\xd7+\x03\xff\xc5\xab\xcc\x9c\xc9\'\x0f\xf6\x08\xbe\xd8\x8f\xad\xb2\xab\xbdc\xb88;\xb8\x8aQ\xdee\x1b\xcf2}\xc0\x93s\xb6\xf4\xf94v\x16\xd6d\xc7\xcfB-\x7f\xd0\xbd\xd9vN\x07\x04X\xfb=B\xec/\xcb#Yt)\x19\xbd\xd2L\xd6gU\xa5\xf6;]V\xbb\xa47\xff=\xee\xe8jnc\xd7\xb8pw\xa6\xf2\x0b\x87\xdb\x1c\xe9\xc5\xe8\xb8X\x85\xcc\xe2.\x98\xd2\x8f/\x8de\xecM1\xf9\x87\x13\xcb\xe1t,\xd4\xb9G\xdc\x16\x13L\xc2\x04\xce\xfb\x86\x99V\xe2\x7fkj\xda\x02Mk\x0f\x04R\xb6\xc2\xef\xf1\x07\xb8\xa2a\x11j\x83\xf8}1h\x1c\xbb\x9a\xbbk>\xc7\x1a\xf9\xef\x87\xf1Vug\xab\xd8VI\xeaD\x80>@\xd9\r*\x9d\xc9D2\xcc\x89\x1d\xb8\xcb\xe1\x14\xd3\xd8\xbd\xfe\xac\xf07%\xca\xb5\x1f\x8f\xb2E\n\xb3\xafyE\xdc_\xc4\x9d=\x86\xc8\xdf)U\x0cE\xad\x87E7\xf0\xca\\\x0bZt\xf4G\xddKN$\x17\r\x9e\x12\x06\xa4\xca\xady\xec\x9dh\x06\xe0\x18\xe2\xa3`\x95\xaaC\xf2\xac\x03\x81\x0bH\xad\xbd\xea\xa7\x19M\xd4&\xaeg\xd4\x08p\xadl\xc6Y\x1b+\xf1\xc9\xa6\xa2\xa8Xe\xfa m\xb5\x90\xb1&(\xd1\x9d\xed\x06\xda\xbe2\x15\x9d\xd6\xaf\xce\xca~}\xb0fL\xf2p\xf3\xd1\xed\xf0\x17\x06\x89\x87\x0f]v_*/\x1e\xd1ml,5\xf5S\xce\xc6wt\x80\xb2\x16\xac6\x12\x96\xc0\xf9b&z\x86F\x87!\xdcY\x16\xa4\xc2\\\xa2C\xc9\x8cu\xa5\xbfBB\xe9\x01\x8f\xe6J\xc4\x80\xdb.^6\x86\x04g\xa8\xe1<\x92U\xb2\x99p,B\xe6o\x9b]\xf3\xa9u)\xd9\x12\x0f7\xe5\xc2\xf5H\xe2aq\xfb\xae\x98\x8f\x9cr\x9b\x18\x05\xc3o\xa2\x9a\xecm\xa2Z+\xe4Uw\xb2sp\xbc\xffR;\xfdZ!\x99\xae\xd1l<Ur\x19\x06\x9d\xa2\x86\xdb4\xa7\xdc\xdd\xefq*\xf3{\x9d\x8cT\xcc\x92\xbao\xe2F\x1e\x0fs\x85\xce\x005gc\x05\xb5~E\xa0\x8e%UR\x91\xa7\xff&\xeft\xdc\x93{~\xf9P4@\x8e\x00pA\x0f\xe3_\x7fi\xaak\xc0c\x04 \xb4o-\xde5\x1fG\xaaD\x19\xfc`D\xe5\xfdP,Z2\x10\xf5G\x13\xfd\xca\x94\xdf\x89\xb2\x12v\x05\xe9h\x86@\xf2Nk\xcf\xd9%\x83\x813\r\xdfw\x90\xd1[;\xf3\xbb\xa4d\n\x0b\x9b\xb1\x1d\xeb\x9a\xe2\x12!QI\x84\xf4\x94Y(\xe1\xec\x0f\xe2\x81?\xe1\xb6\xecbT\x99\x85\xb7X\xadA:\x14HS\\e\\\xc8\x97L\xe5\xf0\xf8-\x16\xd6\xb0P\x12\xfa\x17\xad\x06t\x0c\xe9\xfem\n\x0f\xcfH\xb9\xb5\xf6\r\x7f\xcck\x9b\xae\xc4}\xc7\xb3\xb5\xfa\xf3\xa3\x11ol\xa2\x814m\x97\xf2\xa0k\x95\xfb\xb6~\x80\xe4C:8B^\xe5\xc33\xf6\x85\x8fl\xf6\x9d=\xeb}{&\xe4b\x8c<\xb0\xffM\xf2TB\xf4*\x8e\x1b\xbe\xaa\xe4\xfd\xc1\xcb\xe6ry\xdff<\xdc`\xc9\xa8\xef\x90B\xdf\xf9\x01\xc42\x82\xa0?M0\xf4\x85\xf3\x04t\xe3A\xcfeU\xad"jx\x1c:\x88\xa6~\x16\'\xabo"\xe9\xa5\x97\xb2$\xe6\x1d\x07\x85\xe5\x03\xf7\xe4Z\xba\xb37]\xf1t\xfa\xe9\xf1\xae\xe3L\x910\x8b\xb5fg\x8c2?O\rS\x92\x9c\xac_\xdc%\xf2\xc0\xc30\xb5\x15x\xf0\xfc\x01+\x9e\x17\x01c\xb4\xfe\x85\xa44\xe8S\xa5\x08\xbd[\x05D\x1f\xe8\x9b\x17j\xba\x18\xd8\xe9\xde\xd1h\xc4\x83\x12B\xbd\xc5\x8dM\xa3\xf8\x01\xcf5\xc65o\x80\\t\xb3\xea\xf8\xff\xf7\x04\x84\x0cD\xa5\x935\xeb\x05p61\xef\xa8p\x81|D\xf4\x00@\xc6\xee&\xcd\x7f\xd0\xb1\xe1\xd0\xa7\xc4\x042t\xe9>p\'J1r~\x9d\x83W\xd7\xeb\xb4\x1d|}\x03\x95\xf8\xce\x9b"{\x11wD\xad\xbet\xeftb2\x9cx\x80\xd7\xc3\xc7\x08\xb7(H\x1cD\xe7\x0c\xf3\xac\xcc\xc7\xc0B#\xa1@\xda\x91/\xdc\xc4\xc3\x88\x84&\x06"\xa2%\x07\x1a\xee-\x11x6b\x1c\x11\xd5\xfe\xd9\xbe4\xcf\xf3>\xcc\xfez\xc8\x1f\x10\xa1\x8e\xf6\x11\xc5\xe9\xe8\x93\xce"\x96\xe8];\xbf[9\x17DQ\n\x19:\xcc_kB\x80\x8cW>\x8dV\x00\xe0\xac\xd16=\x82y\xad\x80\x99\xb7[\xef\xa7\xf1\xc3F[\xda=f\xbf\xd9\x92\xa95\xb0?\xa6\x90\x81mY\xa8\xb8L\x003P\xb6]\xd2\x11\xebS\x9f\xc3v\x9a?J\x8a\xe7kw\x9f\x13N\xad\x91\xb6\x981\x05+aR\xa2\xb5!\x11\xfe\x84~\x0bD\x81@\xfe\xb4K\x91\xc4\t\xe9\xe3\xd77\x07B,\x13W\xaa7/5\xdd>R\x89\xf7\x96:\x1f\xad\x17\x1f<F\x07}\x06\xda\xc2lm\x8dd\xcaH\xfe9\xb2\x15(Y\x90O\xd2k\xc5Oa!\xcf\xf6+\x15=+\xdf@\xad\tRi\xf0\xdd\xf7=\xb2\xbd\xf6\x997\xa9\x8d/\xd7\xa0\xe0\xd4\xcc\xdf\xb3\xf0\xea2\x8a5\xd1i\x0f\x87\x11]\xc3k\xf6\x9f\xd4\xb8\x94\xee=\xd58@\x8e\xce\x91.\xdfa} \xcb\xff\x88\xbfF\xf7\xf0\xd4J\\\xb9\x0f\xf0I0chFB\xd3N\xe5\n\xcae\x0cj\xee\xe4\x14\xd1,\xca\xa7\xc1-\x9a\xa6\xc8\x17\x1f\x96\x85\x03+\xcco\xf1Jn4\x9e\x0b\xda\xcd\x84\xc1\xf1\xa4\n%:\xa9\xd9sw]L\xcf\x1c\x80\x05z(n\x19\xea\xe6\xbeS\x83\n(\x04\x960\x8d\xebz\xcd\x80\xa7w\x0eM\x97m\x91@\x1f\xad\xda!\x166>o\xd3>\x91\xe4\x7f\x9cW\x03iQLz\xe9\xc2^\xa5<h\xb92\x1bI~\x19W\xf3\xab\x83\xcd\xcd\xa7\x07\xc2\xea\x16\x9ekDhC\x9e\x03\x97%\xab\t\x8fS\x17\x08\xfc\x98\xb4\xef\x9e3j\xb7\'-\xed\x96_:\xf3\x902\xc4\xf8h"\xa3,vC\x0b4\xaaP_\x8e\xb7n|\xe9O\xf1=\xfd\xfd\r\x9c\x02ir\xe3&\xfdM=R\x02\xccL\t\n\x85\xa0\xf0\x98\xdb\xb8\x9cn\xac\xa9\xff\x84\xc6w\x7f&j\xa1\xd7Y\xa2\xbe\x0b\xa1\x99\x1f\xe4\xaa\x8a\xc1\xe9\xd3\xb4\xae}y\xba\xba\xf2Au0\x9b\x14;\xe2\xde9%\xd8I\x8ar\xb1\xa4@g:\xbc\x91\x8a\xf7\x07\x93\xa3>\x9a\xbel)\xd3\x08\x18\x1a4\x86\xe3\xa9\xcbzY\xaa\xf8\x9c\x00\xdf\x01\xff\xaeyMdx\xbe\xbb\xc4`|\x9f\xe2\t\x91\xb5\x94\x83V\xee\xcc\xcd\x1c\xcc\xc8ZFe\x99\x82.\x15\x1a\xe6\x08\x12&QO\xc7\xa3o\xf4\x912\x05\x9eT\x0e\xaak\x11>\xbfJ\xcc\xe2T\x0b\xb9\x9d\xf5\x15H\xd4 w,*\x18\x03\xb3\xe3Q\xcb\xb1\xc6\x94\x11\x07\xc5Q\xbf\xdc\x80\x04v\x0b\xda\xcd\xa5L\xa0\x8f\x01R\xe1!\xc2`\xc1F3F\x03o\x0fF#\xeb\xee\x04pLv\xa1\xd7?&|\x05\xf4\xc9\xecR\x1d\x8b\xb9\xd3n\x8fb\xbd\xf3\x03\xe8hc\xf6\xfd- \xd5\x0b\x90\xfe;\x87\xcdA\x8d<\x12qX\xf6S\x9eX\xa9\xb1\x9dT\x8dXT\xd8\x9d\xee\xc8V/\x91\x1fx\xb5\x81\x18\xd3\xd8\xfd\xd7S\xf6\xc6\xffc\xdc\x19\xe6\x11\xb4\xcb\xae-\x00\x8a\xdd\xc92XuAY/bz\xf0\xd9\xfc`6\x16\xbb\n([\xd7\xf4$\xd8\xd0\x93\x14y\xe6/\x99JG\x97\x17\x86=h"\xec\x86\xff.\xd7\xef\xae\x06\xc6\xd1\x0bs\x97(\xf35\xe5\xe5)\xdf\xc1\xa3\x86\x00\x9eO\rC9\xfd\xf9\xf6\xd80\x06\x1a\xf3\x19\xc2\xc8!\xdd\x85P\xcb`\xc6J\x98\xa9\x9d~Y\xc7e\xcb\xf4K\x95,Sc\x1f\x0b{\x88\xa0\xd1\xb9\x10<\xb5\x8c\x9c-M{\xde\x1e\x13o\xfe\xe9\x12\x96P\x91\xdb\xa6\x84\xd0\x06\x80\xf1\xc5\xb6\xd7\xb5\x07fi,:\x97\xcbtM\xe7\xec.j\x04\xb3\xa0$\xee\xda\xed\xdf\xa1\xc1r\xe5\x0b\xac\xeb\n\x05h_i\x8c\xbd\x9e\xd2\x80V\x8e\xa9D8\xbf}0 6\xac\x03c\xfb\x93\xd6\x9a@\xe7\xac\x8b\xea\x0b\x87pk\xe8@\xe0\x16\x92\x1e\x11\xaa\xbeMBY5\xe7\xa0\xef$\x1a\x06.\xab\x07\x9f\x9e.G\xd5\xb7\x14\xfa1f\xa2\x7f\'\x19bU\x19\x11\xb4\xe6\x14\xbe!KH\xdc=}K\x07%')
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-08T15:11:20.384936
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x000\x05\x00\x00\x12\t\x04\x00\xdc\x1a@)\xfe\xe4W\xce\xc5\xef\x1e\xa3\xaeT\xeb,\x00\x00\x00\x00\x00\x00\x00\x00aqK\x0eJv\xdd\x17O\xbf\x84\x92K#`\xca\x03\xe0\x97 \x0f\xde+\x92\xca\xed\xd1:\x0eRK\x92\xdf\xbd\xcf9_*j\xe5\x81fM\x97K\x04\xf6\x7f\x01\xd1\xbf\xa3\r&1\x1e\x9d\xdf\xa7\xaa\x14\x9b\xef3\x9f\xacA\xd1%\xb9\xf4\x82\x89\x90N\x02]\xffX\xec]\xa8\x94\xfc\x04%\xc90+\x9c\x84\xaf\xc8\xd1^\x9eI!z\x97\x91\x01x\xe2D\x0f6\xcf\x16\xae\xe1\xd7\xab_Q\x8a\xffX\xfan\xe3\x83#\xc5);xqr\xbf\x0e[$\'\x10\xb8d\x82A$VJ\x18[\x05\xe1\x19\xf4\xf2O#\xc7P\xb3\xd6\xea\x9a\xff\xff\x92\x00\xf5\x86]%G\x88\xca\xdf-\x1e\xc3\xb4&.\x9e\xcc\xce\xc7\xb46\x81v$\xfc\xdfC\xa0\'\xf1\xab\x8a\xeb\x1e\xe7\xd8\xfc\xd1\xdfQyl\x00\xbd\'\x93\xbd\xe6\xaf+y\x93\xa5\x01\xde\xc4\xca\xd7X\xab\xd3}\xf5\x01\x81\x1dR\x0b\x81\x17\x17\xc4\x0f\xbc\xaai\xdf\x0e\x99oh\xc29.\xb7\xf4\xc8\xfb\xa5{\xeecs\x046\x02h<\x8e\x98@\x81[4XQz\x9f?\xe9\xd5;\xc9K\xa3H\xe9;J\xc3X\xe0\x11\xdb\x08\x7fjbvh\xdd\x1c\x11\x9f1\x1c\x9dV\xb7A\xc43\xb9\xcb\xe6\xe6W\x8d\x99\xc2!\x00\xd3\\\xb9\xd4\x95Z\x1c\xfa\x893\xden\x89\xa0\x11\x8e\xfb\xeajJu\xa4\xa9\x93\xfcR\'\xa4\x08\xf17Fy\x0c\xebX\xbf\x8a\xe3;mb\xc4S55r\xb2\xd22)i\xf18\xa1\xb2\xc223\x8d\xb8p\xd0\x8a\xf0z>5^Y\xcf\x90\xe1N\xc5|\xa8x\xb4\xa4\xa2\xc6fY-\xbf_\xcf%\x00=Z\x86_g\x80\xda\x19\xd6\x17\x0cv\x0fi\x99\xa9\x18\xb1)\x7f\x1e\xdfR\x94\xf3\xf8\r$\x93 \xc1!T\xb1|\xd4Q\x90w\xffBf\xa7\xccH\xfc\x8dr\xad\xa3\xc7\x89B\x80<L\xa0\xdbv\xe4*\xf6\xa9\xe2\x84{T\x9c\xa5\xb5\x95\x9f\xdc\x1eUf\xf7\xbb\x9c\xb3\x18l\xc7>)Jk\x0b\xc4\x00\xa5\xe1\x18\x97\x9f\xb5L\xad%9=\x0eq6x,\x9f\'P\xdf\xd1\x13\xdc\xf5\xc5b\t\'r\xaa\x99y\x89y\xd8\x1b\xbe]\xeb\xd5NV\xee3\x9aew\x10\xd52\xf7}K_\xacH\xb8\xaa\xae\x9d\x88\x18\xdfi\x94\xf1\xef\xed\xed\x0cE\xb8X\xa4Y\xb8\x1dsY\x17\x83/\x90HR\x88\xc7-\xb0\xc7h\xe0b_\xd1[\x1bUO\xb3\xa0X\xd3?\xc5/eZ\xe0\x9e\t\xc2>*\\*A\x9eL\xfb\xa87\xa9\xc16\x08^^\xb2=*\xa3\xe6\xf9\xc8\xb1bZ\xd1\xed\x92\rdC\xf37\x1a+\x04P\xd9\xd3\xabc\x987}~\x97yX\xc0\x8eA\xbdNB]\xe6\xccN,\xf9M\x8b\xc0.2\xab\x84\x8d\xbdT\x85\xf5\x135y\xae\x13\xe4Y\xab\x92\x1b \xf5,\xee\x1f\xc3\xd0\xf0\xcdu?\xa9\x8cS\x99\xe0\xb0\xabS\xa1\xbb\xe5\x86\xfd\x960R\x01\xa6qe\x80Fi[\xee\xc3\xd4\xf2\x0b\xf6\xbbz"n2\x19\x89\xbf\xfe\x0e\x0f/L3"\xac7Z\xb4\xe7Q\\l\xbf\xc7`\x15\x8e\xb6\x9c\x1e\xf0\x80C\xad}\xbf\x8b\xc6\xbe\x7f\xc7\x1f\x00|f\x0b^\xb4\xf5\xcb\xfa\xc8A\x1fX\xac\xb5\x92\xfe\x9c\xe5L;\xa4\x18\xfc\xb1qN5}\xcc|t\xf4^\x9c\xfb\xaf\xee\xb0K\xcd\xf0<v\xcb\x88B\x97|sv!\xd2\xbe\x07\xf1^j\xea"R\xe483\xc3{[\xf2\xfc~\tBx\xbf\xc6\x9e\x81\xf2E\x162XC\xfcU?hR\xfaW\xa3#\x06\xc3\x00\xb6d\xc8\x86\x8e\xfe\xe12NB\xb0P\xb5\xb7\xbes\xaa\xa2\xcc\x8dM\xdd&\xaa\xa8\x01\x8f\x05\xfe@\x18\xef\x94\xc4,\x83\xd2m\xab\x8d\x95W\xf2\x9a\x98\x92~8\xe7\xd2\xd6\x15\x85\xb4\xb4\x18c\xbb\xd8\x96]\xd2>\x8d\x94+\xfc\x909\xe4P\xed\x82\xcf$\xc9\x91C\x1beF\x86\xbf1\xefI0\x10\xe6\x91\xd3\x89\xb2\xc9\xaf\xc4\xcd\x01\x8e\x1c\'^\xea\x01\xf3\xeb\x9d\xa8\xe0a\xc6\x7f\x1evP1`\x82"h\x96\x8c\x1cw6u\x06\xf5.ej\xa0/D\x05%\xbf\x8a?y<\xe3t\xa9\x9f\x00\xec\xc8\x115\x86!\xb8`\xed\x13\xdb\xbd\xf7;\x07\xa6\xcd\x85\xccBa\xad\x84\xa8\xa6z\x9e\xa9\x85\xce\xffTj\xe2\xd8N\xccb\xb5\x9cru\x01\xc9%\xde<\x03\xb0\x17\xbe\xef\x83\x0e\xfbE\x9dw\xe6[\x87\xad\xa0\xe7\xa9J{\x9e\xfaT}\xd5\n\xeb\xa2y\xce\xa34E\xb7T\xc3\x7f\xa5\xd3r\xc3u`B\xf8\x95O\x05\x02\xbc\xc0v\xa0i\xce\x02b\xdd\x8d\xbaSH`\xb7L\x07-&\xd5\x15\xe9\xf5a\xf2\x874\xfa9\xaf\x15C\x90C&U{_(|\xf3\xdaf\x9e\xad\xb7\x1c\xd9\x05\xfe\x11\r$\xa93\xaa\xb7\x83\x83R\x1a\xa4%KC\xacTt\xd1(\x06\xc1\x12\x95\xd1Y\xa8\xaa\xc5\x1e3\x05O\xecFf\xb2w)A\xfd\x1d/`\x19FS\x95\x13|\x90\xb4\xe0\x0fV!\xc9`/\xa6\xa4\xba\xdaP\xebB\xa5\xb15\x8c\x07J\x7fv\xd1*\xbb\xf8\x00j\xb97O\x1b\x93N\xde7\x9a\xe3T\x08\xc37\x88\x18\x9b,\x0c\x94\r\xef\xed<\x0bu\xaf\x15\xc6R\xe2\xbf\xc96\xbb<w\x06\xdeW\xed\x9cb%t\x85`6\x0f\xf2\xf1\xaaS\xa6.\x0f4\xa6\x12G\xc1\xcb\xca\xb2\x96\xbeID\x8c\x80\xeb|\xfd\xaez,:\xa5w\xdb\xe6\x9db\xc6\xbb];p[K')
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-08T15:11:20.502404
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xdd\x04\x00\x00\x12\t\x04\x00\x08Y{\xc02|\xe8\x01\xf0n\\\xf8\xa5\xca\xcb0\x00\x00\x00\x00\x00\x00\x00\x00Qf[\x02\x0es\x0bz_i\xed\x10VU\x9e\x11\x86\x97i\xdb\x86+q\x97V\x89N\x93\xa4\xf5\x9b\x05oa\xc1\x9e\x15\xf8E:\xe5\xdd\xbc%t\x1e)\x0f\x84p\xbd\xaf\xf6b\x03\xe8\xff\xc0\x96Ej\xf9-<\xe2\x96\xae\xd9\xfa%\x0e\x9f\n\xe7,@\xbaj\xd8\xd5Z\xdc\xd1\xdf(\xc4\xd6z\x03\xd0\xf0-\xefY7\xc7Z\xdb\x1f\xcf\xcbG\xfb!\\"O\x9f\x14c&\xc4\xceo\x95pP\x98:\xbf\x9b\x01\x97\xd9FN\x93\xee\x05\xdd\xa7\xfd\xe8\xa7\xa8\xac\xca\xda\xc0\xbdU\x8a\x87`\xa1l<\xbe/F\xd1\x07\x8fM\xfd\xa3e!\xb8\x04w\x97\xfcG\x87\xb1\x96\x8c\xc4\x97z\xfc4\xf9\xfc\xd4\xab\x00\xfbu\xcb\xae\xd6\x94a\x8cM\xf3,\xe0\x1ecW\x1e\xff;\xdc\xd9\x93\xfa\xd0\xd5\x11>\x15^.W]\x93\xf4\x85\xcd\xf7\xf1\xb1\xff(4e\x7f\x060\xc7$2\x9eb*?\xfa+\x1e\xef\xcf\xaf\xa0\xb4\xdf\xd7M\x1a%B?\xe4\x98\x06a\xad\xa7\xc5\xbfA\xeb\xab\x92\xeb\xfa]f\xd1p\x15\xfad\xf1\x1d\xba$\xeb\xef\xb9\x9cI\x0e\xbb\x15\xb4\xaf$\xe79\xf5XV\xfe\xf9\x18i\xf9a\xc8\xd0s\x96\x06\xabV\x10#b\x06w\x85\x89\x16\xd6\xaf3\xc3=\x1e\xad$\xd748\xbd\x0f\xa6\x16?yw\xbf\x15\x02\xbf\xcdG:j\x11/u\x8c\xfe\xd3}\x9e\xc8\xbe\x8a\xb5b\xd6P\xb2\xd2s\x1e\x98\xb3\xffy)\xcd\x8f&\xa2\x1c!1,\xc6\xc3\xa4\xcb"\t\xc2\x8b8\xc2\xf9\xec\xb6\xe8\x12\x8c\xff\x9a\xa8\xd4\xfaO\x9c\r.\xf9N\xf6\xf4\x80\x002\xe9K\x14r\x8d\xdfk\xf0|\x14\x0c \x00\xab\'f\xc24\x00_\xf2\xf1\'\x84\xd9W\xf0\x85\xb0bvh|*\x8a<\x98\xffh\x9d\xaa\x17\xc9k\xd1C\xbc w\xea8\xf5\xfa\x86\xd0E\xc2^\xc2y\xc6\xb7{\x84\xaf]\xa7BOkY\xcc\xc1n\xd6\xc9\xf6-\xca\x8f=\xf6\x16g\x80\x96\xfb\xd15)\xf5\xd2G\xc5\x8c\xd8\xf1"\xe4A\xd6\xf7\xda\xe7F\x91\x19\x02\xc9\xacP\xbe\xb4\x9be\xed >\xe8\xecvr\xb3\xcf\x10C1JT\x83}E]j\xf3\x9c\xde+V\x08\xc0s\xc2;\x10f\nLQi\xd4\xa9\x99\xc6\x8d\x83\xa3A\x81\x01\xd1E\x89\xa3\x8aujuh\xb79X\xb2\xe0\x87\xb0\xc6\xb4(T\xf5\x1fu\xa9\xa1wJ\xd0\xf3\x9a#D\x01\x82lM\xb6\xa4\xe8\xc479\x1d`ej\xa0\x15\x1dI\xd7\xcd\xbe\xb6\x05x\x16\x99`\xe3\xcf\xafe\xe7\xfc@\x9f\xa0\xe7\xc4\x94\xb4\xa17BD\xdb4\xe2K\xac\xd2\x04\xb2\xa0\xccI\xf0\x97\xf7\x07i\xc6\x05\x06\x81\xf5y\xe1\xcc\x9d\xa5_\x8c\xfe\xdaH\xb2\x99{\xc0\xc2jZF\xaa0\xc2\x7f"\xbc\xb9\x8b\xc0\xb3\x11\xb7\x1dXs\xae\xe9\xf6M\xcb9\x12WT\xbf\xd0\xed\t\x15\x1cL\xa2\xb2\xa01\x05\x807\x9d7\xa9N-b_\xc5\xc6 \xa9\xce\xa1\x84}\x10\x9f\'\xee.\xc2\x08P9\x87\xec\x00\xd7\xe4\xa7U\xabC\xbb\xb6\xbbk\xca!L\xf6Md\x12Xg\x96\x98\x10\x14\xa0MM\xfe\xa9uQv\x01\xc7\xee}NFIR\xb2J\xff\xd3\xb9\x97\x98-\x0b,]R\x8e<x#\xd3\x1e\xd1\x0e4\xf2\xbf\xc9\xadW2\xd1d\x92\n1\x9a\xc2\xfd\xf1\x8a\x9b\xa9e\xeaT\x11\xfb\xb8\xf4W\xe8\xe5\xee\xa2\x9b\x81\xf3\xdd\xb5\xfa#\x1ac\xa3\xfe\x9e\x9f_2\xb0\x97B#\x95x\xd4y\xa0\xda\x82\xb4\x856\x85\x0f\xf7\x11Z\xe3\x7f\x815\x8d|9\x12\xa1\x89\xddR\x06Yf\xe5\x11\x95\x19\xc0\xbfr\xea\x9ae5\x82\x19>\xfa\xca\xe9\x91x\x85/\xdbV\xa4D[\x9c\x1f\xf8\x15>\x88K\x96\n\xc3?0K\x02\xc2(+%\xdbb}\xa6r\xc1N\x13\xbb\xeb.l\xb5\x07h_H\x8c\xee?\xf1\xca\xbf\xa3\x11\x05\x12@y\xb1\xb2\x80l%v\x06Y\xd3\x8e?\xaf\xd3\xe44\xc1\xe1H"\x82\x96\xb3\xb6\x87F\x96\xcf\xe2e\x05\xd5\x9c\xab\x17\x8c\xf3\xde\x0b8\x04V\xda\xa9\xa7<$\xc9\x1b\xfbT*~\xd1\x174\xd1<&\xf9)\xef\xdb\x93\x1a\xf9d\x99C\n\x10\xe2-\xfe\xf0q\x884\x03\xa1\xef\xbdv\x16\x03n\x15\x1fc\xb9\xc0\xa3\xbf\'\x03\xe7?}}\xeah\x12N\x84\x8a\x1b+\xcc_\xe93\x1a\xccavB.\t\xd2\x84\xf3\xf1\xdc\xd6\xcdZ\x8c\xdc\x14\xc2\x9am\xab\x0e\xb6a\x12;\x97\xc3\xf6\xad\x13\xa6\xba\xa6\x0f\x8f\xf2\xe7Xy\xa1e\xd9O\xb8\x1c\xfc\xbe\x10(O\xc6\x99\xd3\x81\x9b\xfd1,\x12\x1a%\xaa\xb1\xb2\x1d\xf8\x8b\x91*\x04\xac>\xb0\xf4\xcd\xd2h\x9c\xed\x853\xe9\x1a\x0e\x7f{\xcf\xd9\x9a[\xeb\xdf2<)\xda\x99\x8e(d\xa2\xe3\xdd\xc8\x08a\xd4\xcb@\xa7\x98>!\xe0o\xf7\xef\x1e\x15G\xe3\x95@7Akx\xbcD\xa8\xca\x15\x901\x7f\x1en)\xe8\x0c<\'\xde~\x0b(\xd1\'0=O*"$Y\x93\xb7\x7fi\x9d\xcd)i*=$\x9cW*\x9f\xcdb=u\xec\x16\xdb\xaaN\x8f\xd2d\xee\xd0')
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-08T15:11:20.432913
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00c\x06\x00\x00\x12\t\x04\x00\x8dv2\xe4p\xa4\xb9\xc3\xc4\xaf\x92\xf9\x8fB5z\x00\x00\x00\x00\x00\x00\x00\x00\x89\xaa{\\fE\xec4\\6/\x8bAzB7\xa6A\xc7\xbb\x93\xdc\x8aBb=\x95\x98\x16\x03a\x1b\xfd$:R_\xa5\x8e\x87\x1ew\xcaaWx\xaev(\xb80PA\xed\x18y+\xd6\xeb\xcf\x82\xeb\x08\xf6\xafM\xd0\x8b\x88\x19\xcf\'a\x88\xd2WU\r\x15\xfa\xba;\xfb\x95\xe5v\xed\xc2\x05T\x07\x19\xa47\xe4\xa9\x1f\x1e\x81h\x04>I\x9d\xc9\xf6{[\x11B\x85j\xb0\xc5\xf3sgO\xb3\x99\xbd&\xf0NM!\x0e\x93\xa9\xcf\xbe\x0fFL\xd3\xeaf\xaa\x8b\x95\x9a\x97a\x02d\xa2ae\xe0%\x8e2\xc4\x19\xab\xe1\x0c\xe3\x93S\xf4\x17\x87_\x05e\xe5}\xc9\xff\x9b9w\x80\x1e\x15\xebAdB\x92\x88\x00\x9b\x08y\xd3\xdf\x95]\x16\xb9,\x8c{]\xcc\x9aGH\xe6\x0fl\x10\x1fg\xd9\xda\xf6\xb3\x80\xf1\xd8\xa4\xbd\xcd\x94\xd7\x00P\xd3\xfd\xdc\xf9\xdf\t\x96>\xfe\xdc\x02\x8c|\xd0\xd5\xe4\xd8\x0e\xff\x85\xe7"\x1e\xb7\x86f8\xe9P9\xb5@e\x1c\xd5\t\x1c\xf9}\x18\xcd\xda\xca\xa1\x90\xe6M\xcbN\xf2i\xf0Be?T`\'4 \x01\xb9\xd3\x10\xfcf\x95=u\x91V\xa6_\xd8\x0f\xe0j\xf2e\x0b\x7f\x95\xc5\xab\xcb\xcd\x03\x17\x90LlZ\xa1\x1c\xfc\x90\xfc\r\xed\x92R\x03[\x13\xcd\xd5\xb2\x88\x9d\xde}\x9c\xae\x82\xf65\xd75^\x06\x94\xbe\xc5\xb3&\xf8\x15WS7\xa0\x86\xb8\x9f\xd8F\xd5`\xa3t]\x9e\xfb\xcfh\xee\xc5\xd6$\x9b\xca:`\x0b\xae\xed\xe5\xac\xc0\xe9S\xbfA\xe8\x03)\tIC\x8f\xad{\x99\xc0[GF\xe2\x1b\xf6p\x12\x99T@C\x7f\xf3\xa8A\xd6\xa1/\xe46SK\xb0\x80\xf2^\x90Y\xd4V\xca\xb1\x94\xd9\xc1|\xf5\x01d\xedv\x97\x86\xf0\xac\xbf\x8b\x91\xb5llP\x96zjb\x03\t!\x02\x93\xee\xb8Z\xedi\\\xc4\xa4`\xb9\n\xe5\xcfC\xb1\xd5_\xf5\xf1eH\x82\xb0\xb7\xbax\x8f\x88"\x81\xb4+f\xfb\xc6\x0b1\xe8<\xc6u\xdf\x0bh\\\xfd\xdd\x10\xc9\xa0;po\xa32\x86J\x1fX\xd5U\xe5Np"\xa4Z\xc9~Z\xecW\x08p\xa9\x8f\n\xf5F\xa4\xad\x9546w[\xd5\x04\xf0K\x15\xbe\xe3\xe5\x1e~\x1e{\xaf\x99\xa9C\x81\x9a\xa8\xb1\x9d\xd5\xc45\xd6\xf3x4\x1d#\xe9\x16\x9d\xdd\nr\xde\xda\xd6\xb9\x8bk\x9c\xea\xc2\x0f\x88\x00\x0f\xf7\xe5R\xef\x9cyFhd\r\x16\x1d,\xb6Q[\x9a\xaa\xf4\xf7 I\xd4)-\xb8v\x8e\x17\x05l\xee\xb01\rn9\x1bI\xedA\x9b6\xea\x07C\xf2\xf3\x02\xfc\x19\xea\xd0(\xee\x14\xac\xe0\xae\x8d\xda\xe8\x90\xca\xe8\xf7YJ9\x97)\x9f\xe8\xc2\x05`\xd3\x04)\x92\xdax}\xff\xe0\xf3\x9c\xa1\x0fr\x07\xec\xa9\x0f\xb1\x96\xb10\xber\xfb?\xa5i\xd9zo\xe6\x14\xc0\xfbq\xa8\xff\xd7\xcbp5{\xca\xb9K\xb5)\xc2\x12I\x12=\xd0\xb5\n\n35\xbdD\x102\xea_Oe\xd5\xcb\xc9l\x88\xbb\xc1\x9e\xe6\xf1\x02\x9c/\xe8x\x12]\xf8\x888\x80dI\x8f>\xd0\xdeI\x7fhv\xef\xa7>p\x1569|\x01\xd0S\xd0\xd6&\xc6_R~tr\xa7\x86\xb0\x9b\xd8\x1eK4\x12\xb6\xb1o\x00C\xcbL!c\x93\xd9\xc9\xca\xe7g\xbfI2\\\xfc>\x0f\xdc\xad\xb1X\xdfO\xec\xa6\xe5\xbc\x91\xf0/<d\xa3\xb6\'\xfd\xbf\xcf\xad \xc2uY+MY\xa5\xcc\x159\x00]\x11\xa2D\x88\xb4\xd3\nD(h\x82\xb4~\xf5e\x88\xcd6\x97\xe8\xcd\xd8\xa5\xc8\x95\xcf\x07\xda\x93\xaar\xeaM]\xc6he\xb1\xbfe^\xd8\xf0\x91\xd5\xfd\xe4\x8b`\xb6\xbf\xb7\x11\xec\xfe\x94pT \xad\x94i%\xae\x1a\xacxdRz\xcf\x842\x93\xa6\xb9\xb96\x88&\x17s\x96\x02\xafV\xb0B\xdb\x81\xa6\xaf)\xa8`\x05\xf1Y\xc6\x95\x90\x15\xeaD\xd2B\xa8\xabKxo\xe3\x8f\x0c\x7f~\x97\xf5!fp\xaa\x81Bhh\xedQ\xdf\xc5F\xe5\xb5\xec\x8b\xb27\x04M\x16\x8b\xa0Xn\x93\x07\x8aF\xf7\xd4\x16\x9c\x8a8\x16\xc3\xe1\x11h)1q\xe2\x8a\xbc\x05\xc4\'\x8a\xb3\xa50\x85\x82\xa8\x8e\xe7\xa3\xf6\xe4\x1f,&\x1d"\xe6\x89w\xa9\xc7P|\xefZq\x1bc\x12|\x00\x0f\x85;\xa0\xb3u"(\x8f\xcbG\xc1:(\x8d\x11;\x01\'\xfb\x95\xd5\x17\xc2X\xa5$h\xbe_\n\xf5\xd0\xa5@,\x1f?\x8e`\xe1\xb6\xef\xfbSH2DmS\x17&;\xb6\xect\xbb\xed+\xc2\xc4\xdc+<\x1f\xd4\x99\xe5\x1cs%\xaf\xaf\xb8\x97\xc4\xc4\x1c\x8aS\xab\xf06P\xa6\xf7\xa9\xb5\xd0\xc2\t\x17\xbd\xb5")!\x17\xb8\x87\xa6}\xc3\xf5\x13\xac\xb8\xd9\x00\xd3\x04t\xee\xe9Aw\xc1\xb6\xb8b}\xa1\xc9\x9b,\xee\xc6;\xb0\x11\'>6\xf8\x9d5\x90\x0e;6\xc6\xd4YC\xc5a\xe5\x14Rxm\x97\xe0,\xe4I\x8d\xe8"|\x95\x00[\x88\xcc\xe2!\x8c\xea\xd5I\xc5[s\x92\xbb\x16\xf6\xc6\xfd\xce\xa6E>\xba\xb3\xdd\xc9\x11\xeb\xbc\xdf\xe4\xf9\xebF[rt\x10\xde$#:\xcc\x9c\xe7\xac\xf7\xc0F\xbb\x00!o\x87\x05\xc1\x9f^Z\x06n\x0bgC[\xbd\xf0\x03M\x9c\xe5\x1d\x1a\x9b\xd7,\x85\n\xdc\xc2\xc5(\xa1\xf4\xfc\xd4\x8d\xbdG\xf3An\xdcC\x0c2pB\xcb3\x8d\x9f\x98\x90kW\xf6\xc9\xc0\x89\xc7\xf0Of\x94\xc1\x0c\x01\x1a\xff\x87\xde37~4q\xc9\'Z\xfc\x0bO\tD\xc9(_\xd8\xbf\x08\xca\xa90\xbd`\x86\x81\x9dT\xb3\xa0\x99\x11\x8bE\xd6\xe8\t\x1b8D\xa8U\xb7W\x18h\x81\xb2\xf2\xf9*u}\x81\xc6\x0cp\xab\xae9iA=\xa3g\xd9y\xdeS#1\xbd@\xa2B2K\xb0\xaa\xde\xde\xc2\xd5\xfc\xa9\xa9\x98\xa23\x99\xd0\x9aL)\x8a\xb8\xa9D)\xdf\t#\xf5H*\'\xf0\xbf7\x9auo\x8d\xfa\x19Q<\x9f&\xdd\xb3\xdd\x99!\x89\xbaL\xf9\x06\xef\xfb\xf7\xeev\xe4\xb4"\x8dh\x7f\xe8\xc1\xc5\xb5\xac\xda\xcb1R\xf1F\x81\xb8_\xe5@\x83\n-H\x1b\xaa\x02\x00\x11s\xc8\xed3i\xc3\xe2\xa2\xcb6I=\x9f\xb7s\xf8\x07\x89\xab6\xb3\x89\xacT8l*\xb5\xb3QS\xdak\xf7C\x911J\xce\xd6a\xe4\xc2\xc7\x863\x03R\xa9\xe9\xbe\xc2\xf4\n\xcc\x85f\xbb\xae\xb2\xfb\xe5\x82\xac\n\x9br\xcb,N\xe5uF\x07Z\xc6r\xc2$&n1\xa6hx\xb4\xa1\xf6x\xc8\xc6?\xd5H\xcd&^\xd4\xe6l&\xe9\xdaL}\x1f\xb5\x87\xd0\t)\tR\xbdm8?\xe5M\xa9\xfa\xb5\x8b&\xcd\xf8\xcdA<\xc1\x95\x9b>\xe8k')
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-08T15:11:20.521697
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x8a\x12\x00\x00\x12\t\x04\x00v7\xe9\xcd\xf2\xf2\xbb\xafP\xce\xb3\xa1Tc\xe6\x99\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x1c6&*Gs$hQ\x9fh\x9b\xb05\x0e\xfe\x93\xf2/)\xa7Q\x11.k\n\xa3\xf8\x89\xb6N\x92i\xad\xea\xfb6C\xbc}\xc8\x12!g\x1e\xba\xf4\x0b\x11\ncs/\t\xbf\x8f[\xe9\x8d\x03\xc0\x8a\xae\x83\xc9\x12\xcb\xea8\x00\x98\xef\xdf\xdd\xbdj\x11\xa4V`\xa0\xd3`p\x18\x809\xdc\xae\xd2\xcf\x14\x86\xd5U\x8e\x02\xd4!\x1f\xf6\x04(x\'\xafi\x1bekx\x94\x85 \xc5B$7\xa9J@\x19u\xd6\x1c\x96\xf3\x0cH<\xbd\xc5\xb3\xbc7\x82\xba@k\xaaO\xfeG\xcb;\x93\xf2u0\xdc\xa6\x04\xf6\xbb\xc7\xb9 rH\xb6\x8e\\9\x14\xd8XQ(\xc0\x9a#\x9f\xe7\x81\xa1\x18N\xc5?$\xf8\xb2\xbd\xed(\x1c|\xa5j\xa3=D\x0c\x90~{\xeb\xfaH\xf2<\xb9GhAD\xac:Zf\x8d\xea\xb9\xa0\x9fW\xe4In \xf8\xb4g\x06AB\xe8\x90?F\xc8\x077\x18\xda\'Nq\x93\x03#,`%\xf3\xa5\xee\x12i\xb7\xe0p\xfd\xa1\x15e\xb5+\xbdN\xf8\xfd\x92$\xbbRx\xfd\xf1\xf7\xa7wc\xb7c\xa9\xa3\xd7\x15\x90\x96\x06o\xf1\x1bn/q\xf1\xd7\x07AT\x9e \xfbg:\xb1\xa3\x91\x1d\x88L\x0b\x05\x02\xa3\x96\xc3\xe3\xab\x98\xd2A\xd7$\xdbm\x9dH&\x13\x90\x96\xc4_\x02~\x15*\xfc\xdf\x80,\xdad\xf3\xbc!v\x89\x15C\x81\'\xd8\xe4\x1f?\x05\xd1\x84]F\xf2\xa0\xba\xa3\x00zk\xa0\xe8\x01=!\xe2\xa6\xceC?\x1f\x00\x8d\xac\xa3=\xa8yc\x8d\x81S\xe1\xf9% "z\xee\x8b6\xeb[|\xe0\xfaUUo\xb3C8q@\x06O\xcd)\xe4n\xcel=)\xedk"\xec\xa1\xc4\xdb\xa9\x9a\xe0\xbd\xbb\xc18\x81\xbe\r\xfb\xaf\r.\xa5\xcc\x84t\x8c]\xb9\xb3\xca\x93\xed\x82\xc8}\x87\xc5\xde\x83\xf4#\xdf]\xf6\xd6Z\xf1\x19%:\xcc|\x1b-\xbe?b\x92\xe2?\xd6\x9a\xaa \xb8\x8a3E_\xeb\xb3\xa5\x8bY\xe5\xd5J\xf2\x1dl\x146IJNl\xeal\x90\x90\x11(\xac\xea\x08o\xe4\x16\x8f\n3\x93\x81r\'\xb9/L\xd4\xf1o\x05\xa0\x03,\x95)[\xfb\x81=\x7f\x97\xfcy<\xa2\xc0\x90\x83/%\xd9\xa9_\x06\xb6D.\xd6D\x10\xf2\xba\x8a1i\x8a<\x8e\x96\xb9I\xa1\x06\xa8\xfc\xcd\x8b\x80\x02PiJ\xc5f\xa83\x9a\xc8\xf2e\xb5\xd2\x18J"\xd5i\x90j\x8b\x85n,{).\x19!\x87\x9b*\x13\x96\xbc\x96\xb7\xff\xd2\xc2\xeb#.\xfb\x02q\x82\xc6\x10\x1f\xe52U\x9b\x01\x83>\xb4\x8a\x101Q\x03\xb9\x190\xc5\xd31,d\xb8\x00\xef\x14rLF4_kwEH\xf0z\xdd\xd1\xc4)/\x01|\x17\x8ad\xd2\xe9\xdf\xfc\xdeO_\xe1Mn\xcd\x0e\xb9\xb5\xb2GcR\x96\xb2\xd2\xadE\x87\xb9\xce\xf0=\xb6\xaf\xc6\xd9\xe4\xb6Q\x08:\xc1w\xf5W\xd6.w\xaeZ\x12\x9b\x15\xbb\xeco#0\x92\t\xb0\xea?\xda3\xf6D\xcbs\xc7\x89\xf6\x99A\xd1\xfb6\xff0\x9dcn\xd0U\x9d\xe2\x8c\xa1\x1d\xf6$\xfcG+\x194\xbb\xfenW\xe2\xd6\tz\x9b\xcdh\x0e\xe4\xa0\xe3\x06\x15\xcd:Rr\xc6\xf9\xf4\xf8\xdf\\l/\x16"\xe6\xcb\x8b\xcd\x10I\x92\xf6\xb3s\xd7\xe5p\x07\xacU\x1d\xa0\xc7\x1a\xf5!\xbf\x1b\xf5\x00`\xc2]\xe5C\x1e\xcaTJN0\xd5)0\xbf\xb8k&.\xcd\xbe$\x1ba\xb4P\xa0\xe3\xb79\xd8o5Z\xb1\xc6)4m\xfe\xa3\xa8\xabI\x19\xe4\x1a\x98\xa9\x87*!.\xa8\x0e\xa0Qa\x92\xbd\x01v\x99\xdb\x8a\x84\'\x15\xc5\xb92\x87\xeb>\x95L\xd9\xa3U\xe0cP^^|v\x81\x8e\xa5\x84\xd9\xf4\xcf\xa4\'\xf2r\xe3 \x1e\xf2*\x9b\x98\xdb\x8aI\xebwy\x88\x18I\x00$\x13$_\x82\xebz5\xe63\xa5x\xc7\xb3\xa7~z\xa4\xb8\x14\x91vG\x12\xb2\r\xc9\xb4\xb0\xa9k \x91-\x80g\x04\xb0N\xecy\xbb\x01\xbf"\xf5\xd2^\xaa\xc1\x96\x16\n\xd3\xe5\x8c\x7f\x11\x0c[\xdc\xc7\x88\x80w\xb8-k/\xf7L"\x83 T\x83\xfag<+N\xbf\xd3\x9f\xe8t\xa6?\'\xb3>\xc9.\x9f\x1c\xdf\x07\x11OB_\x00]\xe4\no\xd2s`-uaz\xc9u\x83\xa8gh\x16\xfd\xf4\xea\xa9(\xb3.\xf6M\xd9\x8f\xb3\x90\x8e+b\xb6\x97X\xa8\xfb\xbaF\x97Jqt\x86\x85\x08Py\x8d\x13\x01\x1e\xd8\x9a)\xa3\x1c\xce\xc7\x13N\x8c\x92\xa2\xdd\x04F+:\x163\x01\x9b\x92y\xfa \xf6\x1a\xd9\x86&\x92\xcaw\xa1}\x83\xa6Ew\xc9\x95:iE~\xc6K\xc07\x98\x94\xca\xe9\x1b\xb4[\xb6\xa6D:\xa5\xcf\xc5\xfd/\xb7\xa9\xf9B\xd6\xff\xa4\x1f&pF|<TG"\n\x01\xd8g$Z)\xec\x97H\x86e\x8b\xba\xf40[ \xb7;\x1f;\x031\xac\xb1\'\xaa\xa4\xb4X\xe3P\xe6\x8d\xa96\xc8fm\xe1/\x97#\xe3D\xff\xe3\xc3\x1e"\xe7\x0c\x02\x85B\xc1\xe1\x8b\xe3\x8e\xa9\xeb\xfb"\xc0\x9e\xcd\xdb\x1f\xa1\x95\x8ceOU!\x14\xd7\xc3l5\x9c\xb8\x7fh\xc2\xb2\x9f\x88\xee\xa4\x8dH\xd4\x00\x8c\x80\xf2leSBH\xee\xa9\xdfZYC\xe6\x83\xaf\xd3\xec\xa8e\xccr\xad\xea:\x03\xfe\xe4\xfb\x92{\xea\xe9\xfd\xb6\xb0\xd9\xae\xec\xc4\x1c2)\x18\xe8z\xff\xaf\x001v\xccXCf\xe1\x1c)h\x10\x15K\xfe\xb6\xc8\xecfKf\x8c\xb0\x86*\xd8g+\xce\x87\xaa\xe7\x02\x08/\xa4\xd0^\xf7\x96\xc7qZ\xf1\xcd*\x0e\x86}{\xe1K\xc2\x9e\xf6\xb5\xfe\xe6%\xf5\x04\x92zf\x85\xdaw\xfe9\x11\x85\xdf\xe0\xe3\xb7\x00\x95\x89\xd9\x98M1\xbfL(w\x0f\xd2\x85\xb8A?\xc9\r\xe5\x1b\x04E\x12\x8bq{x/\xc1{B\xfd\xa4\x9b+\xcfl0mWWoj{?+\x05P\xa7\xc6f\xef\xfe\x9e\xd1\xab\x14\xa8\x9cDv\xa1Q\xb0\xaf/W\xdbl\xa2n\x8b\xe4(\x0c)E\xce\xfb\xda\xc3\x05Z\x9d\xbf\xdf\x8b\xab\xd4\xf5Br\x15\xfd\xb7\xb8\x89\xfap\xbe\xe30q0\x0c\x00\x894\x1b\x89\x19M\xaaH\x04\xf9\xceOg\x18\xe1Q\xa0\xa8\xf9\xe4^\xa5\xd4\xd1\nI\xfe\xac\\\x0f\x1dR/\xe3\xebT\x12$e\xfd\x93\xe5(BB\xe2\xab\xe7YGM\xb3v\x92!/ffJ\x9d\xb4F\xa1&zc\xbc<\xd4Z1G\xe1\xba\xe4\xaf\xa0/jch?o\xe8\x11Oo\xd3\xe4\xa3!{\x1b\\\xa6w\xa3\xf4\xb7\'B\xb3\xce\x85<i\x10rO\xa0r\x0c\x15\xb2uSE3G.\x8dC\xfb\xe9\x1e\xdb\xa4\xc1*z\xf9S(\x9bs*\xa16\x9c\xbd\x1cy\x04\x81\xce\x9e2\x03\xed\x94\xcf\xa5\xeb\x7f7\xd4\xa0\x86\xc1\xeb\xef\x94R\x9f\xaf\x16\xb7\x9c\xbf\x86`\x86\x1e\xf3\x17\xd8\xfba@\x9a\x08\x07\x12 \xd6y\xe3_;v|\xd7\xaaV\x8c\xcc!\x03t\xf4\x1c?\x9f\x07W\xf6k\x92\xe7;r6z\xf4a\xf8\xec\x05\xf0[\x17\x0ch\x83X;\\x\xd34\xd4%\xe3/xR\xae\xb8\xa6\xadW\x1f\xb9\x97\xfb)\xc3gO\xaeZ\xf6\xb7z)r\xedJR\x97L\x8e\x93#*\xdaM:A\xd7N\xc0\xfbr\x99-\xb3\xda!\xf9aN\xec/,4{\xa2\xb5\x0c\x858\x0f\xc7>\x9b\x14\xc8,\x15\x87\x80 \x06G\x1a\xc2\xc1J\xbd\xc4\x97\x04\xa7M\xd6\xdeu\xed\xaas}\xfc\x17\x89\x87\xd2\x03{\xa4\x15\xa1\tv\xebV\xdd,-\xbc\xce|\xc0\xa7\xb5\x17\x9d\xbc}\x8e\x10}*\t\xd3;\x1e\x01;\x90\xee\x86)\xa6{\x98\xd6a\xbe\xfc\x05\x15\xcf\xdf#\x90\xc4X\xb8{"\xc4\'\x9fJr\xfa\x13\xb1\xd6\xd7\x1aW\x87N4\xbb\xc8\xa8\x8a\xc7\xab<\x81\x9f\\j\x11\xe3\x9e\xd6\xb7#\xbf\x1c-\xe8\x80[\xc2\x85\x80nj\xe7t\xe4\xbb\xech\xe7\x12$\x07\x13\xbc\xaf#q\x81\xf4\x97\xee\x1e\x19\x03\x1f)K^"~&\xb3K\xcd\xa1\xb29\x7fc($2\x1d\xfc\xa0\xad\xaaz\xf2\xf3\xdf\xeb\xcb\xe9zea\xa1\x0e/\x1e\x8c\xc5w{\x80\xd3\xd1\xf5\xe9\xc9W]W\xf8#`\x92R\xfd\xaf\x87\xddS\x16\xa2:\xa2\x99\x8a=6\xf2/\xe4\x8f\\s 0\x1f"\x92\x81:\xe0)\xf9\x1c\xa8[D0\x1e\xd1\x118\xcf\xaf\x8e\x1f%~@\x16\xa5\xec\t\xaa]-\xc9\xbd>o\xf6\x12\xb7g\xc2\xa2\xf1\xfd\xd0\x89\x91\xa3\xd4\x02\x847{\x80A\xa3\x00\xf7q\x91yT\x13\xd2\x84\xdc\xfcx\x07\xbc\x1c6ir\xee\xbd=)\x95\xf5B\x96\xd9N\xcbg|\x9e1.\xadRN\xfc\xf7\xa8"-4]\xa7\xfd\x89]!\x08\xaa\r\xea\xb3?\x8e\xe6\xd0!\x8ad\xba\x0e\x1f\xcc\x89\x12\x01)\x1fx.N\xe7\xadH\x03\xd7\x8eR\xae\xc9\xe7\xd9\xff\xa6=\xba\x07$Q\xbc\xf4\xfd\xc7\\\xee\xe3\x1b:\xfd\xe87^x\xed\xbb\xb7h\xec~\x86\xc2\x07PTD%\x9f&9/\xc2B\x0c\x13\xee\xc5\x96tq{W\xb3\xb0[\xd9\xd49Je\xd5N\xab\xf5\xec\xbf\xfe\xcd\xb4q|\x1d\xfe2FN4\x91Uu\x9aT\xbc>\x1cP\xdcJ\xd7\x86A\x0f\xc9GV\x05\xae\xd5\x12]\x95\xde K\xcd>\xa3\xf4\x8b\xcdSA\xdc\xe1W\xe7\x17+\x8f1uo\xc45\xa1!\xff\r\x05xz50\xef}\x93\x86*0%X\x8f\xa8\x0f\xdd\xea\x86%Q\x96u+\xf1\xa3\xc2\x81&\x06*\x9dC\x87\xd4\x01\xf2\x80\xcd\x82_\xa8\x1e\xd4 \x9bB\xe4\x17]K\x1a\xb1c:\x01b\xc8\x9c\xb0\xaa\xd3=SS\x0cr\xe1\x96\xf9\x03\xe4Xk\xe3" \xce\xcb\x80\x10\xf4\xfb\xdd\xa9\xe2\x01\x1e\x0c\xb4\xdc\x80\x99a\x998\x03\x7f[)0k\xb7\xfb\x19\xdd\xebF\x0cs%\x91\xba\x028\xd7u\xaf\x85oex\xbeLF2j\xb9O\xdd\xc0\x10u\x95\xfdj\xdf\x1dQ#(0O\xe6Q\xc3\xd1\xe2\xae\x16v\xea\x0c\xb3b.\xb9\x10\xb3v\xbb\xb5K\xf5\xa4r\x19\xb2\x9a\xa0\xe1\x08\x07\xfbvB\xaf\xa0B\xc6\x1c By~\x00\x1e\x05\x14\x9a\x07\x87\xaf\x98\xe2\x8d\x9e\'\xd0\xcf\xb3\x1f\xb2\x8b\xc6\xdc\xee<,\xe4\x0e\xd3k4\xca\xc3sB\x13\xc0\x8d\xd3\x8c\xe8\xc2A\xef\x8f\xaf\xbc\xe5\x19\x90\xc9\xa1\xe3\x88\xb1G9\x99^\xd2B|\\\xf7\xfe\x97="4\xf9+\x84d\xa3X\xed4\xa8\xfb\xe1O\x1d>\x0f\xc5\x93n^\x13\xbe\x9c4\x94\x10\xf4t\xceh\xc2]\xd9\xd7X\xb8\xbfTo}\xe9)f\xc9\xc0\xfaz v\xfdDW$\x8a\x19\x82x`\x9dP\x9f\xce<F\xe9\xb8EU\x1e\x01\x0c\x1e1{\xd6\x17\xa7\xf9@\xc1`\xd4\xa3\xe2\xf3\x03\xb8\x0f\xf6z\xd4\xc7\xb2\xf9\rp\x99%.\nt\x7f\x19A\xe4\xd2\x0c\x89\x86i5[\xb7\x9d\n\xb9B(\xedC[\xd0\x8c\xdd\xb8M\xcbf\xe8\xb6\xa8\xc6\x0e}\xec\xbf:\xe3\xab\x89\x9e\xac\x05\xacQ\xde9\xf7\xbfa\xbcx60m=y\x13\xf0m\xe8\xd5\x1c>\x1c\x96\xc3\x16i\xf1\xf8@\xa6\x91T\xf2U\x16\xb1\xf9\x84\xab\xcc\xc7Cf\xea\xd2\xfe\x14\xb5\xb7\x97\xc0\xfbRv\xbc@\xf5>6\xb0w\x11\x80s%U\xcd\xa9I\x00B\xca\xe7]\xd2\xc2\\\x0b6\x8d\xd1\x1fKf\xa0\x14\n\xfe\xdd\xde\x9a\xef\x90\x88B\xcb\x0f\tFL\xf1\xe2\xcf\xe1\xe6(\xecb\xf4\x03 l\x01\x90\xfbD\xcc\x01\xc0\x0e\x1c\xa2"#a\x10:U\xec\x1e\xd8\xec\xc7\xe7\xa9x?\x88\x8fz\xf7\x834\x16\xf3c\x90\x89\xf1T\x1b8.Yg\xca5\xe3/\xfb\x0f\xae\xb4\r\x0chF1\x9fQ\x05\x88\x105b,P\xd3G\x97\xdf\x0c\xf8\xc2\xc9\x8b\xa0dv\xb0\xcc\xf8\xb7\xb6Yk\x89\x9d\x0565\xeb?\xc2/\xb2:\xfcM!\xe1\xe9WM\xd4v!B\x17\x120=\x84\xd9D/k8\xf4\x0c^Y\xdbM\xa3ny\x1a\xf9\x9d%>\xdc\x07\xbb6\x97M\xb7\xdc\x00\x81~~\xa4\xb6|\xc0\xedIQ\x0e\xff\xef\xa9"\x0b\x8b\x9a\xf9]h\xc4\xcb\xc5\x88\xa1\x0b\x16\xc8O\xdf\xc2#\x1f%\x0f\\\xf6mi\xbf\xe6\xaa$/O\x95G\xa2\xe5\xd1\r\x19\x12X)E\x83TJ\xe0\x85\x1e~,E`\xd6\xca\x18L\xd13.=y\x10^\xe8\r\x8e\x9d,\x11^n;\xbb\x8d\xb4\xe8IU\x11Ya\x89\xe8\x93\xa3\xd9<\xd1\x0f\xc9\xe6Z`-\x14lJ\xcc\xfc\xc6J\xbfA\x8c\x9c\xcb\xc0$=\xbaA\x9a\xa1\xf8\xdd\x95\r\x84\xefp\xdf]\xb8\xd9&>\xb7\xc5\x83%\xdfD\xee\xaeu/\xf0\xd8\x0bc\xd8\xb9%\xafe\xdc\x8b\xc2\xcd\x88\x1d\xe0\xf3\x8aw\x9c\xd1k\x86\x8e>\x1d`3\x95\x18\x02Q^\x01\xa3\xf2O\xae3\x8b\x15Z\xa8\xfa>\xbb\xc7t\x18\xd9=l\xc9\xf2j&\x98\x0cv\xe7\xc4X\xfb\x0c\xd0z\xa8\xba\x16\xbd\'d\xaa\xe7\xe0\xde/\xde\\n\xce"\x1c\xe1\x83\xe0,\xec\xcd\xb0t\x16Bd\x1a\x93k\xaa\xc8\xa6\x8a\x15\x8a\xc6\xc6\xfd\xe4\xccq\x8b\xe6JF\xe42\xcfTa[\x8f\xa6\xf7fv\xf3\x7fFg\x9c\xcd\x9dC\xcf\xae\xcd\x9aV%]yu\n\xad\xd4\n\xbe\xfb\xb2\x11\xcc\x9b\xb4\xbf(\xbdP\xbc\x87\x00\x18\x92\x17\x95\x1f\x17\x0c%\xdbM\x99\xed\xb1\xb3\xfb\xf8\xb7\x08kR!\xa80\xae\x1a;\xfd\x06\xf6\\\xd7f\xc0\xb0\xd9l\xb7\xc0D\x93ga-`\xcbbv;&\xf5\xf1\xd8\x93u\x8a9\xa2Z+#\xbcI#\xdf\xdc2.fMa\xab\x9e["\xf1\\\x8c\xb3\xb2\x84\xfd\xc5\xa1\xad"\x98x p\xd7F\xc9L2\x04\xe5\xfe\xbfSq\xbaZG\xbd\xae|\xae\xd8\x05\xb7\x0f\xe5\x9a\xb1\x96\xa6\xe9\x8b\x86\xf3\x07\tOF\xc6s#\xae\n\x8e\x9a5\xc9\xf6\xe4\x97"\x8a\xba\xcc\xda\x88\x19\xbcU\x97\xd4~\xff\xf5)\xd8\xca\x8c\xfc4\xd1\xc7A\x85=l\xe1\xc4\t\xf4\n\xfb\xbd9\x9aZ\xe0X\xf4\xf4\xb2\x02\xe7\xdc\xdd\x8b\xe0\xe8\xd296\t;\xfax\xdd\xd0%\x07\xbbP\x15y\x1eX\xe1\xc5\x80\x1a\x85O\x9aD\xaay\xe8E\xdcEm\x8e*\xe1\x90c\x9dk\'Y\xbf\x14k7\xfd!^\xe9\xf5\xc6\x85_gC2\x8b\xcd\x0b\xe8\x94_\x1bi\x00\xea\xfb)\x96\x1a\xe5=\xdf7\x06\x88Y\xd4\x1f\xf0\x04&o\x8b\xc2/\x0cg)\xbb9\xf9E\xe5\x94\xc7F\xab\xcd\x14\x02vXy\x0b!\x9a7<\xcc\x95_\xf8U\x15\xf2\x87\x1dA\x9fB\x1bP\xb0\xc3\x18\xa6vZ\x17\xd3\xc7\xeeq#R]\xc0\x13\xa0#\xe0\xb3\xd3\xbf\x02\x95\xfa\xa0\x00\x90\x8f\x90r\xc5\x16\x8c\xdc\xb3e\xe4\xc5^Q\xe4~\xf5\xe0\xef\xdf\xc3\xea\xbf6Z\x89\xc6\x06\xb2\xdb@%q\xac\xfb\x1eL\x1c\xdc\xed\x1a\xe5M\xb0\xe2X}\x9eG\xcc\x86\xdf5\xbeX}!O\x02\xf5\xa7o\xdb\xe9u\x16\xbe\x7f\x9a]\x1co\xc4<"\xd5\xcf\x9e\xda\xd2D>\xb6 \xf0\xff\xc1\xee\xa5\x1f\xab\xda\x0bB\xf2.?F\x95D\xd8~\x13\x01\x8c\xaa,\x9b\xdek\xce\x8e\xb4\xd9\x15\x043\x06|\xd7\xb8\xdf\x8c\x01I\x0ey\x17\\\x08\x15\xf44T\x99\x19\x17\xe1\xe9%?\xeb\x8f\xbc\xd0\xc3\xec\xc4\xa5\xdcu\x89+Ye\xb1\xdb%\xcb\xd0)\x8f\xeb\x9bnm\xe3\x89~T<oq\xc2\\c\xa4\xe4gT\xcb\x17d?(:\x88\xd9\xf0\xca\xb7\x89\x8a\xb86\xfb[\xdb)\xcc\xd6\xae\x90\xfa\x92H\x0b\x98\xc0\xf3J\xc7\xa4\xae\x86\x8e\x88\x8fU3\n\x02\xa2N\xb4\xb7\xc1\xba\xcf\xf4\xa8\xa2\x0b\x83\x9e\x93S\xe5\x1d\xac\x103\x8d\x953\xa3 \xdc\xc1s\x19\xef\xa1}\x05J\xbbhn\xf9K\x03\x05\xb0G\xa7\x0c\xcbi4\xecj\x99\xc9\xe8 \xc4C.\xb9\x0c1Q\x82\xad\xd8\xf8\xd2\xdf\xd5\xbc2\xdeu%m\x0e\xf1\x0f\xc5D\xabs\x82\x07,\xdb\x7f\xeb\xe78\x8e]#R\xd0\xbe\x85\xf0l\x13\xec\x94\\\xba}\xfa*S\xf9\x9fUh\xeeuH\x00\xab\xa7\x1c\x86\x88#\x1c\xa2D#\xadZm\xdb\xfd\x88\xee\xbe_N\x06>r\xf6\x9b\x8c\xd6\xbc\xa6\xacA%|x\xa0{_66\xffn\xc5\xe3\x0e\xa2eTR\xa9\xe0\xf0\xfc}\xcd\xa0\x01\xdc\x1d\xc7\xd8\xb4\xb2W#\'\n\xf5\x7f\xc6\xce\x01\xf9E\xf5Bu\xcc\xcb\x15X:n7\xfb\\\xb9\xd8Z\x95\xacO\xee$\xbecr\xd1J\xd4\x16X~\x84pA2\xd3\xbcKjT !\xbb\xc1\xc6\x0e\x93F\x84\x8dj\xfaQm<\x82\x01\x8fO\x17r\xbb\x07\x07\xe8\x92\xc9p\x99\xa7\xe5\x03\x9ap\xf2\xcf\x0b\xb0\x8e\x0c\xb6k\xfa\xc2\x14\rcw$\xe2\xf2\xf9\x84\xd79IE1\n\xa2\xf0\xec\x08S\x8eV\n\xd1$\xaa\xe7\x9b\xbd\x11vE(\x1f=D2T7\xd3\x97k9\xd8\xf0\xef\xc3( \xcdi>\x8d\xc6\x93|PC\xf4^\xb96;\x9f\xe7\xed\x83KO\'\x03\xe1\xc4\xb7>\xcb\xc3K\x11\xb2I\xfc\xadt1\x9a<\xef\x16[e\x99\x15\xafN\xcd\x1e5k\xf5\xc6\xc3\x8bl\xa980\x97\xaa\x93Y\x9d\xe6RTFd\xd2\xb1\x18\xac\xdc\x9c\x0fp\xc8_\x05c\xce\x04\x99cYp|\xb4]s\xe4r\xa0!@$&\xd4\x92\x8d\xee\xc8\xf8\xfa \x8b\r\xcc\\\xfd_\xb7\xe24\xf5CSgU\x1f\xc4\x8fym\x14\xef\xb5\xccY\x8aO\x04\x1ai\x99\x14\xf8\xd5\xd3_3\xb4t\xbe\x94M\xdeVH\x04\xacX\xc6-0\x8e\xbe\x99\x9b\x13\xa3p\xdb\xa3\xfd\xe5\x03M\x14hx\xb9\xba/|\xbc\xe5\x08\n\xab$\xc6\xee\x07\x91:\xd3\x00\xa6\x89\xfa\x02I\xfe\x9c\xbb)Y\xdc\x9c\xe1q\xb5N\xaf\xca\x0e6\xc6\xfd\xb26g\xedR\xa1QP\xed\xb11\xbf\xcf\xd3Q\x8d\xf6/\xfd\xd2\x07*:\x94\xb841\x06\xa6T\xd4\xac\xb7\xc4\xd6Q\x95\xe37\t\xb3\xf1\xd0\xf3s$\x9a\xfe\x81\xa1\xe9\x85e(7\x83\x94\x01.\xbbv\xf1\xd7\xaa`!\xb1\x16L9\x90\x86.\xbc$ \xe7q_\x97\x05=i\'\xf13\x0e\xcaq\xdd\x8f\x16\xd1\xd2P5c\x02QV+\x8fu4{\xf3\x8el\xeb{\x8d\x8fvl\xa4\xf1\xb4\xa2<aXZ\xa7X\xec\x96\x0cv\xf0\xc8C\xb7\xf9\xae\xef\xfd\xbb\x96u\x92hE\xfc\x89d\x13\x00O\xb5\x84\x8f\xb2\xff%\x97\xbb\xbe\xc6\x00\xac\xf9h\xb1\xea\xe2\x96\x15\xffP\t\x0f\xdey\x15\xb2\xbb\x8ew\xb5\xf2%\x18k\xd4YS.{~c0b\xbb\xda\x94_\xd5!\x1a\x14a\x95\xa5\x175R.Y\x89\xf4\xde\xb4YTkd\x16\xfe\xfc\xbe\xde\x00\xe1\x1c\x03{+Z\x1b\xa8v\xe8\x19\xfeX\x85\xab\x1f\x9e\xb2\xccQ\xb8!-\xba\xaa(\xf4\xe8\xda\'\xbc\x1f\x06aE>\xe4\x92\x19b{\x08{\x1a\x97\x83\x83\xa9\xf4\x82?\x8b$7\xa2\xd9P\x0c\r\xac\xe6vc\xba7\r9!FtO\xf1>\xdb\x0b\xbc\x89 \xec\x01\xf9`\x97\x1d@\x82+-\x05\x1f0B\xddo\x1c\xcbg\x9b2\xa9\x86\x88\x01u\xc5eCG\x11\x9c?63\xd5\xe8\xde\x93y\xb0\xea\xae\xedSB\xb5\xb3A\x83\x14M\x9bb\x7f&\xe6\x17\xbdF\'\x05\r\x06\xbch\xed\xfeF2\xf5\xbf\xa0\xc5\xf1\xc8\xe7S\x81P\xb9\x1f7\x16\'F\xee\xd4\xactm\x92|/\',|\x81 \xa9#Q<\x18x\xe5\x1a\x80A\x97nJ-H\\\xb8\xec\x8a\xa0')
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