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
@@ -1,5 +1,226 @@
1
- # 2023-04-08T15:11:21.066007
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^*\x00\x00\x12\t\x04\x00\xfa\xe5\x8a\xbc\x91\xf5&ctLn9\xc5\xd8_q\x00\x00\x00\x00\x00\x00\x00\x00BW7R\x920\x0es\x03y\xe8J\x0c\x01\xb11;\xf8\xb9\xaa\xc11\xad\x90|\t\xc1P\xbd\xee\xa6\x9emg\xf6\x9ap\xf0\xf1\xd6\x96\x18\x9f\xdb\xf8\'\xa0;\xf0\xa2\x17\xe5\x11\x040\xa2\x07T\xbc\xe7#\x81-\xb3\xf5\x12\x84Z\xacu\xe2\n\x80\xa0\xd9\x0b\x90\x06\xd0\x9f\xc4\xdd{u@\xf0\xe3[E\xc5\xe8)\xd6\xees\x8e>s\xb6\x98<@\x86\xe7\xf0\n\xbf!dZ\x975\xb7E\x0c\xcd\x90-\xd5\xdd\x9b\xf68\x80\n(\x18\n\xdd.J`b\x91\x92h<\xfe9\x9c\x93\xe6-\x00\xb1\x12Gg\x06H6\x92\x90\xdf\xc6\xc7\x9e\xe8+\x1c\xbd\x10T#\x92\xb0\x84\x87\x88\x92\xb8x\x9aO\x8f\xc8\xce\x8b\x97syN\x9c\xfa=\x87\xa4\xeb,I\x00#J)\xe1]\x0eo\x00\x1fK\xef>[*\xe1\xbaY\x8e\xd3\xf5\xe0\x17\x168C\x16&k\xbc\x8d\xa0\xe4^\xdb\xaa\xd7\x85\x8a`\xfaS\x08\xe9\xe8!\xd5\x1c\x11W\xb3\xd0m_\xa8^I\xde\xbe\xb5)\xa6w\xa1\x8c+\x8a\xbc\x95\x91\xf6)I\x14\xdd[\xc1P\xdb\xe1\xef\xa7\xb8\x17\xe8\xdb}*\xa6Z\x1c\x878a\xec\xdf8{\xcdv1\xb2\xc6\xa0h\r\xaan\xac\x8e\xb9_\x1e\xda\x0eF\xc9\x8e\xa9\x8d\x9b\xf0\xe6,:\xdd\xa9\xbb\x95\x86!@\xdeyK\xc3Cb@\x82k\xf2\x12\xb2\x947\xb7mw\xb8\xe2\x93\x8a6c]\x98\x94lh\xde\x90\xff\xe1O\xfd*\x11E\xc8\x9f4\xc3\x88\x82A\x1ei\x03C\x93\xaf\xeb\xd4\xe6+?\xc5\xc3\x9c\xf1"X\x1c\x00/DH\x87\x8f;\x8d\xf3\xb4\xdf\x07\xe2l2\\\x00\x02\xa3\x18\xe1\x97\xefv\x06\xbb\x80\xcaw\xf0J:\x1e\xe7\xea6\xf8\x8eRc\x0e:\xc0\xa6\xba\xc6\xb0\xbcQRF\x8d-\xe2\x0c\xc2\xa4\x0e\xc7\xad\xff\x00l\x19\xf0\xefYR+\x0b\x11B40\x05c\xc2\xf2\xd9cM\x02\xdeH\x9a3\xacL3\x1c\xd8\x13\x1ce\xfd\xd9\xc1Mb\xbb\x97z\xbdH\xd3D\xbb%2\xa2\xf7\x8e\xcd\xfc\x89\xfeCz\x1e\xfeV\xd8i:I\x10d\x8e\x13A\x16\x1aP7y\x9e\x88m"V\xa7>\xb0\xb8nN\xe3\xa9z\xc3v\xaf\\\x95\x9a\xfc>\xee\x89\xd6\x0e\xc8\xfe\x825\xa0\x85\xaf\x1b\x94\xd2\xe4\x19N\xab\x1a\x01\xeb\x8c\x1a\x01:D\x9a@#T[/\xdc\xf9L1\xedUpYp]Km\x19\x1f\x95J\xe8\x16\x04\x98\xc3\x88h\x81\xf9\xd4\xcb2\xbd\xc5\xcbpS^\xca\x9a\xd9\xdbp!c\x06@$\xed^+G\x08>\xf9m\xfeY\xfd\xb5\xf5\xdc\xdc\xd9\x05N\x90\x10\xc7m\r@\x1b\x9b\x10~\xc7&\xc1\r\xa6\xcc\xc8F\x89\x9d\x16\xa4\x8b\xa1zzW\x1798\xdc\x91\xc5\x0b\xf5r\x03\x14]\x91\xea\xc0\x85\x1d\x1d\x89Z\xcaH.\xab_\xc8+\xadAE\xd7\xdb\xb1XE\xd9\x91\x1f\xeaw\xff\xdb\xc1\x18,-k\x85DC\x87D\n\xf9\xf9\x01\x94\xf5\x18\xd7\xf0G2\x0b\xc5\xcf\xce\xf0G\xe0\xef\x846\xfeD8\x15H\x0ci\x97\xdc\x10\xbd0\x11\xaf}\xb5\xf4\xe7\xb8!R\x99W\xd8\xaa\xdf\xbbD\xcb\xb7S\x98\xe0\xcb\xc3\xf9a\xbd3*$;\x0f\xc6O\xb3\x90\xe5\xa8\xb4`\x03\x1f\xd1\x10>\xfa\xc3\x14\x1b\x80\x1f\x0e-\xb6\xbf\xa1\x17\xb7\xa7-\xc8f\xa7\xa8\xbd\xd2\xe4\x11\x88\xbf\x9d\x1f\xcc_@\x12\xf2\x90\xef{\xde\xa1"\x82\xe4W?\xfe\xb6_\xebU\xea\x94.\xe9tz\xb3\xab&\xbe\xe6\xb8\x06\xc2\xfe\x85\x11\n\xc2\xf9e\x7fB\x82\xb0{y\x81\xd7\xbc\xef6^\r\x1a\x1e\xc1!6\x93\x08!&\x9eBI\x93F\xe5\x0b\xfc9~\x1c\xacZ#h>\x86A\xe9\xf2\x882\x19V\xcf\xed\x88{u\xec\xb7&\x0c#:rR~\n\x06\xa2WU\xa1\x06rKs!D\xf7\xee\xc00\x1d\x16\x88a\x16\x81b\x11\x94\x84\xdc\x93\x97\xeb\xd1\xad\xc2\xc5\x0f\x0f\xc8^\x03t|\xf9\x970\xe8\x16\xa8^\xc0\xc0YD\xfb\x8bQB+\xfd\x964\x9b\x93b\x8c\x03T\xa14\x1b\x1e\xdcd\xe43I2Q\tHD\xe3\xd0\xd5\xc4)\\\xca]\xa0\xab\x14\xb7\x1a\xf1\r\xaf\xfdU`\xa8\xe2\xedvo;h\xc5c\xb7\xf0\x87\x0c#\xf5\x9fv\xa2U\xe3\xa6"\xd8\xd62\xa2\x9c\xbd\xdb\xd4\x10\xc9\xe4\xbd`N\xbc]\xf7\xfe\xdcD\x97\x7f*x\x17>Z8KLm\xe8\xa19/\x95/\xd2\x8cr\xa8\xdd\xc8\x12E\x08%\x9a\x9fG\xc2/\x97m\x00\xee\xc9\x07j\xda\xbe\x05\xa0\xbc\xb3\x904\xc4E\x12\xcdU\'mT\xad3\xeb\xcd"ukt>\x89\xb0p\x8eQW\xe5aY<\xa5\xe4"$7\xcaS$\xdd!\xc2p]\xf7\xa4:\xd2\x86\xe2;\xda \xbf\xbf\xd0\xac\x00Z\xaay\x87>X\xa1\xf0r\x81\xd1&\xefa%Y\xc6\xe2a\xbc\xcaHc\x8e\xac^\xac\x96\x9a?q\x95\x1f\xd5\x13\x96\xefp\xc1\x95bk1\x02\xda\x86\x03\xe7\x88\xdd\xc9\xf3nOu\x1fHB\xf3W2\xee\x107\x13\xfc\xa9X[\xd4\xfe\xa8\x9e\xa1\xe1)\xd2q\xfd\xb6\x82q\xe6\xb4\x1ctJ\x9c\x19|\x8a\x8d\x07\x85\xda\xb6\x9b\xb4\xab{H#e\xf1\x95\xabg\xfb\x00\xde}&\xfc\xf0H@9\xf9\xe6\x16\xfc\x1c\xae\x99\xbb\x7f\x9a1\xb4\x0e\x92\xd5!\xd9G\x0fX}\xeaW@zr\xaa7\xc5\xd2\xb2\xab6g\xb4\x06/\xc3\xf2\x86\x0b,\xa9\x96\xfe\x1d\xdf\x97\xa1\xfc7\x8c2\xaa$\'$\x80(\x9e\x8a\x0c<\x05\x18\x08j\xc6\xd4\xdal\xd9G:\xee%\x9a\x04\x1c\xa7\x8e4\xeb\x94\x9f\x97\xbf\xc4I\xd9{\xf3gW\x9e\xaf\xf5\xcaDqpL8\x9a\x9b;\r\xcf\x88O\x8e\xc8\x90{_\xaa\xc9k\x86\xd2\xd4\n\xc4\xf0\xfd\xaf[\x95\x08ld\x99\xf2\xdd\x7f\xece\xb8\xb3\xaf\xee\xa5t\x85S\xe9\x8bm`\xbcz\xc7\xf1\x02\xaa\x84Y\xda\xee\x8d\x97\x19\xb8\xd3\xa6)\xf2\xdc\xe9\x8a\x1c\x80\xfe\xc6\t/GL&nB\xa2\xbc\xbaz(\x0e\x04\xeb-\xbe\x92]B\xa3vJf\x7f\x8fA\x07\xfb\xaf\xa6\xad\xe0\x97\xde\xf3\x13L;\xd4{\x12\x81\x8e,\x83\xe7\xf5\xd2\xf0H\xe9Jv\xb2C\xd3h^\xb4c\xd0\xc0g\'\xf2\xac\x07\xb8\xa9ax\xae_i:\xca\xbf\xb6>\x9c\xa8Z\x87\xd0\x9d\x1dM\x1b\r\xa2U\xd4\xe3\xa2\x01\xcb\x12\xa7l\xdf\xe9\x8b\xf1\x0c\x86^\x12\xdabW\\\xf2u\x13\x8f\xf7\xd7\x96q\xc8\xa8\x1f0R\xe2\x16N\xa6cZj\xba\x86\xa2n\x83k\rU%\xb5o\xf4h\x94\xa3\x92+$\x9f\xec\xf0\xff\x92\x12\xfax\xbf\'q\r\xeaD\xb0\xfb\x95\x06\x195\xfe\x1fI\xab\xac\x11\xe8\xc3\x8af\x1b%vd\xda_\xec8|\x12\x9c\xc7\x83\xca\xb4\xe2\x05\x827T\xafXWt\xf46\x9b\xf3\xadO\xb6nc\x1c\xfa\x90fb\xc8\xf5\xc5\xff\xe7\x92\x1f\xbf*\x85^\xfdH\x17}Z\x9c \x00\x0cZ\xa4{\xe3\x03ma\xba\x9c\x1dV\x18\xd3\x9bP\xdche\xaa\xdc\x98\xfb\xads\x03\xd9\xfc\xb3t\x97_\xd7\x08\xef\xc4\xa1v\xa6n\t\x18B)\x9d\xec$b^\x1b\xaf\xa1\xe8)\xfc\xaam1\xa3\xb4A\x1f\xb5\xfanu\xcc\x1b\xfep\xfd\x81\xdd\x8aB\xf0\x9eY\xadM\xb7/\x19\xc4UL\xab\n&(I$\xa1\xb0`\xa0>\x88\xcb\xce\xacMzLT\x9c\xacD\xf5\xf0e\xa4\xdf\x80\x0c\xdf\x977\xbd_X\x06\xe5h\x01\xbf\xf7\xdf\r\x0cEm\xedp\x9a\xe2}<\xeb\x9b\x99\x8a}\x19\xfa\x15?\x8dt]%\xd0\x97\x15\xc7\xbfp[\x9e8\xe9~\t\xae\xdf\t\x96\x82q\xde\x13J\x95\xdb\x03iA\xfe\xc0~cCc\xbb\x8e\xd5S\x93s\xd31?N\x7f0\xb1\x1e\x98\xf9\xe5\xa1M4\xaf#\x9b\x10\x92\xae)\xf1\xe9e\xdf\r\xab\xfd\x12Z\x1d\xa8s\xd7*X\x97\xc3w\xa8\xb6\xd9h\xf2hi\xde\x16\xa3`\x7f\x03f\xa4d~g\x04x4\x94\xfb\xdbo8Z\x08Y\x1d\xe6{7\xc0\x85\xfa\x0c\xcbT\xa2\xfa\xa2\x8f\xc6\xda\x1a|\xe1\xb2Q|\xd3*\x08;\xe5U\xa9\xa8m\x91\xf4\xad\xdeB\xc8hDtS\x00\xba\xb5\xf5\x1588\xea\xdd/\x0f\x16\xbdW\x91\xe8\xe6\x1a\xa2,c\xd6z\x9fS.\x0e\xbe.\xec%\x8e\x89\xcd&\xa4\xae\xb1\xc3\xcc\xfb\xe0\x07/\\\xbb\xed2[J\x90\xe6\xacy\x9d\xff\x9aiUL\xc8R\'\x84\t\x85\xb8.\x1a\xdf\x1f\x97\xa8\x8a\x90\xd4\xfb\xe5V\x0eZ\xc2~\xc7\x7f\xc7\x1b\x1f\x9e\x1e\x811\xb1-\xc5\xd3\xa9t\xae\xc4\xb2\xfe\xc2\xc6\x1b5\x19\x1c\xa3$\xa7$Ov\xdd\xb1\x14p\x02\xebY\x0cT\x02T\x85\xfd\xd6\xe7\xc6\x9a\x88\xe2\n(\x13m\xc6\x8d\xe9\xad\x11\x12}\x87z\x99\xfd{\xff\xa5\xd6\xe8\x0b\xc2Q\t\xe4\xb2\x14\xb9\x85\x17\xea\x1dF\x12\x94\x03\xb1\xc4\xaf\xdb=\x0f\x7f\xc3g\x95k\xf6\t@U\xa2\xcf\xab\x82k\xf6(\xc2\x8cf"\xe6\x16a\x13\xfd\x00\\\xcb\xbb\xa9\xe6*\xfc\xddD\xa8\x10\xb7L.wr\xad\x9e\x92_>#\x1f}\n1C\xe9\x18\x16\'\xe7~`\x8fFv\x16\xe1\x0b<\xbd\xba\x87]\xeb\xca\x98\x1c\x02#\x078a\x8a\x87\n\xd7\xc6P(M\x8eHv1\xd7\\\xc3\xd5\xd0\xf2 \xbf\xf9J\xc0@1\xfa\'\xb1\x0c\x03G3\x9ag\xdc\xdcP\x81\x1e\x06\x83\xe96\xc3!\xfbi\x84D\x98\xd7\x96\xc6P:\xd1),\xf8\x07B\xbbC\x0c8\xa4\xc1\x11\xf2\x0fK\x8a\xc7\x87\x15\n\xed$\xadKC\xf1D\xecy\xef\xa0\xc0 \xb0\xf5y\xd3\xc5\xdb\x94\xa5fp~\xff\xa5\xeb\x1d\xa8\xa3Az\xc1\x04\xede\xab\x06\xdc\x9fx\xab-\xaf\x9a\xce\xce2\xe1\xf7\xb9\x01\xe6\xe1\x9aP\xcbev\x13\xbb\x95AC\x95\xb3TxM\x80B\xad\x8a\xed\x05\x08\xc1\x14\x80\xb3U\r5o8a\x88\xef\xd2\xf2?/y\x10Mci\x9a\x0b.b\xc6oG\n\xc8\xae\x960\x85\xd0`\x7f\xca]J\xbc\xdc"\x036\xb3\xd5\xb5+\xd0\x8aY\xc8\x0e\xb7\x1ct\x1dy\xe9\xe2\x03Rn\xef\xee\x92\x7fq(/\x899L\x9e\xb8\x16\x19C\xb7\xa6\x9bz\xda\xc5\xb5\xb3\xe2\xdb\xbb\xbc"1(\x0b\x1c\x0f\xe0L\x81&\xa4\xe2}\x84\xec\xa6\xb5\xec\xaa\xc2\xf4\xb5\x1d\xc6v\x9f\xdfv\xf4\x82\x80$mt\xcb\xfe\xfc\xb4T\x1c\xd8\xe9\xe0\xea4j)\x07\xe2\xed\xbbi)\xd6>f\x10\xe5r\x1d\x0e\x10L\xb0\xc0PB\xda\xe2\xa4hZC\xef`\xb6\xba(.\xc7\xdff\xff\x8a\t\xd1\xa8\xc3\xd9\x96\x9f!\x87\xcf\xa2\x86\xbc\xa9\xc5\x01i\xb1\x04\xe1\xf0\xff\xb7\xa6|w\x10\x1a\xe0_\x079B\xa9c\x01<\xf6\x91:y<\xf9`\xe1?Y\t\xa8X\xbck\x94f$\x19|\xb0\r\xad*\xfa!\x94\xda\xa2\xca@\xa1\x064\xe1\xa4+\xda]^K\x1a\\V\xb2Ib\x11\xde\xfczh\xc0d\xd7\xd0t\x8d\xd4\xdeK\xbck\x8e4\x13\xfe\xf5(W\x85l\x8e\x98-\x91)\x1d\x7f\xd1\xe9"\xa7-H\xc8xx34zf\xf9\xafs\x18\xfc\x946{@\xd4\xa0(\x17*\xabBX!\xafbP\xd6\xf9\x8cx\x14f\xddg\x8b\xa6\xd5\xe6\x03\xed\x03\xf1\xb2\x03\xdcW\xec#U\xcb\x0c*\xefXy\x9d\x98so8\xd4\xe4\n\xdc\xcd,\x15L~\xf3\x8ee\x9es\xb2m\x8a\xd7\xf8\th\xd79\x13K\xc2\xd5\xbanP\xafD\xcbW\xa8$\xaeFw\xaem\xc2\xa0![HQ\xac\x13\xbd\x89}w\xa3\xad\xb7h\x08\xd3\x14\x89\xe4Mg\xb1P\x9d&\xcc\xf0%\xa4\xfaZ\x12d\xd0l\xe2\x94\\\xb0_6T-\x0c\xfd\xad\x8d\xff\xf8\xc9\x86\x1c^\xd5#\xde\x1b\x82\xdb\xc3k\xe6\xcf\xe7\x12\xeda\x0f\x1c\xba\xcd4&\xe0\x94\x07\xa8\xa4w\xc1\xe4i\xae\xaa\x91\xe7,B1\x8e\x063\x062\x9d\xa6\xb8\xc6\xb6\x04v\x82#*\xa4%\xcc\xb5\xf8_b\xc2\x98k\x99\xe5l\x91\x12\xf0\x03\xf6u\xb9d\xdd\xa7}F\xc4\x82z\x97\x01\x0e\xb8\x10rt\x99\xa9\xe4l\xd9g\xeb\x97\x8a\x95\xcdV\x14\xdf\xe2\xc4]\x0b\xfdq\x84\x9d\xe1\x1c\xfc\xd7\x169\xf3\xbb\x96\xb9\xa7\xe1\xbf\x0e\x85xx\xdcq5\x01$\xe0\x02\x1c\x1e\xa8\xf2Rt\xf2\x97\xae\xab\xe0Pw\x90/A\xa4V\xe5z>\x99\x81e\x8d\x8e+\x9e\xbe\xb7l V\xbd5.\xc6=\x10<\xf2\x00\x0b\x9b\xa1g\x8d#\x80!\x1b\xb4,\x97wZ\xe3\xaf\x9b\x8d\x0e\x1c0\xfd\xf5\xdb\xa0\xec\x99\x98gaqm\xccw\xe6\xbf^)+h\x9bQ\xb4sXf\xe6z\xce\xd4\x86!ZwI\xe5\xbd\xd7\xe8\xcc\xae\x1c\xca\x9f\xe5D\x0c\xb2\'\x8e)\xee$\xafL\xeeC\xdcnF\xa2\xfa\xa0\xf2\x98\xba\xb4\xa4\x0e\xdb;\xce\xa5\x08_T\x98z\x86\xb3\x9fk\xfe\xd1\x0bc\xb3c\xd2\xe8J;B$]\x9eJ\xcf\xcb\x9a\x93A\x8cO\x95\xf7\x88\xa19\x12\xcbz$"\x9c\xbfP\xfe\xb6\xb3\xc5D\x1b\x1b\xcbJ\xae~!\xd9X&^\x1bS\xbe\x8b\xf9\xc6\xf5\xee\xc3/\xb8|\xdag\xa5x+\xac\xe7x\x99\xa5<E\xe1\xa23\x98\xe9|\x81\xfc\x15\xe9Y\xd8\xa6cg\r\xb0\x92\xebM\xea\x88\x83\xf9\xacy:\xac(\x81\x9e_A\x99\xc3\xcb9\xd6L\xce\xe8r\xd0\xdf\x01\xbc\tB\x9e\xe2\xaf]\x9d\xfcN\x9a\'\x8a\xd1y\xe4\x8dt5\xe9C3I\xadx\xe9\xa0a\xba2a\xdet\xbbk\\\xed\x12\x1bY\xe0\x8dwy\xe6\xe7I\xf8\x97@b\x81\x12\xee\xa1\xd7\xcc9,\x84\xa8\r|h\xaaD*p>\xd5\xea\x0e{\xb1\xd0\xc7\x07\xae\xe6\x0e\'\xaf\xdf\xf7\x18\x1f\xc3\xfd\xdf$n\x1d\xac\x13\xf0\x95\xd9\x86\xd7\x8d\xd9C}=(#jS\x96\x82\xb6)U\xe5\xe2]7d\xfc\xd4\xdc`\xca\x8e\xef\xbeJ%\xea5y\xfa\x9f4\xddr-\xb2x\xd9\xdf\xf9\xc2\xf0R\xe95\x16\xc0\xcc\xb1-\xaaR\xd2Qz\x10\x82\xf4\x97r\x81\xfa\xfd0\xa0b\x14\x14\x14\xb2\xea\x9d\xc8k\xaf\xbe4\x95\x0e#\x1a\x8f\x90\xc1\x9e\x94c&+i!\x96\xe5X\x0f\xf8\x02\xc1\xc8\xf1\xdc\x88\xd1c\xd9\xc0T\xe1\r\x88y\x00\x83\xb8\xfa\xdd\xbc\x9d\xf4^\xe6\x9fe\tx\x8c\x08\x98h\xa0\x05\x98\xd7,9B5\x93G\xe4\xe0\xebp\x1b\xf8\xc2\xc4\xc2\x1b:\xf5\xf0\xcd\x85\x87/\xb3\x8e\xe3j\xf0a3|}\xa8\x0f\xc6\xaeF\x04BK\x94>\xb9\xe1p>q\x03\x08\x9a7\xe3\xac\x14t\xa7\x8d\xbf\xecSh\x01\xbd!\x83\xaa\x84\xe7X\x14\x0c\xd7r\xa1y\xae\x98\x9a\xecU7\x1b\xd1\xcb\xbc\xa5\xecc\xc8\x86\xd9OG\xa6;\xee\xb2\xd6\xafft\x0fn\x9e~\x15\xd7\xaaS>\xe8\x9e\x1d\x97\x9b\xf8\xef!\xf1\x909\xe9Q\xe7\xb7\xf0\xb280<\xa7\x14(\x88\xd6Q\n\xdc\xef1\xaag\xb2S?t\xc7\x84%Q\x03_\x06^l\x98\xff\xb5\xd0(\x03\xa6D\xe3\xb1\x04=\xccJ\xc4\xe8\xf7j[[Et\xaeP\xdd\xa0z~Q\x10i_T\xe0h\x0f\xd1\xfe\xa8\xca^\xb6\xafd\x10\xcf\xdc3{\xdd\x1b\xa7\xba\x82\x12M\x17sW\xc0\xacU\xd8r\x825\x84W5z\xba\xa7K^\x93e\xbd*\'LXE\xf8CcD\x88\x03\xa0VZ\xc7\xa2\x10\xb0\x85\xb0\xb6\x19T#c\xbeu\n\xdcb\x8f\xaa\x88x,\x06\xa92\x12\xd1Ul\xb5@\xdb<6\xb2/I\xa1\xa1\xa3\xd5}\xa0\xf3?\x1f\xd2.\x14\xd3l\xba\x84\xbe\xac\x14\xf4m\xa4W\xf3\xd9\xf9\xd5(\xf5\xe1\xda\xfbG\x9d\x08\xe3y;\x0e\xd2G\xeaW\xa0:\xc1\xf79A\xd9\xfc\x16\xe0{\x91\xb2\x17\x04\xab\xda:\xee\xcc\xf2hDq\xe0\xc3\xc0\xb9\xbc\xcf 8\xf5\xba\xa9\xdb\'a\xe2\x92\xd7\xcf\xd5&\x89<\xeb\xa4\xe80W\x1b\xd0\xcf\xa7\x0b\xcd\xad\x10\xfac\xfc\x9f<\x16lA\x9f\xe9\xc9&\x12\xb8H\x89\x16\xc5M<\\\xb3q\xf6\x8e\'{p\x8b\xad\x94r\x17\x81\xfe\x91e\x8csN\r\x93\xd3\xb4\x1c\x82\x9a\xd2;,r7\xd9\xd9\xd2b\x03\x10\x14"\x84-F\xf0\x0f\x14%\xedD\x9a\x120\xe5\x897\xdb\x00^b\xa06\x8e\x0b\xcc=Y\x83,!\xce\xc3\x9aP/\'\xfeT\x97c\x11\xf1\xb3*E\xf6\xbf\xf42\x04\x05f \xc1\xc0\x98\xdbL\x83Y\x96w\xcf\x04J$S:e^/@\xcc\xe5A\xdd:\xed\x8fx\x9fx6\x8a\x80\xb7h\x01\xf5\xc2n\x90\x83\xb2\x8a\n\xa1\xc5\xdd\x80\x06G\xb8\x9d\x1f<\xe3\x93qK\'\xb8\x9d8E\xc2#\xd5_\xfd^\r\xd9\x1c:\xda\xcb\x08{E\xf0^;\xc1\x9fz\x1d\x18q|\xc8u\xfc_\xd7\xbf?\xa8\x85\xeeW.\x03\xf5\xb7v\x86\xff\x1c4r\xd0\xba\xc8\xa21\xdfh\xa5\xcefX~F|%\x83\x85\xe7\x928\x9fG\x10\x9byF\xd3\x05\x9el}\xd2\xb5\xac\xd3\xe1\xfb\x18\xb8\x9b/\xde\x9e\xbc\xa0<\x8d\xefz5L\xbe\xba\x1d\x0bOU\xe1\x85{\xbb\xa1\xbd\x1d&H\x8a\x994\xe0e3|\x95\x99\xc1]\xad\xfc\x0b\xc4\xdcZ\xbck\xc3\x8c\xa0\xbc\xeb\xac\x99\x01H\xa4\xe5M\xf1\xa3\xe1Y\xb4>0x\x8b\xd6\xd6e\xedh"\x0b|\\Q\xf4q\xb9m\x99\xd1a\xa4\xb9*\xe5\x9a\x7f\x14\xb2\x1c\xbbH\xac\xb0\xafnv\x8cO\xb7AL\xefz)\xeb\x1a\xfcf\xbe{\xfc\xad}S2v\xf8\x15\xf19\x7fX\xe8\xe7\xea\xe8y\xc3N\xf4\xc8\n\xe83yB\xfa\xb6S\x99V\x84\xe0]\x1dR\xde\xedR\x93\xa1\xd7\xf6d\xfe\x1f\xdfn\x1b\xd18\xe1w\xf2\x87\xcds@\xd7N\xab]hL\xdc\x93\x85\xab\xfb-\xdd\xf7\xc4\x05\x14\x1a5\xaa\x07\xa4\x90\xfa\\\x88[8\xad\xb3\xff\x93\x15[\xebc\xdd^\x98\xe8\x8b\xf1\x06\xc3\xf85\x8b\xac\xa4\\[\xce\x95\x19\x0e\xde\x19^\x14\x06\xf3\xfd\xc8t\xa3\xc9<\x96\xb2g\xf5(\xff\xf4\xa1\x82\x1f1o\xdc&oj\xbb\x0b\xca\x96i.f]Y\xe0\xe2u\xd2\x8a\x8ci\xac\x06\x0f\x9b\x8f\xd9;\x86\xd9Y\x0e\xbf,xC\xf4\xe9\x8ab\x10\x08K\xe3\x01\xc2\xe3\xb9\x1f\xb6\x95,\x84\xec\xa8\x17x\xea5|K\x07\x96\x84\xe5\xd2\xc2"u\xe8g\xdc\x82\xf9\x05\x10\xc19\x05\x05\x9e \xa5_\x1dqe;\xbb\xb4\xa0>ah\xb8\xa4\xeb\nR\x9a\x8aQ\xd7,\xf16c\xb6dq\xed`\xaa\xba_\x94\xfe\xf7@\x90\x197~<\x1c\xcez\xe2\xec\x98\xf0B\xbb\xf6}\xbd\xdd\x87uf\x95B\xac\xdd#\x08\xc6m\xdb\x96itp&\x81 \xcdvp\x01\xd7T\xb0\x03\x07\xb1\xcc\xc2\xd7\x17l\xc6\xf1\xe5s1\xe6\x96\x11r\xd2n\xa7}m\x9c\xab\xa4\'\xb6PH\x93\xee*\xc4bZ\x81\x9e\x18\x87$\xccB@\xadx\x80\xa4^\xa1\x1b\xf0\x1a\xac^5r0\x11)4\xe5\x0bq\xe5\xe7:\xfcp\xe7\x96\x04.\xdc5\xed\xd6\tXQ1\x1c\x0e\xf9!\x8f,9\xbc\xb8\x10\x98}\x14.\xcfXk\xa1V\xfd\xee\xff\xd7\xfb\x8aFt\xa7#g0`n"\xd9p\x819\xd7Lh)=\x86\xa6\xc5\xcb\xf4\x16\xe4\xb0k\xd6\x83t-\x1a\xc1\x94\x9d\xe8\x9b\xf7\x05\x15\xd0\xc7\x91\xbc\x92\xa8k\xb4\xd2 *\x9d\xe3F\xc8\xea*\x08\xed\x92\x91\x11M\x80E!\xba\x9a-$\xb6\xe6\'\x16\x0c\x88hT;\xb6\x99\xa6t\x0fj\xb3\'{\x86@\xa7\xb2\xb4\xcc\xece\xf1\xdb\xf3\x99\x1dzy\xcaY\xe8\x9a\xd2\x8b\\l\xb9oI\xe7\x99\xa4\xf0\x87\x93\x89FO<\x82\x1c].}\xd0F[\xcd\xfe\x8f\x11\xda\xf0;\xa5v\x12;\x87-7\xd2\xdf\xbcm\xb4\xc27P},t\xd4\x08\xa6\x1f2H\x93\xd1]j}\xc6\xfeRK\x8d\xbc\'\x01\xaa\x97\xe7\x0c\x17\xc7\xd2\xa8\xd7f\x9cp \xbf\x98@\x93"\xfa\xa2\xa5\x9f\x17X\xf9B\x0fh\x91\xc0\xf5\xaaH\xc2\xbb\xf6\xd5\xdb\x10G\xa3 \x95v\'\x03\r\x93\xb5&)&\x89\x8b\xa2\x1b\xd9_\x88Y\x1eFv)\xe7c\x05\x98\xb1\xb9V\xc3\\\xd2\x87\r\xae\x1a.l\xa2\xc2\xe3V\xa0\xeeQ^\xe1\xe5(b\xa2\xc0\x18\xfaf7bz\xde\xd7\x00\xa6\xda\xfb?\xe5\xb4\x8d\x12\x14\x92\r\xf9\xf0\xdf\xf4\xeaN\xdfb\xed\xd6\x8ez\xc0w*\xf8\x1fjC\xdcM\x027r\xfa\xee\xe1\xd2\x05\xd7?\xa1\xf1\x82)]=\xb1\xf6A\xa6~\xb2j\x9fy\t\x0f*M\xd7\xc2N>p\x06\x13\xc1a\xf4\xe59\x94\xb6\x05\x98\xcc\xa1\xe9?\xcfL\x05\xb5\x00~!g\x01^\xc9h\xf5\x95\xb9\x0e\xfd\xb80\xaf\'w\xbf\xf2\xa0\x17\xf5L\xd3\x96\xc4\xf4\xda\x9eVE\xb7zc\xc4v95\xd0y\x08\xbe\xf3\x9b\x10\x1b\x96[\xe6\x0fRJ\xdf\x11\xed\x05\x81p\xeb\x9d\xb4\x08_\xf1\x17 \xde\x02\x93\xe2\x9f\xb2\xa8Z1\xf4\xb0N\xbai\xa2\xb7\x896\xb9\xea${!I71\xc2Fh}\xb9\xf4\xef\xafO\xbc\x8fW\xa4;`vm\xfe\x89a\xdeT4=L#\x06\xf2c\xfd\x04>\x984\x98\xb2A\x10\xe5\xb8\x04O\x98o\xaf\xac\x8ey\x8fO7\xee\xc0q\xcdW#b\x9d\x80V\xce.v\xef\xce\x84\\\xf6\x88\xe9\xe3Z\x97\xda\xfe\xde5\x94\xbc\x15\xf4\x8cNHa\xbbb\xdae\x81VV\x83\xed\x81\xb8\xe3=nU\xb1iaT\xd1z\xf0V\x04\xe7e\x00\xfcKv\x1b2\xcb\xc7 n$x\nu\x1d\xb6\xb3@K\xe2\xc7\xb3Z\x98\xd8a\x18\x0cj=}J\xadJ\x89\xd1\x08\xe9%c_\xde2w4\xf4!E\xe6 \xd6\xde\x13\xa6i\xea;\xe8a\xb7\x9c 4\x99\xf9\xdd\xc2\xe1\xef\x98\xba\x94+q\xbd\xfcfB\xfc\x0f\x9c\x05\xfd\xe63\xa0\xa0y\xf5<N \x05fZ\xdc0\xe3ASs\xaf\xed\xac\xa7\xe1\x83M=\x1b`\xf7\xd6o \x89X\xdcV/\xb6w\xf2\xbeB\x11UG\x98\x16\xbe/d\xfe\x8f\x18\x06\x1c\x86\xe3\xe4\xbe5U\xf6\xa1\x11\x1e\xf1\xacdB5l\x0b\xc2\xb0z19\xe5\xfaB\x90I\xc0\x81\xd0\xea\xa0\xc2\xff_K\x93\x11\x1c;\x9e\xe2\xa73x\x80\x0eb\x94\xb6\x9c\xe4\xaf\x83N!\xca\x7f\xf5Bg\xdf\xaa\x185\xab\x93\xa7u\x9e\xd5\x18\x8b\x81\xcf\xc0Fqg\x83\xef\xde.\xe1l\x9c\xad\xc5*3\xb5iweb\x10\xb3\xea\xa2\xe0\x17=?\x8f\xe4\xd9I\xe4\xd4\x1d68\xaa\xba\x80\xfbc>m\xda\xf4Fy3\xd2\xbd\xd0o\x848\xefM\xa4`\xa9\xd2\xf7\x94\xe4\xf8|\x08|\xa1\x99l0\x85\xf5H\xfcF\x8c\xe8\xf6\xe8Aa"I18\x90\xfd\x80\x8by\x18n\x9bZM\xa7\xe3*\xe4\xc4\xcf\xc0`+\xa2\xab\x14#\xf1\xb5\xccL\xde\xd9\xc5;\xeb\xa1\x12q$y\xd0\x0b\xdfV\x0c\x18\xd0Mp\xff\x8c\xa6\xd7A\x97\xc7\x19\x97y\x07\x00\x91\x92\x9e\x8b\xd8=t\xcc\x8f\xca\xa3\x08\xdc5o\x94\x1coN\xd6\xe1\xb9_\xaa\x13\xda\xd2"\x10xr\x12*\x99\x01\xd8\xe9\xe5\xc1\xc1\xe9\xe2\xf9\xbf\x15\x1a0\x83\xa8[\xca\xbf2S\x87V\xed\x12;\ni\x11\x1aQ\x04iHm\xb4\xda8\xd2\xe4@7JKI\xfd\x0bA\xf9_\xcc\xa10BPx:\t\xfdvU= \xb4\x84|\x84\xc9V\xa4\x8e\x84\x1fS\xf0\xc3Aj\xc9T\x14~\xb3|B\x80\xb6C\xbd\xb1\xf0x\x9e5\xa5S;\xffV\xdc\x98\x7f\xc6\xcam>\xca\xb3\x9eV\x91-@\x8f\xda\x86)\xa3\xc4!QeM\xe8\x88R\x12&\\\x93H\x9eV-Z\x9f\x90p\x08\x17\t\x96(\\\x88\x9e\x1c\xf3U>\x8dnUh\xe7\x8e\xc0E\xc1BMl\xe7\xa7\xa7\xb7\xd6`w$\xbd\xd1x\x12\xb3\xb9r\x0cd\x1aPi=\xb9@\xe8\xdb\x1d\xc8\x0f\xb0\xa8\xb3\x84\xc2\xb7\xd6)\xd24\xb1\xaf\x1aiS7\x8a\xb8\xba4\xfcT\xfe\xc9\x05xG3\xf1!~\x8e\n\xa5\xce\x88\xa4,5\xe5\x93\x9f\x13\xf0\xa5e{i(T\xc8\xdb\xd84\xadz\xf6\xe63\xb6\x81\xa3\x19\xb1M\xc6\x86_\x01\xa9?\x85\xab\xdc\xcb\xc5bc\x13\xd3$\xf4\x88I\xeb\xde\xc1\xc9\xce=m\xb93\xeaH8\x85X\xd7~A\xae\xcb\xed#\x8dZ\xa9\x10\xa8q"K\xe6<\xe5}\xcb\xc2\xa6\xd7\xb9r\x82\xdc\x7f.\xd9\xb2Y\xff\r\x8a\xce\xb5\xb4j\xa4\xce`(n{Q\xa4U\xdc\xf1\xe7fyo\x10\xe5\xb7\xc2\xad\xd2_\x9d\xa9\xf5\x17\xbb\x9f\x91{H)\x99\xd3\x96\x17\x1b\xdde\xbcS\x03{\xbe:g6\x8f\xcdC\xe9\xb5.\xe2U\xb7\x1e\x10T\xde\xc2\xd9\xc6]\xb3\xbe\xb5\x003\x02e0\td8\x07\xfaV\xb2\xec\x81\xdal\xd2\xaf\xa7S\x0c\\\xb1\xaa>WSD5K\x119\x81\x98\x19=3\x00\x1cm>\xf8\xc0Ssp\x89\xbe\t\xb4$>\x04Q=\x14\x8c\xf2\x9b\xe8&L\xd6\x00\x0f\xcf\x98h\xd4\xfb\x05\'\x83\xe1\xf0\\\xd4\xba\x81Sq\x1bK\xf1\xbc\xed\xb4\x0f\xad<\xcd\xb9UW\xab\xcd\xe4\x9d\x99;]g8\xc3o(\xb4\xf7\xc7\xaa\x8d\xc5]\xd8\x82`\xebf\xfb\xb5t50R\x03\xd5h\x89\xfe\xbb\xf3O\xb0\xd4\x81\xa4?``\xa1v\xb2E\xff\x82\xb8\xa2y\x00\xfd\xdd\xa5\xd0\xa0\xea^?\xc0\xc6\x8b\x9f\x0c\xea\xa3$\xfe\xa2\xb1&\xa6V\x06s\x964#\x9f\x1d\xfb_v\xdd\x1dm\xf6\x0c\x91\xb4\x16\xf7v\xa5\x18!\x15Nv\x08\x06\xfbb\xe4\x113)\xd5\xd6\xffz\xe2:\xe8\xc2\xef\x13q\xb9\x7fQkP\xec\x9d\xe6\xd7\x95\xd4*W\x15\x04\x9eN\xa5\xa9E\xb3\x0c\xa3\xb1\xb4g}3\x1fU1\x1fHJ\x02\x01\xec\xecC)\x17\xe6\x97bDd\xae=]\xc3kS\xb3\xa2\xa0\x16\xed\x163wt\x0b~@\xa7u?\xd8\x19T\rM\xb3\tk%\\.l\xde|\xe0$p\xec/5\xf0\xc2\x01t\xae$\xfaa\x85\xc3\xddH*\x06d\x9e\xa4\x06\xd0^\x7f\xed\x8f\xae\xd6J\x07.%\xec\x07+\xaa\xe9\xcd\xec\xda\x8d_\x01\x15\'n\x00Z\x12\x83\xb8\xafB\xe7\x87HOo\xcc\xe4\xbe\x04\xb3\xd4G\xb7\xeb<\xa5\x92\xb1\xc0\xf8\x1b\xda\xb8\xfeI\xa5\xbc\xdeS\x16;]\xa4-fe \x81Vwo\x11\xb4|\x97S+|\xb0y\\^458\\\xcc\xbb\xa0\xcb\xab\xe9\xb8\xf7\xeby\x9f\x0e\xd8r\x97\x9e\xd8\xb1,\x01Q1\xbf\x8f\xcb\x1e\xfd;\x90T\xa4\x91w\xe4\xc4y\xb5/$8Y\\\x89\xf6\xea/sI(*{@p5U\x11^\x91\x14\xd7p8!\xbf\xc1\xe87d\xa5\xe1\xdfe9\xfb\xb4\x94\xf7\xb7\xd3\x1f\xa7\x138\xfd4\xeeE7\r\xc6\x8b:\xfd\x83\x15\xe7}\n5\xe2\xbb\xe2\x93\xdeqo\xea\x96^Y\x9b\xd7\x8a\x89\x9e\xe3\xa0>\xdb\x8c\xf5\xf3\x90\tK\x9a\xa7\xfd\x8f(\x8f<C\xf9h\x92#[\x13=\x06\xe0\x8e\xed\xce}B\xd7\xa2\xfd\xeb\x1c\xa5\xb5\xa5A\xfe\'!\xfbV\xdc\xa1\x13\x96\xa4S\x810B\xc1L\x97N\x19d\xc5X\xa5\xbbR\x97\xf1\xad\x8fT\xac\xdf\xa8$\x19a\x8a\x08SQ7\x8b_\xfeu\x9bI\xd8\xfc/{\xc0\xc7cq\x1a\x93r\xd1\xab0\xffDK\xf8\x81\x19\xb5\xe9\x96^x\x8fW\xe2\xe8s\xe9w\x9e#\xa3(n\xd7\xb0:\x8b\xb9\xb7\xe3\xde\xdf\xc6\x10\xff\x19\x97"\x9de~\xce\xe6\x01\x9b\x81W\xb8}\xc9\xebt\xecO\xd2\xc3\xaabJr\xc5\xa4\x83\xcf\x1c\x84\xa4\xc3Xc\xe3\x8e>\xf44is\x13X\xe5\xf4\xbe\x86\xad\xeaMio\x14\xfe\x14\xf9\xf6\xc0a\x87\xd3\x0b\x82\x8aZ\x15\xe9pG\xb6=d\x18\xeb\xbd\xcdN\xddY5\xee\xd3\x01No\xc8jfp\xe8\x7f\x7f\t\xf5\x05\xaaZ\xe0t,W-)\x0c\xb4\x86qM\xea@\xf2\x17FE\xf3-T\xb1\x98\x06*\xa2\xb3\x03\x11\x0c\x87[\x14\x1c\xf4=\x07\xbd\x9a\xc4\xaa\x86\x9aER\xbewA^\x866W\x85S<A\xb2U5OI\xa4,\x12\x9ba\xe5\xb9\xd7\xe8\x1f\x19\xcah@\x8e\xda\xa9P\n\x10\xb8\xb2\xb3\x98\x1d?r\xc2\x96\xff\xc8n$\x96@-\xd6!"\xaf\x17-\xbe\xa3\xe8\xfb\n$?,m0\x98\x8b\x1d\x97KqL[C\xbd\xd4\xba\x94\xab\xf8\n\xa1\xccB\xcc\x14a\xf23\\](\x00Y\xd7j\xd5\x93\x08\x1c U\x8fP*8\xac\x9d\x02\xaf7\xefL\xca\xc620p0}\x93\xbc,D\xadF\x19g\xc3O\xa8\x1ec\xe0\xd6\xaf\xa5\x85\xe0\xc8\xae\xdarO\xe2\x8e\x01\xbfw\x1aU\xde/\x11\x9b\x95\xa9\xee\xb5\x82!\x13\xb2ox\xfeL0\xc5;f\x03\x01p\xd2\xdd\t\xf7\x95\xfd\xc0}\x12\xa2\xd5\x08\xce\x0c\t\xf7\x0c\xa1\xdcS\x8a\xfe4+\x15a\x13\x83{\x86\x9a\x9f\xfd?\xcfy+\xef\x17\xc8#\x86\x12z\xc3\xcb\x9b\x1e\x96l\xb1\xef\x10#|\x01\x88$\r\xac\xa5\xbad\xa0\xe8v\x00\x8e\x16\xcc\xa3\xec>{H(\xa75\xbdfo\x81W\xe3\xb3\xd4\xe2\xc1\xc3\x7f\xf4\xac\xbf\xf1\x97\x055\xd4\xcb\xda\xbc\xea*\x83\xf7\xeet\xabK?\x1dn\x7fa]\xfe\xbd>\x9f\xc0\x05\xe9\xc8\x8al\xa9\x9b\x1a?\x1fw}\x17\xaf.\xf6g\x06\xd3\x92\r]\xf1\xaf\xdc\txS\xf1\xe8j|\x82w\x96\x19${\'\x06\x7f\xa9-\x872\xbd\x19L\xb1\xdejZ\xf6B\x15\x9f\xb4\x02\x14#\xce\xbe\x01\x01\xa8G\xc6S:X\xc1\x99v\xae\x17uV}\x89\xc4d(ts\x0cE\x14\x9e/\x99\xeb\xab\x9b\xc0CX\\\x8fM\xe7\xa6\xfd\xb7D\xa1\xec\x96:\x828\x81RN\xcfu9\xe0Z<\xbd\x8a\xaf3nL\xf4\xba|\x977\x02\x10\xfb\xa1\x00F\xc9\xdai\xda,\xe5\xdb\x1d\x19\xde\xd3\x1a\xd9m\xe3\xdd\xd8{\x91\xbf\x85\xcdo\xd1\xc2\x931\xbd\xe1\xd8\xb8\x8e/|S\xa5G\n\xb2\x9f;\xe5O\xd8\x87\xf5*\x84\xf1\x1a\x1f\xf8\xf8;\xefR2{\xc6\x10\xfa2\xf3)\x81\x13\x12\xfe\xfb\x1f\xd0\x15\xedv\x88z\xcd\x11\xa6\x13M0\xc6f\xbd\xd3%U\x93\xc8n\rc\x92y\xde\xa9zI\x92<@\x90\xa56\x95Y\xd8\xed\x1a\xf1\xe2\x94$\x1c\xb8\xb5\xff\xd4\xcb\xc6\xebb6\xd4\xd5\xa6\xfe\xe9\xa9=\\\x1e?\xdf\'\xc9\xabQ\xa3`\t]l\t=\xd2/\xd7\x1d6\x948W;\xe7\x1f\x17\x0cR\x84{\xc0\xaaDa\x8et/@\x01\xa6c\x81\xca\xf1\xdbN\xcf\xdf\x18\xfb\xa5P^,\x95\x99\x9d\xe0\xf8F\x1b\xa6J\x8d\xf3\xf7a\xd5o\x87qe\xda\x937G*\xc8\x88]!\xd4\xaa`\x0c\xe1\x97f\xbe\xf8$\xa2Y\xe2\xf3\xccqS\x9b\xd3z\x8c\x84\xb04G\xef\xb0m\xad\xf0\xc85\xafH\\`\xf1\x89\x16\xdf2\x17]\x01r\xed\xf7\xe0\'vvg\x01)<\xd0\xcer`gkm+\xcf\x0eI\xa7N\xcbsy+*\xecI\xc3\xcase\xa9\xf1\xcc6\x80=}\xb4\x19n\x1aC\xb8\x96\xf9{\xcektFK\x8fR\x9d\x84i\x03d\x9cw\x949\xb5\xf7l!i\xe0T<k\xfe\x83=R\xd6%\xcb\xc9\xe8\xb3\\\xe7\x04FTDc\xd8\xbcH\'\xcc"\xf7\xd6\xba\xee=7CO\nd\xde\x14\x1f\xd7\xadv\xa39\x99\xfdc{b\x9f\xa4\xba\x07\x02\xc0M\x85U\xf3\x954w\xf2|\x88\x8b\xf0\xdeX\xd6&\xd2t\xa2\x0b\x96&\xf3\xf4\x15\x167\xe6u\xca1"V*\x85W\xe4\x9af\xf0\x97\xeb\xf6\xdcPT\xbc\x97Zr\xce\xa6\xcf\\Z\x9dB\xd7\xaf\xa2\xaf\xddH\xa1\x15\x07\x18\xa6\x04"w\xdf\xfa\xe8Z0\xf2\xb90\xc1\x01^j\x04\'n\x82.N\xd3\x1b&g?\xd2\xe1\xce\xc8\xe3\x12\xeazy\x19\x82\x8d\xdd?7\xca\x11\xf8\xa3\x1d\x84M\x89Y\x02\xc2\'\xa54\x07\xf8\xbdi\xe4$^3\xfbp\xedh$\xfaE\x12\x12\xc9\xe9m\xb0\xfd7^\x0fZ\xc7\xa4\x08\x85%?B\x9a\xa4x\x18\t\xba\xc8\xc8\xcaT\xb4^\xde\xca\x8a\xe7\xa5\r\xee5G\xdd2\xa84\xac\x1b\x9b\xa9\x96\xba)6\x19\xf1h\xe2/\xe0J\x8c\x98\xb3+\xe3\n\xebv&\xa7\xc8[\xda\x16u\xdaX\xcdH\x8eV\xeb5\x19\xd2G\xab\xdf\xaeW\xa1\xc4\x1c\xeb2\xe5\x0el\xdb\xc6\xd7\x16\xff\x077\xba\xfcI\x12\x8fD\xa5UD%\xd48\xc7\x15W\x84\xa5\tL\xb6Ef\xce\x81(\x8a;\xe0\xd8\x9a\xca\xd9#i\x93\xfdu\xc7[k\'\xb0yS\xfe\xde\x9c\xca\xe9e\x94\xddm\x03.\xb1\x85\xf2\xea\x8d\x9e\xbe\x03)\xf4\xc0\x13\xb2P\xf1\xc9\xe9v\x04\n\x82T\x04$\x8dSO\xfe|\xc6\xf9\x11\xafP\xa7\x94\xac\x8e\xf5v\x00s#\xa2\x80(7i}m\xc4[N\x91n\x1e]\x8d\x93]c;\x02\xdc\x82\xfa\x1e&\x90L\xa7\x7f\xe7\x07\x90\xd8j\x19\x96\xc0\xf65K\x1a]Xd\xc2l\xefd\xec\x0b\xf2c1I\xca7\xc7\x18\xb2/E\xa8`\xe7\xf9\xa3W\xc7\xe63H\xc6\x08\xf1W1jT\xe8aB\xe4\x13\xa8#\x8d/x\xd8\x0f\xbc|\x82h\x18\xcf\x93\xe2\x12\x1cAi\xc9\x9d\x84a\xdb\xb5\xfe\xce{Lk\x8e\xd7OX\xe5\xbey\xd1\x19josj\xf7\x83\x85b\xceJ~xg\xcc\xa7W\x1aNm\xbf1\x88<\xc8M(-\tyI\xfd5\x08\xc6K\xe4C\xe0\x85\xa2\r\n\xb2\xe9\xc5\x028\xf4\xd4\xa6\x02\xf0S\xa4\x00\x84\xc2\xf92C\xb4h\x8e#e6\xde\x89<\x03\x12l}\x11\nB\xb6o\xf2\xd7\x8b\xb3V\xd0\x1a\xc9\xa9\t^\xe19oR\'J\xfb\x97\xaaf\xa8\xdd\xdf\xf1\xb13\x991\x15\xb4\xaa\xb4\x88-e\xafm\xb0\x8a19yE\xe7Y\xad\xc3\xce\xa0\x13\x95\xa8k.$,\xd4C\xf7\x1f\xb2\xe4t\x90|\xa5n=#\xf9\xa9\x1a\xc6\xb6\xac"\x7f\xb1\xed\x83\x0c{\xe8\xd2\xd5\xc4\xe8/\x83?\xc8J=z\xe0 KO^@)\x85\x05\xa8\x13\x8e\x1afj\xbb\xd1\xa1\x9e@\x06\xc1\xb4\x93/A\xf2m\xec3;\xc3^\x90a\xf4\x0b[1\xa2\xc5\x80\x12x\x17\xe5\x86\x80\xe0\\\xdeF\xe4\xa5x\x12\xd4?\x86\xfb\x7f\xea4\'\xac/\x1d\xbf\xf7\xb7M\xb0\x00\xb3\xce\xc9\x1b\x18lEL\xda?R2&}\x86\x87R\xbf\x1a\xbd\xed\xe6$P\x05\x8ak4\xe2\x13\xe3\xa8\xb2x#\xe8\xee\x03\x1c \xa95\x82m\x17\xe4\xaa\xe9\xeay\x93&dk}!\xd7\xe7\xf8\x8al\xd2\x19x&\x8f\xcd\xc56\xe7E\xde\xa7\xbe[\xee\x93zM\xd3\x87Z\xd5\xc3^\xc8Z\x00KyrO\xd9\xbe\x18\xd2\x18\x1d\xc3\x11k\xc7\xd4\'\t$\xe5\x92\x83<\x92R%\xb7XG\xffT\x12\xb2E?E\xaf\xcd\x8d\xf6\xec\x86\x84\xad (\x0f\x85\x90\xe8\x8a\xab\x0f\x8cU\xd0\x83\xf0\xd6W\xebO.l\xef\xc9p!P\xa3\xfd\x11\xbcP\x11\xa4\x89\xfb\x93\xfar\xb3\xc5\xe24\xa7\xcd\x95\x9c\xee\xcf\xa3\xd4\xa1\xc7>\xc7D\xef\xd6P}\xbdMtm\xb7i\xa9t#\x907\x1d\xa2h\xa1\x86\x1cj\xef\xb5r\xd0\x7fwH\x90ii\xca\xfb\x88\xab\xaf\xf6\x9c\x1d\x99Ym\xa6\xfa\xc5\'(\x8b+Gn\xa2\xe5\x84\xd27\xd06\xae\n\xf4]|>t\x87\x89r\x17 \x84%r\xbd\xc6[\xf5\x12\x94\xd2\x83\x8d\x01\xa6\x9b^\xbd\x08O\xa2,|x\x99q\xaf\xc1\xb4\x10\\\x9a\xd5n\x8aa\xf7\xb2\x95\xbe\xcaj]N\xa7\xb7s\x14 \xb6\xec\xfc\xfa2\xd4\x92\x07|\xc4\xef\x89\xd7i\\1\xfb\xc0\xea\x84.pi\xd3\x00\x94v\x84"\x10\x1e\x1f\xa8\xc5\xb5V\xb0\x95\xa8\x07\x0f$h@\xd6^\xae\xeb\xab\x0b\xa3\xa2S\x9a\x97\xf8\x14c \x99k\x90\x91L!\xe7\xa2\xde\xf8\xa61\x07\x19\xb8\x8a\x9f\xc2x\x8c\xfe{\xed\xd7/Kr\xd0\xfa\xd5\x16\x80Z\xf0\x03\xeaLujx4\xc0\xc6wqF\xdd\xbd\x87\xdd\x1e~\x7ftli\xae.\xa0\x1a\xd9%\x80r\xfb471\xcbH\xf5w\xb5\x9b\xbfs\x9b,\xe33]`\xb7/\xc7\xc8\xfd\xe7L\x81\xf4\x00\x1c\xda\xb0\\u\x16Y\x9a\xf1\x99\xe1)\x83\xcdT>\x12\xee\x81\x9c\xd6\xbc\x88\xa4\xe9m\xe47\x91\x9f[p\xe8\xa2*3\x92p\xc72\x98\xc1\x1b\xaf\xb6\t\xad\x15\xfb\xb7|\x85\x97\xa1\xb6\xc4<*\xfe\xbb\xafr\xbf\xfaJ\xca\xbcC\xc6\x968\x19\xc6$\xd3\xdf_\xba\xee`\x04s\xb6b\xf7\xf5r\xd4\xef&\x8b\xeek\xf9\xa86\x92\xe3\xad\x1e\xa6\x17\xa1\x86\xef\xdd\xb9\x80\x1a\xa2o/8\x00\xa8\xc8\x8fQ=T&\x97*\xba\x7f.\xccm9H\xb6\xc8\xc6\x90\xaaP\xe2\x87\xb2A^L;\xf3wSH\xd2\xb7HD/^R\xeac\xd4\xad}"\xf0NNR\xbf6b\x8b}gs\xb8\xc3\x00\xcc`8\xdb\x94n\xa8\xae\xf4\xbeR,\x80\x1e\xa0q\xb03)N\x18\x91-\xa4C|\x0b:]\xf6\x08\xe8&\xaf\xc4\x05\x85\x9e\x13\xd0\xc72Y\x1ebJ\xb8n\x0fc#\x14.\xaa\x02v\x9elv\xb2R\xa0o\xcfiT9\xfb\xe3D\xcd\x87k\x0eE\xe7\xc2\xe6\xac\x00\xf8\xdf\x12\x1a\x10x\xf5F\xdc\xcf\x1d\xcf\xacuZz\x8eQ\xb3\x08\xa5\xa4m#\'\xde\xbbA\xdc\xa2\x80\xe9\x81A\xfa\xceI\x90\xb9\xf4_\x04\xc3\xef}5\xa3\x1e\xc1b\x81\xa8>W\xbc\x90D1~}\xf3\rTd\xfb\xbf\xa29\xf4\xcb\xf8Z\x8a$G\x8b\x83\xc7yB\xfe\xf7\xcb\xa7g\xfc\x90k7\x05\x9aH\x8c8C\xee\xdc\xe0\x9b\xc7\xaeJJ\xde,\xd1\xdca\x81,\xb0\', \xdfux.\xca\xde\xaf\xe2\xf7\xba\xed\xccvH\x877?\x06\xb7\xcb\x06\x96\xc3C\xc3\xc9\xceg\x89\xd5\x0f\x12D6&N[\xa0`n\xcb\xae\x9e\xafL\xfa\x17\x0f\xb5\xcb\x01\'AI\x99?\xb2V~\xb5}\x90\x88\xc2B#\xa4\xfc]\x1f\xe9d6\xe0 \x9e\xbe\x98-K\x8cU\xbd\x10\xb1\x99\x02B.[\x1f|\xd6\xdcd\xb7$aE\x8f\x16\xbb\xd9#\xfe\xf3\x8b\xda\x07\xd1/a\x1b\xf1\xb6[\x8b\xb5\x08j\xd1\x94^^\xea\xe5V\x94T\x0f\x11\x9c\xe1y\x11WV\xe2!\x03\xd7x\xeds\x8b#\xa9K`\xf1\x8c\n\x85\xe3\x00\x92$i\xd0\x0ep\xc8]ma \xb3^<\xb2\x86\rv\xecC\xf1~2\xf7\x0cu\x95Bv\xa69((\xb5p\xd0\xe8\x11I\x14\xdd\x0cz\xde\xc3\xb6.\x8c\xfcPS\x95\xc8\t\xa7\x9d\xd9\xb9\x8d\xae\x1e[\xddz\xec\x13\x19\xfbZJ\xb9\x04\x92f\x98l\xc7J\xadNH\x86\xc5\xbd\xc0\x8a\x98\xbb\x8c\xd9\xcfl\x0c\xf0\x026\xb7%\xe5\x08\xb6\ng\xca\x99fA/\xd4\xe6\x9f\\`b\x06\x04\x93\xe8(6P\x9b\x83\xfeW>\xe7\xad\x15\xab\xeat\xd72\xad\xa5"\xe1\x0b\n\xed\xa7\x9f\x12\xd7~_\xd1\xf6\xachX\x94\x1df\xdc\xa8\x1e\xd6\x1a\xa9\x8e_\xda\x9e\xba\x15\xbdK\xcdh\x94\xbe\xbb\xcc\xb7\x8ex\xbd\x9d\xcd\x114\r#\r9\xe2|B\x12v\xbb\x06\x89u*\x84\xf2\x81\xb9`\x1d\x84!\x194\x85\xc91)t\xbd`\x07\xe6\x87K\x14\x08Db\xd7\xf9\xbb\xb8\x14\xa2\xd4\xdcA\x1f\xddX\x1f\xdc\x19%y(\xf6\xe9\x8e\xe8\xa7\'\x1f/\x99\x90n\xeb\xe9A\x87\x98\x12::\x93\xd3\xcf\x0cq\xb1\xcaT\xce\xd5/\xa1\xc0(Z=>\xd0\x0e\xf4\xa3SR1\xb9\xafz\n(:\\\xa1mU*\xf1\xaeH\xbaB\xf0\xc6\x02u\x85\xce\xfe\xa9-qTy\xffV5\x9d=]\xf7\xd1\xb1\x83e\xe0\xca\xcd\xd8~\x92&\x08\xca\x1dT\xe1\xca(!\x0b\xeb7\xcfk\xe6\x85\x1e\x9b0\xb69\x7fr\xf3\x9a\xa2lx\xb1\xda\xcan\x96\xa8\xbc\x14V\xa0\xd4\x01\xc0F\x98(\xe6\xe90)\xb2y\xa8g\x0e\x9cAR\xfdTS\xf6\xf2m\xd5\xbc\x9ef\xae\xfd\xc0\xdd6W\xd2\x8fd\xe3\xdeT\xafk\xc5\xdb5\x8e\x0coq\xed\x9f\xbdF^\x8b\xd1YLF\x1ci\xa9\x12"\x0f\x05\xd7\xa9\xaap\xb6\x17\x86q\xc9\xcc\xcd\x93\x17m\xb4\xa5`P_{\x17h\x1ev(\x96\n)\t\xd91\x92~\x8d:$XyS?G\x82\xf6\xa50\xa7v&O2\xae\x8d<\x0f\xd1.\xf8\xb0\x88;\xf5\x96\xb3y\x04\x04n\x9c\xf3=\xb9\xf5\xed\xd2S\r\xce\x7fX\xf1\x805\xb1\x0f\x03\xff\xee\x99~,\xf0\xcdtiC\xbf\xc3~O\xaf\xc8\x1d\x84\x99\xb0\x8e\x11\x8f\x81\xac\xf4a\x7f\xff`\xe4\xaf\xb8ar\xcaa\xc2\xc1\xf0Y\xca\xa1!\x8e\xf7{\x85\xa9f\x93\xffe\'[(\xb8\x16\x8e\x87\xca\xb5B=\xa4\xfc1/\x04\xda\xb7j\xf5\x8b\x1e\x9d\x84(\xa8\xf2]\xe95\x1d\xa9\x1b\xcbH\xe3J\x9e\x1f\xa1\xa9\xa9\x9c\x0f\xfe\xb6\x98D\xddc\x1b\xe3\x16\xaa\xda\xacW\xbd\xe4\x9a\xab\x9d\x92\xa4\x9e\xe1:\x85qt\x93B\xdcT%n;\xf4\xd7\xcaV\xd7\xfe\xc5\xe1\x8f\x05\x1c!\x19\x1d\xbe\xa1\xa8\xad\xe9s/\xc5ue\xa7\x8df\xd1K\xfd\xb2Bo\xae\xf1ST\xe2\x1f\xb6\xb2G\xd2;z2O\x84\xc4C\xb3V\xe6s\x1e\xdd\x84\xec \xd4\xd3\x9e#\xd1;O>\x86\x9cz\xd8F\xaa\x07\x99\xfa3s\x8d\xb9%TY\xad\xdc$_\x0b|\xf4$R\x11\x10L\x03\x03dDD(\xbb*;\xd4\x82<\xd6\xe3\x16@}\xc6!\xd3\x91\xda\x87]a7\x0c\xd0\x0c,\xcc\x95p\x84\xbd3\x07\xdd\xf3\xbf\xfesL\x8a\xc9\xea\xdc\xd8,\xca\x8a\x14\x06/\x1d?\x88Q\xd7c\xfe\xac\x91\x02\x08\xd2\x98\xfa\xfe\x0ff\x17\xe0rq\xd6\xc3\x9d\xc1\xdb@\xcd,\xfd\xe6\x8bZq}zo\xfd\xe5\xe5l\x91\x8b\x10.\x08\xeck\xa2\xd4\x13S\xfby\x0fREXe\xd2\x99M\x9cF\xf5\xd6\x84\xa85\n(\x85\xda\x8c\xd9\xac`\xcc\xdd\x84\xc4\xba\xff\xdb\xfe\xd5\xe2\x00\x8f\x9cV@\x98A\xf3\x92\xa7\x99\xd4\xe3\xd0\xce\x97\xd2\x87P\x17\xa7lD~Oh\xd2\x144\x1d\x05\x1e\t:\x885VV\x0c\x96\xb1\xa2@4\xfcI\xfe\xa9\xe0\x98\xe5\xc7\x98\xc6\xd8\xdd\xf7v*\xcb\xab\x96!T\xb39\xba\xd9o\x8dV\xc2X\xa9=%|BG\x15\xe7*X0[\\Kq\xb1\x02d9\xc6\x86\xdcl\xd3\xe3\xff\x1c\xa1\xa3\xa6f-[99\xd9V&\xa8^|O\xf3\xcdNj^n|V\xa4\xdbBh\xfb\xc9BJo}\x82\xa7A\xf6\x19B\xc0\xc2\xc5+\x10`\xb1\xec\xd4Y\xe6\x14\x90\xa4~^\xcd\xdd\x80\xf9\x9c\x8e\xd3\xf2\x80<J]Y\xabi\xab}\x9fk|\x90\xfe\x7f\x90\xe24\xae\x86\x8e\xbc\xe4\xfc(\xbac\xd3Z2H\x1b]S\x936;\xfb\x17l]\x8ea(\xf6\x85e\x13\xda\r\x806\xa6\x91\xb3(\\\xa9w\xf5);%\xd2N\xbf\x8a3\xfa\xf1C`\x8a\xfa\xcf\xbc\xf4\xd8\x8f\x14b\x17\x1e\xd3\xaa\xad\xe1\x9b5\x1dI\xae\x86BWA\x10\xb6\x00\xf5=\xca\xee\x97\x1e\xd0\x90O\x0eK\xe3\x96T\xa9\x12w\xe6\x89\x1d\\1\xe6\xe9X\x8b\xbc\x0e\x06\x06"8\xf2:h\xaf\t\xc8\x1d\x19\xdba\xa6\x04\xfcR\x15\xd1<\x98\xdc}\x92z7\xc4\xe3\x83X\xdb\xcb\xeb\xcd[\xfaM4\xd8\x92\x19\xc5)\x8e\xa8\xbc5\x84\xef_\xa1\x8d\xa6\xe9\x9a\xdc\x0e,R\x90A\xa2\x9f\xac\x88\x1cq\x9beB\xf0\xef\xa0*\xd3 q\xcdz \xc6n<\x1fR\x1d%&\xf4^\xfa\xff\xe1\'\xb3(\xf3\x99\x0c.\xec\xae\x96\x1d\x1a\xe5E\x94\xe9*\xf0iR\xa4-\xaf\x92\xfa\xe16,\x1b\xe5\x13\xf7/\xe5\xb7\xe4\xd0\x89\x7f\x8b\x93jP\x88\xc2\x1e_.\xe9\x8d\xe6\xb0\xb4l\x87edZ\x14Y\xfd8\xed\x17{S&Q\x17\xf5Ft\x1a\xce\xcd\xdd\xead\x06\xfc\x00\x19\r\x11;\xd3\xd4\x8c\xe9\x81\x95\x9f\xc9U\x83C\x1b\\i,\xe3\xf3\xe9\xe6Cm\xe0\xc4\x1fz\x81\x81\xa8g\x1a<\x00M\x97R\x84\x14\x8bP\xf2J\xb3\xc6\x19#\x935\xc4\x95\xafH\xe7\x8e\x84\xcc~=\x92M\xe0\x17\x87\x9eb\x90v\xc3\x94\xd4+h\xaeF\x9d2\x0c\x98\x8f\xebI\xd4\xea;Y-\x80\x94\xad\xaf\x19\xae7\xa1)pD\xbb(\xf3.v\xe9-\xf8S\x15\xf5\xd4\x12\xbd\xaaZ\xff\xd9\xa6\xd6\x1aL\x90\xfbRk4<y\x88sf\x9b\xbd\x12c_\x82\xe4\xac\x04ohkv\x9b\xf8\xe1\xd8\xf7\xee\xa5\x12s=;s\xd3\xaf\x0ctS\x8cr\xc2\x0c\xbd\xbe\x1b\x19F&\x84\xde/%\x8a\x8f\x1fg\x10\xee\xd6\xbf\x9d\xf8\xcc\x8c\xf9#\nut\xee\x9a\xba\xf5')
1
+ import flask_babel,flask_babelex
2
+ from hiddifypanel.models import BoolConfig,StrConfig,ConfigEnum,hconfig,ConfigCategory
3
+ from wtforms.validators import Regexp, ValidationError
4
+ from flask_babelex import lazy_gettext as _
5
+ # from flask_babelex import gettext as _
6
+ import wtforms as wtf
7
+ from flask_wtf import FlaskForm, CSRFProtect
8
+ from flask_bootstrap import SwitchField
9
+
10
+ from flask_admin.base import expose
11
+ # from gettext import gettext as _
12
+
13
+
14
+ import re
15
+ from flask import render_template,current_app, Markup,url_for
16
+ from hiddifypanel.panel.hiddify import flash
17
+ from hiddifypanel.models import *
18
+ from hiddifypanel.panel.database import db
19
+ from wtforms.fields import *
20
+ from flask_classful import FlaskView
21
+ from hiddifypanel.panel import hiddify,hiddify_api,custom_widgets
22
+
23
+ class CommercialSettings(FlaskView):
24
+
25
+
26
+
27
+ def index(self):
28
+ form=get_config_form()
29
+ return render_template('config.html',form=form)
30
+
31
+
32
+ def post(self):
33
+ form=get_config_form()
34
+ if form.validate_on_submit():
35
+
36
+
37
+ boolconfigs=BoolConfig.query.filter(BoolConfig.child_id==0).all()
38
+ bool_types={c.key:'bool' for c in boolconfigs}
39
+ old_configs=get_hconfigs()
40
+ for cat,vs in form.data.items():#[c for c in ConfigEnum]:
41
+
42
+ if type(vs) is dict:
43
+ for k,v in vs.items():
44
+
45
+ if k in [c for c in ConfigEnum]:
46
+ #if not k.commercial():continue
47
+ if k in bool_types:
48
+ BoolConfig.query.filter(BoolConfig.key==k,BoolConfig.child_id==0).first().value=v
49
+ else:
50
+ if "_domain" in k or k in [ConfigEnum.admin_secret]:
51
+ v=v.lower()
52
+ if "port" in k:
53
+ for p in v.split(","):
54
+ for k2,v2 in vs.items():
55
+ if "port" in k2 and k!=k2 and p in v2:
56
+ flash(_("Port is already used! in")+f" {k2} {k}",'error')
57
+ return render_template('config.html', form=form)
58
+ if k == ConfigEnum.parent_panel and v!='':
59
+ # v=(v+"/").replace("/admin",'')
60
+ v=re.sub("(/admin/.*)","/",v)
61
+
62
+ try:
63
+ if hiddify_api.sync_child_to_parent(v)['status']!=200:
64
+ flash(_("Can not connect to parent panel!"),'error')
65
+ return render_template('config.html', form=form)
66
+ except:
67
+ flash(_("Can not connect to parent panel!"),'error')
68
+ return render_template('config.html', form=form)
69
+ StrConfig.query.filter(StrConfig.key==k,StrConfig.child_id==0).first().value=v
70
+
71
+ # print(cat,vs)
72
+
73
+ db.session.commit()
74
+ flask_babel.refresh()
75
+ flask_babelex.refresh()
76
+
77
+
78
+ from hiddifypanel.panel.commercial.telegrambot import register_bot
79
+ register_bot()
80
+ if hconfig(ConfigEnum.parent_panel):
81
+ hiddify_api.sync_child_to_parent()
82
+ reset_action=hiddify.check_need_reset(old_configs)
83
+ if reset_action:
84
+ return reset_action
85
+
86
+ if old_configs[ConfigEnum.admin_lang]!=hconfig(ConfigEnum.admin_lang):
87
+ form=get_config_form()
88
+ return render_template('config.html', form=form)
89
+ flash(_('config.validation-error'), 'danger')
90
+ return render_template('config.html', form=form)
91
+
92
+
93
+
94
+
95
+
96
+ # form=HelloForm()
97
+ # # return render('config.html',form=form)
98
+ # return render_template('config.html',form=HelloForm())
99
+ form=get_config_form()
100
+ return render_template('config.html',form=form)
101
+
102
+ def get_babel_string(self):
103
+ res=""
104
+ strconfigs=StrConfig.query.all()
105
+ boolconfigs=BoolConfig.query.all()
106
+ bool_types={c.key:'bool' for c in boolconfigs}
107
+
108
+ configs=[*boolconfigs,*strconfigs]
109
+ for cat in ConfigCategory:
110
+ if cat=='hidden':continue
111
+
112
+ cat_configs=[c for c in configs if c.key.category()==cat]
113
+
114
+ for c in cat_configs:
115
+ res+=f'{{{{_("config.{c.key}.label")}}}} {{{{_("config.{c.key}.description")}}}}'
116
+
117
+
118
+ res+=f'{{{{_("config.{cat}.label")}}}}{{{{_("config.{cat}.description")}}}}'
119
+ for c in ConfigEnum:
120
+ res+=f'{{{{_("config.{c}.label")}}}} {{{{_("config.{c}.description")}}}}'
121
+ return res
122
+
123
+
124
+ def get_config_form():
125
+
126
+
127
+ strconfigs=StrConfig.query.filter(StrConfig.child_id==0).all()
128
+ boolconfigs=BoolConfig.query.filter(BoolConfig.child_id==0).all()
129
+ bool_types={c.key:'bool' for c in boolconfigs}
130
+
131
+ configs=[*boolconfigs,*strconfigs]
132
+ # categories=sorted([ c for c in {c.key.category():1 for c in configs}])
133
+ # dict_configs={cat:[c for c in configs if c.category==cat] for cat in categories}
134
+ class DynamicForm(FlaskForm):
135
+ pass
136
+ is_parent=hconfig(ConfigEnum.is_parent)
137
+ for cat in ConfigCategory:
138
+ if cat=='hidden':continue
139
+
140
+ cat_configs=[c for c in configs if c.key.category()==cat and c.key.commercial() and (not is_parent or c.key.show_in_parent()) ]
141
+ print(cat,cat_configs)
142
+ if len(cat_configs)==0:continue
143
+
144
+ class CategoryForm(FlaskForm):
145
+ description_for_fieldset=wtf.fields.TextAreaField("",description=_(f'config.{cat}.description'),render_kw={"class":"d-none"})
146
+ for c in cat_configs:
147
+ if c.key in bool_types:
148
+ field= SwitchField(_(f'config.{c.key}.label'), default=c.value,description=_(f'config.{c.key}.description'))
149
+ elif c.key==ConfigEnum.lang or c.key==ConfigEnum.admin_lang:
150
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("en",_("lang.en")),("fa",_("lang.fa")),("zh",_("lang.zh"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
151
+ elif c.key==ConfigEnum.country :
152
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("ir",_("Iran")),("zh",_("China"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
153
+ elif c.key==ConfigEnum.package_mode:
154
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("release",_("Release")),("develop",_("Develop"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
155
+ elif c.key==ConfigEnum.utls:
156
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("none","None"),("chrome","Chrome"),("edge","Edge"),("ios","iOS"),("android","Android"),("safari","Safari"),("firefox","Firefox"),('random','random'),('randomized','randomized')],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
157
+ elif c.key==ConfigEnum.telegram_lib:
158
+ # if hconfig(ConfigEnum.telegram_lib)=='python':
159
+ # continue6
160
+ libs=[("python",_("lib.telegram.python")),("tgo",_("lib.telegram.go")),("orig",_("lib.telegram.orignal")),("erlang",_("lib.telegram.erlang"))]
161
+ field=wtf.fields.SelectField(_("config.telegram_lib.label"),choices=libs,description=_("config.telegram_lib.description"),default=hconfig(ConfigEnum.telegram_lib))
162
+ elif c.key==ConfigEnum.branding_freetext:
163
+ validators=[wtf.validators.Length(max=2048)]
164
+ render_kw={'class':"ltr",'maxlength':2048}
165
+ field= custom_widgets.CKTextAreaField(_(f'config.{c.key}.label'), validators, default=c.value, description=_(f'config.{c.key}.description'),render_kw=render_kw)
166
+ else:
167
+ render_kw={'class':"ltr"}
168
+ validators=[]
169
+ if c.key==ConfigEnum.domain_fronting_domain:
170
+ validators.append(wtf.validators.Regexp("^([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})|$",re.IGNORECASE,_("config.Invalid domain")))
171
+ validators.append(hiddify.validate_domain_exist)
172
+ elif '_domain' in c.key:
173
+ validators.append(wtf.validators.Regexp("^([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})$",re.IGNORECASE,_("config.Invalid domain")))
174
+ validators.append(hiddify.validate_domain_exist)
175
+
176
+ if c.key!=ConfigEnum.decoy_domain:
177
+ validators.append(wtf.validators.NoneOf([d.domain.lower() for d in Domain.query.all()],_("config.Domain already used")))
178
+ validators.append(wtf.validators.NoneOf([cc.value.lower() for cc in StrConfig.query.filter(StrConfig.child_id==0).all() if cc.key!=c.key and "fakedomain" in cc.key and cc.key!=ConfigEnum.decoy_domain],_("config.Domain already used")))
179
+ render_kw['required']=""
180
+
181
+ if c.key ==ConfigEnum.parent_panel:
182
+ validators.append(wtf.validators.Regexp("()|(http(s|)://([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})/.*)",re.IGNORECASE,_("Invalid admin link")))
183
+ if c.key == ConfigEnum.telegram_bot_token:
184
+ validators.append(wtf.validators.Regexp("()|^([0-9]{8,12}:[a-zA-Z0-9_-]{30,40})|$",re.IGNORECASE,_("config.Invalid telegram bot token")))
185
+ if c.key==ConfigEnum.branding_site :
186
+ validators.append(wtf.validators.Regexp("()|(http(s|)://([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})/?.*)",re.IGNORECASE,_("config.Invalid brand link")))
187
+ # render_kw['required']=""
188
+
189
+ if 'secret' in c.key:
190
+ validators.append(wtf.validators.Regexp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",re.IGNORECASE,_('config.invalid uuid')))
191
+ render_kw['required']=""
192
+
193
+ if c.key==ConfigEnum.proxy_path:
194
+ validators.append(wtf.validators.Regexp("^[a-zA-Z0-9]*$",re.IGNORECASE,_("config.Invalid proxy path")))
195
+ render_kw['required']=""
196
+
197
+ if 'port' in c.key:
198
+ if c.key in [ConfigEnum.http_ports,ConfigEnum.tls_ports]:
199
+ validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$",re.IGNORECASE,_("config.Invalid port")))
200
+ render_kw['required']=""
201
+ else:
202
+ validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$|^$",re.IGNORECASE,_("config.Invalid port")))
203
+
204
+
205
+ # validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$",re.IGNORECASE,_("config.port is required")))
206
+
207
+ for val in validators:
208
+ if hasattr(val,"regex"):
209
+ render_kw['pattern']=val.regex.pattern
210
+ render_kw['title']=val.message
211
+ field= wtf.fields.StringField(_(f'config.{c.key}.label'), validators, default=c.value, description=_(f'config.{c.key}.description'),render_kw=render_kw)
212
+ setattr(CategoryForm,c.key , field)
213
+
214
+ multifield=wtf.fields.FormField(CategoryForm,Markup('<i class="fa-solid fa-plus"></i>&nbsp'+_(f'config.{cat}.label')))
215
+
216
+ setattr(DynamicForm, cat, multifield)
217
+
218
+ setattr(DynamicForm,"submit",wtf.fields.SubmitField(_('Submit')))
219
+
220
+
221
+ return DynamicForm()
222
+
223
+
224
+
4
225
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
226
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,39 @@
1
- # 2023-04-08T15:11:21.108834
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\xe2\n\x00\x00\x12\t\x04\x00\xad\xae\xa7\xab\xef2\x96\xf9\xdc^\xe7\xef3%\xe8c\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x11\xa8`\xf8\xa4\xb4\x9b\x8eJ\x9eW\x9e\x03\xb1\xc9H\xfa\xee`iw\xf6\xa7D\x10\x9e\xf7\xe7\xee^\x8c\xd8`\xb1b\xc8\xff\x97P/\xab\xd0*\xe4?Fb\xab\xcd\x93q\xf9^p\xfc\xa7D\xae\x93\xaa\x99\xa1\x95\xbc\xe9mZ\xb8}G\x1c/\x82 \xb9e\x84\x0f\x8eG\xf0-\x86\xef\xfe\xf6\xb3\x9f\x10J\x91#\x99\xb7\x96\x9e\x03\xbfV\xc2\xa5\xa2\xbb\xe6\x7fb6\x7f\x83\x00\xf5k\xe4\xb7\xf1\xc7\x13\xeb\x92\xc1\xe9\x02\xd03\x9a\x01\xa2\x18}4|.\x86\xc9\xe1\xad\x05\xe36W\x7f\'\xc2,\x9b\x94\xaeJ.\x8d\xa6\x92k\xe2>\r\'\x08Y"I$\xb3\xf4\xf7\xd8\xc4\xf6\x00}\xb2g\xa5\x1c\xea\xe1[\xfc3\xc7\x91\xbb\x9c\x99\xb4?\xfd\x9fmc\xff\x82\xef\xdd2\xa6\x82\xd1\xca\xce\xcb\xb9\xc7C\xe4\x80\xd2LX\t\xda\xed\xaa\x84]\x17#+\xf3\x92A\xa9\x03\xcbd\x10\xf6\x13\x07\x9d\xfd\xdd.\x1e\xaeD\xf0\xf7\xf7\xae\x83\xfe\x9c\'\xde\x02a\xda\xf7\xf4\xe0\xff\x17("B/C}\xdd|0\xdf\xf2\x06\xbb\x0bQ5\xae\xee\xbdk_]\x0c\x00-\x85o$\xd5\xae\x9d\xc21w\x0f\xdeF\xa9\xc4~XM\xc9\xe1\xc9\xb4\xaaJ\xde\x98}G\xba\xe6\x10G#\xee<[\xf3Y\xac\xf1\x8c\xf5a>\xb9\xbc\xe8w\xf9\xa17.\xef\x9cc\xc7M\xac2\xc8=c\x00 \xaa4j\xd4K^\xef[Hda\xeeM\x94\x85\xda\xca\xfc\xaf\x18\xa8Q4\xec\xf5 Oo\xef3h\xfc\xcf\xa5._\xa9R\x15v\xb9f\xad\xb1 p\xb3n\x1f\xbbS\x1d\x8b\xecv\xe7P\xf6\xa5\x9a@\xc7\x9c\x08q\x13N\xeb}\xe9q\xfb~\xb1\xa9\x9d\xae~\xb4\x12\xd88<usF(\xbc\x08\xb8\r+\x80B\xa2\xfd\x9e\xcf\xaf\xbe\x1f\xf7\xd4\xa1\xe5\xddH\x1b\x08\x90R\xf3lN\xbcq\xe73\xef\xaf/\xa2\x92\xe8N\xfe\xcd\xf4\x16\xc1\xe8\xd3;6u\xda\xbd\x9e?\x1f7\'{\xf1\x02O\xec\xa3\xad\xeb\xfczc\xa8O\xb8\x18\xf4h1\xf0\xd3n\x1a1\x06a8\xbc\x04]x^\x92\x13\x99\xe4\x01\x06\xaa\x08\x1a+\xb5{$\xbb\xbfC\xb4f*\\\xf2\xc0\xa7"\xf7\x14\x90\tA\x8au\xc8\xec\xd8L\x1c\xa0D\xd5\x8c,_\xbeu,\xa2S\x0b\x1a\xdd\x1a.H1\x8e\xe0\xee\xfa\xde\xfb\xd6\xa5\xbd\xbfP\x9fGa\x07\xa2MLw\xcd\xba\x8c\x8d\xc4\x92\xd3\xf9\xc9\xad\x1fa\x95\xf2@\xd4u\xb8\xd9bh\x80\xde\x13\xc2Aq\xa1a\xec\x11$-\xef586[\xc3\x9c\x83\x8f\x12\xc9[d\\\x83\\\x85\xbc\xbb\x0e\xc3-\xb2\xd4\xbe\xc3\x8e\xd6\x03\x00\xae\xa6\\R\xd7\xd2\xe7>%j;Q\xc0\x0b;\xbb\xdc*\xc1\xc9-\x9f\x9b\xa4\xf9\x91\xff\x9a\xbaF\x1d\x12gK\xe5\xd0\xfa\x07:\xe5\xe5\xa2C9\xd1h\xd4E\xc6B\xe0ONV\xb8\xb41\x0b@\xfd\xd0m\xa3\xe6~\xcba/_\x1b\x1e\n\x88\x98\xca\xb0d\xe7\nTJ\xcaT\x0eM\xcf~\xd2\xeb\xef\x17\xff\x88;e0\xa13\x14\x95\xe3\x8b\x93\x8a T\x9e\x86\xef\xb2\x81\xf0\x8bLF\xeaDL\xbb\x9f-_%\x86\xb4\xbb\x15\xdf\xd3\xd7\xb2\xe7+\xfc3#\x17\xd1\xd7\x99\x1d\xd9%\xc3\x0b\x8ef\x14\xb1\xb3g\x1cF\'\x1a\x15\xd4\xa8\x0f;Q\x80\xaaD4\xfd\xdc{\xe2\xdc\xfc\x1bD\xe8\xb3\xd7vq\xdc\xcdi\xca8\x9e_\xd8\xd9V\xa8\x95\xf3\xb5\x8fI\x12kH\xe4\xb33\xedU"\xf0\xac*\xf3\xd5\xc1\xc8\xb3\xd3\x12\xa3\xcfZS\x88\x85\\,J\x94\xe9\xd8\x16\xf9d\xee\x99\x859\xf9\xaf\x98\x02)\x0c\xe96\\\xd1\x19\xf6{\xb8\xea\x84\x07\x85Z\xab\x94\x8ctH\xdf\x89\xd3\xe4@\x83\xbb\xd9\r\xad\xad\xe7_\xbb\x94\x81L\xa6\xce\xd9\x1b\xb8\x1c\x9e)\xa4\x130\xc7\xa4\xf2\xd0\x9a\xf1\xdcB\xd5\x17\x8d\xde9]_I\xdb\xa4\xa1q\xc9\x18.\xb0\xdeJ\xdc\xa8\r\x1dO\xac>F\x94\xb9\x07\x85\xff\x9a#6\x14\x10\xd0`\xcf`\xafX\x9c@G}\x9a\xcd\x15\xf7\xb4\xee^\xbcU&{\xaa8\'J\x03\xef-\xf3\xc3O\xa7h\xf5\xaf\xc7S>\xb4 9:u^\xd1\xd8+\xfc0\xf5\xbc*\x8d\x80\xe2\xd0\xc5\x0b|\xf1:\xbe\xa6\x00\x13\x01!P\xce\xa4\xc6\xfd\x12\xf7kE\xac#\x90IWN;\xc3\xceX\x02yY\xa4\x81\xa6i\xb8+\x93\xca[\x93\xf7$X\xd3\xaen\xc7\xea\x93\x06\x16kyw\xbc\x96\x86\xee\xb2>\xc5\xb4\xf7I\xb0\x80=\x9b\x8b\xc3\xa2G\x02\xd9\xe1\xca\x0fWJ45\xf6\x99\xd2na\x0b\x13\xd8CE\xfd\xe2\xf2\xaa\x8f\xe0\x85\xddp\xa5\xf9\xf4i\xfbY~US\xd2\x87\xdc>\x0e\xf9\x95\x00#\xee\xd3\xc7o\x18\x17\xe3\ta\xa1+W\x00!_(\xbcbp>\x8f\xea\x15y\xaa\x93\xb8\xbd\x8c\r\x1b\x04\x0f\xfdk\xe4\xc6\xecA\x82\xdbH\xd3\x83%\x07\xb4\x0b\x11\x0b\xb6\xe9\xd5V\x14\x06\xc7\xd7\x16\x05\x12\xf8\x10\xdb\xe66M\xe7\x86\x1c]\xcfK\xa4\xfe\x86\xe5\x07\xea\xd0$\xa2E\xf70(\x7f\xe4L_\x9e\xfc\xc2[/ >^8+N;|o\xb2\xd4P\x02D\x14\xe1r\x93:\xbd\xec\x93\x18\xea\x836E\x82t\x1b\x95\x81\xea\xd6\xf3O=\x8b@\xad\x00U\xa4\xe4\'\xa5\xf2\xe8\x1c\xfd\xc4\x93\xf5pf\'\'\x94\x13\x95\xf65\x94\xf8$\x89\xd1\x0f\xa1\x8b\xd9\xe1\xca\x17\x04\xd2\xee\xd44\xfbO]e\x91,\xe4\x07\xb6\xeed\x8e\x8a\xb8\x0fw\x8b\xc8\xb7\xe7\x85o+\x95\xe4\xbd\xafO\xe7\x80]\xe3\x87w\xe7A\xbe\x19&\xafm\xd6\'\xb7\xad7]D\xa8\xaa\x06\x8a\xf7x\xbc\xeb\x8d\x8f\xa1\x04R\x91s\xd3\x97S\xeb6\xe5\xf1\xfe\xe4\x9f\rq\x9d\x17{\'\xb1-p\xa9k^_\xcf4&\xa25y\x84\x1f\xd8\xb8k\x85|\x8d\xc1\xb32\x9a\xa1\xc8w\xa0\\\xc0C\xa2\t)\xfb\x11\xe1\xe2\x18\x1cjO:\nA\x00\xaf\x8a\x1a\xde+q2b\nNP\xe1\x9b\xfb\xe4h\xb3\xa2Y4\xef) \x8a\xdf\xdb\x9f\x81\x13\xc0\xa6\xc0\xdc\xb7\xef\xff0\xa18\xaaN\x08\\)c\xb6z\xe4\xcec\x84\x12\x13\x8ah7P\xb2a2\xaeq\x8b\xbc\xac\xa7\xc4Z\x803\xb9W\xc5\xdf\x03U\xb1\xff\x15mpm\x890\xa5\xe4)\xb1`\xba\xda\x17R\xc9E\xb4}\xf6\xca\xc9Q\x13\x08\x18\xfb?\xac\xd4\x10\'<F\x89\xc9\xf6\xed\xf5\x0e\xbe\xe3.kZe\\\xf6\x98\xbb\xf3\xa4\xb6\x11El\xb0\xd5Ao\xd5A\x91\\8\xb4\xc1\xe8\x8d\xa9\x07_\xc5\x94\xf2Ud\x14\xeb\xd0\xd1\xc2f\xd8\x9fZ\xa24\x11~\xdf\x86<\xb8\xd9\x0e\x97o\x18\xbb\xe5\x80\x8d\xf8\xc7^\xea\xed9\x17\'`a\x03ow\x97Z\xb6\xa3-\x8a\xed\xe3\x8b\x12\xaf\x9f\xd1\xd7\xb0\x04\xf9\x8f\x08H\x06\xae\xde\xe2a\x94r\xf1A\xab\xdcib%\xa6\tdI\x05{\x8d\xaa\x8eX\xc4\xc6\x00\xd0\xccm\x84\xcci=\'\xce\x82\xfe\x0c\x1cd\x103\xd3\x0b\xb5D4:\x9f\x85\r`\x16\xb1\x83\xe3\x02\x111\xecJF\xf1#\x972\x91\x1ad\xe5\xc8\xa2\xb4\n\xce\x84\x95w\x0c\x93X\xc5\x83\xa8J\xcd7\r\x88\xd6\x9f\xba\xf5\xb8\x94\xb2GN\x7f\xa5\n\xac\x99[F\xd7w\xab,*AX\xf0\xef\xe4\xcd\x136F\\\xf3c\xf8\r\xd3dgm\xd7\x08\xfb\xc9z9$\x85\x89rd\xbe\x85\xf7\x0f\x9c`\xca\x11\x93\x89u0\'){S\x81\x84\xba\xf3WV\x82\xa8\x13[\xcf\xd7\x0e\x1c\\\t\xd4_\x99S\xff1\xbd"\xfc~\xe8_`\x12@\x07M|\'\xcb\x0b}\xdf\x85\x08W\xad;^]T\x1b\xd4u,\xb5\xb9j\x83\xe0"\xf5/k\xdfa\t[\x81\xe9:\x0ek\xf4\xce\x1e\x06\r\x98^\r\xcc3\xab\x1b\xd8t4+\xd1\x13\r7PJ\xf3\x0e\xda\xfd\'*\xea.\xa9rN\xafyo\x04\x87f\xcez%Y\x8e\x05\x19\x9b\x18\xccx\x1aw\xac\x9a\x0e`\xd4Ri\x9e\x7f\xbf0\xc5f\xb4wp\x1bOb\x07\xa1\x03\'~\x1a\xd5\xad/hS \xa9\xa8H\xfd\x022R\xfa\xb6\xa4\xf7\xb51\xccuR&\xa0\xb0w.R\xff\xac\xe4\x12Q\x82\xf9\x18\xe4]\x0cr\xf5U\x0f\xcd\xf3pnQT/\xf9\xe2o\xa9R3\xda\x0f\x1d\xd8KP ?\x92\xaf\x15\'08[P\xdeq\x96\xf7\xc7\xa4\x0f]\xbc\xa2\x07[vIT\xa9\xads\x18\x19.l\x95V\x14\x80\t!\xcb\x84\xe4<l\xf7\xb9\xc80X\x94\x0c\x13)\xc0}\xc2\tC\xeb\x05\x04\x8d\xda5KLk\xf0\xa4q\xa4\xba\x17\x8d!\x15k\xbcP\x1a$[j\xf77Q\xdac\xd7\xbe1J\xc8\x92\x83\xa2\x82\xa0\xc2\xe2?y\xce\x07\x10\x7fX\xfbG\xddHg#\x9as\xb0\xf1\xfc\x9c\x9e\xafX~/\x97\xcf>\xf6\xd0\xdc\xde\x82\x0f\x13\x1d\x0cfF\xb9{\xefh\xc6\xb1\xb6\x93\x85L_\x15\xe7\xe2$+\xb9Z\xed\x14K\x8a\x16\\\xdb\xb0\xa6b\x00\x82\x13b\xbcl\xbag\xf2S\x98\xae\x85\x83\x07\xde\xcd\xc2\x97(\x08\x11\x1f\x1b\xde#\xad#L\t\x8e\x05^\x1d\xae44\xd7\x95&\x11\xbc\xe4X\xd2\x1a\xdd\x02\xaa\xf3\xb0v\x1f\x98i\xae}G\xbe\xe8\xc0Pd\xd8C\xaci\x81\x90\xc7\xa7\xbd\xf7Hd\r\xa9\'\x9f\x92"-\xf0RKl[\xa2\x89\xe5\x1c\xd9}!\xe1\xf5t~\x0e$%K\xf6C$\xa7\x92\xaf\xd0\xe5\xc4[\x8d\x18\x8c\x97\xb3\xe2R\xb93\x80\x87\x02\x82\xac\x0f5P\nV\r?\x00O\xee\x05\x8d\xbbrp-P\xcb|\x100zR\xa1\xd8\x12\xee\xf2\x1ew\xf0E\xccko :\xfb\x9a?X\xa1\x08\xe5<}<\x15q\xd5\xf8\xbf\xe9\xe4\x9e\x01G=U\xe3\x94\xf6\xfc\x8e\x00\x0b\xc0\xd7\x89\xe3\xe8\xe1A\xdd\x11\x02}m\x1c0S\xb63\xf0\x02\xde\xe4P\x1fM<\xcbb]\xbb\x1b\xf6a\xbe\x97Q\xc7\xe3\r\xee\xc5~\x1dZ\xc3\x8aJN9\xd5\xf5\x1a\xcd\x8d\x1b\xbe\x83\x0bh[\xdfnt\xe0\xfb\xd8\x8f|\x0e\x98\x9b[\xae\x17\x84]\x12=c\xddE\\Y?\xc3~\x14\xb3\xa2\xe7\xdc\x01\xa6\xe0\xc9\xa0N\x07\xa5\xccX\x0e\x00j_\xda\x18\xe9\xd7\xa1\xca\x15p\xbcB\xe5\xa79\xf4\xca\x0f\xda\r\x8a"\x81&6\n\xd3\xb5\xcb\xa2-\x89\xb38\xbe\x90\x19.\xe3%|f\x10NB +\xe4n\xea\xc0\xb09\xd7\xdb\x9d\xef\x17D\x040\x19\xb2/\xb4\x8aGJc\x9e\xf5\x1a\xe6S\xea\x1e \xb0\x81\xd9B\x80\xc6:\xc8\xe1\x17\xc6\xca$>\x9aNLd$\x0c\xael^s\x1b\xd8\x83xT\xd9\x03\xf4.]R\xe7\xff5\xfb)\xb57b;\xa7L\x9a\xfbs\xc9Jy\x03w@W7\xa1\xe7\xfc\x87ZEe_\x07\xa8\xce\xeb\xd4_\xf6\x86V\xbco\x94\xf7E\x98\x85\xffKK43S\x8b\xf1I\xe0=\x17\xafZ\xc2\x89~@V\x92\xa4I\x9d\x08\xa4j\xe6\xd4\xb9\xef\xfe\x1f8!\xfc\xdb\x98x\x95\xb4\xd0&\xb1\xb2\xe3\xa1d\x18\xf9a\x1c\xf1\xca\xe7\xd9\x0c\x86\xeah\xa0\x19$!R\xdf\x9bH`4\xb3\xa3\x18\x9e\xb0\xa7B\x7f\x06d\x88{\xcc\xbf\x07&\xb9;\x8e9\x13U)\\\xaf>\xc4|c4\x95\xc2\xae\xbe\xafUjc\xf2\xd0\xaa\xd7B&}\xca\x13~\xbc\'\x9e)r+c\t\t\x16\xc7\xcdJ\x0c\x96B\xc1\x81')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from flask_admin.contrib import sqla
2
+ from hiddifypanel.panel.database import db
3
+ from wtforms.validators import Regexp
4
+ from hiddifypanel.models import User, Domain, DomainType, StrConfig, ConfigEnum, get_hconfigs,ShowDomain,hconfig
5
+ from wtforms.validators import Regexp, ValidationError
6
+ from hiddifypanel.panel.admin.adminlte import AdminLTEModelView
7
+ from flask_babelex import gettext as __
8
+ from flask_babelex import lazy_gettext as _
9
+ from hiddifypanel.panel import hiddify,hiddify_api
10
+ from flask import Markup
11
+ from flask import Flask
12
+ from flask_sqlalchemy import SQLAlchemy
13
+ from flask_admin import Admin
14
+ from flask_admin.contrib.sqla import ModelView
15
+ from wtforms import SelectMultipleField
16
+
17
+
18
+ from wtforms.widgets import ListWidget, CheckboxInput
19
+ from sqlalchemy.orm import backref
20
+ # Define a custom field type for the related domains
21
+ from flask_admin.form.fields import Select2TagsField,Select2Field
22
+
23
+
24
+
25
+ class ProxyDetailsAdmin(AdminLTEModelView):
26
+ column_hide_backrefs = True
27
+ form_excluded_columns=['child']
28
+ column_exclude_list =['child']
29
+ # list_template = 'model/domain_list.html'
30
+ # edit_modal = True
31
+ # form_overrides = {'work_with': Select2Field}
32
+
33
+ def after_model_change(self, form, model, is_created):
34
+ if hconfig(ConfigEnum.parent_panel):
35
+ hiddify_api.sync_child_to_parent()
36
+ def after_model_delete(self, model):
37
+ if hconfig(ConfigEnum.parent_panel):
38
+ hiddify_api.sync_child_to_parent()#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
39
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,51 @@
1
- # 2023-04-08T15:11:21.099126
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\x1d\x08\x00\x00\x12\t\x04\x00\xc5r\x01\xdc\xe2jK\xdd\xf5\xc9\xcc\xe6R>\xb9g\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xd7\xbe\xa0\x00\xcb\xd77\xc3\x0c(\xa7\xbc\xb5\x89\x19\xe5^\xfa"L\xf3HA:\x8e\x08j\xb1\xf5tZ\xc7\xf9s\xe3E\'\x85pW\xce\t\xfb\x80\xee\xdf\x95m\x94\x05\x95\x81\xd7\x14\x9c\xaf\xc6X\xb9\xd60\xb3]\xd8\xbd\xe4\xd5h\xbeC\xd3\xbc>\x00\x15\x9a\xd1NE5\x1c\xcdDA!\x962-\xa0\x01V\x11\xc2\xdd\xa4\xfe\xadI\xd6\xba\xd9\xda\xb9\xfa\x16?\x03\xe6\x14\x02\xf6j\xd4_\xb9\x04I\xb2\xe1\xee\xe18\xf7\r\xde,\xc2\xac\xab\xc4\x93\x0e\xca\x16\x98\xa1\x04t\x15\xc5&j\x13>;J l\x02X$ysI\x1b\xa7 \xe4\xaf\xc2\x8f\xb6\x97b\xc9\x15\x8e\x11x\xae\xa5^\xae\x1a\xc7e\x16\xf1\x167\x9c\xf0\x07\x14l\x83\x9f\xa93H\x8e<\x91\xc1\x14\x8e\xd0\xe6\x90\x8d\xa2\x9c\xee\xb9\xdb\x80N\xc5%o\xce\xab\xe7%\x87\xfcN\xb6\x82\x0eYD\x02\x99\xb7\x919\x7f\x14\x90\xa4\xb9\x8f\x15L[TC\x86wR\x89\xad\x92\x08zx\x81=\xba\x7f\xda\xc7O\x1e<\x92\x9f\xdd\xca$\x04wuRt\x13i0\xc7)\xdcW\x8b\x10\xf4wZ\xe0\xf7\xd6\'H\x92\x97\xa4\xf5\x99\x87C\xd0/[=\x99\xc2{%\xd5c\x9fT\x93u\xe9\xae\t\xc2\x9ee>X\xb0\x06[\x1c(\xe3\xe2\x84\xc5\x8e\xc9\x9f\xd1c\'I\xb4\x98\x9c/d\xf0\x86\x8f~\x1a\xec\x94\n^\x88\x1f\xc0\x8f\xb7\xca6f~\xaf\xae\xe1zrc\x07+\x89$E\xce&\xc0\xe0\xab\x16\xb9\xad\x98\x83\xcfm\xe56\xe1\xb8\xfb^\xbc\x19\x9fOjJk\xa9D\xc0\x93D\xc9r\x06\xdf=\xe4\x1f\xb2\x95m\xb7-\xa5\x9f\xe4:%\x11\xf9\xf3F\x8f\x1d9\xf4\xdfd<\x97W~\x02\x9fI\x198~[-\xb7\x7f\x0c\xde\x10A &\xb2\xd7&`\xc3\xb6h\x8e\x00\x00\xbcGh\x84t\x96\x83\xd5c\xce\x8d\x12\r@\xff\x83\xde\x05\xbf\x93\xee\xd4\x1e\x88y\x12Z\x84\xbe\xd2\x03\x95\xb5\xdd\x10Y\xfe\x17\r\xeb"\xd9,\xe0\xfd2\xb3\xc0<\x84\xeb\x1f\x9c3\xd9n\xb7\xaf\xe9\xe3\xfd\x1a]\t\x815\xcf\xba\x05\xa2^\n\x939\xc2\x9e@\r\x9bgt\x1dd\xf9\xfd\xec\x01\xce\xb1\xf4\xd2\x08H\xc8\xf7ik\x16\xf5\xc8D\x9dI0\xb3\xd3\xf5e$\xe7F\xad\xb4#\x14L*,[\x11\x16\x17\x89\xb4\x0b\x7fP\'\x84I\xbf\xa7\x08\x92/\x81\xa5^\x1c\xb8J\xb0"1\xc4\xaa\xa7\xdf\xb8\x8d\x8f\x01p\xe3`\x00\xdcpz\\\xb02\xff\xecY\xc3\xe2Q\x06[|\xe5\xe3\x03\xbee\xf9\x1d8\x8b\x97\xf4&S\xb1\x94|\xd9q\x11\x10\xc3\xec\xf9f\x13;$\x1a;a\xb6\xf9\xb5v\xb7@yY\x93\x0b\xe0\xdd|xd"3*\xe4K\\7\x87\x89,\xec\x83\x02L\x83\x18E(\xe3\xca\x8ap>V\xe4X\x12"tmL\x19\x8a\xb9\x95]W?c\xed1\xf5b\xa8\xaf3\x91\x19\x9e\x9e\x130\xc4\xf4M\x15c\xd5\x8e\xc0\x1a\x19^}!\xc2\xb9n\xca\xec\xf4\xbc\xa1\x1c\x01}\xcc4\x13\xa8[\xcb7\xed\xb8\xbb`Q\x941\x03W\xce*\x1e\xfe\r\x02\xd7\xfd\xf7\xa3\x9cB&Y\xd8\x96\x87\xd27\x16\xf7\xd2w\xa3\xe7)\xfa\x9b\xb0\x01\xe0\x7fA\x87\x0c\x91\x17\x12\xe0z5|\x99\x16\xe7\x8f^C\x84;\x0c\x95\xa6]\xbd\xec\x9c?\x8f)g2J}@\xf4\xa4\x1b\x06c\xddyY\x98\xd00\xc00cs\xf4\xc2\xac7\xf0<\xd6\xd8\xeb,\x92\x19\xce\xfe\xc1\xe6%\x1aT\xe7\xa1\xad\xc0\xec6_\xa8\xc3\xf1\x86\x06V\x19\xe7Wf\x86u/H\x85\xdf\x7fk\nK\xda\x06e\x11\xfeB1\xd5\xf4L\x99\xf4\x7f\xbb\x94\n\xed\xf7\xaf\xfe\xcb\x0e\xda\xf0lR\x18\x011\x15\x19\xea\xbb`\xf83,\x88Z\x7f\x97\xfb8Mv\x9bm\x0f\xc3?\xb46I\xa7\x8d\x141\xbfz\xd0,F\xe9R>\x94\xc2\xec\xaf\xf1-\xa8\x86\xc6\xb39\xc0`\xbf\xa8\x97\xfa\x15b\x01\x83\xea\x8fT\x8f\xa5\x16\x82\xa9C\x14\xca\xef).&\xa6\xff\xf6\'\xae\xa1\xed\xb0\xc2\xcd\x80A\xfc\x9aw4\xc5\r\xd1\xbb\x1b\xca\xf9\x18\x8f+\x1e.y\xf8\xcfm\x0c\x8e\x9e0\xb6\xcc\xce\x85\x7fh16\xfd[\x86\x07L]\x8d?\x1cZ\xb3\xaf\xc7w\xb0\x9bQ5w\xad+y\x98\xb5nj\x0fJ\x1d\xc3H\xebA\xcdM\xfb\xbd\x97\x92\xa0\xe1\x0e\x02\xfc>\x8c2\xb6\xa7\xd7q\xc9\xa5!\xcaHOA\x86j@\xdf\x1e\xc5\xb1=\x16\x84\xadp\xccF4\x0eS&w\xbf\xc4\x0bp\xfa\x06\xb6L\xc1K`\xd6\xafuf\x94\x8f\x98\x195F$\xb1\x8c\xb3!t\x03\xec\xf1\x18Y\x1f\xd14r\xe0~\x1f\xcaK\xfc\xa0\xc5J\x9eK\x96\x1b\xcd\x1d\x07\xff\xf6\x1c\xc4\x18\xf5\x1b{\xc1\xce\xba\xfaa*\xa7<Q@\xc7bwP^( SX\xed\xdf\x82\x16\x91N\xb7\xd5A\xf4\'\x9b\xef\x12\xde\x91\xd4\x97v\xd6\x97><\x9f\t\xc0R\x1d*W[i*\xf2\x80\xfd\xb9^;\'[\xcbZu\xb6\x99\x91\x90/\x9f\xb4_<\xe5\xe4f\x9e\xef\xd2\x19\x1a\x13\x8ez<\x86,9\xd9\x9a\xf9\xeb\xa4\xef\x98\xc01\x8aM\xb2\xd9U\xa1)\x97\xcf#nk]\xa1\xcf0[5\xcb\x07\xb3\xf5Vb\xcf:\xa5\xc7\xa39\r\x15\x1a\xdd7o%\xdf\xd9\x1f"u\xc6x\x9f\x81\x81\xc24\xe9K>\xd4\xef\xc3\x8dcC\x918\x1c,\xc1\xdeF\xd3;{\x952*\xc3\xfd\xf6\x14\xf7\xa5\xab`3pa\xd3\xe4\x15X53S\xec\xfa\xc2\x98\x14\xccw\xba\xac\xebJ#\x98~k\xe7\x94.\xe8v\x80\xf4$\xad3\xf4\x17\x92\xbax\x81\x8e\xed\xebc\x96\xd2&\xd4\x062\xd8P6\xcd\xc5\xc95\x8f%09\x98\x03M\x85V\x87tL\xdbTe \x92Q:q\xfe\x91\x08oJ\n\x10\xbc\xe9\xf9\xb3\x83\xc5\xbdd\x1dJ4\xd4\xc3V\x0c\xe0\xe6\xdfD\x1c\x1e.\x0f\xcb\xa7\xdce\xbcO\x19Y\xd8\x97t\xcd\x11\x88\x1cN\xf2\xc5\xa5\xde\x8b\xca\xcfJ\xa3\xe2J\xd2v\x9e\xd5\x90g\xcd+3f\x05^\xb3\xea\xd3\xdb\xaao$+\xa5@\xb5\x9e\x92L\x94l\x8eA\x84\x16<\x8b\x88\xfb,~\xdf\x97=\x0e\x9c\xc6\x87/\xc5v\xb4\xe1|\x9e\xa7\x07\xbb\x0b<\xb6}d\x95e\r\x1cd\xe7P\'u\xea\xea}\xbd\x9dF\xe3\x13\xe0j~\x81\x13\xfdm\xc8\x7f\x0bI\xaa\xb2+a\xec\xba5\x15tZy\xd89\xa4w\xfb,$?,\x80h\x00`u\xf4O\xc2\t\x14Fo74\xd8\xd2f\xd0.\x88\xbaq\x9f\xc1a\x92\xa6z\x0e(\xabu\xf6\x82\xfcX\x1d\x89\xdbo\x06,\x82\x05\xb0dX%\x7f\xc0\x88r\xc6O\xa1x\x97\xcf#\x89\x10\x9d\x7f\xfc\xff\x1a\x81\x1c,\x93\xb4H\xaa\xe7;\x9b$o\xfcs/\x06{h\xf9\xaa]4k\xa3Y6\x92G\x9dEY\xeb\x81\xeb\x80M\x07O\xd2\x85\xcb\x1co2\xd7\xfa\xe4\xca\xbb\xc8\x12\x07\x91%\x0c\xf5\xd7:~5\x9b\x9cC\xd9X!\x1f&\xe4\xcfz\x96s\x14\xee\xc1\xe5b\xc6m\x88\xb5l97\xe6i\x94y\xc4\x13\xaa\x06&wI\xbd\xbd\xad\x1f\xaf7\xd5\xa7m\xc7\xd3\xf8\xb8\xf3\xb8\x86\xd3\x18\'\xc1\x1fi\x93\xc9\x91b\x87\xcb\xd5\xbc\x00\xae\xff\x9d\xc8\x048\x863m\xb1\xe3\xe8\xea;\x007\x91\x0b\x07\x07j\xea\xa8y\'i\xf4qh\x8f\xed\xbb18Z1\xfd\x1d\x14\x07\xc1\xd76\x01\xcb\xbbA\xb2\xf3\x8cQ~A\x1a?\x1fd\xad\xac\xcc\xcbL\x9e\xe8~^\x18\x86q\xefpm\x869\xf2\xf1\xeeq\xa7\xb9\x86rq\x16J/*\xec\xe9\x176x\xfas\x0b\x97\xdb " $&-\x06\x99\xbfW\x8c\x9d(\xe7\x87q\xd7\x80$}\xe7ho\xbd\xd9F:"\xe9\xf9xu\x9a\xda1S\x0b\x1ak\xa4\xa1\xd27\xee\xf0"\xad\xf4u}\xe6\xa5b\xa1\xc0kJ"\x0c,\x1a\xce\xb0\x1a\x7f[\xdc\xff\xc6\xbcbBIr\x9c\xde\xb9\xdb\xcd\xd7C\xc0S\t\x0b\x05\xed\xcf\x0e\xd1?-\xb8\x1fv\xa9\x19V{!e\x11\xde\xac9\xc8\xfd\xd68\xcf\xca\xd0_\x9b\xc5\x1d\x11q\x13e\x94\xc3\x17\x17\x80\xcc\xb7t\xf9>T.\x13\xb2\x81\x06\x15\x91\xf9g/\xa5\xcb\xf3\xf0\t\x98\n\x84X\xe1t\xa5\r\x84\xdf\xc7\xc3\xee=\r}\xbf\xde,!\x83F\x81\x92\xacH\xba\x95\x97\xe7)\xfb3\xdd\xad?\x8f\xd73\xc9s*\x1c\x91\xb4\xa8\x04W\xfe\xf75\x94\xc5k\xaf\x8e\xa6')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from .ProxyDetailsAdmin import ProxyDetailsAdmin
2
+ from .CommercialSettings import CommercialSettings
3
+ from hiddifypanel.panel import hiddify
4
+ from hiddifypanel.models import *
5
+ from hiddifypanel.panel.database import db
6
+ from hiddifypanel import Events
7
+
8
+ commercial=False
9
+ def init_app(app):
10
+ from . import restapi
11
+ restapi.init_app(app)
12
+ return
13
+
14
+
15
+
16
+
17
+ def config_changed_event(conf,old_value):
18
+
19
+
20
+ if conf.key==ConfigEnum.is_parent:
21
+ if conf.value and not is_valid():
22
+ set_hconfig(ConfigEnum.is_parent,False)
23
+ if not old_value and conf.value:
24
+ Domain.query.delete()
25
+ db.session.commit()
26
+ db.session.add(ParentDomain(domain=hiddify.get_ip(4)+".sslip.io"))
27
+ db.session.commit()
28
+
29
+ Events.config_changed.subscribe(config_changed_event)
30
+
31
+
32
+
33
+ # def db_init_event(db_version):
34
+ # if not is_valid():
35
+ # db.add(BoolConfig(ConfigEnum.db_version,10,child_id=0))
36
+ # db.add(BoolConfig(ConfigEnum.db_version,11,child_id=0))
37
+ # return
38
+ # # if hconfig(ConfigEnum.is_parent) and ParentDomain.query.count()==0:
39
+ # # external_ip=hiddify.get_ip(4)
40
+ # # db.session.add(ParentDomain(domain=f"{external_ip}.sslip.io",show_domains=[]))
41
+ # Events.db_init_event.subscribe(db_init_event)
42
+
43
+
44
+
45
+ def admin_prehook(flaskadmin,admin_bp):
46
+ # flaskadmin.add_view(ParentDomainAdmin(ParentDomain, db.session))
47
+ flaskadmin.add_view(ProxyDetailsAdmin(Proxy, db.session))
48
+ CommercialSettings.register(admin_bp)
49
+
50
+ Events.admin_prehook.subscribe(admin_prehook)#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
51
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,16 @@
1
- # 2023-04-08T15:11:21.190412
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)\x04\x00\x00\x12\t\x04\x00N\xea\x05\x96I\xf2\x92\xd7\xd0}\x99k)\x7f\x14\xd7\x00\x00\x00\x00\x00\x00\x00\x00\x8c\xc5\xeb\xa0\xce.\xb8\xdc\x12c:\x04\xec\xeaXz\xaa@\xca\xe03K\xf3\xda\xfc\xf7\x91\x95\r\xc5qa\xb0\xd8\x80\x8c\xc8\xfc3\xaa\xa8\xe9\xe6\xc4z\xccg\xb4\x1f\xb7\xc2\x08V\xb4\x83nl\xc2O\x11\xc2\xca\x9d:\x18V\x02w\x1c+;.6\xbfHZ.K\xa3F-<\x10\xc2+\xdc\xab\x8a\x15z\xe1\x92q\xf2\xb0J\x99\xbd_\xb1\xa0\xaa\xec\xce"`KhH\t]9\xe3\x9b\xaby\xf2$\x164ZvW\xa4d\xbfb\xd1\x07fp\xfa\xe0~\xde\x07\xb3\xf0\xcd\x8c\xc4\x0fL\xe4F\xba\x16\x03\xb4\xd9\xb0\xa2\x16q\xd9\xfb\x17F\x98gvO\xc1\x88:\xe7\xd8\x88\xec\xb8i\xbeP!\xcd74&\x01\x89\x0b\x1e\x18\xc2\x1eM\x13\xf7\x18\xb4aU\x1d\xc5?M\xa9\t\xc0\x89\xec\x0cx\xb0\x9e\x91}\xceI\xa5\xe3iV\xb2\xaaI\xdf6\x91\xe5[\xf9\xec\xe2\xa0\xb6|\xfe\xe7\x17\xc1lAT\xa3s\x8dH{\x96\x98\x8b\xdc\xbb)\xc8\x02,\x12\xc2\x95\x16\x80H\xd1\xa7|\xa8[EWI_/L\xfe\x05\x95,\xb6Lv\xe7\x04\xbf**\xcbaS\xcd\xb6\xab\xfc\x90\xa6\xb5\xfd\\\x11\x08\xdc\x1c\x0b\xd7\xa9\xe4;\xad^[%\xb7\x10\xc7\x00\xe7\xd0|\xa7\xe9\x9f-\x84C\xedF\xc3\xef\x92\'\xa3\x16Y\x00e\xa8\xc1\xbb;m\xb1P)\xfa\xdf\x07\x03\x8a\x97\xe4\x89\x7f\xcd\x8c\xa1\x18\x8b\x0c\xd2\x11\x8b8J/b\xc8\xc2GDc\xbb4\xaf\xcco\x9b\x16\x86`\xfe\xd8\xda\x18\x81QP\xeb\xfbx\xf8\xfb\x87\x04\x88a\xc6\xc2\xfc\xd1\xfb\x02Wa\xde+\x07kmc\xf5B\xa6\xa6,\x07H\xe6\xf0}\xea\xdf\xab\xb2\x9c\xe9F\x1e\x10FUv\xc0\xd6P7\xd2\xbf\xa5%l?\xcc\x9a\x16o\x88a~\x00\xc2\x7f\x85c\x8d\x94P\x91\xa2%#\x1b\x7f\xa5\xa8I\xa2O\xe4\xa4\xe0\xd0\xf4c\xb3\xd76\xcd,\xcd\x92\x88\xd5\xc5.\xaa\xc89\x02\x10P\x92\xd5)z\x15\xc3m\xcbP5Q\x02\x84\x97\xc4k\xff\xfcL\x1e\xac\xcb\xf8\xeb\xe3\x93\xa8\xf4\xe1\x0c\xc7\x9cA\xfa\t\x05\x85\r\xb5\xb9\xc3|\x8a/A\xce\xac\xb8\xd0&\x0e"\xa3\xaf~\xad\x97=\x92%\x16\xd39q\xfe\xc7\xc4\xef\xac\xe6;\xc9\xa8\x1dFXTs\xf4\xa8\xa1\x13\xc6+\xe6o\x92[\x93rD\xc2\xe1/0\x88\\<\'0\x0b\xdbfluU\x1e\xa0\xb1\xce\xd0=\xe98t%\x16\xb9V\xe7\x0b\x00\nT\xb2\x1a\x95\x1b8\x8f\xee\xed\'\xe5k\x05$t\x19\xc0\x1c\x99\xf1\xb7\xbc\xe5\\\x97\xb7\xe0\xc6Oh\xfe\xc0r\xa4\x1b\xcfP\xd3\xeb}\x97\x1agh\xe4\x9d\x13\x99\x83x\x06v\x90\xc8-\xf7\xe8\xa4\x1e\xa2k\xfa\x10\xb7X_C0L\xb8\xddf|;\x83\x80`)S\xca\xca[\xc4y\x91=\x9c\nv7J\x05\x1d^lB\xcb\x95]%\xc8\x85,\xa3\xbd\x9c&\x1fG\xc9\xcc\xfe"\x0b"\xa1\xb8OP\xe6ZI\x1b\xe1\x98\x04\x80\xd6_U!^\x84"T\xa6\xea9#\xe9\t\xb1 v \xa9\x13\xad\xe1\x81\xf3\xaa\xf3/\x8a#\x7f\xb2s\xa9U\xb7\xcen\x9cN\xd1F\xc7\x11\xef\xf1\x99\xe0\x08M\xe0"<\xd1\xee\xc0\xf6DC|\xe6\xc9=\t\r\xc0}7%\xaa\xee\xe3\x1dy\xa4z_\x85\xd4@\x0c\x0b`\x9dKoK\xcb\x84\xdbm\x11\x16\xb0U\xb3\x8f\x95\xa6\xa2\x9d\x97\x0eZn\x0c]Z\xceM\xecL\x9a\xe1\xe4;\xaexQ\xe5\xe4Qj2\xa6*\x01\x87\xba\x86\xc67\xb9\x89\x0fy\x02\xc4\x11DG!\t&\x1e\xa4\x94\xc6\xf7\xe080\\\xec\xe9\x90\xe1R\xba<\x82Zk\\0{\xc5\xa8\xb5\x1a\xf1h\x0f\x9aN<PL\xeb\x06\x8f,\xf0%\x85\xb7% \xd5\xed\xc9\xb5\x87\'=G\xcdfBQ\x06%y"\xf1Er>R\x0f\xab\x04pe\xb0\x13\xeb\xa5:\xb0\xcd~\xa0\x12\xb7U\xd4}\xed\xfb\xac\x92\xe6~\x17)b\xd9 \xa5\xa0\x9d\x00\xb0ZLIkm\xf8\xdd\xd1Djl\x0es\xcb*\xda\xd6\xd7\xf3\xcd\xd0\x16\xe4t\xd4Jt\x86M\x9d\xf0\xde\x96p\xde!5w~\xae\xd6|Y\xe4r\x03gSI\xbf\xa2u\xe3\xa4!\x81G\x06\x83F\x9f7N\x17"F>\xcd\x9a{u\xe3"\xc9W>\x01\xe9Q/\xbdE\xf9\xd3}\x0b\x93\xbc\xc9a\x02')
1
+ from flask import Blueprint
2
+ from flask_restful import Api
3
+ from .tgbot import bot,register_bot,TGBotResource
4
+
5
+
6
+ bp = Blueprint("api", __name__, url_prefix="/<proxy_path>/<user_secret>/api/v1")
7
+ api = Api(bp)
8
+
9
+
10
+ def init_app(app):
11
+ api.add_resource(TGBotResource, "/tgbot/")
12
+ with app.app_context():
13
+ register_bot()
14
+ app.register_blueprint(bp)
4
15
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
16
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,59 @@
1
- # 2023-04-08T15:11:21.205815
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<\r\x00\x00\x12\t\x04\x00_,Q\xd5O\rT\xb7N\xaeu_:\x98lV\x00\x00\x00\x00\x00\x00\x00\x00\x06\x08\x15\xa0O\xde\xba\xd5\xc1\r\xc5\xbdy\xb7j\xa2\x97\xe4N\x86+\x87\x17M\x18\x9d\xdc\x1e\xbbB\xa5\x13Z\'a\\\x8b\xae\xbe\x16\xa2\x0e\xdd\xab(Y]\x02R\x12\x00\xe2)}\x16\x88K\xd0c0\x14\t\xcc!yd@}\xef\x1b\xb0\xd7\xfc<\xab\xab\xc9X1\x87-\xbac\x17\x80\xfa=\xa7k\xcc\x83tR\xa7\xa0~\x05n\x96\xec\x8c\x84|a\xfe\xda\x07\x8d0\xf5\x8e\xe2?\x02{\xd6\x03\x8d\xc4\xf1\xb8\x89iU\x7f\xa6yV\xfd\x1f\xe2\xfa\xc1\xf7Cx}\xb4\x00\x138\x02r\xc1[\x12D%\xc1\xfe\x0bAe\xe3\xf9\x04\x85\xb2\x8e\\\xb7\x99\xbb\x14\xae\x03\x0e\xc0l\to\x163I"v\xa0\x9f\x10\xa8\x93\x9at\xddL\xe2SV9\x94\x1a\x17\x01Z3\x80\xc3G\xc9"e\xc1\xd7\x8c\xae\x05V\xfbDU$a\xe6\x00\xc8\xc1\xc7H\x90\xf4Ro$cjP\xaa4\x84\x18o\xb47f)\x81\xe7 \xb1\x85\xb5\x86Q\xa54\xba\xe9\x16\x12\x88c\xe40\xda2\x19u\x1c\xfcV\x87\xb7r\x99\xea\xf0u%\xc9\xe9\xc0\x8f\x0c"\x06\x91\xb6\xabP\xee\xb3\xea\xb4\x1eJ\xc5x(\xfc/\xad1S}\xa7I\xdaHp050\x86\xe8{\xed\xa0\xfc\xd0<$\x9a\xbb \xce)\xf3+T\xe2\r+&\x06\xc7\xe1@\xd38<QuE\xf7\xd9Bi\x9e\xbaY\x80\xec\x144\xe6N\x04X\x84\xd9`\xaf$\xe4"#\x1f\xa4^lA#\xc7\r\xae\xcaF\x99"JG\xc0\x16\xe4I%\xd1k"V<\x84\xe0\x89\x7fU\xcaF\x8d[ \x8b\xd8oe!\xa1N\xae\xc4.\n\xfe=t(\x86F\x03\xb0\xf7\x1d\xeb\xb75c\x19\xde[\xa5\x0c\xab\xd8\xc2MQ\xcf [\xcc\xe78\xb0\xd1\xce\xd2g\xc8\xc4\xfb[\xdaYG\xf8)VJ\x88\xf3\xb1`.\xafjB?\xda9\x97\xb5\xbe\xfd\xc1\xe4K\xdcvd\xdc\x05P\xe8b\xd7\x9d\xab\xba3\x07\xf0\xc4+\xe2x\x04\x0e\x14\x9f\x96M\xd8\xbe\x927B\xff>\t\xa8\xd3\xbc\xda\x00\xfb\x11I\xdch\xb5\x16\x81Y\xc0\xd5he\xb1Z\xd3\x98\t @\x85uy\x0b\xf2\x11;Q\xc9\x04\\\x9dC\x92U\xe1\xe8\xf6\xder;L\x9a\x89Z\xaf\x07wis\x0e~O;\xa8Ie\xfaR\xa6\x9a\x90\x13g\xde\xc9\xa6\xb6$\xe9\x02\xc3\xaeA!U\xf2\x90\x9c\x18iD%\xa4\xb7\xec\xb3\xd4\xd3\xd4x~\x96\xff\r\xb3!8\xa1R\x8e \x93\xbcN+\x8b\x8b\xbf\x95FY\x1f\xdc|\x14\xbf\xb8\x99\xc2\x08\x15\x90\xabO\x016\xa1\xbfN\xf3\x1d\x0c\x08\xc3\xd8\x04\xf6\xcf\xfd\x1d{\x0fTP?\xa3:j\x00`.\xbcj\x1b\xf2\no\xc5}\xa7y\'p\xad\xd6<\xeeZ\xd8\xa2\xac\x06L\xc1[\x98RY\xe1\x01\x8b\xfd\xe3\x80,\x8al)\x96\xd4M_F\xf2-\x15\xb9W\xe7!R\x7f\xbf5(\xf7\x88\x14\t\x91\xf0\xef\x10\xcau\x16V\x8f\xdfQ\xd9\xa2\x11\x04]A\x10\xd1z\xdc\r\x80\xe2\x81\xf3\xc8\xd8\x15\x17\xd2\xfd\xadH\xea\x04\xb0p\xff\x0e\xffF\xe7\xf1I\xd4+\xc2\xfd\xac\xfc}\xf00\x96Q\xbe\xce\n\x91y@\x93\x93\x833\x02Xu_\xdc\x03\xe1\x1b\x08\xe9\x98\xefv\x04F^6A\xd2.\x1e\x9b\xb3D\xa4\xfc\xcd\xa6\xbc\xce\x98$kI]\x97=He6\xebJ(Ij\x08K\xcd\x82M~\xc2\t/\xba\x05\x89\x9d<\xedM\x98\xdeU\xfd\xf9\x8cO\xe2\xcc\xa5\x88\xc5\xfb\xe8\xf2\xa5m\xce\x84Ec\xfa\xdb\xbe\x9a\xe8a\xe0\xd1i\x94\xdc\xceYd\xa5\x01zk\xf2\xf5\xc2\x01\x0b\xb1\x97\xf9\x91\x16\x86|v3T\x04d$\x9b\xccw\xd9\xf6l\x9b\xaa\xdbpo\xfb\xcc5JJ\xcb\xb5\x12\xb8\xe4\xfc\xc7\x98\x16m\xe8\x132\xdeNX\x9bt\xf5O\x87\xf3P\xca{\xa2-\xd2\x12d\xd1\xaf)\x07\xebB\xe7\x98\x8c\xe7m\xe2{\x84W\xdc\x91\xc3Z\xb8\xfa\x0cw\x9eF\xc6\x8d\x8dNx\xaa\xf7\xc6w\xd5\x97(0\x02\x8eJ\xa1\x88\x1e\xe9\xd4"\xf8\xcfVr\x180\xc8\xbf\xc7\xa8\xd8i\x8d\xd6_\xdc\xf4\x80`\xd6\xe0\'`3\xbe5^\xef\xd7\x1c\xbeo\xd2s\xe3\x8e\xe2=|\'\xc9\xb2\xc8t\xfa\xb3#\x97\xc9\xa5\xb5\xe6\xce\xe4\x98s\x13\x0c\xa0\xa1G\xf3\xa0jr\x8e\xa9\x9fb\xf8dM\xc2\x9d\x10\x98\xc6 I\x19WM\x87\x9a\xf0v\x0f\xe9\xb3\xc1\xe3\x03He\xed\xb4\x02\xe3,\xad\rt0\xd80\xee\xcd\xcc\xdcz,]\xea\x9e4\x8ae;\xcfC<\xba+\x92\xbc\xae\x81D\x00Pk\xe6/\xe6\xbb\x90\xe0\xccf\x14\xe9\xd5\x02\xa3"\xd7\xc5\x8dP\x8d\xaa\xb1\xed\xe9\xbb\xab\x17rYQ\x89zo\xb5\xb4\xc9\xeb\x8c\x83\xef\xaem\xd4\xb1\xc4\x92@\xe5w\xe9\xafj\xbc\x8d\x97\xa2\xf6\xb4\xf2\xc8\x8b\xbft\x8ca\x85\xe6\xa0\xe6\xc8\x1arudR\xed;<I\xad\x9e\t6\x1f4O\x99s\xec\xcd\x80\xeb>,\x03$\x1a\x0eY\x90XV\xa6EuA\xb6\xa5g\x0f\xf6>NP\x1a\xf0|\x1b\t\xea\xd9Q \xf8L\xedj\xfe\xe7.\xb2\xaa\x96jc*\x81\xf4\xf32\xc7\xc9u?e\xaf\xa7\x9e9\xc0+t\x11$\x1e\x1f\xb8\xf5?\x08\xfb\x8b\xb4n>\x08\x98\xce\x03\x02\xf7\xf1B\xe3\x15LT\xdd\xd9\xe2\xa8\xc9\x88\t\xea\xcb\xa1Y\xb7\xa01\xd8%W\xfc?C:iM\xf6g\x14M7\x07T\x99\xaa\x04\xafUb\xa2K\x8d\xf4G\xa3\x9a\xcb&p2\xfa\xb1\x9cW\x12\xe6\x87\x1f\x17h\xbcF\xcc\xbch\xd5\x85<\xa3\x90\xe4NT\xe9\xf8s\x82\xc0\xf0\xe7\x13\x15\x93\r\x95\xd4\xec6\x0eZU\x07s\xd9\xb54\xcd\xa4\x8d\xabu\x07an\x1e\x92\xbf\xb9\x89-\xdcb\x03\xbb\xf4lS\x87z\r\xe7mp\xc6\x19z\x0f4\xfa7\x1a\xb4\x7f\xf6hN\xe0\xfdc\x92\xdcP\x0e\r\xf9\x1b\xc7\xa3V\x03\xa4i\xb6\x92vI\xfc:\xc1\x9b"\xe1\x13k\xfd\x08|g&\xdb\x15P\x9e[/\xad\xc8\xaf\x07\x83^\x02y\n\x16/d\x0c\xac\xbf\xd2>\xfb\xf1\xbc"\x94\x89t:\x8d\xf5\xce\x83\x9a\xedzF\xfd\x14\xaa~=\x93\x92/gBT\xa1\x0e\x9cM\x91a\x1f\xfcOu\xef\xc1\xe7\xe9uqY\xeet\xd6\xa8\xe6\xca\x1bM\xa7\xe9q^\x14\xdb\xd5I{\x1c\xef\xfa2#\'9\xae\xdf,W\xb6\xa5\x19\xfb\xd9/}}\x96\xc6\x1f\x12\xdd`\xdc\xfaD\xf6\xacR\xd8\xc4&\xec\xa1\xbf\xea|%~j\xc8\xf5\x80W\xbc\x1c\x1f\xf6\xa3\x17/\x99\x86v\xcd\xdb\xdcBCU\xf7O\t\xf4,\xb3\xbb\xec\xae\xbc\xa3\x1d\x07\xc0Qs:AV\xb0\xf5~Fx\xe6\\\x89\x9a\x9fF-\xb4#n\ty\xe6\x86\x01\xfc~\x1b\x16\xf1\xc5^\xe4\x14\xd0K\x8f\xf3\x9a\x9f\xe3\x9cx\xeb\xa0w\x0f\xf2\xdca\x176\x8a{\x80\xb7\xbc\xd2?\xeevw\xec;o\xfb"c\xed\x91\x13\x1e\xc5\xb8\x9e\xa35\xd2\xd0\x86\xa7NK\x08\xe2\xe8\x19\xde>G\xd64\x08\xf4\xf8\xeei45X;\x97\x05H\xf3zNWjO\xfd\xe8\xfd\xc4H\x9fe\xcc62\xc3\xc0\xfe/(\x00]c\xe0\xf7ot\x08\x14\x16\xc8\xcf\x8f\xefm\xad\x08 \x02\xe3Xx\xda\xc0?[\x17\x04\xcdB+;/\xca\xb3\xd1\xce\xb1:\x1e\x9e\xa4\xd7f\xabD\x00\x8d\xb6\xa6\x9d\x97\xca\x87\x04\xbf\xd6\xe6S\x05%\xea\x95\x0c-\x14\xea#\xab\x85\\\x14\x82\xe5\xd5\x81\xc6\x8e\xd1\x93I\xb5\x17\xf9de.\x08\x9c\x9d\xc7\xdbH\x10\xbd\x03I\xb0(d\x06/0q6,R\xab\xed\x1e\x14\x97`\x0ct\xc2?\x17\xe8r\xfeG\x19N%\xde\x89s$]\xb9>\x15\x05\xd3t\xd8\xb4\xee.\t\xcd\x9d\x03\xfa\xf0J.9\x82~k\x17\x02\xc4\xb5Z\x0f\xfa\x02\xcagv\xa9\x17\x07d\x1fd\xc5`P\x9aZ\xcb<N\xee}\xdd\xb3\xeb\x13\xefQqlS\xfc\x9d\xff\xcd\xe7\xdb\xb8\xb4\xbd\x19\xbf \x8c\xf3\xf4H \xeeT\xdd\x80\x9f\x08\xbcT\xd4\x89\x1f3\xedY%\'|\xe0\xa6\x00\x8e&\xbe\xa0WNT\x1bo\x9dR\xfb\x81\xbc\xbd<\xb2\xe8\x06v\xe3\x89\x92\x97\xe7k\xe2\x80R$BK\x93\xdc\xae=n-~ \x16\xad\xa4\xe6\xfbk\xa1\xe4]\xe4\x88z\xefb\x84\xce\xcc\xcb?\xcb\xccf\xb5\xf8<\xfc\xb3K\x01m\xb4\xcf\x1b\xc0&#`\xb6\xf6r\x1fZ\xa1x<3\x88~\\5\xa6\x11\x93odl\x13\x97E\x92(+d\xd1\x16\xb0\xa1\x82\xf2\xc5\xe4\xe0\xfd\xbbvJ|\x1a\xf4s\xd4\xe6\xe1\xd5\x87\xd2uu\xba\x13\xad\x92\xe09\x8f\xda\xde\xa4\xb8\x1a\n\x99W]\x83w\xdd\xcb4\xd8m<\x00\xce\n\xb5r\xa80-\xee\xe4\x82\xdf\xa9\xee\x03\x15\xdf\x18\xd4\x94\xae3\xb8\tLD\x80\xf7\x1akU\x18\xa0=\xda\x19\xc9!\xa5d``\xc1C\xdfq\x85\xf8\x1c\xaf\xa7\x84\xf7\xec%\x99\x893\xed\xcc\x11\xd2\xc8\x9dj\x91>\x19\x96\xd9/\xdb\x8f\xca\xd9B\xcb\xd0G\xffd0Tp\xe2\xdcq\xe8\x98\x9a\xcc\x04\x0f\xafs\x7f\xdd\xb1\x1d\xb7\xce=y\xfa\xa7\xb2\xfcT\xf8\xf6RH\xabR1"\xae+\xcc\xba{S\xc6\x17yhtJ\xb1\t:\xaaB\xcdi\xa6\xc7\xb5\x83 \x00b\xd09\xae\xa9$\x9b\x85cL\x97\xd0\xc4Bmj\x8cP!\x95k\rv\x96\x16I"\xb2XOy+\xf9\xfd\x7f\xb1\xfbR\xf2>4\xd3\x92y\x8c\xea\xe1\x13\x90_K\xb9\tq\xd7\x80\x0b]\t\xe4\x80:o\xe3& \xad\xa9\xa5g\x06\x85I\xa6\xc6\x82v\x8c{2\x07\xeb( ?\xc2\xef\xd8O\xc6C\x03I\xa8\x8du\xafp\x05\xce!o\xf1%-5\xf2I\xe2\x89\xa6f \xff\x8b\x0b\x07Gn;\xd9\x0c\xd0S\x82\xc3\x1bh1\x93A\xcaG\x8b\xc8\x8exE97\x81\x8f\xce\xd1u\xaf\xcc\xa1f\x1b\xba\x8dA\xf8\xcc\xfc\xa5\xa0\x87\xe2\x06\xd6\x9f\xd9\xd1\x07\xe9\x15j\x0c\xfem\x03\x9b\x94\r\xbd\x1ey\x06U^"\xae\x87\xe0\xe7i\xc1\x10\xa0\x99\x8e\x86\xf3\x9e\'TZ\x1a\xab\x1a-?\x8b\xc4\xd6p=D\xcb\xc4f\x07\x11D\x8fNC/\x8b\x9fvf4u\xc8\xf5\x0c\x8b&;X\xf3A\xff"@\xefR\x13L\xbd\x05\xe4\xadA5\xb8\x7f\xcf\x1b\xf5\xd51wS\xcb\xa1#\xf5T\x9a<D$\x84\r1\xba\x9b\xde{@Tf<\xaa\x8e\xd8(:\xc9\xc2\x99\xec\xb3\xe1H\xf3\x9e\xfe\xa4\xc6\xe5\x00U7\xb60\xfe\xc7\xff\x19qRa\x95\xb7\xc1\xd8\xcf:\xdfn\x1b\xd5\xd4\x87\r\xca\xbd\x06\xf6\x1a\x8c\xd0\xf2m\x01})w\x825bo\x08CO+\x04\xf2\x8f\xc5\x95o]\xe2>MV\xe8Y\xba\xa8\x96\x83\x97\x8bu\xb0V\xe7\xf2d\xec\xa6\x97\xaaz\xf0\'iL\xc7V\xf1l\xae\x11y\x94|\xb0\xeb\xdc\'[3\x96\xdaV\xa9\x9a\xac\xaeP4\x0b\xa5\xb9\xadY\xed\xfa\x14\xad\xaa\x04\x8c\xf1\x87\xd3~t\xe4\xef\x8f\xb2j@\x17\xe8\x06\xe9\x85\xfc\xbf\xc5\xbaE\xb7\xb1\x85\xfeI#\xcbiP\x1b\xacM+\x92\x9e\xd3x\xdc7a+X1\x8f\xe8\xe3\xc7\x0c\xa5\x0c\xab\xbe\x0bq\xddK\x9f\xe2\x17\xcdSZ\xf3\xa6\xfa\xa4\x17\x15Z\x8b\xe4\\?\xbd\xda`\x8f\x15TE\xb6\x8et\xa6\xb1\x89JY\x8eX\x0ej )\x1b\xea\x06\x15\xff n\x8f\xd5\x96~\x81\x0e\t/\xf4D\xfe\x8f\xf7\xeeH\x03\xbb\xb2\xc8N\xadW\x00@\x93\x96<-s\x0c\xa2\x0e30\xe9\xe7W\xa6\xd4\x0c\xab\xab\xc4ew.%Z\xccL^\xa0\xa3\xbf\x9e\x96Uy\xe9\xf4\xea\x86w\x04\x17\xa20mJ\xe09~:\x90\x13\x1d\tm\xe9\xea^\x9f\xd2\x02\xb7u\\\xb9\xcfe\xd2\xba`\xddc9EA<\xb3\x8f\xdd)\xf9\xbe\x1e \xa2\xbbF\xdf*\xd8tA\xb9\xf8\xddX\xab\x0b\x0e\x01\xfe\x130>\xbb+csK\x9c+\xdc\x1c\x8fi\xb2\xf0\x07\xb7# \xbdE\xd8F\x92\xeb1\xf1$\x18Z\x8f\xc3]4\x8e\x02\xd7\xfa{\xda\xc8\xbd\x1c\xcd\xdcDp\x1c!0f\xcb\xe5\xe6>\xac\x18\x9a\x87(\xaf\xc4\xbc\xea\xdb7>\x19\x88\xf8(\x92\x17\x80H\x93\xae\x08\xa1\x98A)\xc4\xda\xabM\xeb!\xbeN\xddj\xeclt\xf6\xd3+W\xee\x08\x8d\x84\xff\xdf\xdc7\x1etLU\xf7\x8d4\xd5\x98\x08\xc1\xeb^\xb6J\xcea\xba\xc3Q\x88\x12\xee\x88\x9b\xfa[\xb7\xfa3l\x80\x15g\xe2\x88\x85\\f\xad\x16\xf6R\xbe\xdcb\xd3\xcc!\x12\xe8\xbe\x03\xcc>\x89(d\x13\xc4S\xd8\x13\x91\xe0\x9d\x0f\xa6R\xbd\xaaN\xee\xcb\x18\xc8\xa9\xae\xce\xd5\xb4\x1c\x8cG\x8b\xa5\x9b\x08\x8a9A\xa1\xa8i\xb4R\x84\xfd\xf3\x8cN\n\xe3k\xc7q\xfc\x0f\xeeM\xf27j\xd2\xcc\x86\xf6\x93\xe6\x12x\x10\x14su,\x7f\x93\x90\xe2\x89\x90\x92#\x85\xca\xdd\x1f\x9d\xfe\xf1\x88\xaf\xc1d\x17\xb9\x82\xec\xcf\xab9\xbb\xc7Y\xb4E\xbd\xf0+E%+\xa3\xbf~\xa0\xdc\xa5S\xd6i\xbb\x8e<\xb9\xd5\xc3\xd4\x14\xa3\x1e%\xe8 \x90\xac\x87\xb3\xbfi\x1c\x15I\xca.\xa3y[\xc2Lw)\xc7\x1c\x87\xd3\xe0\xcbB\x9d\x1b\xe5\xfd\x83\xee\xd3\x94Y#L\xbb\xe1\xc8W\x9d\x9b\xebC\x8d7-\xf1+\x8aa\xd4p\xf9\r\x8f\xcc~+\xd7\x01.\xa1\x8dY\xdd\x14\x1c\x92\xb9\tA\xe6\xea|\xf9S\xe3\x95@F\xca\xc6\x91\xfb\x16\x9b\x11q\xbb\xba6=\xce\xc8l\xf1!/\xbc\x98#*\xfe\n\xe8\x90\xcb\x7f\xda;\xe5\xc8W\x8f\x04K(\xa8\x91d+\x91"\x08=-c!V\xbb8\x1d\x8f\x03\xea\x85\xd8\xce\x8b\xa2\xc9_\xb0\x1b\xbaH2J\xe8\x06pJZt\x0cv\xf4@\xd6+\x9d\xa4`>\xa5e\xee\x93\xf7\xd6\x01Y\x8c\xb4\xaa(\xc1+\\\x1f\xbe\xa9}\x9a\xb3\xc0\xd4t\xd1')
1
+ import time
2
+ import telebot
3
+ from flask import abort, request
4
+ from flask_restful import Resource
5
+
6
+ from hiddifypanel.models import *
7
+
8
+ logger = telebot.logger
9
+
10
+
11
+ class ExceptionHandler(telebot.ExceptionHandler):
12
+ def handle(self, exception):
13
+ logger.error(exception)
14
+
15
+
16
+ bot = telebot.TeleBot("", parse_mode="HTML", threaded=False, exception_handler=ExceptionHandler())
17
+ bot.username=''
18
+
19
+ def register_bot():
20
+ try:
21
+ global bot
22
+ token = hconfig(ConfigEnum.telegram_bot_token)
23
+ if token:
24
+ bot.token = hconfig(ConfigEnum.telegram_bot_token)
25
+ try:
26
+ bot.username=bot.get_me().username
27
+ except:
28
+ pass
29
+ bot.remove_webhook()
30
+ time.sleep(0.1)
31
+ domain = (ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first().domain
32
+ proxy_path = hconfig(ConfigEnum.proxy_path)
33
+ user_secret = hconfig(ConfigEnum.admin_secret)
34
+ bot.set_webhook(url=f"https://{domain}/{proxy_path}/{user_secret}/api/v1/tgbot/")
35
+ except Exception as e:
36
+ print(e)
37
+ import traceback
38
+ traceback.print_stack()
39
+
40
+
41
+
42
+
43
+ class TGBotResource(Resource):
44
+ def post(self):
45
+ try:
46
+ if request.headers.get('content-type') == 'application/json':
47
+ json_string = request.get_data().decode('utf-8')
48
+ update = telebot.types.Update.de_json(json_string)
49
+ bot.process_new_updates([update])
50
+ return ''
51
+ else:
52
+ abort(403)
53
+ except Exception as e:
54
+ print("Error", e)
55
+ import traceback
56
+ traceback.print_exc()
57
+ return "", 500
4
58
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
59
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,13 @@
1
- # 2023-04-08T15:11:21.164771
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\x9c\x05\x00\x00\x12\t\x04\x00cs\xdadV\x045\x15\xf8\xb4\x82\x95\'\xcc\x0ei\x00\x00\x00\x00\x00\x00\x00\x00kD\x18\xf0\xc3\xbex\xbdsJ!\xfb\x95\xddd\xd4\xbe\xda\x96\xfa\x02\xa9\xc9\xf2O\x85\x07-\x8e\n\x7f.\x93{\xff\xd4\xda@d\n.s\xd688\xb9r1I[\xf3\xa4\xcePj\x03\xbc:\xdakL+c\xa0L\xbd\xe0\xbf\xd2E~V\xd7\x07[\x1b\xef]\xe4\xb5\x08\x19\xc2\x9a\xe2IR\x0b\x0e\x95S6O\xd3\xee\xf9\xe3Jo\xb2\x95+&\x92a\n\x12K(\x9e\xe6\xa4\x06r&\x97\xb0e\x88\xc5\x88\xfeF\x96\x9f\xcc\'\'\x04\xad`\'\xf9w\x88QR\xb1(.\x9b\x19\xa4\x10\xed\x82CBh\xf5P\xa9<y>\xb8{S\x1cm:\x0b\xc8\x03\xafz\x9aK\x17\x87\xe2\xc9,h\\\x8e\xec\xf7\x1c\x85-\xb7M\x91~\xd4\xec\xe7\xec\x13\xb8d\x80c"\x81\x15\xe0\xa9\xd0aI\xe4f\x81\x0cm\x1a\xcf}#\x1e\xc8=L-\x03\x9c\xad\xfb\xaf\xd7m\x11\xfe\xe1#q\xe5$\x80\x1d\xbc3O\xe0\x0c\xce\x1a\xf1\x90\xb7\xeeg\xa2Y\xb5\x07Ikt\xb2\x84TL\x9e\x1f\xf6\xaeWaO\x94\xf2\x06~\xac\x9c{\x8c\x10\x8b&ZdT\xf8i\xadFP\xd8\xc2\x80\xc7\xf8\x93\x90\xdf<\x90\xf6\x8dp\xe5^l\x93\xf9^R\xb2\xd8\xf0\xd9F\x93\x85c\x14\xed~<\x13N\r\x8b\xf2&\x02:\xf9\xe9\x0e/^\xbc\xd5\tH\x93\xca\x87\xacN\xd9\x02\x91\x13M\x00\xff\xc5<9\xaf\xee0-\x15c \xa7<\x92\x98^\xc3\x16\x02<X\xea\xf7\xceM\x16\x92\xd0k\xcfP\xd9\xa2\xb3\xba\xcf\xe0-\xd5\x9c\x1f&\x07\xf5G!\x86\x1f\xb9\x979\xc6P\xf8g\x17Ri\x98b\x8c\x9c\x96\xc7\xa4\xfb\xe1\xbc\xc1m\xd4\xa5\x00\xc1\xc6\xd6\x93d\xbc\xcd@\x86\x99\x15g\xc5\xefq\xb1\xe6K|\x97R9U\xd1\x1d\xc7\x93t|\xe0\xd5\xd2\xf4\xfe\xb4;E\x89\x99J\x9e\xc8\x98\xc0\x19\x8a%\x06\x05o\x96\x843\xa8`\xaen0\xdd\x10\\\xac\xca\xcf[s\xe6L@\x90\xb8\xc3\xce\xba\x8d|\xec_\xe6s?\xc2\xeeto\x1d\x0f+\xf7\x91s\xbaR\x9a\xf0\xa2{Ke\x0f@f\xaf\xc9\xc2\xb5+\x84-\x15\xc7\x7fB\xe8\x1b\xd53$\x8b\xbarY\xe5\xce\xe0\xa5\xe0\xae\xfc\xe3\xcd\xf3\xc8a\xb6\xecQ\x9d\xfaO\xfc\x82\x08\xf1\x1c\xf2\xe3/$\xdb\xe2"\xb0\xbf i=C.\xb3\xd0w\xb5\x92\xad\xa1}!\x0e\x19\x9d\xe5\x00\xbf\xbb\xb01s}\xfd\xb9\xc3\n)\xb5az\xcc\xe6\xfe?W\xf1d\x98sB\xdaq:L\xc0v\xa7\xcc\x18&\x88G\xbd\x8bf\x8f\x8f`\xd5UO\xed\xc4c\x05q(Q\x18\x98\xc7k\xd1p\x8a\xe6\xc8\x1c\x05.\xbcD(\xd9\xae\x11\xbeDD\xd4\x04\xc8/)\x1c\xf6\x1a\x80\x8e\xdc\x02\xc1Li\xc3\x9f\x0f\x94\xed\xc7vr3\xd8h\xd3\xc3\xb8\x1f\x00\x97Y-[!\x1e\x1c\x9f\x1e\xd6\x80m,\xb8\xd3\xfc\xebq\xa0\xeb\xf0\x19\xfb\xdab\x83P\x18\xb61\x87\xbf\x11]\x1a\xe6k\x17\xe5\xc7\xe9\xda\xbb\xb7\x1a\xa0>L\x8e|\x1c\x80Z\xb4FF|Y\x1d\xc2\xe3\xc5\x82D\xd05\x1d\xf2XV\x9c\xd28\xae$\x89\xac@hS5\xf3qx:%s\xa03>\x0b\x9bi\xa8p\x89\xa4\xc3\x01865\n\xe5\xd9\x12\xc0c\x04Nc\x91\xa0\x0b\x87\xc2\xde\xf9\xe7\xdf-Y\x9e\xfb.\xb1\xfc\xda=`\x8f\xe0\xf5\x89\x08\x19v\x17@\xec\x17\x1e\x83\xe2\x8al\xaf\xf4\x8e\xb2p\xa0\xb6-J\xc8e\x85\x88\xdb\xb7\x9b\xdf\xbe\x04\x8c2\xdf=\n8\xaa\xfctQ\xc6H\x88\xca\x9d_\xcf\xaf\xfe\xca9\xbd\xe1\x0c#\x07\x92}KI\x1e\xc0\x9f\xc6A\xcd\x85\xf2\xc9\x05\xca\xdb6Q3t\xcd=[\xa14\x1a\xad\x1ac0\x13\xf0\x95\xf1\xb53\xd5x-!\x12V\xe2\xe0\x17\xc0\x0f\x89p\xf6rF\xc3MF><\xc4\xbc\x9fM\x84dY (\x9fZ\x80.\x87O\xbc_.\x98\x8f"k\x16\xe5\x12PIVy}\xd9\xc0\x1b\xe7PBD\xb2}\xff\x8d\xa0}\xf5\xf6=\xbb\xa3\x94\xa2\xb9>\xb1\x11u|\x18\xdc\xf4\x91\x8ez\x14\xa5\r]\x88\x8aa\x14\xe7#\xed\xa5L\xf7CA1\xd5\xd6\x88g\xbc\xdb\xa6\x8f\x83=\xe9\x1c-\x14\x98\xc4=\xd7\xa1*,\xbe\x06\x99\xb4\x1e\xcc\xa7\xdfCmk\x0b\xcfL\xb7o\xe9\xf6h\x19\x06\xb4\xaa\xdee\\Y\x9dWk\xa2\xbe\r\x02\xaf\x8c\xdecT\x13)\xda\xc5$\x02\x7f>EB@:5\xf0yN\xa8k\xce^\xf1s\x16B"P\xf4\x95\xb1W\xc7\xc5\x99\x8f\x8d-\xc7!"\xe8@\xa3\x0c\x87}\xc9\xdb\x94]aN\xe2:2\xb4Cr\xe9\xfbh\x10_\x1a\x1dN\xb8\xfd\x12\x05I\xf0u\x1d\x96*m\xec\xfa\x15\xb7s)c\xd6m\x81\xe6\xb2v\xd06\xd6\xc4+\x84\x99\x19\x8e\xe1\x10qs\x19\xf7\xc3pH\xf5\xe5\x98|\x0b\x8a\x87\xbe\xbc\xccm\xb1PlR%jz\x86\xdcHL7\xa8\x18\xeb>\x7f\xa0_\x9e`\x97\xe2\xfe\x8f\xd2\x93m>\xf2\xbb\xce1\xa35\xe8\xf5\x9f*{Za\x03JG\xad\xbb\x1f\xf4{\xc6\xc9H%\x9ac/hkR\xa2\xd0x?\xb3\xa96|T\x1f \xd8z\n\xf8\x0b\x9b\x0ch\xed\xe4\xf22\xf4\xfe\x1fe\x12k\xac\xcd\xeeL\x81ou.\xbb\x0b\x93\xc5\xb9\x02a\x17\xc7\x96Q\x82\x05A\xbe6\x0e\xd1|"\xd6J\x96\xcc4\xabLO\x1c\xe2\xcf\x93\x0f\x81\xc8\x188\xa5\x14\x01\x13\x02\x7f\xba\xbb4\x9c3\xe2^\xb4\r\x07\xcaQ\x14\xc7\x93,\x93G7\x08\xf2\xa3\xac\x8f\xdd\xfb\x17W\xd8\x86\xb4V\xb2a\x03\x9f\x94\xe5%fy\x0csU\xd33/\xd9H\xc0\xc3I\x8edc\x05g\x11.\xef\xea\x94E\xdeM\x0f-U*\x11\xd83\x05C\x84N\xac\xdcF\x94q\x92\xe3\x9a\x807\x7f\x0f|%9g\xff\rB\x87\xc2\xc7\x13\xeb')
1
+ from . import bot
2
+
3
+
4
+ @bot.message_handler(func=lambda message: True)
5
+ def not_handled(message):
6
+ bot.reply_to(message, "We can not understand your request")
7
+
8
+
9
+ @bot.callback_query_handler(func=lambda call: True)
10
+ def update_usage_callback(call): # <- passes a CallbackQuery type object to your function
11
+ bot.answer_callback_query(call.id, "Incorrect callback", cache_time=1)
4
12
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
13
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product