hiddifypanel 3.0.0.dev64__cp38-cp38-manylinux2014_x86_64.whl → 3.0.0.dev65__cp38-cp38-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hiddifypanel/Events.py +27 -4
- hiddifypanel/VERSION +1 -1
- hiddifypanel/VERSION.py +1 -3
- hiddifypanel/__init__.py +7 -3
- hiddifypanel/__main__.py +13 -3
- hiddifypanel/base.py +88 -3
- hiddifypanel/base2.py +40 -3
- hiddifypanel/models/__init__.py +10 -3
- hiddifypanel/models/child.py +26 -4
- hiddifypanel/models/config.py +105 -4
- hiddifypanel/models/config_enum.py +207 -4
- hiddifypanel/models/domain.py +106 -4
- hiddifypanel/models/proxy.py +55 -3
- hiddifypanel/models/usage.py +58 -3
- hiddifypanel/models/user.py +171 -3
- hiddifypanel/panel/__init__.py +7 -4
- hiddifypanel/panel/admin/Actions.py +170 -3
- hiddifypanel/panel/admin/Backup.py +80 -4
- hiddifypanel/panel/admin/ChildAdmin.py +122 -3
- hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
- hiddifypanel/panel/admin/Dashboard.py +70 -4
- hiddifypanel/panel/admin/DomainAdmin.py +195 -4
- hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
- hiddifypanel/panel/admin/QuickSetup.py +127 -4
- hiddifypanel/panel/admin/SettingAdmin.py +224 -3
- hiddifypanel/panel/admin/Terminal.py +51 -4
- hiddifypanel/panel/admin/UserAdmin.py +277 -4
- hiddifypanel/panel/admin/__init__.py +82 -4
- hiddifypanel/panel/admin/adminlte.py +13 -4
- hiddifypanel/panel/admin/commercial_info.py +23 -3
- hiddifypanel/panel/admin/websocket.py +9 -3
- hiddifypanel/panel/admin_2.py +33 -3
- hiddifypanel/panel/asset.py +17 -3
- hiddifypanel/panel/cf_api.py +35 -4
- hiddifypanel/panel/clean_ip.py +125 -3
- hiddifypanel/panel/cli.py +172 -3
- hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
- hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
- hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
- hiddifypanel/panel/commercial/__init__.py +50 -4
- hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
- hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
- hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
- hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
- hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
- hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
- hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
- hiddifypanel/panel/common.py +98 -3
- hiddifypanel/panel/custom_widgets.py +71 -4
- hiddifypanel/panel/database.py +18 -3
- hiddifypanel/panel/hiddify.py +655 -4
- hiddifypanel/panel/hiddify_api.py +70 -3
- hiddifypanel/panel/init_db.py +393 -3
- hiddifypanel/panel/usage.py +85 -3
- hiddifypanel/panel/user/__init__.py +25 -4
- hiddifypanel/panel/user/link_maker.py +416 -3
- hiddifypanel/panel/user/templates/home/multi.html +1 -1
- hiddifypanel/panel/user/user.py +233 -3
- hiddifypanel/static/css/custom.css +6 -0
- hiddifypanel/templates/500.html +1 -1
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +67 -69
- hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
- hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
- pyarmor_runtime_000000/__init__.py +0 -4
- pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
hiddifypanel/panel/cf_api.py
CHANGED
@@ -1,5 +1,36 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
from hiddifypanel.models import *
|
2
|
+
import CloudFlare
|
3
|
+
|
4
|
+
|
5
|
+
def add_or_update_domain(domain,ip,dns_type="A",proxied=True):
|
6
|
+
res=False
|
7
|
+
if hconfig(ConfigEnum.cloudflare):
|
8
|
+
cf=CloudFlare.CloudFlare(token=hconfig(ConfigEnum.cloudflare))
|
9
|
+
zone=get_zone(cf, domain)
|
10
|
+
if zone:
|
11
|
+
dns=get_dns(cf,zone,domain)
|
12
|
+
data={'name':domain[:-len(zone['name'])], 'type':dns_type, 'content':ip,'proxied':proxied}
|
13
|
+
if dns:
|
14
|
+
cf.zones.dns_records.put(zone['id'],dns['id'],data=data)
|
15
|
+
else:
|
16
|
+
cf.zones.dns_records.post(zone['id'],data=data)
|
17
|
+
res= True
|
18
|
+
return res
|
19
|
+
|
20
|
+
def get_zone(cf,domain):
|
21
|
+
zones= cf.zones.get();
|
22
|
+
res=""
|
23
|
+
if zones:
|
24
|
+
related_zone=[z for z in zones if z['name'] in domain]
|
25
|
+
if len(related_zone):
|
26
|
+
res= related_zone[0]
|
27
|
+
return res
|
28
|
+
|
29
|
+
def get_dns(cf,zone,domain):
|
30
|
+
dns_rec=cf.zones.dns_records(zone['id'])
|
31
|
+
rel_dns=[d for d in dns_rec if d['name']==domain]
|
32
|
+
res=""
|
33
|
+
if len(rel_dns):
|
34
|
+
res=rel_dns[0]
|
35
|
+
return res#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
36
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
hiddifypanel/panel/clean_ip.py
CHANGED
@@ -1,5 +1,127 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00W\x15\x00\x00\x12\t\x04\x00D\x1c}\xe9\x9e\xb9\xbd^\xc4\xed\x8eQ\xd2H\x16\x03\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x85,\xb2\xcb\x8d/\x06\xdeM\x94&\xad \x9a\x10\xbd\xe5\xb6\x08\x01^\xff\xd1\x10l\x0fZ\x82\xa6\x97\xb0$\xa7\xd6\xce\xaf\xa0\xf8b\xb7F+Y\xf7\xba\xaa\xb7L\xc8\xd4R\x01\x11\x99\x8e\xed\xd0\xf0>\xdd\'\xd6\xb8\xbf\x13\x84\xfa\x1b\xa6\xdcv\x01*\xf7\xb6\x9c]r\x0cq\xb6?\xd6\xfbj\x9c\xd3x\xce\x8e\xad70\x0e\xbd,Y>\xf9\xa9\x80\xa1D\x97\x7fHx\xb0G\x97i\xb3\xa6\x00\x9d\xc5\xb11\xaf-\x82\xdfi\xea\x9bb:\x90\xd5{Ta\x12\xd3\xa0\xfe\x823d\xe25\x86Q!\xd1\x81\xffw\x98o\x13Nn\xf0\xb6|\x10C\x89`\xc8\xcc\x1e\xdaN\x02)\xa5\x92\xc4\xa0\x124\xb4\xed\xaao\xb5C{\xa8=\xa1\xea,\x11\xaet%\xa5\xb6\x0fn\x92\xe0\x1a\xe5\xd1h\xfc\'?\x99\xc1\x00\xc3\x80\xb0\xcfY&\x90\x17/\xb4M\x00z\xecs\xae{\xb1\xfe/\x97\x9b\x17\xbb\xe7\xea\no\x85\xfe\x7f6\xbb\xf8\xbbf\x92\xd9K\xf7\xed\x8a.\xa6}fK{\xdf\xde\x06G>\xae\xf7\xd9\xf8qC\xec\x17q&6\xf4\xbe\xf6E=T]\xe1\xb9\x9d&\x01\xfa\xc9\xf8[N\xd6\xfd\xf4\xb0\xb5\x10\x88\x95\xe3\xa6\xf0\xafp\xea\xc5X\xcb-\xefu\x8b\xc6\xa6rUc\xa1\x12\x01X\xf4\x9b\xc0i \xdf\x7fB\xb4\xfa\x975\xda\x9d\x8a\xd5~\x80\xb8\xf9\xaa8-\x88>\x97\x92\x17\xa1B\x8d$s\xd7-\xa5\x8c\x1ew\x82+\xca\x10Di=\xa7e\xc5\xb1\xe3j\x04mp\xacE\xe2\x01;\xa1`\n\xb5w\t\xc0D\xbe\x96\x88^ \xfb\xb1g\xc2J3\x87N\xc6\xcaV\x90\xfc\xf7\x13\x82\n\xbc8\xd0\xaeH|\r*A=\xb6\xfc_\xc5\xf7\x11T\x8c>\xc6p\xcd\x97\xdc\xe9\xa7\xad\xe8:\x87Tx!F\x87\x04JhZX\xe0\xcf\xf8G\xae\x97\xfeV\xe6\x02\\F\xdd\x16\x80L\xac\x85\x82-\x02\xd1i\xa1}i\xf2b\xd0\x99\xafP\xcc\x94\n\xe7{\x04\x8c\xdf\x92}v\x8d\xeb@\',\xa1\xd7A\xfa{\xfc\xf1v\xd8T5j\xb0\x00\x92D-\xe5h\xe1;N|\xa3\xb7\'=\xb8\x18\xfa\xd7\x15>\x83\xeb\xf7\xdd=@\xf7\xc4\xdc\x8a\xa15\x1a\x07\x88\xeb\n2\x0b\x865\xc5\xb2W\x17\xfaO\xdb\x00B\xfaT\xc0\xe6\x92\xa9\x86p\xf6\xfa0\xdd\x0f3\x07\x02\x1fO\xd0_S"\xd0\xb4H\xf9\x14E\xcf\xc6G\r\x1e\xe9\xd9k\xf8\x19bi\x1az3\x82l\x7f\xaaVd\xa8\'\xe2\xe6c\x9b)\x92\xf9\x94\xd5\xcfg\\x\x9b\r:<y\xd9\xa8\xa7,\x0b\xeb\xffM\x0b\x15\xbb\x17R\x8b\xb2\xae\xfb~\x81qEB\x16\x07\xcbP\xf6\xcaqZ\xa1\x04F\r\x07\x8f;BS\xf6\r;\xe5\x04v\xea\x87\x10\x0e\xe9\xc0\xd3\x94\xb9M\xa5k\xae\x0c\xf2Y3\x19-0\xe4\x10#\xed\x8d\x9e\xe7\x81\xe2\nW\xd9\xa7\x15v\x96\\\x86\xef\xec\xbc\xdd\xf0\xc4\xdf\x1exi\x17\xf2\xd8\xc3.\xfeX\x1eE\xc7$\xb7\xe0L#\xf3\xbez\x08\x81\xd8\xf0\x8fO0_\xf1.\xa6\xc6\xc0\x13\xdc\xc0\xe1T\xd8<\x18]ao\xea\xed.hGA\x02\x03k\x18\xfbL}D\xa7\x80&3D\x11&\xb5g\xe3\xba\xacs#\x8b\x9aHl\x05\x87\x9d@\xf1\x00D\xac\xfetQ\xc7\x11\xea\xcd\xaa\x9a\xcf\xc8\x99\xbb\x85\x18\xd9\x1aOc\xe1\xa2\xbe\xab\x1f-\xf0\xb047\x17\xf7ot\xee\xc1\xb4k\xf3\x00f\x97%\xa8\xa0\xf4MEQ\xa6\x83\x07#]\x0b\xaf\xbb\xda\xee\xa7\x93TE2K\xaa\xbdD*\xa8\xf5 \x95\xdd\xbcI*\xb4,\\\xad\xb4y\xfa\xdc\x9c\xf9\xa0\x06\xadi\x9e\xfe\x9cS\r\x8d\xf1v`\xd2^\x11\x87\x7f\xd7\x86\xeeJ\xda\xf6k\x13\x82\x7f\xb5V\x1e\xac\x92\xef\xd0\xdf\x05\x98\xac{\xd5\x16\xb9\x8b\xcdIr\xc7\xbc\xf7\xb8\x14L\xfe\xf6at\x04\xb4\xf0\xc9#j8D\xec\xda\x80\x8b\xf2e\x873\x02\x1a\xfd.\x8c\x01:\xd9\xae`\xd8\xdfs\xb0\xcf<\xbe\x02)\xf7\xc7\xf9+\x1aJ\xdb\x97i\x83\x81j\xff\xcf\xda$\xd9\x1dj>\xf2\\\xb8r?2\xc2\xfe<\x8d\x01\xb1\xcaX?!\x81+c\xf4}M\x08\\\x12\x07\xe8\xcd\x11\xfe\x82\xaf\xeeZ\x1a\xb77\xa82\x90gX!\x89\xbb\xa2\xbe\xad%l\xfa\xb9\x9b\xd1\x9c\xb3P\xbd\x1a\x06\x1a*\xdbJ;t\xc7\xcd\xd6\x82\xab\xa6\xca}@\xba\x15k \xa8\xf4Gh&\x19\xd8\xac\xc2\xa5\x90C\xf4e\xea\xbf\xd2\xc0\xc9}\xcc\x92\xbe<e:8\xe2\x1e\x12\xad\xb6\xa5\x8e\xba+\x98\x8b\xd9\x0f\x15\xc7c\xf1\xfa\x0c\x82\xd9\xce-\xc7\xa4\x99d\x04\'\x88\t?5I\x8d\xd9yn\xf0\xa2\xd3\x94L\x05\xd7\xe5\xb6\x90s_\xd0R\x93r\xde\xc6\xd7\x0bi\xdd^\x10\x14}\xb9\x85Fj\x1c\xd8\xfd\xdbX\xe1\xe1\xec/\x1a8\xff\xc4#\xb6\x9c\x1a4\x0c%\t\xc1\x81\x9ff~\xaa gf\xa8R\x19\x98h\xe1\xfd\xd84M/\xd9\xceTi.*\x7f\xb2\xb3%\x0e\xaf\x15\xcc\x05 \xdcmy&\xf5\x17\x12\x16,\xa6\xc7\nC\xa9\xb6\xd8(\x9085~l\xe3\x1d\xef\x0f\xd6|\'Yc\xa7`\xd1;=\x05Q\xe7\xd6>N5\xec\x14\xcc\xd1\x1b\x0f\x19\x7f&1\x08\xe0\xbcH\xeb\xb1\xd3-Y\x89@\x15\xb59]i\x9a\xaf\x88Es~\x9f\x9dk\xb0>5MHP\xe9@0\xa2\xe0{Q\x01E\xee\x0c\x12\xb9t_\x1a\x0c*\xaf$\xb7\x12\x98I\x00\xd4\xa96_\x04\x1a\x8c\x96\x0b\x86\xb6\x1f\xf4p\xf3\xf9\xa1\x80W\xfc\xbaa\x99!\x9d\x1a\x0c\x19\xd6\xfbAl\xe6X^\xe7\x9cn\xc5jA9\xd3o\xb3\x16\'\xc6\xda\'[$g\x9e\xcf7\x86+"vy\xa7\x9d\x16u7\xea\xaf\xca\xe2\xbcP\xc8\x98\xe1\xcc(\r\xec\x1a\x96\xac\xa9\x94f!\xb2?\x9a\xa2\x18]\\cf$x{8\x19\xa4\xe5\x99@[?ap\xaf\x97\xe9\xc7\x078\x0e\xd7\x8f\xfb\xb2\xc5\xc4\xb2\x04\x1eK\x86\xb5\xc3`jt\xee\x13\xad\xb9\x94m\xde\xaaAMM\xdfWPI\xb7\x8a\xc5\x90\xdb1k\xb8\xc3Qq\x9aw\xfb\x8eN\xfa?\x14\xe5\xe9\x1aZB\'\xd6D\xeb\xf8c\x15\xd8\x0c\xfe\xdb\xf8YG8\xde\x15k\x7f6\xfdt\x80\xc0v\xa9C)\xabF\xa7\xfe\x88Q8\xd4\x18\xe7Q`i\xab\x9b\xc1\xaf\xc5\x04;\xf0Q@e\\\xb9GZ\xeeH\xa6\x80\xfd\xa1N\xaa]\xe5a\x04\xf2\x9a\nSS+\xc9\xdd\xd2n\x8f\x92;\xb2\x9f\xd7"t \x1d\xa7\xc5\t!\xc7.\xd5\xfcMU\x19\x12P\xd2\x8cn>\xaeOH_\xaee\x85\xbe\xd3f\x97\xe0h\xb6\x1a\xaa\xb5\tf\x03\x9c\x06P\xb6\x18e\x8b\xfa\xb7I\xd0\xdb\xdaLe\xe6@N\xe7P\t\xdb\x17r\xef\xd8\x19\x1c\xb9\x80\x98ij\xaa\x08\x19d\x07:\xb2\xe1m-T\xe6\xfd>\x95\xb5g|\xc00\x0e\n\xc3\x89]\x9f\x7f\xac\x96\xc1\x1d\xbb\xe4\\4\x8f\xffs\x88\xc3e\xba\xed\xe6\xafO\x9c\xcf\x13\xe0\x84-M\xc2>U\xad#\x1aV\x11m"\xe8\r\xe4\xca\xe5Cf];\x07,\x94p\x17\x94\xb3\xa1I\xc6\xc0AN\xa4\xe1\xdb\xb8V%\xdbiRF\xa2\x8d7\x9d\x87\xa5\xe7.\x821\x00+\xa5=\xc59q\xaf\xbe4\x81\xe7\\\xed@\x88-S\xe5\xb8M\xc3\xb9e\xc4Z8Pz\xe0\x00KE`\xd5\xeb\xeb\xec\xfe\xfbbu\x17\x1f\xf6\xfb\xab\x19n>l?\x06\x90\x1d\xebq\xecx\x86\x13(\x85\xa5\xa4=_+\x99\xea\x0e\x81\xe2\xe5\x83]\x8c\x80\x1a\r\xe2k\xd2]\xb6\x03\xcfH\t\xf9\x105+t3](\xc8\xe4\xc4\xeeW\xf2fa\x8at\xca\xf96\xde\x0f\xc8\xf4\xbc@\x91\xbf,\xbc\xf6\x0e\xb2\x99\x86\xa9\xfdm\xb0\x07\x92\xb1\x9c&\xee\xb03"/\x9a\xf6\x86\x08\x9e\x86-\x88X\x1a@Y\xf8\xf2\x8c\x9d1\x83#\x8b\x0ffx\xbb\xcf\xd8e\x1e(\xfe\xc3\x13a@(O\x9a\x9c\x9cl\x92\x0b\x86\x8a\xd2\xe1\x0e-\x03\x7f\x11\xd8klg\xd6\xbe\x17\x11\xe8\xfaM\x05\xfe\x1a*\x98K\x0cv\xa6\xdb\xb9{\x1e\xad\x85|\x92v\x1f\xbe\xdd\xa9K\xb9SK\x8f9\xe7D\xa9j\xbb_`L\x94kQ\xdf\xd8\xb6\xb2\xc8\xcd\x7fyZ\xc4\x95\x80\xd0\xf6\xec\xe8P]\xaeU\x06h\x9fF\n\xfe\x9b\xf1J\xbb\xa6C\x114\xac`\xef\xa9\x86\xd5\xfd\xd0\x13\xc5\xc9\xece\x19)\x8cg>\xa0u\xacUp\xfb\xc7\x99\x1ce\xf1k\'\x0c\xf4m\x9b\x9dy\x91\xbaC\xbf\x0c\xf4\xaa\x8e\xc0\xe4\x11`\xbfTj&\xe8"\xe6\xc9\x83\x11\xc9=\xcc\x1d\x8f\xae\xb2\xc2$\xe2\xae\tU-\x8d\xd5YV\xab/\xe4\xc8\xbau\xed\x92\x1c\x0b%70 |\xaf\x16 \xfe\xb3\x80\xb0\xca\x83\x99\x82i\xaf7\x0cJ2\x1b\x19\t\xec\xbb\xdc\xf8\xd76\x05\xa9\x82rQ\x81FF\xc0\x8f.-4\x9bq g\x01$\xa4\x1c2\xc4\xf6L\xed\x88\xaaE}\x15~\'2=\x1f\xc4\x84\x94T<\x0f\x89\x8d\x1d\xbbk\xd1S\xa5\xb5\x8c?;G\xc9\xabeT\xa91{_"\xb9\xa7\x9d\x0bPC\x8b")\xc8\x86\x19\xec|E3L\x9cn\xe2\x83\x0e>\xc8)T\xda\xbf\x87~\xd6\xca\xe1\xc6cFKS\x06ML\xd1\xa3\xf4!\xbf\xf1\xb8\xbe\xd9a\xd9\xcf\x15g\xa1\xe1\xe8\x10\xa3\x18\xb3\xe5#-\x8bC\x99\x0b6\xd8\xc1\xda\xc3\xc1A\x02\xd9\xa6o2\r\x88k:\xfd\xc2\xfc\x976\x14\x92<Ht\xbf\x8b^\xf5tzk\x9bJ\xf1\xf3%\x90\xfa$\x1a\x1c\x86bn{\xc4\xc0\xd6\xa3K\xba\x1c\xe1\x96\x14\xd5\xfc\x07\x9d\x1b\xfd\x16N\xf2/\xd1\xb3\xa4$\xad<\xe2\xa6c\x1f\xdc\x89\x94*\x01^*>;\xddzs\x0f]H"K\\\xacE\xff\x90\x1c\xdc\xde\xdd\xef\xe6\x05\x9a\xd5\xdc2\x94\xb7\xff\x92\x1aBE\xb1\xdc\x8f&\x9bS\xc7,U/\xf1P\x9d\\\x86V%b\x06\'\xe5\x81\xaa\x81\x03r\\\x00*\xc5\xd2a\x1fT\xbc\x8a\n\r\xd6\xf9J]JQ`7\xe7\x0f5\xc4\xe4d\x87R\xad&\xfc|\xda\x0e1%gz\xaa\x11\xe1\xad\xf2%\xe0\x83\xabH\xdc\x83\x03\xebz*\xae\xec&\x8f\xd4}\xa2\x81\xadz#\x0cT\xfb\xc3\xa9\xcc\x86|p\xceAl\xfb>t\x12\xcd\xe4\xdf\xa26\xa2D\x1a+\x11\xe8\xeb\xe2\xbf\x03\x1c\x08\xadr\xd6.@1^\xe7\x1c@\xec\x9f\x01"o9\xd8\xe2o?VX\xb2 \xc1\x1d\xeb\xfd\xfd/\x13\x9a\xd5X\x9bD\xe8\x8a\t\xa99\x97\x04,\xe0\x8d\x04\xc0\xb6e=\xa8\xb68\xa9\x12d_R(vD/\xdc0\x990b\xe2\x16\xdc\xa6Tb\x1d\x17\xa5\x12&XO\xa9\xd0\x8f\x18q\x19zp\xac\xda/\xef\xb8\x91-j\xd43\xca\x0e-k\x99]~\xf9Z%g\x00\x1b\xa7\xf9\xebU\x94\r\x89a\xc32\x86\xe0\x01\xdc=|%\x96\x9a\x8dV7\xf1\x9e\x1e9C0(|\xac%\xd5J\xbe\x06l\xbf\x0e\xdd\x16\xc7\xfc/\xbfj}\x9bk\xfb8\x90\n!\xe7\xe3_{I\xf9\ny\xd5K\xaf\x7f\r\xb4\x16\x1d\xa7@\xd5p\xc7\xd3\x905.m$\xb6\x8a\xb6\xa2m\xcb!7\x9d\xa2Dv\x10\xce\x16\x9d3"\x80\xde\x11x\xdb\x18\x03V\xe8Z\x87\xec\x8c\x17\xd5@\xaa\x9e0\x87O}\x1a\xc5Y\x88\x92\xf8\x06\xb4x\x82\xd3\x89\xef^F\x1c\xe8\x9c\x9f\x17\x90\xb2\xe6edB\xce\xc8\x9d\xc3\xd1\x89\xe0\xe6\x7f\xadR\x98t$\xfd\x18%\x0f\xd9\x1e~\x9f8\x9fR\xdfu\x82bjA\xa1Fj-\x13<\xa5\xef8\xde@\x95P\x15\xaf\x0e2\x02<\xf6:f\xb5\\F\\\x8ca\xc6\xc21\x0f\x91^W\xea7\xb5\x98\x8f\x05@\x97\x071\xe8\x0c\xd8\xdbC\x90h\xd5\x9c+\xf7!\xc35\x07\xd2\xd4`\x15\xf0l\xf5\x91k\xde4>\x9f\x11B\x1f\x9aO\x97\xb0\x0c.t\xbb\xa4\xd8B\x01<f\xe2l<\xc9W\x87\x92\xf9\xbfsoE\xec\x85\xd0\xe6`\xf9O\x8a\x83\xbf\xa9\x11\xd52P$\x8f\xb3-B\xc1\xfe-H\x84\x15.\xa4\x87\xe9D<\x00w\xb7\xfc\x08\xa8\xe4\x99e\x11\x00Y-6\xa5;+\xf3\xce\x1b\xfe\xca\xba :\x81\x85*7\x84\xc5\'\x82\xd8QL\xdb\x80\xd6\xfb1\xc8\x1d]U\x7fa\xf1\r\xc2\x13\x1e\xac\xf3q\\ 9W\xdf\xfb/3X1\xcc\xf4\xb7S\xe4\xb6\xb3\x8a`\xcb\xb5%j\xf6M[\x9a\x1b\x84\xe9\x86\xf6\x9c\xbd\x8e[\xa4Z\xaa\xe4:6\x9e6>B\xe8\x9bl9\xb5\xfb~\xa5\x0c\x80)\xb4\xd2\xd7\xef\xb9\xc3\xb2j\xb0\xb3b\xaa,\xcdP>\x02\xcaG\xd5\t\xd4\xa1\x08\x1e\xbd>c;\'\x95\x9a\xde\x18\xc4G\xb3\'\x88\t\xe8\xd9\xcc\xa3\xf8\xb7zHN\xf8"\xbf\xddo\x99\xb2_\xbc\\\xbf\x0b\x82\x94\x1b\x9d\xdf\xd5\x9d\x90\x08\xb2\xe8\x1cD{\xa4RP\xb5\xb2\x1f\xea\x9aC\\\xa89h\xbb\x98\xfa?\x00\x15\x85z\xd6\xc5O\x93\xf4[N\xbc\xbd2M\x0fW\x92\xe6\xd8\xe9\xfd\x01\xe2Gy\xaa\xceO\xe9lx\xe6\x97\x99\x93\xdc\xcf\xd7p\xbd=q\xa4\x95\xdb\x88}\x8c\x1c#eUNkfl\xc4\xd5\x86\x1b!\x8b\xb1ZX;\x11\xeb\x1d+\x1c\xe5\x89\x1a\xa16\x1d\xde\xd1\xe4\x02>\xc3`*\x98>TN\x9cr\x99,\xbb$2\xd0P\x8a\xa1\xce:\x8a\xa9\xeb\x83\xb9\xaaE\xe0\x0b\xa4\xd1\t\xa7\xe63\x18\x07\xc3b\xea\xe3\x1e\x8fDc\xf8kW\xc4\x8e\\\xc4\xf4\xd9\xefL\xf7\xca\x94av\x0e:\x0f]\xf1\x1e\x08\x1a\xcd\xad\xf7~u\xf3\xe6e\x92\x96])\xa6\x88\x97\xf2\x11j\xaad\xc7\x0c\xd4\xbcsH\xfe\x92\xa2\xea\xa1\x7f\xa59\xb0.\x93\xb6\xa2=\x02\xb5\x19g0<.X\x0f\xf6\x12\xc4j\xe3(\x16Q\xb7\xe7\xc2Y\xe3]\xd9\x11)\x9fJHBd\xf6\xdd\rSW\x07\xf9z\x10\x83\xc6k,\x93\xa7O\xe5H\x00\xb8\x0f\x8b"\x1do]\xff/\xe4\xddH\xd4\x98\xdc&F\x96\xfc\xf6 \xbf\xdc\x8d\xba\xf1\x1c\xa6=?\r\xbf\xc1\xff5n\x99\x00\x89\xd0\xe4\x96\x0f&\xa3\xf1]`[\xf1\x80Sc\x97[[3\x9b\xd6w\xcb\xcc\x8c\n\xfd4\xa5L\xfdzjv\x9c\xd0\xe7\xedQ_\n\xca\x9b{\x80\x070\xab\xf4r\xc6G\xdc*p\xbf\xd0\xd2C\x96I\xf6&\xe1r4\xbb{>4\xd7\n\xa4\xa5\x9c?5\x9aq\xce\x8f\x80,\xcc\x01\x87\x86\xfd}\xfb<\xdc!\xe4\x0b\x95B\xb1rE.\x8b\x8e?\xd5\xbf\x897\x83\xafL{r\x03\x94\x0ev\xe0\xe4t\xeeI\xd7\x13\x08\xbe\xc7\xbe\x14\xaeI\xdc\x8e\xc4\xa9\xce\xa2\x7f\xcc\t\x85\x9b\x1cwRY\x17\x86j\xae^\xab9\xa2n(\xc9\xd48v\xbc\xb4\xf9\xd9f\x95t\xaf\x8eL\xdd\xfa\x0ejF\xa7\xca\x19fI\xce)\x85\xff\xbc\xbb\n\x02)\xea6\x06\xde\x8c\x82F\x01\xcdM\x99\xfb\xde.|\x0e\xb9a\xbc\xc9\xd7pKQ=\xb6\xc2\x91yd<\x14\'{\xe6\xc1\xec\x1d\xf8\xe0\x15\x13g\xe2p\xa3\xbe\x8b\x00M\x05?\xb4%\r|\x15a\x03Z\xf6\xa4\xfb\x0f\xf8b\'\xa7\xd1;y\x82\xe8p\x8f\xa1\x15\x88\xfd1\n\xd1\x11G\xd1\xbd\xbfa\xab\xda\xac\xe4\x1c{\xc7w\x86. \xf4P\xfb\x8e\x9bv\x81Ce\x8f\xb3\x87G\xbfi\xf9o\x00.\xcb\xc6\x00g\xec\xe3z\xb11\xc4\n\xc7\xf1t3\xeb\xc8<\xbe\xe9\x99\xbbZ\xb2\xe1\xc8\xc7\xb17?~((z,y\x9cD\xac\x1cI>\x15\xd3$7\x95\xea\xeb\xcb*G\x13\xd0\xa6\xf3Eu\x85\x19\xce\x8a\x02$\xfaTPw\xe7\xf6%\x01\x9f<\x96\xe3\x8e"\xb7\xb7\xbe\xbc\x97\xb6\xf86NX\xc9$/\xcd\xc7u7L\x8aj\xf5EK`T\xa4\x87\xf2~\xabv\x04\x97\xe9U\x15$\xe7;1X\xe0F\xdc\x9bg\x81\x80\x1e\x0f\xfa&\x19\x87\xd6g/}\xa3\xc8\xc2\x12F`Q\xc3\xb5\x1c\xbe;\xfa\xdc\x86#\xca\xfc\x13\xe8\x81\xe0\xa3\xcd\xbfz\xc4\x95+P@\x17Z0}\x84oF\xbc\x8c?q\xd1:\xe4e\xa8p`.&\x83\xb4`\xb5[\xb4l\x008\x13\x8e\xaa?\x97\xed\xb4\x16\xa8l\x12\x1e\xf1\x7fUg\xbe:\x11\xacD\xbe.\xdb\x13\xdb\xb2H~\xf4{E\x80\xb3\x05\x0b\xf0\x9d\x1b]E\xc7\xb4\xe7e|x\x93\xd3`H\x0f\x02\xb3\x1bQ\xac\xaeE\xbag\x0c\xff4:\xab\xd8R\xa4x`\xb8\xc3\xf5O\x9c\x16\x1cs\xe4c\xf3\x16@\xd0\xec\xfaPZ\xc8\xee\x8f/\x8aQ\xd0\xf9 \xa6\xdcN\xc4\x93\xe4\xc1B Qb\x16\xc1\xcd\xe1\xab\xa4h\xac\xbeR\xac\x08!h\x87\xf4\xa0\xec%\xb4\x94\xa0\x1e5\x94\x9b"\xa9\x0bv/\xefU\xed\x0eE\xcf\xe5R&I\x03j\x01b\x00\x17\xa58u>RG\xd9a\x1d\x85\xf8s\xf5\x02\x10Rh\x0e\x82\x06i\x10\x87\xf7\x9b1\r\x8d\xe0C{.\xa9\xae\xa5\xb5C\xbf\x0c\xe1o\x1d \xd6\xb5\xe9\t#\x8b\x19\xed\xa3a\xafR\x17\xb0oS\x97\xc9\xae\xb97\xcc\x1dw(\x84\x99\xe6\x895\xb2fR\xd70?\xb4r\x0fl\x1c\tT\xacnj\x89Fp\xca\x85u\xfa\xcey\x15\x8d\x83d\xc9\x03\xacJq\x95%Z\xd2T\x04\xa5z`C\xa2\xac\x10\xc8\x80\xfa\x9f\xcd\x972\xc4\x8cT\xb9\xb1\xf5\xdd\xaa\xc5\x11*\xc2\xcb\xdej\x9f3\xa8\x0f\xe8$\x0f\x11\r\xc5\xcf\xecFa\xf8\x0b\xfa\xa2\x88l\xd33|\x84\xbd}@\xaa\x1d\xce\xd8|r\xf6\x9c!\xde{\xc92\xb6\xbdJ\xc5\xfd7\xa2\np\xee\xd1P]\xb2;E\xc6n\xce\xe5^\xe8\xa3\xd6\xaa>\x89!@\x84\xf8w\\\x16\xabKYj\xabG\xaf/R8(\xc0\xa9\x8b\xfa\x88\xc8\xa7\xd0\xd0\xf7ejA\t\xbb\xabf\xc1\r\xda\x063\xfb\xa1\x944.6\xac\xf7ApS\xb4\xc6\xd8xV\xe9\x03\xf3Q\xf5\xa4\x01\xe4\x80yy\xf3\x98\xe6{q\xcd\x89O ,)\xfd\xd6x"[d"\xc8\x12/\x9e\xa3\xf9\xec\x05M\x88\x97\x1e\x8d\xde\xc1\x9b\x8d\xbf\x19\x18\xc6\xd9|)\x82S\xf7\x94\x17S\xfc\x85\x07\xa4\x96\x97\xfcJ\x1d(\xa0G\xb2\x12\xaf\xf503\xee\x9f\xf3`\xbbMO\x17G\xd6\xab\xfbw~\x8c\xac\x90\xf4\xc0\xd4\xbe\xef\x14\xd9\xe6\'\x0e\x88\x95\xdf\xae\x1d t"\xc9)P\xae\xd3\x08\xb7\xcc\x7f\x84\xda3S\x81w)\x1fv\xbdQ\xf5\x925\\\x04\x9b\xc5\x95\x86\xf9$\xc4\x9b\x1cg\xf4\xde.\xd1\xf8\x9e \t3\x15V\x8b\x03\xd8"\x8f\x00\x87\x14\xe1\x92\x81\xb0\xdf\x06o` \xf9v\xcfQ1T\x9a\xb6\x07\x99\xac4^\x865\'$D\xf3"9\x1cj\x10_\xacN\xc7\x8e\xe2\xfd\xc8\xc4\xff\xa3L\xd8\xf0\xe4\xb0uL\x02DT?\xc8\x1c\x0bs\xebq\xe6\x05\xd2\x81<\xdb\xa8_\x02.\xe8\x96\xe21\x1c\xf4\x84\x92\xb6>H*Wwtb\xffNA\xb2r6j\xe1\xdd\x8e\xe2]\xc7\x0e\xad\'q\x05\'FI=(\x93:\xe0\x14\xd9K!\x93\xa3qKU\xb1\xd0\x81\x86\x81\xe0\x888D^g\xce\xc2\x8ab\x04\x179AW\x82\x01J\xed\xe5\x0fOP\xffc\x97\x9a.\xf8\xbb\x84\xa5\xcb\xe3\xe7\xd2\x15\xee\xd0\xe3\x14\x15\x84\x8e\x81\xf4}\xb6\xd6^\x9d)\xad|\x81FS\nzN\xbe\xa7\x03\xca\xe4\xd4\xab\t\xa7\xceq,?hX\x04\x8a\x11\x03]\x10\xbb\x01\x82\xeda\xa9\x8f$G\xb3\xedk$\\\xe3I\x8fvd\x94% \x8e\xe4]\xe1\xcep\xd2\xdcl\xfe\xec\xd2|\x10+\xe0\x89\x10\xd7\xd8e\xc77\x13\x12(\xc1w\xea\xad\x13)\xe3\xb1G\xc9\xbc\xb1"\xe9[3\x07\xd7\xb1T\xd6\x14\xa4\xbc\xa5\xce\xa1r\xbf\x08\xac}\xb4]\xb5\xad&j\x0c%l+!E\x8biLz\xfc\xe7\xba\xd5\x14e\xd5\xad\xcb\x17e\x1a\x99\xeeO\xa4\xdc1\xf6\xfd\x18\xc0\xb37\xa1$\x8a\xd7\xb9\xe8\xb3\x9c\x15\xee\x89>\x1e\x12\x99\x0b\xc4\xc6(\xa0\\,\x05\xb1H\x8dV\xc6bm\x87\x11\x9f$\xad\x9c;\xff\x1c\xda\x1e\xcd\x0c\x06A&,6^H\x83X\x00&%g,(\xf5\xbb\x7f\x03\xfb\x17\xe2\xd1\x83?\x1a}\x08h\xb2EjKe&}\xff\x8d\x1bm\x0eV\x99\xf2\x1a+C\x10Y>_\x08`\xad\xff\x98c\xca\x14\xc3 \x04\t\xd1u\r\x8c\xe60\xa4\xe7t4:6\x84\xef\x1c\x81]g\x0fs\x17\xe8)z\xc5\xb1G\x153\xc5\x17\x043bA\x00e\xb6Gi\xa5\x19\xeb\xbe\x14\xbf\x87\x89\xbaUv[\xbb\x96\xbe\x8e}\x10\x81&\xf6q\xcc\xee\xdd\x8e\xe1\xe7%\x17\x13%D}\xb4\r\x9dS\x1b\x13\x80\xe0\xd8\xabS}H\xcb\xe7\xeb\x97\xb1m\xeb\xa6\x0e\r\x0cX\x19\xcc_!\xc5\xfe_\x10)L;\x0e\x16}4\x97\xc5"\xfa\xfe\x8b\xc6\xf9\xba\xbb\xb7+7\xd6\x98GUj\xdaM\xbcb<\x8f\xd2\xe5\xc3\xff\x14G\x1c3\\l\xbb\x8c\x9d\xc4r\xa8\x83\x9bi\x0c\xc6\x9e\xe3\x93\xbbN\xfe\xa8nK\xd1\xe1\xfb\x01\x9f<M\x18\xe3ds\x17D\xa9\x83\xc0\x13\x98At\xb6\xbe\xca\xebVW\x167\xb5\r\xbb/\xad\x1b\x1f\xaa\xc5\xc3c\xd6\x9c\xb2%\xc5\xc5g\xf1\xdf\xf2\xba(\xf1)\xb5~)\xe2z\xb2\xd5\x04JP.}\x9c\x85\xae\xf1X\x90a\xeeT\xe0\xd4\x0e}\xb4\xad3$\xb9\xbe\xec\xf5\xa1\x0cs\x8d\x95@\x1c\xae<\xe5 \x0b\x02\xfc\x15\x93\xea\xa4\xf9\xbe\x96 \xe0_\x08\xc1Oh\xc4\xbe\x91\x06c,\xc9\xb5\x95~\xb5\xc6\xfd+\xe3\xb5\xdf\x0b\xcb\x07\xbd\x97\xe91\xf0\x80\t\xb4|ZE\xd3h\xde%\xacU`\xb9\x99\x7f\xe9\x8e\x81\xd2\x13\x17\xde\xa6r\x01U_\t\xab\xf5\xf2\xee\xe5\xebzd\xcd\x9a\x90U/4P@I\x98\x1f\xa8HOcoP\x0b6\xabU\xa9\x88\x06\x8bgf\x82\xd0S\xaa\x06\xec\xfc(\xb1\xce\xdd\x9a\x13\x06@\x97\xd5(n[\xb74\x13\xa2w\x02[\xad\xe1w,\xf0H\xbc\xa6\xfe\xe7bE\'\x88\xd8x\xfcl\x0b\xed\x13\x9f\x17F\xe1\xc5\x12z\xb4\xf0\xa4\xe1$\xc2\xb2\xdb\x8dz\xdeMB\xf3/\xd37\xee\xffp\xe2P-\xa5B\xcc\x0b\x96\xfb\xe4\xee\xb940\xb5\xf5\xd3\x01K1\xb0c9\xc9p\xef\xe6\x1fD\x92y\x06\xec;\x11\xa2Y\xe8R\xbc\xe5\x82J\xaeZ\x1d')
|
1
|
+
from hiddifypanel.models import *
|
2
|
+
from flask_babelex import gettext as _
|
3
|
+
default_ips="""
|
4
|
+
mcix.ircf.space MCI
|
5
|
+
mci.ircf.space MCI
|
6
|
+
mtn.ircf.space MTN
|
7
|
+
mtnx.ircf.space MTN
|
8
|
+
rtl.ircf.space RTL
|
9
|
+
mkh.ircf.space MKH
|
10
|
+
hwb.ircf.space HWB
|
11
|
+
ast.ircf.space AST
|
12
|
+
sht.ircf.space SHT
|
13
|
+
prs.ircf.space PRS
|
14
|
+
mbt.ircf.space MBT
|
15
|
+
ask.ircf.space ASK
|
16
|
+
rsp.ircf.space RSP
|
17
|
+
afn.ircf.space AFN
|
18
|
+
ztl.ircf.space ZTL
|
19
|
+
psm.ircf.space PSM
|
20
|
+
"""
|
21
|
+
from flask import request,flash
|
22
|
+
import maxminddb
|
23
|
+
import os
|
24
|
+
import re
|
25
|
+
import random
|
26
|
+
|
27
|
+
try:
|
28
|
+
ipasn = maxminddb.open_database('GeoLite2-ASN.mmdb') if os.path.exists('GeoLite2-ASN.mmdb') else {}
|
29
|
+
ipcountry = maxminddb.open_database('GeoLite2-Country.mmdb') if os.path.exists('GeoLite2-Country.mmdb') else {}
|
30
|
+
except Exception as e:
|
31
|
+
print("Error can not load maxminddb")
|
32
|
+
|
33
|
+
|
34
|
+
asn_map={
|
35
|
+
'58224':'MKH',
|
36
|
+
'197207':'MCI',
|
37
|
+
'12880':'ITC',
|
38
|
+
'44244':'MTN',
|
39
|
+
'57218':'RTL',
|
40
|
+
'16322':'PRS',
|
41
|
+
'56402':'HWB',
|
42
|
+
'41689':'AST',
|
43
|
+
'43754':'AST',
|
44
|
+
'31549':'SHT',
|
45
|
+
'205647':'SHT',
|
46
|
+
'50810':'MBT',
|
47
|
+
'39308':'ASK',
|
48
|
+
'205207':'RSP',
|
49
|
+
'25184':'AFR',
|
50
|
+
'394510':'ZTL',
|
51
|
+
'206065':'ZTL',
|
52
|
+
'49100':'PSM'
|
53
|
+
}
|
54
|
+
|
55
|
+
def get_asn_short_name(user_ip=None):
|
56
|
+
user_ip=user_ip or get_real_user_ip()
|
57
|
+
asnres = ipasn.get(user_ip) if ipasn else {'autonomous_system_number':'unknown'}
|
58
|
+
asn = f"{asnres.get('autonomous_system_number','unknown')}" if asnres else "unknown"
|
59
|
+
return asn_map.get(asn,"unknown")
|
60
|
+
def get_country(user_ip=None):
|
61
|
+
user_ip=user_ip or get_real_user_ip()
|
62
|
+
return (ipcountry.get(user_ip) or {}).get('country',{}).get('iso_code','unknown')
|
63
|
+
def get_real_user_ip_debug(user_ip=None):
|
64
|
+
user_ip=user_ip or get_real_user_ip()
|
65
|
+
asnres = ipasn.get(user_ip) or {}
|
66
|
+
asn = f"{asnres.get('autonomous_system_number','unknown')}" if asnres else "unknown"
|
67
|
+
asn_dscr = f"{asnres.get('autonomous_system_organization','unknown')}" if asnres else "unknown"
|
68
|
+
asn_short=get_asn_short_name(user_ip)
|
69
|
+
country=get_country(user_ip)
|
70
|
+
default=get_host_base_on_asn(default_ips,asn_short).replace(".ircf.space","")
|
71
|
+
return f'{user_ip} {country} {asn} {asn_short} {"ERROR" if asn_short=="unknown" else ""} fullname={asn_dscr} default:{default}'
|
72
|
+
|
73
|
+
def get_real_user_ip():
|
74
|
+
user_ip=request.remote_addr
|
75
|
+
for header in ['CF-Connecting-IP','ar-real-ip','X-Forwarded-For']:
|
76
|
+
if header in request.headers:
|
77
|
+
user_ip= request.headers.get(header)
|
78
|
+
break
|
79
|
+
|
80
|
+
return user_ip
|
81
|
+
|
82
|
+
def get_host_base_on_asn(ips,asn_short):
|
83
|
+
if type(ips)==str:
|
84
|
+
ips=re.split('[ \t\r\n;,]+',ips.strip())
|
85
|
+
valid_hosts=[ip for ip in ips if len(ip)>5]
|
86
|
+
|
87
|
+
if len(ips)%2 !=0 or len(valid_hosts)==0:
|
88
|
+
flash(_("Error! auto cdn ip can not be find, please contact admin."))
|
89
|
+
if len(valid_hosts)==0:return
|
90
|
+
|
91
|
+
all_hosts=[]
|
92
|
+
for i in range(0,len(ips),2):
|
93
|
+
if asn_short == ips[i+1]:
|
94
|
+
print("selected ",ips[i],ips[i+1])
|
95
|
+
all_hosts.append(ips[i])
|
96
|
+
|
97
|
+
selected= random.sample(valid_hosts,1)[0]
|
98
|
+
if len(all_hosts):
|
99
|
+
selected= random.sample(all_hosts, 1)[0]
|
100
|
+
|
101
|
+
return selected
|
102
|
+
|
103
|
+
def get_clean_ip(ips,resolve=False,default_asn=None):
|
104
|
+
if not ips:
|
105
|
+
ips=default_ips
|
106
|
+
|
107
|
+
ips=re.split('[ \t\r\n;,]+',ips.strip())
|
108
|
+
user_ip=get_real_user_ip()
|
109
|
+
asn_short = get_asn_short_name(user_ip)
|
110
|
+
country=get_country(user_ip)
|
111
|
+
print("Real user ip",get_real_user_ip_debug(), user_ip,asn_short,country)
|
112
|
+
is_morteza_format=any([format for format in asn_map.values() if format in ips])
|
113
|
+
print("IPs",ips)
|
114
|
+
if is_morteza_format:
|
115
|
+
if country.lower()!=hconfig(ConfigEnum.country) and default_asn:
|
116
|
+
asn_short=default_asn
|
117
|
+
selected_server=get_host_base_on_asn(ips, asn_short)
|
118
|
+
else:
|
119
|
+
selected_server=random.sample(ips, 1)[0]
|
120
|
+
print("selected_server",selected_server)
|
121
|
+
if resolve:
|
122
|
+
from hiddifypanel.panel import hiddify
|
123
|
+
selected_server=hiddify.get_domain_ip(selected_server) or selected_server
|
124
|
+
return selected_server
|
125
|
+
|
4
126
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
127
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
hiddifypanel/panel/cli.py
CHANGED
@@ -1,5 +1,174 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00c"\x00\x00\x12\t\x04\x00\xe4&\x95\xb9\xbe?\x9b\x1c\xa2\x1c.Eh\x11\xa0\xdc\x00\x00\x00\x00\x00\x00\x00\x00b\x8e\xc0(\xbf!_\xf0V]03\xa7$\xd6\xddv\xac7\x00.\x85Y2"\xf9\xcc\xb1\xa0\x94.C|\x8b\xca\x93\xf2dsKX@\xde\xea\xe9\x80\xe2\x07\xed\xba\x07\xfa\x13\xcf8\x92\xf3\x9f\x19N^\x8e4R\x1aB\x19y\x16P6\xd1Vj\x9a\xd4d\x15\x84\xd43#\rP\x92\x8f\xd5\r [pk\xfc!\x95\xa6\xde\xfe\xb7c[[\xde-\x82\x1cO\x9b\xc6OH\'\x95\xe0\t\x7f]\xcf5\x13\x9e\x99\x86\xd7\xb4\xfb\x12~\xb1\xf7m/V\xc0i\n>\x83Lx\x9cm\xd2T\x9c:[qiEP9\xeb\x93\xb2\x0e\xc7\xbc\xf82\xbb\xa3\xac\x1b)\x00\x04\x19\x7fvi\x9c\xf9\xe8\xc9m<c\x11M\xa4\xbagb(A\xb6\xb1\x7f\\{\\\xd1\xfc\xb1\x95\x06O\x8f\xa0\xc3\xaa\n\xdab\x89{\x08;\x17Z\x83\xdcg*\xc3\xf0\x9d\xac{\xc5\xa4\xab\xae\x9a\xffP\x1d\xado\x96\x96\xb3\xe8\xd8\x9f\x85\xb7\xf0\xdcK\xf6\xbc+\xe3F;\xd4k<BO\xd9\xac5D\x84\xd1\xd9y\xb412)\xc9u\xe6d\x07r\xb4hC\xc6\xaa(\xcd\xed\x06[\x19!\xd6,\xe9\x05\x94\xd4\xf9.\xe6D\xb4\x84\x99\xc7\xf3|:5\n/\xd2\xf9:\x9e\xa2\x91\xd8s.\xb5\xa1\x1f\x08}]\x04\xee\r\xe0\xb9\xb5Q\x8c\xc7\x1d\xeei\xe1Z]\x19\x19\xb3\xb93{\xf3\xbc\x1a-\x90\x97\x96\xfb\xb6C\rL\xaa#=|\xd4Fn\x0b\x9c1\xe0p\xe9\xdd \xae\x8b\x92\xb0\xa8)~\xafW\x88uH\x15J\x8b\xce\xea\xa7\xac\xe4\xac\x9d\xd2\x0eCV\x99\xe8\xc7\x0f\xde\xc8\x9e\x938i\'\xc4\xbd\x7f\xf7CM&i\x1a\xa0\n/Zu\x1c#\xcf\x85\xbb%\r\xb6\x90\xc3\xebV\xde\xbe\x8d\xe1\xb8$#\x85\xeds\x03\x9f-\xf5\x13\xaa/\xf3\x1c\\$\xaa-S\xe4h:\xdc\x91\xbf\xb6,\xc9\xe6_x\xe3\xf6/\xfb\x86\x1b\xd8\xf8\xa2\x06=O?$\xc8=\xd7\xc5\xee\xe56\xf0{a\xfa\xce\xa1h\xearX\xd6\xcc\xd8\xfd\xab\x8bxDN.\xd1\x1b\xce\xd4\x9b1j\xc6\xeb\x14\x98\n\xd9&)\xd9\xe6\x99\xf8\xa2\x97\x07\x05\x9e\\\xb2Z@\x1b\xcc\x14\xb8\xa16\xe8\xc8\x8er\x81\xa9\x12\x15\r\xdbh\x95\xc7\xe2\xd6(\x03\xffcU_\xfc\x80he;\xd4p\xaeD\xb8\xb3\x80\x15\xc3\xb1n\x81I\xcb\x93\x1c\x1a\xf38y\x18\xd2\xef\x87=\xf2z\xa8\xc9\xca\xc4\x8c\xa5\x9bW\xa9WgYp\xfd\x13$$\x8au\x86G\x16\x88\xbd\xac\xd8\xea\x8a\xe5\xd3yy>\xcb\xee\xef\x94\t\xdd"\xecu\xbfXG\xc3\xbf\xcf\xaf\r\x905\xbc\x02\x83h\xa0\x12\xaf\xbd\xe3\xce\xe9X\xe7U\x9e\xa1\x1a\xa7\x1f\xc8?\xeb\r\x0f\xa7qE\xd5QkH\x9b\x0fF\xdc\xb8\x82\xb4\xc5\xf8\xf4\x81\x1e\xc3\x86\xe4\xb5Wy\x93\x95W\xe8\xa6D\xe0o\xcf\x91\xe0Q\x14\xe6\xccC\xdf\xa8A\xd6\x9d>A\xaaO\xd0\x05\x17\xdf\xfa\x93\x99\xd2g\xc19\xec\xc7\xe96\'-v(r\xd3\x9bP\x9c\xb7\x9eD2A^q\xf2\x15d\x86>|\xb5D\x00\n\x83g\xf9\xe0+\x94\xa2\t2\xb5h\xda\x01Q=\xbf\r\xb2\r\x078YP\x11\x03\xc1\t\x05X\'*\x1d\xe8|\xb1$|\xef\x8b\n(|u\xec\xc2LU\x1dLFz\xc5v/s\xa8\x84U*\xc9\xa1h%v\xebl\x80\xd4\xb5\xa4g\xfa]\xcf\'\xb3E]3\x82/\xcfh\xd1\xecM\xe0\xaf\xe0o\xe0\x16\xcbf\xe4gY$]\xb1/\xa0?\x84-b\x1c@\x8a\x9c\'cj\xcd\x87O-\xc8{\xaaCEP\xe2\xc8z\xbf\xc7\x9e\x9e\xae_\\\xde\x03Px\xcd8\xcf[n\xc3\xeez\\r)EA3\x98[\r\xed\x1dTMsU\xcf\xd4\xc7\x14r\x0f\xf1\xa1\xce\xb0\xa8\xa9\xdf\x0736\x0c\xa8\x95\xc8\xe6\x87H\xce\xd98{\x82\x00V\xe6\xae\xd4\xfa<\xe8\xcb\xa8&{\xd6\xb7p\xa9`\xcfX_r\x85g\xc0D\xe0\x1ea\x8aQ\x1a\xb8\xa7\xf2\xee\x8fLY\xbe\x15\x88\x8a\xcaZ&\'\xe6>\xc0jU\x02\x0bu\x80\xe9fmW\xaf:I\x0fa\xa8\xf6\xe0E\xa2\xcd\x04\x98\x1ds\xe4\xf8\xfc/\xab\xaf\x07cd\xd6|\x81\xfd\xc5\xfaw15Ua\x90\x94\xfe\xd5\x0bJ\x15\x06\x06dO\xc1\xb6\x1f\xc2\x15\x86\xbe\xf3#P\x98\xabo\xc7\xf2\x83\xf4o\x86_O\x18=\xbcv\xdd\xfdc\xdf\x8b\xcc\xd5~[\xea\xd8L\x92\xd86\x01\xf3\r\xeb\xf6\xc3b\x9eni \xe6\xfeB\xc0)6\xeej\xbar\x81t\xa0\xa6\xae3\xcb\x8f\xf9\x15*N\xcf6X\xb07\x80\xc7\xde\xed\x05epQ\x1d\xc6\xda\xb0#v\xb6\xc4\x92\x7f\x0c\x88D\xe9\xb5\x91mP\'\xfa\xb1\x1c\xd5q\xd2\xa8rgo\x13\xb6\xfc\xd7\xb8c\xc92\x19\x7f\xdc_\x0c\x82\xd3wEx[h\x90]8\xcd\xa82\xae\xda\xf5\xe5:\xfd}\xb2\xb8?n\x0f\n\x10M\xd1\x87)\x03\x15<n\xbe%\xf2S\x03\x0c`\xc86+/\xfb\xb8\xdbx\x93\xd8O\xac\xc3\x06\x0b?\xcb\xe6l\x8a\x14\xb7KT%\xebq1\x90\x85\tc\t\xb9\xc9z\xeb3<\xc8\xba\xe3BJ_uSo\x8f\xc6A\x85\x0c\nM\xfb`\xa7\xe5P\x90\xfa\x9b\xa43\xed\nD\x8a\xf5\xf7\x01\xb9W%\xb6\x07~1\x9b\xdb\xf7,\xfa\xcf\x84\xc0\xa2\xf2\xb0\xbfg\x00\xd48R\xa5\xd2\x11c\xc4\xac\x84\x82\x80\xd8Y "He\x01{"^\xc8j()X\xacAK\xc2\x7f\x0f\xce\xe9D\x93iQ\x1f\x95\xf6zU\xf6\x84_\x01\xb8]\nv\xe59\x12\xd8\x9f\x1c\xefN\x87rL"*N\x1f\xd3\xcfa\xd0\x80\x1b\xed(E\xe3\xbfT\xc8\xe9\xc2\xdcJS\x9e\xb85\x82~\x9dFs\xce\xabpa\x01\xfcG\xbda3q\xfa\xa6\x1f\x82\x0b\x85#5\x92\x8b\x90\xf0\xbf\xad\xbf\x8cdw\x00\x97\xba\xc8\x19\x88+\xfa~\xa6\xb3\xeak\xdbjicO\xd0\xafh&\x8d\x8d\xf9\x06\xdc\xd2\x8a\x02\x8e\x8d\xd0",\xb0\xa8\xca\x13\xf8\xa5\x9f\xad\xec\xb7TR\x07\xfe\xa8E\x07\xbd\x1e\x0b\x01\xb2\xe0\xf2(\xb7g\xbeJ\x8b&?\x85\xee\x9d\x84$\x85\\\\~\xba\xde\x17\xe4\x9ef\xfb\xc6\x97r\xaf\xe9MG\x9e\xd6\xf9\xda&D\xbf\x04H\xc7\xbeZ\x15\x00\x99\x8a\x1b\x13\x84\xf3B\x18G\x84\xd8\x1a+\x97\xc8\xf6\xee3\x99\xda)\xa99/C8\x83\xe6o\x15\x8at\xf2\xf0\xd9+\xb2\xa2\xefR\x85\x84\xede\xefCE\x04\x85\xad\x97\xde\xb0\x86xH\xce\x82r\x87\rL_l\xff\xd1\x150\x8eH\x101\x02\xf3\xaa\xcc\x15\xaf|\x81e\x05\xd8z\x81T|\xf4s^\x02\xfcR\xc4\xee}\xb5\xed\xd5\xe7\xe4\xef\xe3\xcf\xf6:\xe5]H\x9eF\x87\x17:`\x15\x93*"\x18\xf9\xce\xdb\x88l\xa2\xa0\r\x13\xcf\xdar\x18=\x15\x9eZ9:\x85(g\xe9V=\xa4\x80\xe1\xf4\x11\xcd\x8c\x05\x81\xfd\x01\xadxx\xfe\x17V\xe2\x8bP\xa1\xc9Q\x0e\x0c\xb2\x11\x81Z\xad\xb8N=\x08\xdd\x1e\xb6/\xcf\xbf\x94K};\xf1\xf9\xf5\x9dc\x0c (\xa58\xd68`\x05M\xd1\xc6H\xae\x8c\xad\xa1\xcc\x0eR\x03!\x01\x9d\xdc\x80\xe1\xcc8\xcc\xcf\x1dOQ:C\xdacmjr\x8a~&b\x19\x1a\xb4:\xba\x89\x0e\xc6\x7f\x18\xab\x15W\x9eM\x900T\x02\x05\xc8\\\x10\xccT\x81>\xff\x84\x8e\x15\xe6I\x84=0q\xaf\x81![\'`\xe5%p\xd82\xe2R\x92z\x0b\xa3\x9d\xf1\xa6\xcfF\xbca\xa2\x15i\x08\xf9\xf0\x9bA\xecC\x8b\xf6\x87\xee\xd2\xd4\x0cp\xff\x10-H\x8e\xa1\xa6\\\'\xed\x1d\xf7x$K\'\x05ag\t<\t%\x00\xfc.\x03\x10f\xea%\xff&\xbc7\xac\xf5\xd9wVw5\xde\xc4m\xbc\xff\xcc\x0e\xfe\xe7\xab\xec\x92x\x0e\xa3J\xefJy\xe1\xd3\xe4P\xbd\xe2\xfd\x1b-\xfa\xf0\x11}\xe4\x95\x1e\xd1\xb7\xbe\x1a\xf91\x93r\xcc\x8d\xf2\xe1\xc5\xf9\xfe\xea1f\x85D\xb9\x12\r\xaf_\x00:i\x05\x14\xa5\x9a\xcd\t2\xe3\xcc\xa5$\x94\xccg\x1e\xdc\x92&\t\xdc\x9f\xffw\xf6\xf4oVt\x96\xe8\x0e\xd2\'\x10\xd4\xf9\xc9\x17K\xa4\xa7V \xb2({\xe8\xa3h\x87i[l\xbc\x11\xfc\x17\xd1\xbe\xee\x82(\x18\xb8\xd7\xfe\x8a/\x80\xd2\xda%\x89z\xc7GDoU\x864\xe1{\xda\xde~\xce\x93\xb9\xb7\xbf\x01\xb7I\x95\x0b\xf8a\\\x19\x0c\x01\'\xc1cf\xf6\xe78E\x0f\x80\xf2\xb5\xe0\xb6&w\xb7\x85\xb4\xdc\x94\x16\x94ibb\xb4\x9d\xb1!\xa1\xfb\x950<\x1a\xf0\xb8\xe9\x1an\x19\xe1e\x0f^\x88\x8eK\xc7<}RQ_)\xbf\xa7\x85)\xbc\xdc:\x1b\xdf\xe6\xb2s\x88\x15\xeb\xa23E6\xcc\x07\x18\xb8\xdd\x88\xe4\x830\x02\xc3x,\x94\xaa\xdb\xb1\x99\xae\x06\x97\xa8\x0f\'\x99$\xd7l1\xd5\xa3\xees\x16\x08\x85c\xff\xbd\xa8|\x82\xa6\xf3\xdc!\x00\xd9\xec\xb7D\xa9\xea\xdd\xe7q\t_D\xf7+%;\xfc\xab\x9e\xe2T7\x97\xed\xb3b\x13\xa6z|\xce\x9f\xe0U\xa2\xf1n\xf4\xed>\x8a\xeba:x\x04_a\x8d\x9a\xde\xeb46\x15\xbc\xc3\xd3\xdfV\x1d\xa6\x9c9\x11\xb7\xf5\xafL\x14\x15\xb0,*\x95h\xb6\xb7\xba?\xabM\xeb^\xa9q\x8a\x9a\xf5/YP\x9et\x18\xd5\xc9\xf3b\xddqm\x9c\xf5\x87L\xa7\x94\xcdf-P\xfe&\xdcHe\xdf\x9d}\x93\x14+\xc4\x04\x10\xe2\x06O\x7f\xcf\xc4n )\x96\xd1\xaf?Ei:h\xaa\xa3\x16-\x0bV\xd09\x9e\x1c\xe9\xf7\x13\x1b\xd3B\x91\xfe\xd6D\xe1\xd8x\x05K\xc0\x04\xa3\xe1\xf1\xf2\xd7(\xfc)e\x865#\xc69M\xbb=M\xd0\xbe\xe8;\xa6\xb3X\xf6\x04\x1f\xd9\xb4\xe3\xd93\xa3|@T\xf9;\xf7;\xca\xc5\xae\x8c\xf2D\x00\x7fZ\xd7\x0e{\x01\rEG\x02\x93\xaf$\xba\x01\xb3C\xf2\xd1\xb7\x9d:\xf0\xde\x01\x91\x1aJ\xacT\xd0\xa4R5z\xb8\xc4\xc7fr\xce\x03\xd8\xda\x9b\xd3.^\x85\x9b\xba\x1d\xac\x965-y\xd8\xe1mV\xe7#W\xd6\xcb\x82j\xe3\xc3<f\x84\x9a\x98 q\x84\x01j\xf8\xe8\xbb,\xea+\xca\xd4\x85n\xa8A\xd9\x04.\x8e\xdaLSz\xa2\x9e\xa0u\x9a\x8dm\xaf;1~\x8dN-\xcc\x14\x88\xf6\xd7=\x88\xc3i\x89HR\x004\xb1\xb75\x83\x16~b\xff\xaa\x03+\x943)\xe6\xc9\x98\xed\xbb\xfa\xfe?\xf5;\x10HA\xa2\x02V\xd8W\x9a=\xb3\xdf\xee\xbc\xbdM\x8f\x9f@\xf2\xd4X`\x86\xf3\xce\xac\xd3 \xc9\r\x90I\xc6D\x8e\xd5\xbdC\xbdg\xaa\xe1\x9b\x13Z\xb8\xaa\x8a\xd7d<\x13\xd2\xb0H\xf0\xe3/a\xdf\x81\x91;\x7fyPhV\r\x90\x16\xddvE\xf5n\xa8k\xc5\xcd\xfd\xb0\x07\xe6\x05\xc9W\xbae\xcf\xd6>\xea\xbf\x80\xe1\tw\x03\xe5\xc03\xc5@\x9d^\xf3s\n\xd1\x84\xd8\xa5\x0e\xc2!?6H\xef\xe5p\x896\xa1I\xba\x94\nk]\x87ge\xf7\xf7\xe7\x18\x99\xc4\x18\xa4\x98Y\xa60\xd8\x01\x1b\\\xca_\x05\x02\x1d\x96\x86\xe5\xe9I\xdc\xb6T\x14$m\xd9\xf7\xd0\x0c\r\xed\xbd\x02\xca\xd3\xcbC\x05\x9e\xd4\xd7\xe6Bw(\x14\x9d\x91!D\xa3,\x8f\\2\xef$R}\xe0\xfb\xe9]<wlW\xa6xe\xee\xb2\x07\xf50\xf8`X\xd9\xdam\\>\xe6\xa7\xda\xf3\xa8\x93\x88\xb9N\xf6W\xee(\x04\xb1@r\xdcs%b\xd6b(\x8a\xe5wC\x89\x87\x8b\xf6\xe2\xa3\x80]\xdam\x8a3\xb8\xfe\x15\xad\xb8-i\x83\xb3\xef,f\x02\xc36\xcdbw\xf2\xf0\xe0\xa1\xa0q\xb4\x00n\x96\xad\x9b\xd2:e\x97Dw\xfcl\x11Jy8\x92\xa8\xbf\xb8\xd4D\xe6j6\x9a\x1e/\x9d\x82J\xfeMx\xdd\xd6\x90\x92\xb1\xb5W\xfa\x1e\x11\x06\xbf\xee"\xce\xbe\x1c\xd3XMC\xe7Z\xe1\xa9\x88+|y\x05\xd0zPq\xf5\x8ew~\x88\x8a\xfe\x9baL\x9aB~\xc4\x8c\xf4\xf3\xe4\x98`R\xc9i&\x8e\xa7\xfd\x08\xdb\x14\x11k\x1d\x18\xec\x9d\xb8\xe85\xb4?\'|\x13\x0f\x9a\xadV<BJq\xce\x02c\x9d\xde#7\xdbB\xe8j\xa7\x8e\x96\xefa\xaa\xd7\xeb`\x85\xf4-\xca\xab\x05f\xb2\xe2\xe7\xd3\xd8\xb2\xed\xf1)3C\x9f?\xa6\xf9]\x8em\x15\xe5\xf5\n\xb3\x9c\x02PEN\xcf\xe3}`\x94(\x17\xa7\x82}*KY\xfc\xaa9\xc5\xed\xa8\xda Nz\xbb"\xd1\x96\xe1y\xb1\x18\xa9\x13\x07\x14\r\x8e7\xe9\xed\x99\xe2\x03h\x8a!\xd3\xd8a,Z\x88n\xb6\xc69#\xfeQ\x11y\xd0(\x83}\x02|\xf5\xba\x96\x10F\xa2p2\xd1\xaen#\xe4\xa2\x18Tk\x07\xb1\xab\xb6\x1fg+\xfa\xb6\xbe\xd6\xc7G\xc8)\x02\rl\x07}\x85[\x01>\x8ew\r\x86T0\xe9\x03\x1e\xdb<\xb5v&\x13\xa0\nQ\x17\x16\xb7\x99\xcb*-\xf9\x9c\xb2\xba1|\x92\xc0\xb0G\x8f\x88\xe6\x94\xdfp\xbf\xd6I\x0f,_\x11!\xea\x8cp\x9f\xa9G\xe1i&vS,\xdd\x1b\xd86_\xd2\x9a\x93\x80B\xc8r\x9c\xd3H\x8d\xc1\x15&P\xaaT\x1aDSLK&,.\xc8\x04\xf3)\xe7^\xacX\xd27\xa62@do+\x8d\xbd r\x9a}%BM<a\x15\xba\xec\xd0b1L\xe8\x96\x90Q\xa3,\xa1\x81?H\xb9\x9a"Z\xd2\x16\x91\xf3-M{\x0f\xdc\x8e[\xa3.\x10c\xef\xca\x89\xbd_a\xa7\x9f\\\x805\xcf\xfe\x81!\xa3\x80\xdf++\xd6\xc0B\xe0\x1a bq)\xc3J\x15\x01S\xf5\x8c\x95W,U8\xb2\xed\xe6\xee\xc8\x8a_[\xd3\xe4w\xaf\xac\xfe|a=\x13}\xc7t\\\xba\xfe(\xe0\xb5\xf4Q\xff4-\xd4\xb7\xf8\x14Q\xff7\x0c\x9b\xd5\xba\xbe\x97\xf6\'\x8c`\x84\xfaP\xbd?Ws\xde\x8f\x8e\x80?\xa9\x98\x10\xdd[:\xc1Q\xe0\x7fb\xd02<\xce\x10e\xbekJ\xf2\xd7\xf1\xf22\x8d\xb8\x0bd.\xfd\r\xc4\x1b\xc4[\x8eNt`\x9a@\xaf\x8c\xb9M\xddtJ\xc6\x03\x132p\xc2yf~\xb8\x98\x89D\x83W\x85f\xfb\x00!R\xc2r\xf9S\x0fd\xa1\x05\x8b\xecL<\xbc\xeb\xd2\x8fk\x06\xd9\xc3\xa2\x93\x9f\xcd\xc3_T\x97\xaf\xec\xe1\x94\x19/\xaffrt\xf1~&\xc8G.\xfc\xafF?\x9c\xaa"\xd3\xa9\x15 \xed\xa1\xe6,\x92#\n\xc79\x1c\xc5\x89\xaaJC0|\xae*E?\xeeM\x10\x0f\xc5\x02\x84\\\x81\xa7h\x1f!YPP+\x86\x1a\xfcc\x7f\xdd,\xe2_2\xdf*o*\x97,\x13\x07~\x107\x0czd!\x9e\xde\xe2\x11\xba\xe9\x179\xdd\xceKh\xfe;\xd5\xfd\xd1w\xca\xc4\xaeg\x9d\x7f\xbf\x82|\xad\xe0[\xed\xc2\xd29\xd6\xac>z\x00\xbb\xe4\x7f\x15@\xcf\x19\x11Hq\x90\xe6\xb6\xad\x98T\x06B\xa0bKK*]\xd3z(\xab\xfa\x7f\xce\xf4\xab-~[\xf3T\xe5\x05\xbf\xdf\xba\xa8~U6F|#K9(7\x88\x83\xfa-\xc7\xe9M)\xf1\x8e\xbe\xb5,\xc1\x14\x17D\xccO\x96\xba`\x84v)\xdcpl\xf9#%\xe8|$\xcd\x8f\xe4\rj[Q\xcf\x8f\xbc\x14\xfb\xbci\xa0\xa0\xe0\xa5r\xb6\xa9G|\xb2\x0f\xa8\x829\x17\x85\xb0\xa3\xef\x99Rz\xc0R]\x8a\x8e7\xea\xf8\x82\xf3\xba\xae\xae\xfd\x18^\xc6\xc5$\xfa\xd4\xb1;\x8e\x0e\xaeT\xb1\x1ee\xd1/-\x85\x0b[)Q?\xf7\x0c\xacx\'.\xc2z\xe3&B\x8b\xdf\n\x99E\xea\x98\xa7\xcd\x81&\x85\xe8\xd1\xf2*\xd7\xfc\xcc\x86\xcc!\xac\xdd\xb5/*\xa6\xfbA\xeag\x9aq\xd0j;\x08P^2 \xe9\x84\xc4Y\x03z}W\xd9\xcd}\x1f\xdc\xa1j\x98\xcb\x07\x83\xc6\rv\xa1\x1f\xcc\xcaP2x\xeeR\xea\n\x8d\xe7\xc0\xbe\xe2(\xf7\xd8\x00\xe5\xf0\xed\xaa\xef\xf7M9\x8a\x8a\xabI\xe1\xbd1A\xd6\x9aY\x0c\xbaB\x1c\x89\x13\xdd\xa8\x8fXR\x9f\x82\x82\x1d\tA\xd6\xdd\xc1H\x88\xb1\x08\x9fHUK\xb6\xbdi\xa7I/\xe1)\xb9\xfd\x99\x93\x81\xdf\xd0\xdf\xb4k/i_2o*O\x0b\x15\xd7\xce\xdf,\xaeE\xd0)M\xaa<\x9c6\xc2\xa3h\xd4 \xf9Gh\x97V\xd3,Z\x03\xd9\xe4/\xccD=(\xc0nE\xe9\xed\xbd\xb3>\x95\x8f\x05]O\xb8\xb8\x07U#\xb45B\x04\xc6\x8a_w\xbb\xb1]K\n\xae\x0c\xf1\n2\x91$\x99\x88\xbe\x19L\xcb\x94\xcc{\x86_\xd7g\xcd?\xd2\xf2\xc3\x0f\xc5\xc0{N\xc1\xbdr\'\xb4\r\xda\x1e\xf0\xe3o\xf8e\xda\xd4\x85c\x87\xb3\x05\x18 +\xc0\x04\xe3\xf51xUA\xbcj\xf4\x1fX\xc8\x92\x05<\x97#X\xa4\xbe\x81\x0e\xb25\xa8\xb6\xb6z\xf0\x91}\xd6\xa1Ci\\\xa0"[\xe8\x06/E\x1f\x10f\x7f-\x1b1\xc8\xe7\x94\x98Om\xc3}oRG\xdc\x0eS\xc6M$0yP\xeb\xfca\x9d\xe4\x83M\xcd\x91\xee\xe1\xf4\xd4\xc6\xe0\x0f_G\x19\xda\xaa\xeb\xd8O\x84\xe0\xf6\xfd\x99/!\x06\xaf\xbaiu{\xbdy\x86;,\x17\x8a+Fu\xad\xe2\x93{\xf2W\xac\x98^\xaf\xbfE|\x84\x08\x9b\x0c\xb3xt\x1a5\x19r\xee\xe1t\xaa\x13\xa7\xe2%a\xf1,L\x16\xbc\xf0\xd78\xa3\x91\xec\x9d\x01\xad\xe3M\x1c\xbag\xa0\x18\xf8\x97\xf9B29f\x0bAQh\xea\x82sUb\xb6\xd8W}\x82\xea\xdf\x93\xee\x9d\xd8\xae\xcf\xe2\xdcV\t\xd0q\x95\xb9JO\xddX\xd18\xa7\x94\xd4\x8ag!\xcc\xf1\xd1c\xd8V\x91\x1c\x91\x01\xf4\x86~M-Og\x14X3-)\x18+\x85\x9c\xd7\x88\x9e\xe6\x1e\xbb%pp\x9cQ\xe4\x80\xac(\xe8\xd4\xad8o\x83\xc7\xe4\xa2\x97\xb3\x9c\xcaz\xd3\x01\x0c\x9cL\xbf\xc1\xcceX\x87\x0f\xbe\x84\x961{\x97\x81Z\xdaER%\xa2\x97*\x85\xf7\x18&=q\tn\xb4\xe8~\x12vs\xb7/kw\x93\xc1\xc1\xdd\xd3\xb7{+*B\xceO\x91\xb6\t\xf9\x8cj\xfd\xaaOm\x10TCS\xa8?[|\x9cR\x89\x03\x93\x87+\xf1\x91\';)n>\xdd\x95\x18?\xda>?\xc3(\x86%\xf4\x1e\x93[\xb0\xc4\xea\xce/\xd5\x1d\xf0\x02\xad\xfa\xb3\x86n\xc1\xe3p(/\xf1a\xca1\x8e\x9c0\xb7\x0b\x8e\xe6B\'>\x8f[s\xb1\xec\x1f\x0eu\xa1(\xadu\xed\xc8\x1eK\xb0b:\x16\xaa\x0fe\xf9\xb5\xe1\x18\xdc\xdf=G\xd4J\xf7\xb8{\x00-_\xc4\xc9;\xb7l\nA\xa03$\x8c\xf6bw\x82\xbf\x99v\xeb\x80\x81\xb2#\xc1y\x19\x11\x94(\x9e\xaa\x985\x0c`?&7\x9c&\xe9m \xe3\xa9\xeb\x91E\xf1\x03?\x13\x833#\x17\xb1\x01r\xf5\xb6\xb0\x12\xb8W\xa7\xe7TD2\x83\x00\xe8\x91\xce\xa4\n]p\xac\x05\xb9\xb5G\xc8"wp\xeb\x0f\xa2\xaf\xf5C\x8a\xf6\xeb\x9e\xd7\xf9\x0b9T\xeb\xd9#\x93\x1f3\xd4\x85\xa9\xb3\ta\x85\xac\x0f\x87Y\x02|&\xde.Y\x94\xf2\x85\x97\n\xa5`i\x9a ;\xa3\tu\x07y\xadnb\x93!i\xe9@\xae\x136\xd4\x91dk\x84?\x1e!\xc0\tQ\x8aZ$\xd1P\xe5\xachBD\xfa\xf8X<h\xf4\x03\xc6J\xe1!0\xd8\xdc@\xf6"\x9aT}\x18Wz\xc9u,"\xc3VL\xb8Y1L\x8d\xc2B"\r\xdc<RapE\xb82S\x00\\E\xb9C\xd5\x83\xe2F`)3_\x13\xa1\xcbeeE\xb3\xcfa\x01B\x19\xd4C\x1b\x13\x8a\xc4\x0e\xac8"\x84\x04eA\x11\xb2$\x12\\\xf0\xb4|\x8d\xe9\x061\xda\xff\xce\x0bX\x8b\xd6\x88\x9f\x91Y\x03{\xa5?|\xf0?}\x0f+\x13\xf0X\x95R\t\xbf\xb3\xdb\xfa\xa4\xd7\xac\xab\xb5\xbf@\xb6\x0e\xad\x92,K\xe7\xc3\x13\xc4Nw1\xc7\x9b,\x12\x1e\xfb\xef\xadO\x9bA\xbfK\xe9\xa8\xca\xeds\x8b\n\xcb\xc3\x90z\xadg\xf9\xf8\xfc\xf2DB\x0bJM\xcf4\xa6`\xb7Q\x96\x8d\xe9\xafs8\x97 c\x1a\x97\x92B\xa3\x7f\x9c^\r<\xf2\x11\x1d\x1dX\x0b\x0bT\x13\x03zL\'H\x1f{m)\xa0\x9fb\xc8\xef\x97`9V\xb6\xdft\x1c\xcd\x89\xdd\xb04\x8b#\xe6\xe9\x13\xb1\x80}Np4\x18\xd5"\x8f\xc5\xd5\x7f\x01\x9d\xce%sr\x14\xb4\x07\x02\xa03\xf0\x0b\x91\x1f\xd3\xab<\xfbZ\x82q#\xb9h\x8ar\xc8\xc9k\xcd\xffI?\xc9\x9e\xc3\x83\x02\xafK\xf5!\xed\xdf)<\xc8L\x0f\tC\xca\x9b\n\xf5\xc5\x01\x879\x1bQ\xe1\x0bZ\xafq\xad\xe4\xd5\xac\xea\xee\x80\xadrk[2\xe3\x0e"\x96\xde/\x9c\xbd\x0c\xe6y\xb9 \xc0\xb8\xe5=6\xe5\xa0\x12\x944\x9c)O9\x1c\xe6>\xeer`\xab\xbblO\x84 \xb6mH\x1d\xaf\xaa^\xc5\xf5\xd5\xca\x0b\xccm\xb9#"5Q\xb8\x98Dm\x13\xe8\x1b\x1e\\\x060\xb8\x8f\x12on\x1f+\x07\xbeb\xbb\xa1\xed\x95=\xb6^\x16\xfe\xd2\x06\x8c\x1f\xf1\xba\x89O6UW\xdf5\xd0\xc3\x1cO\x10Bi[\xb0QD`\xc5d\xef\xe3\xe2\x1b\xbe\x932\xcdw#G\xaf\x15!\xb7\rR\x84\xb65\xe2\xd9\xa0\x1a4t\xc6N\xe1}CA\x81\x0e7\x92\xeap\x13\xe3\xd0.\x88\xe90\x8f\xc1\x99?\xb8\xd5o:\xf4A\xcf\xf9\xca\x85|\x8c\xb1\x03\xd1\xc1&~\xaa\xd2v_]\xa0d\xcb\x1f\xd0\n\xf4W;\xfa\xad\x1eUe!\x7f\xe7\xf9\x02\x8d\xaa\xca\xd6\xe1\xc0\xbc\xc7\xde:~<\xe5\xa4\xb1\xb5Bj\xec\x1at\x82\xa0\x0e\x0f\xf9\x9e\xe8\xd2\x8e\xa3\xf4\x10s\xc6\x91u\xd5\xcf\xf7Z\xf5\xd1\xdf\xa2.\xceZB\xc2d=:V\xd8\xc6\xc1\xadC\xdbtp,\xa8\x9f\xe5\xa4\x8b\xe7\xa5\x87\x060f\x89\xa3\xadyG\xa7y\x95_\xf9\x1aR\x99\xcf!\x11\xec\x08\xfb\x1eK\xec\xeb\xe1\x01\xcb\x91\xcfx!\x02\x1f_7\x85a\x846.\x82k\x13%\x1d}4wD\x17Gn,\xd1\x94\x13\xf9\xd4\xa1K\xfa\xac\xca\xe9\x10\x95<l\x07\xf4\xef8K\xc23/\x93\x88\x08 \xa9\xb38\xed\x961\x19|{[Z\x1fpkT:y\x03\x8f\x9e\xce\xd70\x14\xa0A\xac\xb3\xac\x82\xbcj\x8eQq\xca\xf4\xe1# \x1b\xa8$M\xde\x1c\x1c<\'\xea\x01\xc8\xc6\xdc\xe0\xeb\xc30M\xbeD\xbe\xa3\xdf\x9a\x98d\xd7w%Hi\x88\xfa\xa85\xf6.2\xa6}\x16\xf3u\xe2\xfb\xf7\x82cu&\x80\x87\xa8\x07\n\xf2S\x96\xd8\xfc\xb6\x9e\xc5\\\x0c\xfe\xca\xec`\xb28\xa8\xba&%\x98}\xd8\xfc\xf0,\x0e\xd2\xe8\x01\xdb\xdfVi\x13\\\xc6\x98J\xb3\x96\xd9b\x04\xe6\x123i\x8eZ=3\x00~b\xbeJ@\xe3\xd3\xae~K\x87\xfe\xd4h\x15?\xb1\xfc\xeb\x01\xea\xf2\xcc\x7fH\xa9\xf6\xcc\x1c\x1f2\t\x8b$X\xef\xcd\xcc\xf7\\\xfc\xc7@"\xea,;\x01(\x01\x80\xfc\x91i"\xd8\x1d1\x1b\x02\xfdNP,\x90\xc0\x92\x99\x01 \xc3r\xbft5\x9cg.\xa6\xe2?\xe4\xfa\xb0\xbf\xb3\xb3\x8f\x81\xa9\xe3p\xda\xc0\xe2u\\g}\x11I(\xdb\xaa\r\xfa\x02\x80d\rK\x1c\n\xceA5\xd3p\x88/\xb5\x02\x9c1;\xbe\xa8K:\xebC)\x90T\x9f\xca m\xa3\x088\x0c\x16\xc7\xf4/P/f\x1c\xeb\xa52G\x9c\xf9\x81v\xfe\xea_\xdd0\xb3\xdao@\xb5\x87\xa4\xa3\x94M\x04\xb2\x9a\x0e\xe7\x9d\x9c\xaf\xcc\xdc\x8bKa\x9c\xd3\xc6JH\xf0(\xd6\xbb\x1a\x82/\xc6=\xaf\xfb\xc2\xa6\x1e\xd0\xc1\x8b\xd9v\x95\xe6\xbb\x95~\xe6\xa3hJ{\xb4]\x0eD\xd0E%\x13\xd2PE\xc1\xaa7\xad"\xe3\x7f0\x80\x14i\xc0\x88\x1c\x87Z\xa79>\xd90\xd80\x01(\x02"\xbfS\xbc\x1b^\x0b\x14\xd8)-H\xd0?\x04\t;\xa9%\x85+\xadW\xaa\xf1~\x96\xdb\x87\x81H\x98\x1aU\x1b\xee\xb7\xb2V\x16_\xc7;\x1b\xd1\xe6\xe5g\xe9IR\x13\xda\xf3\x992q\'\x02\xabQa\xa7C\xb8>;\xb2\xa4y\xc9\xce.N\x9a\xd1{\x816\x99\xbd \xe2f\xb5\xd1\xf6\x1b\x00\xb1.\xcd\xa1U\xc2Q\x97i?\x82\xfa\r\xa3\xe4\x15\xeb\xfb\xa1=N\x0e\xc9x\xa4M\xc6,\x90\xeco\x9c\xa1\x08\x0c\xe1jM\n_YJ7\xc0\xb5HOIs/\xec\xe1\xa1h6\xb7V\x7f8NF\xa6\x8f#u(\x82\x16dXt\xba\xa6\xe0\xa5\xdb\xd4\xdf!\xc4|\xf6\x0eu\xe6y\x8b\xa9O\x96\x12J\xeaj\x8e\x08\x89/\xb9s9P\x8f;M\xe3FN+\x94\xfd|\xe2vT\x87n\xe9Y!\x9c\x80V\xeeE\xcfH\x9e\xbf\xec\xea\xb8\xdbS@\xbf\xaf\x1fbq\xf4\xd0\x85\x03\x90\x91\xf2\xa9!)\xf2N\xd8\xdc%]B\r gf\x1f\xadn\xe25<\xdfR\t\xe8\xffkcn\x8c\x8e\xab6\xcd}\'\xf7*\x07\x0e\x19AP\'\x07\x1e\xc1\x14C\xf7\xfb\xa1>\xda45\xd7\x85\x15\x03\xc7\xbe\xaf\x91\xa6\x93&rt\x81\xf5\xe9\xf6\x16\n\xb9)F3\xdf\xcc:\xa6\xed\xf2\x1a\xc15\x19)iqd\n\xa4\xf3\xf8d}\x95<\xd7\xa0i\x99/\xf8_$t\xa3\xb9\x05\xdc\xea\xed\xe4\x87\xea\x8c\x18\x8c\xf3\x0ev\xeb[\xef\x9e\xde\xbb\x9fh0!\xfez\xe8.\xf9\x15V\x8a\xf7\xecl\x98\xed\xf5SjV\x0b\xcaR9\x1e\x97\xec\xdc\xed\xd3\xccA|\xacw\x98\xdcV\x12\x02A\xf7\x0e\x103.\xd9K\x8a\x8d\x98\xa6\xb2\x7f\x83F\r\x8e\xdc\xdc\xb4\xbc\xc4#\xdcz\x08\xf2w\xe52\xe9\xa5\xdcT\xb8\x05\xd82\n\xb9\xf3<N\xb29\xc7\x98\x1b\xb5y\x99\xa2\x86\xde\xd6D\x0eH\xe2Y\x8b~\x91=\x84~\x83\xc1,\x0cF\x81\xe7v\x15\xe9e\xf6YG\x01\r#N\x08\x84\xdb\xee\xa6\xd4\xb8X^\x8e\xea\x88\xddv$\xd4s.\xbf!\x02e\x8d)W\x8a\x99\x06i\x9cOj\x88\xe4\xa7\x07l\x11\xc3\xf2\xf1\xb0A\x8d\r\xfb\x08\xad(\xd1\xbb\xf2\xb1B\xd5a\x0b\x88\x16"<\xfc\xa8\x1d\xbb\x1aG#\xd0\xb9\x06&\xdf^r(\xcb\x95\xa5\x8c;\x1b\x9b\x1e\xcc \xaa\xa8\x9d\r\xcb\xf75\x12i\x9e\x00x\xa2\xfe\xb5\x80\x0c\xa9\xf13\x9b\xf5\x99\xee8\x1d\xd4\xd6\x1ca\xbaR\\t\x13\xced\xc2\x83\xbf\xc5%\xdd\x9f\x84\x8ePE-\xa2\x1fI\xa1\x8c\xb7\xa2\xbb\xee\x9a\xce\x89\xdb5\xe6\xf8\xbf<\xe5\xbb\x97*\x1e\xc6\xa1\xbc\x1d^C\xb4yt\xf7\x99=\x86\xf9\xb2\x13\x9c\xd1"\xdc~=.\x88hDy\xb5\xd54\x13\xdc\xa4\xc2\xf2A\x17\x95\xb2\xd0W\x86\xf1\xa5\xec%\xee\xdcC\xe4\x9aY\xfc\x8dk1\x9d\xba#]\xa1zG\xf7\x9e\x16\xf2\x95,\x11}\xee\x7f\'\xa5\xec\xac\xb3KP>y4G\xe3\xab\x89\xcf\xabaU7%a_\xe4\x03\xba\xadCJ\xd4\x02\xec\x87\xa0K\x19g\x96\xf7\xd5\xcc\x9c\xc5"j8X\x91\xe4\r\xb2h\xcbE\xc5\xe1\xa5\xab\xff\xb9\xef\xbf}{\x8c\xfb6\xe2u\xea!dI0\x81G\xe6\x12\xbb\x93!\xce0\x13\xaa\xa1\xd8N\xdf|x\xe9\x8e\x88g\x04\xc3\xc9\x0b_\x9c\x1a\n\x15\xe4\xd1\x84_H\xb6*f\xda\xb1\x05\xef\xb2\x14\x04\x94\xb8\x96~\x10\x83\xf2\xdfB\xf7\x9d\xe2;\xbd:R\xe4\x10\x99\xden\x13\xda\xfd*\xb9%\xfd\x05\x93E\xf7\x98\x8c\xbd8\xd0\x95\x16cfIT\xe9\n\xd8R\xbc\xff\xfc\xe9,{\x87\x8e3\xac\x99\xa77\x0c2\xc9\x1d\xbaV\x94c\x8aFXdw\xb2z*\xce\xe7r\xdf5/\x8b\x97<\xbf\x1b\xf0\x82S\xb6)l?\xb3\x83\xaf\x10^\r\xe9\xb93\xd0\xb3\x0eR\xb5"s\xd3A\xfe\xc4[\x8c\x9c\x18\xfa&\xcf-\x9a&\x9b\xf7\x0eG"\xb0\xf8\x15\n\xd1\xc2\x10\xc3W\x90\xa1\xa4_\x87\x9b\x8d\xbe\xaf\x1a<\x8dr\xb0V\xe5\xf0\xae\x04\x87\xc8I*\x9f\xdd\xf1\x9e\x97i`G\x10\xd0&\xc9\xabE,\xbfX\xb5\xe5\xa5\x8d\xe5y\xa9\x82\xb6\x1e\xe7\x0c\x04\xe7\x98\x9c\xe8\xd0;r~Um\x80B\xb1\xa8%\x03\x12\x90\xf9Dc\xe8r\x8a\x16NR\xff\xcd\x99\x99\xd1\x9e\xf7\x81T\xc3\x04_4&\x9aH\xfd\xe9\xd2\x80,\xcc\x03\x0f\x1e\x02\xac\x81`i\xa0P2\xf1\x8b\xb5\xf8\xaa<d\xf4\xf5\xbaN\x1f\x1a\xdfV\x7f@\xb7 w\xb8"*\xf9\x83S\'\xea\xb9^\x9a\xfd\xd9yl\xe0\xeb[\xb5a\xe2\t\'\xcf\x8d\xac\xbfL\xfe\x01[\x94A\xb2\x06\xa7=\x1a\x1e\xca\xb3\xf2+\xcaaiT`\x17\x91(\x14Aa\x8ft\x95\x95\'\x15S\xf2\xa1\xa6\xd9)\x1f\xc0F\x93\x7f\xbdT@9\xf83El\xd5\xe9\xbd\xaf\x95m&\xa2oZ\xc5\xaf\x82\xa7\xfe7\x05\x8f\x05\xe2f]\xf88uJ~\xda\xa6\xcf\xe5\xfd\xde<\x81pL:\xd1~\xd9\xff\'\x1f("\xa8\x8d\xbeV\x9d4\x95\x8b\xb2\xcb.fF\xf3-(\x95\xd9\xceh\xae\x85Lt2\xf8Q|\x9d\xef\n\tr\x93\xe9[y\xe7\x16\xd9~<\xa7\x97\xdd7\x18\xfa\xfcp;\x820\xd2\xd8\xd6X\x9ex\xb4(91Uv\x877=K\x1an\xba2\x0c\xf4\xad\xbb\x85\x97\xc5#\x80A\xbd$amHG\x15\xcd\x11t\xc5\xaa\xbe\xf1\xb3\xa1\n\xbc\xde"\xbf~5\\e\x9d\xf0\xee\x18\xa1\xc9\xb2\x9dF\xcc\xda*\x0eu\x02x\r\xac\x00d\xb2`\x07\x88\xe1\x14\xbb\x95R u3\xbe\xa0n\xe5Q\xaa\xaf<\x9fMb\x1c\xe4\x05\x01\xa1mRt\xcb`\xdd\x07\xa9P\xddK\xfdy\xff\x1dR\xdbq\x87\x92\x11R.\x84\xdd9\x1c\x93\xdebv\x9aq\xe4\xf9U\nM\xb8\x88\x12\x0b\x0b\x1d\x15&\xbf\x1e\x9e\xbe\x07\xda\x89^\xb5\xdf\xa6*Yp\xed\x0b\x94\x06@\rm\xe6\x88O\x8a\xe1\'\x0e\x91\x90\xca\x8d9\xee\x8a M\xca}O_`\x840\x8cr^\xe5,\x02Mf\xb1q\x07\xc3e\xdb\x83\x179\xe3\xaf\xb0\x05\x82\xc8\x03P\xa9\x16\xe4\xac\xa5W\xa7u\xfa\x12\x16\x95\x02\x19OIza\xeb\xcb\x9a\x04)\xad!\xfcw\xaa\x0b:\xf2s\x13d\xde\xaal\x02\xea%\xc2R\xb0\xcd>\xe7\xaepX\xfd\xc2\xd9i\xab\xce"\x92\x9b\xa4Bx\xf7@K9\xf5\xd1\xd2\xbe\x06\xae\xdb\xcfK\x88<:\xe8\x84\xc60\xc8\xf1\xeaH>\xdd\xb3\xd2)`+GJ\xdd\xa3\x8e\x8c\xa2\x91\xd1\xc1\xa1\xfa0\xe8/i\t\xaa\xb3z\xacTQ\xb8i\xe5Tk\xdc\x08E\x15\xba\x90\x98\xfa\x17\xefx\xb7\x1d\xbf\xb2\x83mu\'\x8c\xba\xb0\xacxpER\x99\xbc\x1f\xfa\x02\x96m\x9egZ-\x91\x87\x04\xce\x1afZ\xb6\x9f;,\xbdl\n\xd1Y\xa0\x83\xe1\xee$A\xe0\xae\x94\xa9,\x81F\\\x95b68E\t\xe2\x9c\xcc\xf0\x992|ur\xb1\xc8F\x15f\xed\xb6\xbb\xa4.k\xe3\xfa\xc8\xba\xbf\x9a\x13\xf28\x90\xdb]\xf4~\x0b\xbf\x82N\xe6\xa8\xc6\tO\xf17\xa4#\xf2\xc5\xe94.c\x03\xdf\xdc&\x01\'\xc5\\\xa4\x96_5S\x8b=\xd2\x94\x047nrH\xda\x8a\x140\xbe\x9a\xf0\xec\xed\x128\xff\x9f2\xbf\xe5\x9d<\xea\xbe\tOExN5\xea\x15\x11\x9f-\x83\x85\xf0&\x0b\xd5W\x98\xca\x0f\x9eZ\xd7\x87F~[\xf8\xd43\x83X,Y\x10\xe9\x95\xf1\x9d\xeb#\xf6\x0c\xc8\xac((;V\xeb\x00\xc2\x1c\xb2\xcb\nG\xca\x7f\xbf\x97\xc7\xf8\x01\xc0\x80t\r\x94\x17{\x1dG`S\xef\x1f\x15}\xf7\x82^P \x8a(C\xb0pu\xf0\x1a\xc3\xe7g\x17\x06N\xa0\r\xcd[w\xa7n\xd3\xa3\xeeQ\xf9\x9bi\x8f\x11\x0eC\xae\x02W=\xf41B\xb5R\x91B_2pIJf\x87\xee\xde\x1c\xea\x89O\xb4\xfan\xa1\x03\x0cd\x17\x1f}H\x1bL_g]\xff\xa6\x11G\x00\xd7C\xf5A\xe0\xafQS\xb6\xe5\xaf\x16\x9b\xf1\xaa*\x12Vu\x80\x07\xeb\xa6\x98\xd5\x85\x11\x90`\xf4\xcb\x9cf\xff|\xef\x94\xfco\xd9(\x91p\x9a\x17|\xe2\xe7\x96\xb99\x96\xc218\x18\xc7oj>\xa8+\xe9{\xff>\x9f\x86:\x91@\x80k\x05\xba\x11\xb5\xf6\xc1\xa5\xa5\xdd\xa814\x0f\xfc\x14\xdfn\xd9\xc31\x86T\xd3q\xfe\xa1\xae%,\x17\xa0\x1c\x03\x89\xf8v\xe0d\xbf\xb8\xd8\xac\x8b95\'\x8e_\xde\xa8c\x89w6\xbc/V\xe4?\xeb\xa2\xff\xee{\xa5\xae\xb9\xc9\x9c\xc9\xad\xa61!\xd3\xf7\xea_}w\x87f\x82\xbb\xb3\x91[vo\x18N\x89o\x03\x80\xa2\xe2\xf1?\x16}\x9a\x05\xd3\xea\x9dR\xdb\xbb\x04\xb9\xea\x81\xcc\x8c\xa9\x93f\xbf>\xa98\xb2\x13\xa9-\xa5\x17@\xe6[\x92Z\x13\xb9>\xe9\xbd\x077\x8e\xd9W\x9fYCa:\xe2H\xa9\x1dSXJ)wv|;Q\xee\xe6e\xbcp\x90\xf4Xcbf\x0b\x98S\x97\x03\x1b\xb2m&\x86\xa3\x94\x174m$C\xfa\xfc\xf35M>]@\xcc\x84\xa3\xa3p\xd3t\x84L\xd5N\x8b\x12\xe7\x0fw\xdc\xcf\xfe)\xcd\xc3\xa7\x08\x16\x1b\x9b\xed{U\x8a\x97\xf8d\x95\xe68T\x02y\xc3\xca\xf2\xea1<Ml\xc8\xdf\xc6eM~\xc1\xe8\x88i\\\x96r\xd0f\xd4\xd9\x98y\x93\x8e\xb5\x86\xa8\xf4(I\xfa\xb3\xa4\x82&\x8e\x1b\'\xf7\xa2\x9c):\xa77V\xc4p\x85\xc9F\x8d*r$\xee\xbf\x8a\x8b\xca\xa3-\x10\x033\xcc.zb\xf5\x1a\xfd\x14\xfbG9TD\x14\x15kY\xf4\x82\x83S\x1c^Z\xef;\xfc\xdb\xf1)\xa9\xab\xe8\xd6\x19\xd2\x12\xe3`\x98(\xc1\xd1\xd8\x08+U*\x9b9\xfd\xc0\xf6}\x9b\xa3\xb1%\xa5l\x1d\xbbR\xa9~\x1f\xef\xe3\xd7Z\xba>\xafH\x0c\xae0\x1c\xac\t\xe8(nrI\xfb![0\x03\x16\x12\xdbC^@\xbc\xa9_\xb2\xdd60\r\x98\x91J\xac\x9a\x11\x98\x15w\xce\x1a\xcf\x01\xed\x9eKs6\'N\x1aO\xa8\xa3\x80\xbf\xe4D\xb8\x80~\x90\x1bxvf\xf6\x8fi%\xfd\xae\xa9\\\xb1\xdf\x0e\x82\x89 \x9c\xd5\xd5Zlk\x9d\xf4l\x1e\xcfD\xe1\x88[F\x01\x90x\x9eY.pw\x80\xb5\xc4\xd0E\x14\x18\xda\xb7\xc3S\xe1\x8b\xa4C\xe5\x94nu\xc1M\xd4\xef=~\xb7\xec\x9b\x81\xf6Q\x1a\xc6I\xae\x9c\x02\xf7\x17v\x9f\xb2V\xeb\x0f\x03\x8a{\xde\xd8h\xf9,\xf6.20\xb7S\xad\xa6\xac\\\xfe\xc0+\xbb\x03\x1e\x8c\xea\x86\xbdK\xbdv{\x03\xf6ch\xaa=1\x84\xc5.\xf0+E\xc6J\x12i\xe58kG\xa2\x06tVEe\x8d\xf1i\x01"\x04\x18\x8d\x1a\xa57\xa7*6;\xff\x1e\x17umo\xedbRl\xf9N|R\x14\x07-Z\x00\xb0\x05\xfc\xbb\xa7P\xa6\x90\x1f\xb6^\xc4\xac(}\x9b>+\xfaT^\x18H\x15\xb6\x1b\x1aK"<\xbb\xfc\x99W\x14y:\xddlT\x1b\xe1x\x07\xafnx\xaa\xb5\xf4\xc5=\x0f!L\xcakq\x83\xc6\xf3\xe9\x1e\xc9\x1e\xa4z\x1b\xbdf\x05\xbb\x1cs\xc8\x1e\xa6\xbf\n\xeeS\xb5\xafj\xc5\x95\xba\x9a\xf1\xdf\xfe@\xd5\xed\x0f\x8dP\xdc\x01,y\x13\xce\xf5\xf9#\x9a\x90\xc7\xdcbn:P^i\x14\xe8]\xc7\x9dX`\xc2\xe9\x12oJ\xb3\x9b(;\x8a\xc7"\xccO\xedtCl\xaa4\xe5\xed\x06\x16F\x08\xd5\x96\r\xa57\x1c\xb7?|W\xec\x07\xb0dI\xfc\xd0)\xaa\xf8\x80`\xd7\x96.\xaf\x88\xdb\x0eD\x9f\x9e\x7fq\xd9\xada\xd2\x1c\xdd2\x81$\xce\xf1v\x0cSS\x85\\\xc9{\x97?\xe9oE\xf5\xf2\xe9\x0c\x0c\xe3\xbc\xb36xH\xdd\x91\x0c\x91\x14g\x83\x1a\xfae\xf8\x16\xcd\r\xcd\xb8O\x9b!\x13H\x18\x01\xc3\xbc\x06\xce\xc5\xcf\xd3\xa8l\xaa2\x10\xe9R\xdc\x98\xab\x07=\x7fS\x82\xef\xb4\x15\x8cPSu\x86W\xc8\xd6\xf50\x12\xf6\xb4\\\xberB\x0e\x85\xe3\x01g\x9b-w\xfe-\xaa\xf1\xc9-\x00~P\x1f\xfb\xf1\x01]\xd7\xa6\x95\xb9\xf3\t?1g\x18s\xcb\xebeI\x8e\x1a\xf4\xa2w\x95X\xfd\xe3*i\x18\xa4\xb1\xa1H\x83W0_\xf6\xdfv\xb2n\xf1')
|
1
|
+
import click
|
2
|
+
|
3
|
+
|
4
|
+
from hiddifypanel.panel.database import db
|
5
|
+
from hiddifypanel.panel.init_db import init_db
|
6
|
+
from hiddifypanel.models import *
|
7
|
+
|
8
|
+
from hiddifypanel.panel import hiddify,usage
|
9
|
+
import random
|
10
|
+
import uuid
|
11
|
+
import urllib
|
12
|
+
import string
|
13
|
+
from dateutil import relativedelta
|
14
|
+
import datetime
|
15
|
+
|
16
|
+
def drop_db():
|
17
|
+
"""Cleans database"""
|
18
|
+
db.drop_all()
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
def backup():
|
24
|
+
dbdict=hiddify.dump_db_to_dict()
|
25
|
+
import json,os
|
26
|
+
os.makedirs('backup',exist_ok=True)
|
27
|
+
with open(f'backup/{datetime.datetime.now().strftime("%Y_%m_%d__%H_%M_%S")}.json','w') as fp:
|
28
|
+
json.dump(dbdict, fp,indent=4, sort_keys=True, default=str)
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
def all_configs():
|
33
|
+
import json
|
34
|
+
valid_users=[u.to_dict() for u in User.query.filter((User.usage_limit_GB>User.current_usage_GB)).all() if is_user_active(u)]
|
35
|
+
|
36
|
+
configs={
|
37
|
+
"users": valid_users,
|
38
|
+
"domains": [hiddify.domain_dict(u) for u in Domain.query.all() if "*" not in u.domain],
|
39
|
+
# "parent_domains": [hiddify.parent_domain_dict(u) for u in ParentDomain.query.all()],
|
40
|
+
"hconfigs": get_hconfigs()
|
41
|
+
}
|
42
|
+
for d in configs['domains']:
|
43
|
+
d['domain']=d['domain'].lower()
|
44
|
+
# del d['domain']['show_domains']
|
45
|
+
|
46
|
+
def_user=None if len(User.query.all())>1 else User.query.filter(User.name=='default').first()
|
47
|
+
domains=Domain.query.all()
|
48
|
+
sslip_domains=[d.domain for d in domains if "sslip.io" in d.domain]
|
49
|
+
|
50
|
+
configs['hconfigs']['first_setup']=def_user !=None and len(sslip_domains)>0
|
51
|
+
# configs
|
52
|
+
|
53
|
+
print(json.dumps(configs))
|
54
|
+
|
55
|
+
def update_usage():
|
56
|
+
print(usage.update_local_usage())
|
57
|
+
|
58
|
+
def test():
|
59
|
+
print(ConfigEnum("auto_update1"))
|
60
|
+
|
61
|
+
def admin_links():
|
62
|
+
proxy_path=hconfig(ConfigEnum.proxy_path)
|
63
|
+
admin_secret=hconfig(ConfigEnum.admin_secret)
|
64
|
+
server_ip=hiddify.get_ip(4)
|
65
|
+
admin_links=f"Not Secure:\n http://{server_ip}/{proxy_path}/{admin_secret}/admin/\n"
|
66
|
+
domains=get_panel_domains()
|
67
|
+
admin_links+=f"Secure:\n"
|
68
|
+
# domains=[*domains,f'{server_ip}.sslip.io']
|
69
|
+
for d in domains:
|
70
|
+
admin_links+=f" https://{d.domain}/{proxy_path}/{admin_secret}/admin/\n"
|
71
|
+
|
72
|
+
print(admin_links)
|
73
|
+
def admin_path():
|
74
|
+
proxy_path=hconfig(ConfigEnum.proxy_path)
|
75
|
+
admin_secret=hconfig(ConfigEnum.admin_secret)
|
76
|
+
print(f"/{proxy_path}/{admin_secret}/admin/")
|
77
|
+
|
78
|
+
def init_app(app):
|
79
|
+
# add multiple commands in a bulk
|
80
|
+
#print(app.config['SQLALCHEMY_DATABASE_URI'] )
|
81
|
+
for command in [init_db, drop_db, all_configs,update_usage,test,admin_links,admin_path,backup]:
|
82
|
+
app.cli.add_command(app.cli.command()(command))
|
83
|
+
|
84
|
+
@app.cli.command()
|
85
|
+
@click.option("--domain", "-d")
|
86
|
+
def add_domain(domain):
|
87
|
+
table= ParentDomain if hconfig(ConfigEnum.is_parent) else Domain
|
88
|
+
|
89
|
+
if table.query.filter(table.domain==domain).first():
|
90
|
+
return "Domain already exist."
|
91
|
+
d=table(domain=domain)
|
92
|
+
if not hconfig(ConfigEnum.is_parent):
|
93
|
+
d.mode=DomainType.direct
|
94
|
+
db.session.add(d)
|
95
|
+
db.session.commit()
|
96
|
+
return "success"
|
97
|
+
|
98
|
+
@app.cli.command()
|
99
|
+
@click.option("--admin_secret", "-a")
|
100
|
+
def set_admin_secret(admin_secret):
|
101
|
+
StrConfig.query.filter(StrConfig.key == ConfigEnum.admin_secret).update({'value': admin_secret})
|
102
|
+
db.session.commit()
|
103
|
+
return "success"
|
104
|
+
|
105
|
+
@app.cli.command()
|
106
|
+
@click.option("--key", "-k")
|
107
|
+
@click.option("--val", "-v")
|
108
|
+
def set_setting(key,val):
|
109
|
+
old_hconfigs=get_hconfigs()
|
110
|
+
hiddify.add_or_update_config(key=key,value=val)
|
111
|
+
|
112
|
+
return "success"
|
113
|
+
|
114
|
+
@app.cli.command()
|
115
|
+
@click.option("--config", "-c")
|
116
|
+
def import_config(config):
|
117
|
+
next10year = datetime.date.today() + relativedelta.relativedelta(years=10)
|
118
|
+
data=[]
|
119
|
+
if "USER_SECRET" in config:
|
120
|
+
secrets=config["USER_SECRET"].split(";")
|
121
|
+
for i,s in enumerate(secrets):
|
122
|
+
data.append(User(name=f"default {i}",uuid=uuid.UUID(s),usage_limit_GB=9000,package_days=3650))
|
123
|
+
|
124
|
+
if "MAIN_DOMAIN" in config:
|
125
|
+
domains=config["MAIN_DOMAIN"].split(";")
|
126
|
+
for i,d in enumerate(domains):
|
127
|
+
if not Domain.query.filter(Domain.domain==d).first():
|
128
|
+
data.append(Domain(domain=d,mode=DomainType.direct),)
|
129
|
+
|
130
|
+
strmap={
|
131
|
+
"TELEGRAM_FAKE_TLS_DOMAIN": ConfigEnum.telegram_fakedomain,
|
132
|
+
"TELEGRAM_SECRET":ConfigEnum.shared_secret,
|
133
|
+
"SS_FAKE_TLS_DOMAIN":ConfigEnum.ssfaketls_fakedomain,
|
134
|
+
"FAKE_CDN_DOMAIN":ConfigEnum.domain_fronting_domain,
|
135
|
+
"BASE_PROXY_PATH":ConfigEnum.proxy_path,
|
136
|
+
"ADMIN_SECRET":ConfigEnum.admin_secret,
|
137
|
+
"TELEGRAM_AD_TAG":ConfigEnum.telegram_adtag
|
138
|
+
}
|
139
|
+
boolmap={
|
140
|
+
"ENABLE_SS":ConfigEnum.ssfaketls_enable,
|
141
|
+
"ENABLE_TELEGRAM":ConfigEnum.telegram_enable,
|
142
|
+
"ENABLE_VMESS":ConfigEnum.vmess_enable,
|
143
|
+
# "ENABLE_MONITORING":ConfigEnum.ssfaketls_enable,
|
144
|
+
"ENABLE_FIREWALL":ConfigEnum.firewall,
|
145
|
+
"ENABLE_NETDATA":ConfigEnum.netdata,
|
146
|
+
"ENABLE_HTTP_PROXY":ConfigEnum.http_proxy_enable,
|
147
|
+
"ALLOW_ALL_SNI_TO_USE_PROXY":ConfigEnum.allow_invalid_sni,
|
148
|
+
"ENABLE_AUTO_UPDATE":ConfigEnum.auto_update,
|
149
|
+
"ENABLE_SPEED_TEST":ConfigEnum.speed_test,
|
150
|
+
"BLOCK_IR_SITES":ConfigEnum.block_iran_sites,
|
151
|
+
"ONLY_IPV4":ConfigEnum.only_ipv4
|
152
|
+
}
|
153
|
+
|
154
|
+
for k in config:
|
155
|
+
if k in strmap:
|
156
|
+
if hconfig(strmap[k]) is None:
|
157
|
+
data.append(StrConfig(key=strmap[k],value=config[k]))
|
158
|
+
else:
|
159
|
+
StrConfig.query.filter(StrConfig.key==strmap[k]).update({
|
160
|
+
'value':config[k]
|
161
|
+
})
|
162
|
+
if k in boolmap:
|
163
|
+
if hconfig(boolmap[k]) is None:
|
164
|
+
data.append(BoolConfig(key=boolmap[k],value=config[k]))
|
165
|
+
else:
|
166
|
+
BoolConfig.query.filter(BoolConfig.key==strmap[k]).update({
|
167
|
+
'value':config[k]
|
168
|
+
})
|
169
|
+
if len(data):
|
170
|
+
db.session.bulk_save_objects(data)
|
171
|
+
db.session.commit()
|
172
|
+
|
4
173
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
174
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,60 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x14\x0f\x00\x00\x12\t\x04\x00\xaa\x9eJ<P\xc5\xe69\x1f\',I\x04\x85\xd0\x80\x00\x00\x00\x00\x00\x00\x00\x00\x88<\xf4Sm8\xce\xc2\x0bZ\xfa\xe9\xf7\x97\xa5\x883\x15\xa4\xbe-q\x1b\'z\xf7^`\xdfqul_4\n\x1f8\xae\xe6Z\x7f\x1b\xa7\x02?\x92~\x84\xdb1\x9f\x9d\xfd\x1cdGnZR\\y\x82\xc5\xbc-\xac^\x1f\x8b{\x1f\x9c4\xe0\xb5B\xee^-\xcd\x95\xc8W\xca%)6BC\xe0%\x8f\xea\xac\x8a\xcf\xebE4A\x18<\x0b\xfc\x86\xb2\xce\xe9Z\x83|\x93\xa2\xad\xc4\x9b\x15\xa6\xbe\xe7<*\xcb\x1c\x81\xc9\xc7\x96\xd8T*\x92T\x04\x04_)y]\xb2\x17\xa9\xac\xff\x0e\x99K\xbf\xba%\n\\\x1d\xb2^\x8a\x10\xb0:V\xeb\xf9\'\xad+j\x072\xf7#\xa5\\\xadQ/-L\x83\xea`-\x88\xc3\x86Y\xc7\xdd\x17}&m\xbe\r\x8d\xe7\xdb\xab\x15\xb6Hz9<\xe3\x82G\x1e\xba\x94\x8c\x8c\xac\xda\xc2\xfb\x05\x8b\x10\x1f\xed\xabk\x9fl\xfaW\x85\xdb~\x89R\xde\xe9\xf8>"\xd4u8\x0c\xe4a\x98\x14\x14\x85\xf9W\xb5\x84\xc9\x0c^I\x9c\xea\xdb5\xa3\'u\xcbb\xc4X"\xcd\x14\x9c\x8fy\x94\xd8s\x90\x85\xb6h\x92\xe6\x14\xd3t\x199~\xd2$"\x94t\xe8\x9a\xfcj\xc5\xf9\xb0\xca\xab\xa5\xb5\x96B\xe2\x1d\xdf\xec\xec\xa7\xfc\xcb\xa7R\xacS\xf4\xd1\xe0\x18%\x99s\x91\x86\xb5\xcfI\x86\xb42\x1d&\x88\x85+k|.G\xa5\xb0H\xfa-\x06\x87\xc65\xa6h{\xc8\x0c(\x15\x90oT\xedR\xb8\xd7\x8a \xe9#\n\x13\x1188\x06j\x87 \xd8\r8\x89\x9ax[\xde\x1f\xdb7\x16\xff\x9a\xa0\x1e\xc5d\xfc&zw\xcb\xc9\xd0\x04\x8a\x9d\x9d\xa6\x86\xd2\xf4l\x90\x03\xb6T\xa7\xa4?h\xd8\xc3\xe9\xd0Z\x85?^\xeb\\R\x87\xb3\xbc\xedf\x11W\x12\xcf$\x1ci8\xbcr\xa4\xaa\xe1%I;\x97o3\x1fBI\x7f\x9f\xe0^zO\xe1C\xe6\xb7\xb1\x16>\xfcj}\xe9No\xfd\x1d\x87\xd9\x82\xe5\xd6k\x07\xa6\xfb\n&\xcbL\xa3\\\x8e\x80\xe4\xac<\xf4\r\xdc})\x00\xc0m)\xb78\x9c2\xb6&\rMXT\xe3\xb6E\xbb\x84I\\\xa8x\xb3\xdf\xa4Hn\x92\x05cb\xdfIw\x80\x13\xf3)\'\x86a\xba\xfa[\xf1j\x8a\xc2\xd1\x18\r\xff.\xe1$\xd0\xcf\x03z3\xf8\x15\xf9B\xba\xa6\x11\x10\xd4\xed\xe4\x9dZ\xbd\x0c\xe0\x05/\xad\x8b^\x1c\xec\xac2Lo\xa2\xbc\x18\xd5:\x9b\xb70V\x99\xb5\xd0\x93\xbf,\x9b\xae\xbe\xaa0~\xa1\xdcB\x83LY\x90\x87\x0f\xda\xce\x91\xd1\x8c\\P\x02\xef\xb5_,B\x0c\xc3M\xc1\x16w\xe5B\xc7\x11^\x1cMF\xafVL\xec\xb4]\xddS\xcf\xa9\xea\x7fL\xe1/#\xb4\x80xm}3{\xca>\x9c\xff\x10\xd8\x86\x95h/^\x1a\x16\x8d\x84!#\x10ZE\x01\xc3\x9b<|\r\x02}\rB\x0e\xcfz\xe1"\xff\xfcI\xa5\x7f-\xd5\x94I5\x80\x96\x0cR\xcd\xf8{\xfa)`\x94@LZ5b\x8b\xd3\x181\xbe\x97\x05,\x0f\x80\x15\xe9f\xf7\x91))\xa6\xedi\xd31\xeb\xb1\x8fK\xba\xc3\x85n\x91\x84|\xf5\\{w\xd9\x8d\x7f\x0c\xa0\x99*g\x88\x15\xc6\xf4r\xcc\x84V\xce\x15SN5\xf1)4\x8a\x1f\x08N\xfd\xf9u\x04|+\xbdPa\x8d4\x14\t\x8f\xeaM\xa0+\x99\n\x93\xee\\\xab\x1f\xeb;i\xc9\xcd\xd0\x06Z+\x91\xbb\x12\xba\xba#:\xf1\xbe\xad\x03m\xadd]\xc1[\xc2\xf6\xa2\xea\xcb\xda\xbbT,\xb9m6\xbd\xf0\xd1\xa9#\xef_\x96n\xf2\x9e\x02Vaf\x94\xea=\xf8iO\xf8\xab)\x12\x85\'\xbd}M0\xdb\xe4\x05|\xb4\x8d{\x1dUaj\x9f\'\x80D\xb0\xff\x82\x99\xe5\xf1ag\x14\xe8\xe8\x1a4O\x02y\xdd\xc7\'\xa7\xe6\xee\x1f\x82\x87V\xee\x0c\nj\x8bH\xac\xd2\xdf\x8b\xb4\xe4\xf8\xce\x96\xdb\xec\x85\xea0\x96}\xfce\x80\xec0\x12\x90\xd3\xb7O\xe8\x84\xbcu\xfb\x0ca\\\xb3\x0c\xe1me\xf5\xb9\x9b\xc7\x1f<\xad\xf4KG]\xd8\xea\\L\x9f\x94H\xa7\xb8\xd7\x9a\xc1W\xc5\xcb:\x82\x12\xda\xe7\xbb\x11$\xde\x05s\xef2\xf7:A\xdaa3\xa1a[7\xd9d\x122+\xea\xef\xa8\xc7W0\xeb\xef\x16\x18\'\xd5^\xc2j\xb9;\xae\x1f\x89\xf1\t\n\xca\xce\x99\x85\x92\x11J\xf3\xda\xcf1\xdf\x84\xd3\xba\x1a\xf9\xc3\x03~\xce\xa8\xfc\x9d\x961.\x83\xaehQ}\xccb\xcf~\xf0J\nT\x86\x10\xb6\x05\xc2\xdd\x9fZ\x1d`*}\xa4\xafN\x83W{\x84\xe8?AG\x86\xfa;\xf2L\x92")\x1a X\xee\xf7\xa4\x00E\x8eS}\nS\x87\xca\xb5\xeb\xb2\x16\xd0\xf7]\x8d\xb5\xf3\xd0nXO#\xc8\xb9`\x9aE\x15E\xd5\n\xa3\x0b#\x9a`O\xf38\xfc$3+\xeds\x91\xefq0\x1a\x0e\x02\x81\xcc\xa6\xca\xd2\x95\x03,q\xfdpy\xda\x8b\xeb\xc0U7h\x183}U\xda\x0f\x8a\xfd\x8b\x9d\x03w\x02v[7\xcd1\xa0\xc1\xfe\x1f2\xaf\x0c\x90\x18\xd0\x00\x0e\x08\x8e}!<%\x9a\xeb\xdf6C\x9ba\xf9&\xb1\x9eym\x1c%7\xcaO\x90z\xabR<\'Vb\x85\x96\xff\xcb\x08C\xae\x83\xfdB[\xed\xad"\x82Z\x0f\x00$$NJ*i%\xa7\xb65\xf8\xc5\x03\x908\xf5\xa7i`\xa1\xfe\xf6\xbeD>m\xd7R\x07\xb4$^\xde\x03\x8363r\x03<,\x95#\xa7\xbf\xac)\xef>V\x9b\xc0j\xe1\xd3\xa3\xf7\x8f\xefn\xf0\xdb\x8c\xc8x\x1c\x8a\xd8\tb\x16\xc8\xbc\xa0<\x9by\xb6\xc15GOS\x9f\xc2M\x9eL\xe0\x05\xd2A\x80j\x9bH\xd7\x9d\xaf\xac\xe9Rx\xb0\xfeQR\x00,UU\xa5v\xbas\xdf\xc6\xd6L\xf6\xd5O\x8de\x94\xed\xc2G4c2\x7f\x8b\xa0\x9c\xf6\xe3\x91\xec>xD\x86\x13w\xa7.\x83\xa0\nVb/Ey\xa8xg\xf3\xb9\x13\xbb<i\xce\x0e\x8d\x91\x9d\x88\xb3\xaa\x1c\'s\xca&\xd5\xb8\x0f\x83\t_\xcd\xf5\xfcK\x1d<Po\xf6\xc4\xb0\x13\xf4\x8d\xcd]\xf5\xfa\x90\x1b$(\xa8\x9dy\xb3\xca\xe2\xfa|\xd2r\xc3\xf1\xa4\x16\xe3O=J\x823\xb9\x91\xc8sd\x85O\x01\xf4\xbb\x8e\xb9y\x07\x92\x8c\xc0\x19\x91\xb1Y^\xcb\xef\xc4\xbe\xb0\xc61\x12\xb7k\x91c52%\xd7\x14\x91\xc0\x07\xae\tE\xaf\x8eL<\x8e\xde3s\xed]``\xc3\xdc\xb2j\xdb\x82\xf7\x85\xb9\x82\x1f\x98pc4|\xf6\x11J%\xacO\xa3\x00\xce\xc0\x81\xf0\xfbQ\xda\xcf\xdd\xdb,A\xc2b\xfc\xa8E\xed\xad\xfe\xc8u\xeb\t\xfc\x15\xacP\xce(\xa2\xe5RU\x08\xf0\xce\x19m\x8f\xef@\xc1\x04\xcb\xd8[S\xd4\x0b\xf7pf\xb2;\xaa:\xcf\x0cq\x93B\xa0oN\xff\x9b\x99.\xb3\xff\xec0ng\xe6\xc5c_\x86\xb0@\xe6\xece\x9f\xa2\x86f4\xfe\xb2\xf7%\xda\xf4%\xfd\x83\xbe\xf6&\xdd\x1d:rr\\UN\xe4dWr;\'u\x8d\x81Q\x13\xb2\x91)\xc0\x88\xa31\x85\xc6"\x9cX\x10s\nz\xbd\x96\x9f\x7f\xa8\x12I\xdb<\xd4\x8c\x8a|\xaa\xcb\xc1b\x12\x8a\'\xd6"\xbbC\x13\xbf\xc6B^\x92\x1f\xb4\x8a\xe3\xbbO\xe4\xd0\x9a\x92\xd4\x88m\xf6~\xf1\x1cJ\xea\xa8\xf4\xa0\x98\xc6\xb6?\x92\x7f|\xa9\xbe\x06\x83\xddp\xa1\xd4(\xfd\xc8\x81\xb5\xf4\x9b]A\xb3\x02\xd3G\xc3\xc7\xbay\xd4\x8b\x0c\x85\x0f\xbc\xf20aY@l~"\x0e\xef\x0e\xc1\xd1\xcc`)\xac1#\xc4\x89v\x93(\xe6\xa1\xc2\xbd\x12\xa6?g\xd9\x0c\xe6Vh$\xc3K\x93\xf3\x94\xf6\xb7\x8c_\xd3\t\x06Z\xb9A\xea\x12\xd6\x18&uR\xad\xb1\xe3\x0b\xfc{\xc6}`\xd4@i\xa9\xbdU\xed\x11e\xdfy\x9b\xd3*\xa9g\x17\xfb%\\\xf0\x08\x1f\t\xbb\xb2R\xfa\r\xc2=\xe0\x90\x8e|I\x142)]\xc8\x8b7\xbd\xcd\\\x8a-\xc0\x13\xe6\xd02\xfb\xf8\xc7\xdc\xca5\xc0\xca[\x14\x15\xe3\x12\x0b\x04\xec&\xb8\r\x03\xc1\x89x\xca.Z\x1a\xac\xcd\x88\x9a\xaeF\xba\xa6y(\x13\x91\x05-V\xb8\xe8\x14\xa5\xfd53[\x0e0\xf2g\xd0g\x80\xdf\x8d\xd1\xa8\x96\x0e\xd6\xe8*\x85\x13i\xd1\xc5\rL{\x85U\x0f\x80\xccm\xf5\xa1\x84N\xa3?3l\xb3\xab\xd5\x84\xe2^BD\xc7@\x8e\xae\xe6\x1d\xad\xe45\x16B\xf6\xb4K\x86S)\xd7\xbb\x1bJ\xeaD6\xdd\xa2\x8f\x03!p\x11M\x03\xb2=7\xf4\xd7\x80X\xd56\x87\x80\xe8y\xfbco^\xecb8\x97\xbbj\x0f\xf0k\x87o\x8f\xe4c\x0fg!\xbb.\x14WgA=\x03\xa5\x0b\x1dt\xef\xc3\x1b\x10\xa5}\xe4\xe5\xcd\xea\xaa\xcb\xd0u\xaa\xa0\x9a\x8d\\\x9d\x89d\x93\xda\xcb\xb8\xd3\xc0\xf6\x1b\x14\xd6m\xeb\xd2\xa3\xb9\xa2xS\xc2\xa3B\xc1\xe4\x86yV\r/\x8a\xe9;\xf9l\xc3B\x0e\xbb\xa1\x1a\xa8\xd0\x15\xe0h\xce\x17\xf1\xf5n\xa9\xdd\xa9\x12\xbb7P\x12ax\x1e\xfev\x18H\xe9\xec\x06\x92\xa7zJ0\x1d\xc7dl\xad\x83\x909\xf62\xa7<\xe2\xe1\xaajmM\xb44\x06\xb9/\xb1m\xf3Y\xf7\x0c\x01m\xc4\xb7J\xb3\x02t\r\x16r\tl\x94\xc2\x18b\xb4\x87a\x9a\xb6\xcc\xf3\xbc\x9e\xa3\xe6\xaa\x88F\x96\xef\xb7\xf4\x99Eg\xfc\x98\x15\r\x8d)g0\xb0\xfe\xedXgfCo\xf9\x85\xe6 \x8f\xd1O\xe2\xfd\xc2pUe\xe8\x84\xd6\xaa\xf6"g\xee\x1fa\\\xe8\xbe|O\x97\xfb\x88\x15NwB\xa7Q\x14\x94\xb54\x86/\xa5\xfd\xb0a\xd6\xd3\xea+\xe6\xd2q\x85\x80DK\x9a\xce\xcah!\xaa\x9d^[Y\xd5\x00\xeb\xcf\rC\xbeFV6g\xf1\x00\xa9\x9f\xe9\xd7\x0f\xd1\xcbS?\xdbSl:\xaa\xc4\xc59\xff\xe9\x07\xc4\x87\x84\x84\xcd\xb8\xec,O\xb17\x81{gc\x177C\xf6v\xa9\xff\xf2\xea\xb4U9M\xc9BGR\x99\x9fy3\x00\xf20\xd8^\xa1\x9a1@9md\xb7H\xe6\xd0\x98\x03\xc35\xeb\xce\x1a\x95+\xb2<i\tY\x872\xfdq1R\xbemm\xc8!\x97g\xeaW\xe1)J\xdc\xdb\x18\xa9\xe2}\'\xebRH_\xdb\xd9\x10h"\x80g\x8a\x82\xe7\x0c\xce\xa1\xe46\x9d\xc6\xaf\t\xe4GXB(i\xb5\xdcc\xb7\xa8\xc5\xc1\xf7\xa7u\x1b\xd5\x14\x89Z^\xe3\x08;\x1al\xbd\x1c\x9d\xd5\xf2m\x08Q\xc3\xc4\r\xf2\xa2C\x1c\xf2#\xf2\x9f\xb2\xdb\x1ah%\xb3@\t\xd6|\xcf\xa9\x13\x02\xa9\xe4,\xb3\x95\xe0\xac\x83\xd3\x00\xb8\x7f\xcc\xbf\'\xdb\x8c\xa1E\x91\x7fQ\x9f\x0e\xfeg\xa4\x02Gx2\xe1C\xce\x87\xe8oz\xb4r,\xbbj\x92u\\\x1f\xdb#<+\xf1\xb1\xe5\xf7k\xb2v\xbf\xfc8\xb8?\xc3\'\xbf\xeb\x19k\xca_\xa7E\x8b\xa3\xf4o\xd2\x8e\x8a\x99uF\xb4\xae\xa7a|r\x13\xb1\xbc\x1c\x1c\xfbO\x1a$^\xad$x\x19\xb6rw3\xe1\x1cD\xa4\xca1o\x82\x8e\xe94\xa2\xb5\xb6^v\xe4\x0f\xa5\x8e\xa4\xad\xd7\xa1\xa0\x9c\x92\xb8e[\xe3\xed{5\x06\xf5u\xc6\xda\xd7D\x89\x03\x03\x0c\xe2\xf7\xaf~\x1e\x0f\xfbr\xa1\xf97\xb6"G\xdc\x8az(h\x8b\x16o\xcaf\xf8\xfc+>5\x9av\xe7(jp\x9e\x9b\xfb\xd5\x0f\xf9\x00\xe7\xd2W\x0e:<\xa2\x88\x82[\xf80m\x1d( \xd0c\xf4\x90\r\xc3\x12\x01S\xa5\xc7\xc0\xe8%\xcdD\xd2\xf4\x99\xca\xb2\xd7\x8d\xed\xdchL#\xc1\tyU\x04\xfeRk\x97\xba&\x01,3 \x91\xc7t\x89\xe3\'U\xdd\x190\xe33K\x120=\xca\xaf\xe4\xb2\xe3\x8a\xee+n6\xb2\xfd\xa7\xd7\r\xfb2Y\xde\xa8\xebX\x05\xbb\xef\x82\xb00\xfb\xabZ\xbe\x19.\x1a3\xe9#\xfe\xa2\xccMm\x847\xb3\x96\xb0\xb5\xe4\xbe<)\xc7\x17\xf3m\xa0\xcd\x01N\x0e_\x8dQ\x91?\x18{\xa5\xeb\xf4\xd7u/\x00\xb4\xfdx/\xf1\xf8\xe2\x1bN\xc2\xa0\xc0O\xef<\xed_\x89lg~\xb5\xe2\x8b<@\xf3c\xb3\x86\xa4\xfc\x071a;\x88\x12\xab\x89\xb4\xf7\xdd\xb1w\xe6\xaf\x00\xc6\xa1\xaf}\x06\x1a\x83\x9b\x06\x90\xf2\xddc\xdd\x97\xaai\x9c\x05\xa4\t\x86\xd4\xdeo\xb4m\x7fM\xe3\xbb\xe1`\xf7%0tzt\x01X\xec\xba\x1f,0p\\w\x94\x8c\x88\x026\xbb\xd0\xb7\x8d\x8b\xa2\x03\xa3\x080\x99G\x81 \x93\xbe}\xb8\x9b\x1cS\xe4\xb54\x060\xc6\xdd\x96\xb5\xa5>\x8cCi\'\xd9B\xa11C\xa9\x8f\xfd\xa5QC\x9c\xe7\x06\x05\xf0\xf0\xc4\xe2\xf3\x82\x0c\xd6Z\xea6\xca\x143a\xbe\xc6\xa9\xdf\x7f\xc3\xb6\xceO;\x9b#\xd35\x98\x8c\xe6-\xbbc\xd7\n_\x99\x9e\x957\x15D\x04t\x85\xbbz\xd0K\xf1P\x97 \xc1"\xd3\xebiJux\xc5\xcb8\xfe-\xd6 \x1e\x0b9+\xde\xdb\x0f\x99!\xd7\xb2\xfb\x11\xc3Da\x90\xad3\x1eC\x98\'b\'\xd8WA\x87\xd0\x0b\xf5_\xd7l\xc6\xd0 ~\xa5\xf0\xfcn\x85\xf0\x81\x9c\xed\x00s8\x1e\xbc\xa4\xc7\x17\x84U\xe0\xce\xfc_+q.\xb3U\xe7\xd0\xa3\xa3,\xd65\xa1\xf77\x9ai\xaaY\xd7\x0fl\xa4\xa3\xbcS\xd6\xab\x13\x80@Q\xb7\xc1\x14\x94\x0bs\x19~gs\te8\x95\xe8\x8d\x1c~\xf3\xb4\xa9\x91hOY\xcags+P\x8f\x1c\xa3\xd04\xba\x81\x10\xe4\x80\x17&\xcf\xb5\x19D/\xa5\xd0\xce\x80\xa9\xb0Tz\xbc\x80dNO,\x89\xb3\xb1\x1c\xd6L\x0c\x93\xfe\xa4\xdb\xf9\xb0\x19\xce\x82``X2\x9d\x12\x13\xfc\x02\xd1\xe4]e\xfbN\x8a\xae\xb7!]\xdf^\x18\xc4\x12\x95\x8b\xbd\x85\xb2\x0f\x9f\x8d\xb1\x81\x9aU]\x84<\x06@\xf9\x1f\xc1\xe5\xf0\xf3E\xaa\xd6a\xf3\x1f3\xb8@\xa1\x85\x19\x8e`\xe5Ue\xff\xff\xd4N\xb7\xea\xfa\xab\x8c\xf6\x15\xaf\xb0}\x81\xa6\xe8\xef\xf2\xdcI\x08\x1c\x81h\x1d\xf4\x08G\xa3\'\xf3t]\xb5+\xb6\xc1&QN\xf0\xdd\x8d\xfcUM\x8f%$\xff\xfd\xad\xd8\x08\x8b\x94\x95\x04Fd\x7f\xf1Q#\xc1p\x0f\xd7\x96\xfb~\t\xe79z0\x0c\x18\x9c\xd0\xc8\xb3\x18\xcd\x1c\xb0I\xc7\x9d\xc7P\xa5\x9cd\xcd\xf8\xcc\x81\xb8\x01%n\xb8UQ\x14\x0c\xfa\x1f\xb9;9\xa5\xd0%b4\xa7\xa4-\xe5\xfeJ/\xa2\xcf\x06\x8d\xf9/\ri>\xdfSGi\xe5\x9f\xce\xc7\x97?\xe4\xc1VGZ}YXFC\x98\xb5\xe7\xff\x8a\xba\xcb\xd0\x84\xe3A\x11\x1f#t\xda \xd7I\xf4\x0e\xc7\xaf`1s\x9842\x9cn\x02\x89Q\xca\x1d\xe2?\x84\xbb\xc9\x82"\x13\xd2_\x9at\xd5\x8e\xb1\x03\xb9\xb4\'\xd3\xaeO=\xf0G\xc1\x7f2\x94\x1d\x8d\xa33\xde\n\xd5\xc5!\x04\xccM\xd2\x05P\xb0\xf6\xdb\xdfb/c\x10\x04bD\xbf\x9a:]\xa4\xf13\x02\xbd$m\xfbb\xbb\x1fr-t,\x13Y\x0b\x80\x8c\xe6)Z\xe9\xa4\xab\x03\x94\x1f\x830\xc2\x01\x1f(\xafm_\'\xe59Z\xb5\xd9B\xd7\xfaq\x90\xa6k \xc7\xca\xc1^)\x81a\t\xeaM\xbb\xc60\xbaD#x$&\x8c\xd9\x99r\x97\xd9\x88V\xbbVE\xa1\xbeP\xe4r\xb6\x87\xf8\xab"\x82m\xe4\xab\x9aD\x04+\xd29\xaa\x8b:\x9f\x9c:A\x0cN\x10\x1b\xccC\xcc7S\x99\x84L\x9d\x95\xe5F\xdb\xce[\xa4\xc4\xc5}K\xa9g\x17\xac`|`\xdf\xc8.\xc5\xc7\xc2\xdf\x87"\x91\x11t\x07\xf1L\x87\xdb\xf2\xb3\x97\xeb\xe6\x96\xe6\xd8\xe5\x05\x93\xb8\xa9:\xd1\xdc\xc0\xc0q\xd3W\x07\x15\x03:\xc7\x90J\xe0n\x00\x93\x1b\xa8"\x83\x00\x99\x9e\x06\x04\xf4O\x167\xbe\\7\xca\xfd3\xf3\x96\xcb\x0e>\xce\x9eX\xeb\x05\x8fu\x92\x8f\x9bw\xb2AyQ]B\x04\x148\xab\xcah\x81\xc9\x12q"\xa3')
|
4
|
-
|
1
|
+
from flask_admin.base import AdminIndexView,expose
|
2
|
+
from hiddifypanel.panel.hiddify import admin
|
3
|
+
from flask import render_template,url_for,Markup,request
|
4
|
+
from flask_babelex import lazy_gettext as _
|
5
|
+
from hiddifypanel.panel import hiddify
|
6
|
+
import datetime
|
7
|
+
from flask_classful import FlaskView,route
|
8
|
+
from hiddifypanel.models import *
|
9
|
+
from hiddifypanel.panel.database import db
|
10
|
+
from hiddifypanel.panel.hiddify import flash
|
11
|
+
class CommercialDashboard(FlaskView):
|
12
|
+
def index(self):
|
13
|
+
return ""
|
14
|
+
bot=None
|
15
|
+
# if hconfig(ConfigEnum.license):
|
16
|
+
from hiddifypanel.panel.telegrambot import bot
|
17
|
+
|
18
|
+
if hconfig(ConfigEnum.is_parent):
|
19
|
+
childs=Child.query.filter(Child.id!=0).all()
|
20
|
+
for c in childs:
|
21
|
+
c.is_active=False
|
22
|
+
for d in c.domains:
|
23
|
+
if d.mode==DomainType.fake:continue
|
24
|
+
remote=f"https://{d.domain}/{hconfig(ConfigEnum.proxy_path,c.id)}/{hconfig(ConfigEnum.admin_secret,c.id)}"
|
25
|
+
d.is_active= hiddify.check_connection_to_remote(remote)
|
26
|
+
if d.is_active:
|
27
|
+
c.is_active=True
|
28
|
+
|
29
|
+
return render_template('parent_dash.html',childs=childs,bot=bot)
|
30
|
+
# try:
|
31
|
+
def_user=None if len(User.query.all())>1 else User.query.filter(User.name=='default').first()
|
32
|
+
domains=get_panel_domains()
|
33
|
+
sslip_domains=[d.domain for d in domains if "sslip.io" in d.domain]
|
34
|
+
|
35
|
+
if def_user and sslip_domains:
|
36
|
+
quick_setup=url_for("admin.QuickSetup:index")
|
37
|
+
flash((_('It seems that you have not setup the system completely. <a class="btn btn-success" href="%(quick_setup)s">Click here</a> to complete setup.',quick_setup=quick_setup)),'warning')
|
38
|
+
elif len(sslip_domains):
|
39
|
+
flash((_('It seems that you are using default domain (%(domain)s) which is not recommended.',domain=sslip_domains[0])),'warning')
|
40
|
+
elif def_user:
|
41
|
+
d=domains[0]
|
42
|
+
u=def_user.uuid
|
43
|
+
flash((_('It seems that you have not created any users yet. Default user link: %(default_link)s',default_link=hiddify.get_user_link(u,d))),'secondary')
|
44
|
+
|
45
|
+
# except:
|
46
|
+
# flash((_('Error!!!')),'info')
|
47
|
+
h24=datetime.datetime.now()-datetime.timedelta(days=1)
|
48
|
+
onlines=User.query.filter(User.last_online>h24).count()
|
49
|
+
total=User.query.count()
|
50
|
+
return render_template('index.html',onlines=onlines,total_users=total,bot=bot)
|
51
|
+
|
52
|
+
@route('remove_child', methods=['POST'])
|
53
|
+
def remove_child(self):
|
54
|
+
child_id=request.form['child_id']
|
55
|
+
child=Child.query.filter(Child.id==child_id).first()
|
56
|
+
db.session.delete(child)
|
57
|
+
db.session.commit()
|
58
|
+
flash(_("child has been removed!"), "success")
|
59
|
+
return self.index()#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
60
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|