hiddifypanel 3.0.0.dev64__cp38-cp38-manylinux2014_x86_64.whl → 3.0.0.dev66__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/clash_config.yml +1 -0
- 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/translations/en/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/en/LC_MESSAGES/messages.po +194 -190
- hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/fa/LC_MESSAGES/messages.po +123 -120
- hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
- hiddifypanel/translations/zh/LC_MESSAGES/messages.po +123 -121
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/RECORD +74 -76
- hiddifypanel-3.0.0.dev66.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.dev66.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev66.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,418 @@
|
|
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\x00\xfa1\x00\x00\x12\t\x04\x00\xc7\xc1\xba\xdf\xa7I\x0e\xb7\x84fA\x0b\x11\xe2\x1f\xd1\x00\x00\x00\x00\x00\x00\x00\x00\x16v\x86\xe7\n\xfc\xfal\x87\xec\x7fE\xce:\x8d\x84\x82P3\xa3\xe0M<@\xc25]D\x0e\x82^\xc7\xd8\xab{\xcb\xd1{\xc7g\x92\xe2\xc9,n\xc8\x01zv\xaa\x91\x91\xc0\x03\xc6\x06\xf1\xed-yp\xb8V\x15;\x8f\x9b\xb3\x9c\xbfO}@\xefwNsq\xdfP\t\xed\x97\xd5\x95w]\xc8\xabm\x9e\x00hG\x8d\x8fL\x8cN\xbfb|b\xdbL\xc7\xdf=\x07\x13\x8e\x17p*mc7\x07\x08\x97\xe1\x84j\xa7\xed\x9e\n\xb4#\xb1\xbc\xf0\x14:\xf5\x8b\x85\xa2\x01\xcc]\t\x9cm{\xed\xdc{\x8b\xa8Ob\xcf\xf9\x1f\xb0\xcd\x97%\x07\n\xb3\xd8\xe5S\xb1"!gf\xf6\xfc@c\x96\xd4\xeeUp\xc0\x93\xea\xfcu\xa3T\xc5\xf9\x99ah\xf1`\xbaF\x9a\xa2)\x9a\xa4\xe0\xd3x8][\xe3\xe6B4\xac\xb1\xdf\xdf\x97\x88U\x86\xe5\xde\x9c\xa7\r_\xf01a*\x9a*\x08u\xc9\xec8E\xf5bVl\xe7;V8S\x1c8\x1c\xeb)*)2\x80\xca\x9c\x8a\xc9\x9f\x18\x06\xb9%P\xd6)F\xfa\xd4\x01\x84\xf3f*\xd06\x16\xde\xd5\xc8\xfc\x15\x0f\xd8\x1d28\x87 \x1e\xce+\xaf\xe0\xd9\x08\xd7\x14@\xc1\xb2\xa1\x93\xfd\xbb\xc0\xc9\x8e\x14>\x8c\x1c\xbaq\xe3\xc5\xfdZTN\xc5\x8ed\xcev=k[\xa93\x96\xdc\xc49>S8h\xd5sN\x9a\x87\xf46\xa8?\xd0P\x1fe\x85\xb9\xc5#\x98\xc5\xe9\x8a\xe1q\xbd.z_C#\xa7\x17{\xad\xdaA=f\x83\x93i#J{\xaf\xca\x8c\xfc\\\xa6\x80\xbf\x13\xa3\xe8\x88p\x0f\xbd\xd2@B\xbd\x9a\xa49\x89\x19\x91X\xf5\x04gR\xe1\x08\xd2g[\x9e^\xb0~\x0b\x1e\xad^\xf5\xce\xb8\xae"\x96,8\xba\xabI\x1f\x14\xaa\xd0\xc9\'\x80\x8e/\x08\xaf\x88\x16\xec)F\xdd"\x96\xbe\x06\x84\xe8}5:\x1a\xbfs\xd7\xcd\xb3\xc4\xe9\xe5\xc1y\xba\x9cya\xb1\xba\x9d\xcf\x1c,\xf9\xf2\xa94\x96r\x9a\xd9\x84\x9f\x93C#u\xe96<\x01}_\xf8MH\xf0\x1e\xe3\x8e\xd0;\xb4\xd9\x05\xfc\x12\x84\xe6I\xee\x13|\xa0%\x8f\xa2\x92\xabc4\x05\xc1p"\xb8> DX5|0 \x10\x86"3\x0f\xe1\x16\x80\xf9f\xa8+\xe0\x93\xdb<\x0ce\xb7d\x9c&\xd3\xd7\x1c\xdax{\x8e\xb26\xe0s\x91|\x1e\n|\xc9\xbcl:F\xb6A\x14\xbc\x9f\x05W\x18\x9b\xe75n\x02v\x1a"\xb4w\xe9\\\xc9\x89\xdc\x11Ty\xc5\xa7\xdd\xfe\x9b\xc7W\xbcY&n3]\'\x8f\xdfu\xc7\x82\xa0\xce\x91z\x83f\n\x1a\x1b\n\xa7X\xb7\xd6\x80\x17\xbe\x0fN\x18\xb6]\x89\x8e\xacx\xb1\x05\xff\xee\x80\xe9ac9\x07\xd8\xca\xc9\xfa\xa9\xa9X\xa9c\xd3\xa3\x81\xcc@\xf5N\xd1\xff\xc0\xcaf+\xe7\xd6\x8a\x16\x9a\xab\xd8\x0f\x96#\xc7\xe7\xa3\xa7\xedaC\x1epM\x92\x15\x0e-4\xcaD\t\x83cMJK\x80v\x1e\x01n,y\x99\x96\xa9\xb0S\x0c(\x8a\x04\xa7\xd1[&\x8e\xf3%\xf2F\x91w\xa5S\n\xe0\xf4\'"\x87\xac}\x9c\xf3g\xca-\x13\xcdX\xecv\xeeA;p\xd4\xc0t\x057\xe0U2\x9e=7\xf5\xfb\xbe^&\x0c|\xa1\x99\xb16[0\'i\r\xcaZ\x0c\x1d|\x89\r\x9bS\xdb_^\x91\x06{\xfc\xa2\x05l\xf7\x10_m\xaa\x80\x0f@\xf5U\xf9\'\xa7Hn\xba\x8e\x99\xbe\xb3\x0b\xea\xb4\xffw\xb0\x9e\x83\x14\x17\xb8\xb3\xf5\xfb\xb1x\x13\x9b\x7f6\x89\xde\xa6R}\xbd\xc0~\xfa\xa6\x8e\x0b#=>\xb3T\x90\x84#.\xfd\xa8\xb9\x14z\xdb\xd6+\xf6\xbb\x01\xb0\xfe\xe0\x1e\x94\xaek\x81\xc6|\xed\x17\xd5n\x0e\x1bz\xbf\x10X\xe9\x80\x8b,S\xebQ\x0b\xd5\x16\xb0\xd3\xe8\x0e2\x9c\x11\x94b/\'jZ\xa4r\x0bV9\x9e\xd3\x8a\xbc\xc2\x00-\xaf\x86:\xc5iF\xb6-\xael\xff\xd0\xc5w\x05w\x9c\xb5\xf71[L\x0c\x98{\xc5iMP\xaa-\x98\x05\xe25\xc3\xb7\x810\xd9\xeb\xeb51\xf2\x020\x1c\xea\x99\x16\x1f\x94%\xbf\xd4\xa0S\xbf\xee\\\x94f\xb5\xb4r\\?\xee<\xb3\xf7\x1b\x80\xbc\xe8\x02\x00\xc7\xdbC\xe1\x93\x8c*\xc89\xbd\xa4\xb5\xf8\x9f\xbft\xd6\x9exG\x17\x97\x87\x0eC\xc1m\xf1\x1f\n \xed\x95\x802\x99\xf7SX\xa1\x89\x93\x126\x98\xae\xcb/*\x9b\x84\x0e9v4v\x8a_\xea\xef>\xfb\xc5\xfc\xb2\xa5G=8\xcbo\x1cc\x1e\xd4\xediC\\\xa3m\xd7\xb78\x9c\xae\x91\xe2\xdf\xe0Y\xb8\x93\xcd"\xda\x16\xf2\xc5&}\xacu!n|\xfc\x98\xbe\\\x05\x14q\xba5\x14X\xeee\xd34\x93\xc0]\xec\xf8\xef|dG\xacb\x8e\x11\xa5\x07\xda}\xd4\t\xed\xec)*\x8c\x08\x83\x82\xcf\x9aQU\xa7\x1c\x86\xb4v\xe7D\x8cH\'?nS\x97`\x1a\x7f\x9a }\x7f\xa1\xac\xaf\xf9\xb7\xfb\x8bA\xbf\xf6\x89~\xd1\xd0\xf1\x9d4\xf3#\xb7_\x14\xd4\xe9\xbe\xb6\xf3\x99HcQ\x00\x00\xbf\x86\xc1\x97\xba\x91ck\xb4\x9d\x0eu\x85\x8f[>\xf4\xba\x06\x85B\xc13\x10\x1f\xfaA\x8e\x93\xfc\xc4\x9d\xec\xc7;3\xdb\x10*\x18\x07\x07;\xf9_\x9d \xadL\x04\xc76\xd1D\xd1\x90V\xdd\xa9\xa9b\xadn\x8d\xd6l\x98\xc5_u\xe5\xe2F\xb9\xf4\xd5\x9d6\xf5\x98\xc1\xaa\xdc\xb7u\xeb\x8f\xc4l\xfb\xb9Z/\xf2\x1e\xf9\x95\xd3\xe1\xb0\xad_\t\x9b\xef\xe0\xb4c\x91\x0b\x81} \xfe\x9a<4A\xc3U\xcfm\xb0\x98\xfc\xa2\xf3d\x01\xfe\x7f|"\xd8S\xf1\xf6\x16\xfb<\xce\xea\xa3\x97\x14\x80P\x9fr\xf0\xcd7`\xb9~\x8aF\x12YYx\xd2qV\xd8*$\x8e~\xc0\xd1\xb5F\xb2\xbe\xa7\xe6\x01\x1c\xd5\xe5\xcfW=\xe8\xef\x1cP\x9c\xabi2\x19\x83\x16\xedI\x04\x9a\xbcE\xc9\x1b\xdeSG\x82n5t\xbe\'\x9a\xdf}\xc1\xf9\xef\x85"\xc1\xef\x92\xfa\xff1#9\x04X\xdf\x143!=\xd2\x00U[\xd5\xbec\x9b\x12\x07\xa0sJ4\xc6<\x8fz,\xa2\x88\x88\\G\xd2\x19\x7f\x92\xad\xe6\xe4g\x1e\xd9\x89\x82\xee\xa2\x95j\x9c\xda\xd9\xf2\xc3*\x1e\x97\xa8\xcc\xc77bT{F\xec\xd4{`\xac\x08\x8e;8\xad\\Z^\xe29b\xf3\xa2K\xe5\x90<\x9cun\xacyO\xe1\x0c\x12H\x17\x87\xdd&J\'\x9c_\x18\x83\xfc\n\t\xcdO\x9b\xa3\x19\xb6\xecb\xe3\xed\xcc\x173`"\x82\x1b\xb8\xe87\x00\x9e\xb6\xed\xb4\xae\xd1\x009vZ\xa7_\x86\x89\xe5\x15T\x1b \xe2\xaa\x01F\xc65\xae\xabBh\xc1\xc8Z\xc0\xa3\xc0\xfb\n\x81>]\x1a@G\n\xf8M\x06\x83rl\xc0_\x80\xf6\x91\xc9\xbeK\xe0\x0f<\xd4&/\x19\x8ev2\xa1\xfc\xb1\xa5\xceo\xed\xbeM\x16\x8d\xb7\xa6\xf6\xaa_\xb9(\x14\x1f!\xe1\x0c+\x92-\xfb8\xeel\x9c\xcf\xcdm\xec\xe8\xdbC\xcd \xb4\x1du\xc4\xba\xff\xe0d\x89/\xdc\xa9\xfb\xa2\xc4?o]\x08\xd8\xaf1\x9a\x93\xc4\x8bQeX\x17\xde~h9\xb6O\xc9[\xa0h\xc7b\x03e\xa6(\xce\xb0\xa7jM\x9b\x1e=\xb4R\xb4\xdf\xff\xb4\xf5\xcc]\xaa\x07Q\x1e\xce\xf1]\xda\x0f+J\xbc\x15|,8v6\xa9fD\x90\x19\xe1a\xda\x08\xda6\xa3\xc2 /FJ\xdb\x03gf\xfd\xfe\xff\xf6\xb3\x10\x12\x83./\x05=\xd29q\x15\x83=\xe3\xec\x00\x9f\xc9%Z\xeb\xf5\x88H(\xe8^d\x81\xb0\xd6\x1d\x08J\xe49\xf9?v\xf6k\xe5\x80f\xbf$\x8c\xf3\x10\x90\xbdh-K\x99\xc4\xcdl\x9c\xdd\xec\x12\x87@|\xa5\xfb\xfbt+\xd3\xf8\x90\xbf.+\x8e\xddp\xf3v9\xcc\xa4\xa9\x9d\xaa\x19\xcf\x1dc\xb3\xfd\x1b\xe9\x16\x12A\x97v\xd0\x1a\x01\xfc\x11tPb}S\xb0Y\x1fL\xd8\x04\\!\xcaAa*\xc8\'\x84}u!\x97G\x95S~Y\xae\x18\xe3mS"D|wJ&\x0f\x88 \x92\x98yh\x88\x93p\xc2{\xe0I\tu2y\xcf^\xaaG\xdb7\t\x942\xe7\x0e\x9b\xc3\x83\t.\xaa\xc9\xaa\xde\xf53kl\xf9^,.\xe2\xf9\x8f#qC\xaa\\tR\x1e\xfd\xd9\xb5`\x05"\xf9\xba\xd2\xd8\xeb\x8c\xbd\xc3L\x01.\xec\x96\x1b\\\x92\x87g\xcd\x97\x98e=\x82\x90\x011\x85\x15h\xa8\x9f\xcf\xd4\x19\x1eP\x97\xa8\xf2\x0e\xbd2\xc1V=\ns\x94\\\x07\x1a\xcd_X\x82y\x1d\x10\xed4\xee)\xe5ie\xf11 #{\xac\x8b\xfd\xf8.#\xbe\xabG\x9b\xc7\xde\x12\xe3\x87\x10\x97\x8a@3\xe9\xd4\x9e\xaa\x08IJg7t>\x87\xaa1\x1bN\x7fM \x0f\x19\t\xb6\xf8\x16\x1e\x9b\x8e\xd7\xb6\x98\xe2\xa7\xb1[\x15\xe4\x84[ \xf4{\'\xa5\x8f\x03\x00\x84\xc0\xcf\x7fi;\xbd\xd9{\xb9\xe0\xd5\xc3\x9d\\\xfc>\x88\xed\xe7}\xf0\x94z2\x1a\x05\x8f\xcf\x1a\x8d!\xf7G\xc5$\xcb\xae\x1e\x08\xdf\x8b\xdc \xe5(."\xa2qukG\xf1\xb3d\xec\xc0K*U\x86sN\x88\x1e\xd6\x90c\x0c\xf6\xa6\xb9\xbe\x8f\xd8ak\xc1\x8c\x96m_\xf1\xfa\x9b(\xe6\xec\xeau\x8d\xa8\x13\xa0\xdc\x01\xbeq|bA.+\x84_A\xe9u\x8a\x02+\xe6f\x82\x95\xe8`\x8d\xea\x1e\x9f\x98z\x80\x950Xk\xdb\xb9\xbbWh\x07\xca\xf8\x85\xab\x05\xaa\xc0\xe3P\xd6\x0e \xcf\xd7\xd2YS\xf1\xeew\xe9\xfc\xcb\x9b\x1d\xbcp\xf0\x9c\xcf\x8c\x86\xdetf\x90\xceW\xceEd\xa4/H\x14!J\xf8"\xe9\xde\xd1\xcd\xb4\xf6_h\x82\x85v)\x1e\'#\xc7~\x7fb\x10\xbd\x95\xfe\x99\x03e\xb6\x1d\xfb<\x98X)\t\x8c\xb5h\xf5\x82\xab7\xb5\x8b\x0b\xb3\x9eRw\xc6;\x9b?\xac\xe4\x10\xc7\xe4f\x0b\xb06\x84"a;\xf1\x142v\xa3\x95\xc9\x11\x9e\xbb\x99\xc4D6\xc5\xeb\xc2\xcc\xbd\x1c\x06\xe7QAx\xf4\x1e\xd5\x03VJQy\xb5z\x8co% Y(\xf7_\x02\x00\xef\x96\xc4\x11KzV\xa5\x01I_Ox\xa0\x7f\xf6@\xd2<\x01;\xba\x99\xe7\x11i\xfb\x92&D=\x02\xc6MA\x9aT\xe6\x7f\x96\xe2\x0b*\xad\x8a\xe5\xe1\xc91\x11\xdb#\xc1\x89\x1e\tE)\x96O\xb2k.X\x14\xb4\x80\xd6\xaa\x95\x82\xeeVI\xc9\x99H\x16\x840\xd57\x894`\xbeA\xdb+\x0cEL\xdf\n\xed\'1\xdb\x05\xdc\x99\x06\xaf\xd6a\xedE;\xbc\xff \xb1\xc5\x8f\xed\xdfu\x1ex\xf9\x082\x81>\xd6\x80\xa7\x1d\x8f\x9f6\xa8\xb0\x08\'+9n\xc1\x91\xa4\x85\x9a\x06dmn!Z`\xe7\x97\x8a\xe1\xac\xa6%\x15O\x9b\xcd\x00\x8b{\xe6e\xcb%\xa0\xba8\xa8\xb1\xb7liq\x08}\x9c\x9b\xfd{\xe4\xe8\x8d\xb1\x02*~\x91Y]\xd7\xbc\xac*(\x03\'\x11\x80\xce\xcd\xdd\xc7\xefXj;\x1d\xber\x85\xc7\xdf\xf5\xd8\x93\xe7kp\xba\x1b\x1fF\x93\xda\xf4\xce\x8f\xbe\xd9\xe5\x1c\xbf\xc3\x8e\xe3>LC55\xa2\xa6\xd5\r\xa6\x14C\x91\x97]FZ\xfc\x9f\xd5\xfd\xa7\xa9\x07\xf3h\xb1\xa8\xd7,\xf5\xb5K\x98\xc2I:\xa0\xd1^C\x8a3\xa8\'\xa7\xf9\x17\x04\xa7\x16Ez\xf8\x0e`\x1d\xed\xb8\xeem)\xb8\xf0\xaf\xdb"\xfe\xbcK\x8f\xdf\x0c#$\xd7\xd4\xca\x13\x17Ly\x101\xbc[Fd\xaeVz\x1dP\xa5\xb8\xef\xa0\x16\x91\x82:\x81\xc3\x99\xca\x01.w8^\xa7\xcb\xce\x08\xcd\xc0\x02%\x16SrMX\xb2\xb5\x9c\xe8\xf1R\ru\xd6z\xb8:D\xe9/y\xed\xa0\xedpI\xc09N\x8b_\xef~B\x05\xd0\x1f\x0b\tB$\xba\xde\xab\xdb\x8f\x16\x14\xf7\x1e\xed**\xf7#v\xed\xf2\xa2\x84\xaa\xe8\xb9\x8df\x93ek=L\xb60x\x92\xd41\x06%\xde\xd9\xe1\xce\x04B\xec\x8a\x01\xef\x11\x7f|\xf1t\x1dn \x06\x92\\\xde\xd51\x7fFjK\'1\xc5c\x9c\xe7G\x8bw\xe8\x1a\x99\xe6\xf3;\xdc\xf7\x82\xa5Pq\xed\x9d\x83a\\)\xa4;\xec\x8a f\x9dd3\x97\xc3p\xb1\xee!a\x88\xb5*\\\xe5\xb6\xd4\x190\xc7\xc0Ml\x7f\x93(\xe5Z\xc1\xab\x1a\x8f\x8f\xfe1\x01\xf6\xe5\xbf\xb5\xfb\xe8\x90 p\xc1\xbb\xbc\x1b\x1e\xaf\x06\x9a5Y\x13\x01\xd6\xee\xcc\x8e%n1\xc3m2\x1fER\xca\xb2=33\x1cS8M^\xabj\xa7L\xc8|\x9b\xdd\xbeA\xfa\x10\x85\x87Xx\xe9w\xb3\x01\x11\xd8\xd5!\\\xd9{\xd8-\x85\xdd\xa8\xbf\xd4N\xb3\x96\x93\x17\x95EYKVbE\xc7\xc1\xb0\x89\xf4\xac\xad\xde\xb6\xd8\xd5Sp\xb3\xa4\x15GD\xc1\x17\xaa\x04Wk\xe8\xaa\xd4\x8fZ\x14\x9c\xcc+\xa1\x03\xa7Z\x11\xc3\xec\xcc\x9d%;H\xef(y\xed\xed\xc4\x86 \x82C]p\x1bx\\\xcax\xe2\x94\x13\x1e\xa1\xc2=\xe6\'\xd7\xe4uz\xa5\xf5\xee_k\xa2\xcc*+\n\xd0\xab\xe6\xfbi8a\xb9g\'[>\xd6\x1e>\xebF\xd1=\xd5l\x9b\xa4P\xb5\xbd\x8c\x1f\xec.\x19mB\x01>h\xbbS\x97\xd8\x93\xc0\xeb`\x9f)ua0qF\xbb\x1b\xb3\\\x80\xbd)\xd5\xa0\x99"y\x16F\xd8\x0fYa+\x06`\xa4eM\x81:ui\x97\x91\xfd\xa6\xa4J\xb6\xa5\x15{\xadt\r\x88\x16`o\xf0\x89\xe1|\xd4r\x1eB2\x02\xdez\x19\x8f!\xee\xf6\xc8\xcc\xbbH|;\xca\'\x07\xc9W\xa7s\x97\xfc\x8f\xe03DTU\x1fX)\x14\xa1\xe9\x82k\xd6\xa0\xd8\xa4\xde\xdd\x07\x84\xc6:\xf8\xb3<\x19\xa1\x8bn/7*\xc2 \t\x15\x1f\x97\xeb\xc8M\x1fn^7k\xd9\x18g\xf2\xc63\x98\xff\x11\x97ro\x84,\x86\xf7Zs\xeb\x1b\x85\xb3\xd8y\'\xda\x01\\C\x81\x90Dj\xa8\xffg\xa1;e\t\xb5&\x0e\x87\xd0\x14`\x0e\xc5\xf1\xcf>\xc2\x00X\xd7\xca_8s\xf3\xf7\xfb\xce7\xd0m\xa5\xc7\xf0\xde\x06\x9fu\xf1\xa7\x9bC\x89\xcaw\xc98\xf4/ [z\xf9$\xdd\t-\x87\x17W\xcb\xae\x00I\x0e[\x89\xc1\x07\x86\x95e\x1c\xff\xcd\x0c\x142\xbf\xd5\x1eZ\x17#p:\x85\x08i\x94\xc8\xd0j\x8c\xc1~}\xd4`\xe1\r\xeb\xa7\xc5+\xd8\xa2,\xb3\n\x08\xe4\xc04H?H\xf8\xb1S@\xb2\x1e\x7f\xc2\xef`Kf\x13\xdd\xf8p\xc0t\xb4K\x0eh&-\xfau\x87\xd4\x13\x7f\xe4\x9473\x84\xff~Z\xf7R|u\x07\xe9Ffp\x11\xfd\x02\xb4\xf5Z\xbe\x92\xdd\xa0\xbc8!D\x1cm\xd9\x05M\xe9)\xa53\x882\xecn\xbf\xbf +Z\xde&\xfd\xff\x84\xbb]\xf5\xe7\xf7]\x13V\x05&\xfa\x943\xbeX\xd14\xc4\xa5k~\xc3\x0c\x8c\x9e?9\xcd6\xa9\x8bs\xcdn\xc1\xf4\x9b\xd2\x86\xca\x8b\xfa\xb2_m\x07\xec.H\xd88\xc5\x10$`\xb353\xc5<\x06G\x16m\xe3\xc9OS[\t\xf4\x90/\xd5t\x89\xd0\xabM\xa9\xa1HV\xe9~\xf0\xb8M\xaa\xacj\x00\x13J\x1c\x04n\xe0\xdc\xb9\x10\xcf\xdb\xe8\xa7\xed\xf1\x0eJ\'\xb2\x03\x9d\x1feL2\x0e\xce\x0c\xe4\x9eZ1\x05\xbe\xc2\x01\x02L\xb9\xce\x87\xae\xbd\xd15?v\x90(lLR\xbf\x82\x95\x12\xf6j\xb2$\xea=s\xc0\x8f\x8e\xabMXa\xa9}\xa2\xb8P\xf1[/\x0cr\xffnO\xf86\x9aA\'\x9fI\x88\x9c\x92U\xd8\xe4\x13\xf5\x17\xea\xfc\xccL\xbb\x1e\xaa\x8dN;\xe3o\x8a\xd4\xc6\x84Q\x11H\xefC\xc9x\x87)I\xfaKf\xbe\xb0\x1c\x1f5]7\x87^\t\x15\xdd\x8blqO]^0mx\xb4{\x1a\xda\x8c\xfd3\xe0\xde\xb0\xfb9"\xdc\x83\x07\x8a\xa6\xea\xfb\x9dXJ\xaf\x0f9\x06\xde\xf6\xcfC\xbb@\xf6J\xd0\xa9\x171*\xaa\x0b\xb37\xe0q\xd9\x17\r4\x07JE\xf4\xbd\x8f/2$\xcd\x9e9\xf6\xd1\x19\xe3.\xa3\xa5\xd0uD\x7f\xbcp\xed\xda\xf0\xa7\xb8O\xe4\xe5\xb9\x8bo\x84\xd7\x00"\xb2\xf6#\xd6\xec\xc6{\x8b\x8c\x96\xa0\x97\x92\xaa)CNY\x1363(\x02\x0f\x1a\x9fb\xa5\x17\xc6\xc1\x10\xd6\x83#\xe6!C\x03\xc5\xb1\t\x9e\xe5g8\x13\xabz\xc8\xbeyt\xb2\x0bt\xbdC\xe7\xb4\xb6]\xce{\xb0\xf7\x7f\xd9\xa4\x15IPEL\xc5\xf8\xd1\x1de\x8f\xeb\xd7Z3,\xa7\xf2GK.\x91\x86\xdb\xa8\xca\x9a\xb7\xfa-D\xe2,m9NA\xc3\xb6A*\xff;\x8eb\x00Qqxu\x08\xc0_w:\xfc\x92d\x19\xfb\xc2\xddW\x98\xf6@c2\xe0oR\xfc\xfa\xb4R\n\x05\xfb\x97 \xedQr)c\xbc\xe070\xce\xf1\xca\xb2\xd4\x846h\x0c\x98\xa8\x17\x0e\xac\xbc\xdeB\xe3i\xd8U \x011\xaa\x99\x89y\x8c\xff\x83R\x1a\x0b\x88\x98YR\xeeA\xac\xcf\xcd&\x07\x84\x00\xdbYI\xa3>\nT\xe9\xa5\xe3\x94R)\xfbb\xe3\xd9\xfep\xc9\xf2pP\x92\xd6\xb0U\xac\xd1|\x99\x01\xbbV\x89c\xf9>\xde\xc5(j\x90.nN\x08\x86Q\x9f\xd6F\xcd\xe96\xca\xd1\x81\xcf\xd6K\xea6\xf9\xf8\t\x00\xa0\xf8\xc7\xe3Nt:\xb8\x05\xefO-B4\x81`d5\x0c\xf7\x9d\x95\xda;\':\xcf\xa0\xfe\x81U\x04A\xd55Q\x9e\xb8wi\x86k\xec?\xdf\x02\xf6\x15\xb79\xcc\xcd\x9e\t\x88e\x8dS\xe3\x1b\xd0w\x1b\xd4C\xbf\xa6\xe8}\x05\xd9\xe1\xe5\xda\xc5\xdf\xfe\xe3\x84\x92Y\x05\x9dA\xfb\xd3K\xd8\xd0\xf6\x05>\xed\xa9|\n\xc4B\xaf\xba\xb1\x92\xd3,\x9c\x8d|#\xaa\x14\xeb\x88\xd7U\xf0\x1a\xa4\xdc\xcc&\x9aw\xe0e\xdf\xf3!9\xff\x82}\r\xcc\x97N1f\xe9\xf5\xd6\xcd8\xa8/;%\xb2\xc3v\x1b\x9f\xf4(\xdf{c)\xca\xf3\x9d~}D\x9fr<\xd3\xc3~\x13~R\xa5\x9b\xe2\x92#*E=T\xd9\xbb#D05\xbc\xc6\xe9C\x94x\xe2PkP\xb3\xc6\xcfnW\xd8r~\xc4e@\xdef\xd0\xf3\xf2e\x06A\x9f\xe5\\,N\xec.\xcc9`\x82\x18\x9e\x99gp\xb9x2\x00o\x8d\xa4Y\xce!\xf5\xe2\x93\x076\xacC4\xe2~\xc4\xf0Vkh\xb2*^\xc1\x0c\xffVd\xa2tQ\xb3\t\xbcP/\xbf\x93\xb7\x04\xeb\xeb\xb3\x18\xec\xa1\xd4\xe9)A\xe9\x8c\xd2n\x9dU\\\x8b\xee\xb0+YX4U\xc04\x11o|\xbdU\xe1\xaeq\xfb\xb5\xa6z\'\x9fWp\x88g;\x85\xf2x\xda\xf9\x11F\x84\xa4b\x1b\x1d\xa8\x1b/\xed\x99\x13\x83\x9aa$\x15\xb5Z >\xbdFs(\xbe\xae\x1f\xe6\x96F \xdc\xd6\xd5\x93\x8dcx\xb6\x02f\xc8q!|\x9b\xcchc\xf9\xcb\xd0?\xc39\xf6\x89G\xf8m\xce\x15\x02\xb8R\xa3\x8e\xc4qH\x05_m\xd2\xf1D\xeb\xdc\xf6\x8d4D\x86+(7\x83\xb3>\xf5\x97\xbf1\xfc(\xde\xf1\x9f\xf7j?\x91i\x1f\xaa\x01\x0bx\xb0P[\x9em\x7f\x17\x8b\xd0V*3\xcf\x05)\xbf\x19\\\x7f\x8c\x8d9\xc9\x9d\xda42j.\xc6\xceG\xd9C\xe6\xfd/\xc3\x86\xcc\xd0\xd5"&\x93>z\x13\xd6Q\xcd\x04\xa1ATC%\x99]\xa5?\x89\xd2\xae\xae\x9c\xeeK\x86\xfe\x120R\x86$d\xa1\xce)\xec\x8b\xc7\xa6SD\xd1\x9d\x86y\xff\xe2\xc6\xb7\xfa\x02\x9f\xa5\xa9\xa4x~t\xf4\x17%\xfe\xc9\xab-\xc6\xbe5\xe9\xe2z~\xfbI\xcc\x8f;\xed\xeb,\xbb\x90\xa8\xa2\xf4\x1b\xcf{"\tl\x1d\x01M\xde \xff\xcfT\x08\xae\x0f\xadEU\x1a\xca\xbd\x19\xaa(\n`\x00\xf8^E\xa4\xfb\x94\xf6B\xe3\xa5_4,\xd4\x83\xd3\x19\x91\x8c\xf3\xe2\x824\xc9U\xd3&T\xb6\xb4\xd5\x9d\xc7\xdb\x89\xc0\xdcJ\x02\x01\xc3\x91\xb8\xc9L\x8dzv\x86D\xb1Dh\x91\xd0E\xc5M\x05<\xa9,\xac\r\xa9$V\x00\xc1n\x99a\x01Y\x80j\x8a\'\xfb\xb8?\x92\xd3\xa2\xdd7\xe4\xd8\xd1\xb9\x02p\xfa\xd4\xc7-\x87\xd5\xcd\xbf\xb9SZ\xfe\x8c\t|\x84i\xbc\xf7l\x87\xb0\xb2\xf6/\xe9R\xa1\x1fLB\xae\xf7\xafs\xf8i.\xef\x13\xec\xc1\xe7\xcb\x1bOR4\xcf\x00R\xe0\xc0\xa6\xebu\xa8\x10d+v%\xf2b\x06\xb7Ac\xf8\xe3\xde5I\x9dr\x16\xbe\xf1\tI\xa0[\xb4\x16{\xe8W\x92\x8f\xef\xeb\x0eU\x0eX?x\xad\x15\xa6\xb2\xa1\x95\x88"u\xf6+\xdb\x85\xd6&,\xfc4o\x81K\xcc\xc5$P3\x7f:\xe94_J\xe3\xf8{v\xdb2f\x0e*\xdd\xb1$\xfd\xb6\xa5IRS\xcdd\x0f\xe1\x1e\xcb\xd9=\xd0b\xab\x829\xe0\xd1\xa4\x17>K\xa8\xc7\xffV_o\xb6\xa7T\x889@c\xa8\x9eLT\xd3+\x14\x0e\xd2\x1f\xe9YY\xca\x10`2g\xdal\xc2Fc\xaeYN<\\\x80\x98\xe3l\x8bP7\x03\x85\xfc\x9d\xac\x0f\xc5\xe5+d\x8a\xcb\x18\x8fu\x93\x00\x17\xb0\x0f\x9e\x04\xd7\x9bg\x05\x9a\xfa\xd2\x1f\xb2_\xfbV]`z\x9e\x88\xc0\xa5\xd0j\xe77\xf3\x84\x9d8\xec\xdf\x97\xcaK\xd8\x95\xe8\xa3\xf6y\x99\x00\xd5l,\x19X\xd7#\xe7\xf3\x8f\x92\x8e\xcc\x1f_\x93\xe5\x97\x9c\x8f\x85b\xc8\t!\n\x0f\xa1%\xa1T\x98\x85\t\xa0a7p\xcb\xc7F\xf3\xb39\xad\x11\xe2g?\x00E\xdfI\x9aVDk5\x01r\xb9\x15T\xdc:2@\xe5wi\xce\xa0\xe23\x95\x1f\x9c\x81\x9c3\xbfh\x9bPq`e\x0e\xe0\xb7>V\rBI\xff\xa1\xe7\x95\x96;T\xfd\xc3]\xed\x98\x19T\xdfk\xb3\x00D\x94\x1e\x9f`\x96>\xce\xe1{\xdc\x12\x13&G\xf7}T\xfc\x02\x8d\xb7\xe2\xa0s\x1b\xf3\xff\x06\xed\xda\x0ft\xfe\xf1\x8e\x85\xd9\xb0\x03;\x05$\xe8\xad\xeeV\xc3\xb2\x97\xfbs0\x80TJE\x99;\xf0g\xae\x0c\xdd\xdfU\x11\xed\xb6GK\x80\x1a\xcd\xe0\x1fa\xb0)h\x0b"3\t\xd5L\xab\x1c\x0e$w\x85\x90\x9a\xb14\xb8\x11\xd8\xb3\xffOq1\x12\x1aL#\xb3\xfb\x02\xa4Sb.\'G\x10\x08\xd1IPum\xf3!\x92\x89.\xc82X\xd0\xc0\x90\x88\x18\xbc\x116\xaau\x13\xdd\x19\xd2_\xc8\xefk&\x88\xc1IL\x8d\xef\xee\xa2=\x08?\xdbh\x84\xfdC.\x01\x04\xb0_[\xfd\x06}\xa6Z\x04n\xb7qv\xd9\xb3\x97\xeb\xd3\x82\xa37\x7f\x80\xccTh\x8c\x11\xd1\xf1j\xca \x01\xde\x89\x16\x05\xe2\xad\xe3+\x0c\x86\xfd\xb8\xf0v\xa8:\xa1\xb7\x82\x9a\x1d\xcb#G.\x91\x9c\xc4\xad\x05$g\x9b;\x14\'/\x1b\xb6\t\x1a\x02-\r\x06\x84\r\xf9}D\xee.\xf9\xe8@m[JHHHy*\xae\xdc\xd40\x95$&\xf0\xdd\x8a\xca\xef]6\xda\x81\xaf\xc0\x11\xbe\xb4{C\xdb\n\x15}B\xaa\x05\xfa\xcb\x07GE\x14\xbe$\x05\xf0\xe1\x10\xb4\xeb\xadM\xf6\xfd\x7f-\xe7\x11\xf1:\xfd\xdf\xfd\xca$\x87\xc5\x171\xb022lG!a\xd1 \x18\x93\x99Bw\x83\xb9\x88\xe0`\xb5PEr\x7fC\x03`8w<y\x13\x86\'\x11M]\xaa9\xe6\x14\xb4\xb2\xd0\x7fgF\x86\x13\x98_\xa6\xf0\xed\xf9\xe6\xcd\x95ZI7\x9f\xddP4\xf7\x16\xe71WA\xa3\xa8\xd2i\xcctc\xc8"/V\xd5\x9d\xbc\xf7\x99\xd9\x12\xb6\x8e\xe7\xe9\x86\xdd\xc3\xed9,\x17.\x0f\r\xa1\xf8\xff\x9f\x97\x0b\xb8N|2J/tU}\xc5\x01\x96)^\x00K\xa6\xb2]\x9c\x90d\x10(\x81\xb5\x91\x84\xa7\xec\xffh\xd9\xc7|\xd94q*\xbd\x87"\xcdG\x97\xfa\xe7W\xba\xf6\xb4\x8c\xe7-\xa6\xf1d\xf4\x98HK\xc8C3\xc8\xff\xbb,8U37\xb7\x08\xb4\xe0\xf7\x94\xe1P\x8ab\x19\xbc\xb7\x1f\xde\x83:#\xd2\x058\xbc\x9d\xb1X\x84\x856[\xd0\x03y\x04P\xae\x825\xa78\xd1\x0c\x8e$\x86=\xb4\xd5\xa0\x86\xa7\x9d\x95\x12\x964\x93\x14\xf4\x9e\t\xe3\xc98\x8c\x07\x98\xdc\xc7c\x17GS\xd5\tk\xff\xd1D\xeb\x12\xd8e\x12\xbbi+\xeb\xb5\xe2\x07\xdd\xd4|@\x0e\xe5\x12/\x07\x13\x83CS\x84%I\xe2\xb5\xfbN\x02\xdd:\x05?\xda\x86\x11\x18\x87K\x0c\xdd\xcc{\x03p@\x07\xdeg\xc8}\x9f\x16\xcf\xd8q\x08~\xc5$\x04m\xb8\x11\xb4\x1fP\xcf\xeb$\x84/\xcf\xcev\xf1\xbe\x19\xea\xb9\x9d\xd3\x89\xbdv\xc0,P`l2,\xdb\x9d\x96\xc0\'\xfe\xe9U\xc0\x16|<\xa2\xcd\xf3<>N\x84(l\xef\x12_\xe7\r\x861r\xab\xb4\xb90L\xc5\x8f3K\x89\x1d\xabB\x92\x96\x06\x90\xa5\x88|\x0f\xbe\xcc\x87\x038@\xfc\xc4\xc1:\x9b\xde\xad\xa2\x08|\x1a\xfa\x8e\xc1\x1d\x93K\xef\x06^\x00\x87\x08\x06\x8b\xf1\x0b<\xa5o\\\xa0m|\x00\x82@(\xad\xc3\x1e\xbb\xdeD\xb2\x99\x97\xa6U"b\x18ql:\'\xc2L\x19E\xeb\xbc\xb4X\xa9\x00\xc6\x18g\xae\xf1\xfb\xa8W\x0cn\x95\xea\xc2hf3\x0c\xa6\x18hj"\xbc]zi\xd3&\x82Ep\x13g\xa1\x1f\x10\xd5\x93\x0e\t\x1f\xd5%!|\xf5Z\x87\xd1\xeaF\xad[1\x81z8B0\xd0\xdc\xb1\xf9M5\x0e\x1a\xd3\xdd2\x06\xf7f?\x96\xcd\x001\xc5\x08S\xf9I;-\xea0%\x97H0m\xbax\xe01\x94`\x910\xd0\xf2\xf4\x04\xcb\xe6\x94=\n\x845r$`\xac\xb5\xab\xe3s\xe8%\xe7\x97FW\x12\x031\xceC\xcf\xa7EP\xa3N\xedd\xa5\xc3\xd9u\x13[\xcf\xa7\x94(/\xe0\xc4\xc3\x1bm\x082\x0b\x16\xc0q|\\\xc9\x04\xdf\xe6\x8c@\x8cn\x96\xc4\xa9/=\x10\xe7M\xeeA~$aUB\x8b\x8a\x05\x9cZ0&\xf0U\x82i)a\xa7#\xa4\x0f/?3?@\xa6ky+_$\xb8\x05\xcb\x99?\xb4j)\x14!hx\xb7$\xc3\x87[35\x00\xb8,kK\xb4\xf8l\xf6\x94`l\x81\x95\xeeZ\x04\xbb\xb7\x1f\x90\x02\x9b\xdb\xf0mI"\xc5R\xd9C\xea.\xb9\xfc\xa5\x06[\x86\xa2E\xb7\x9b7t\xe6\x1c`\nIQ_\xb3\xc2\xcb\xa6\xf8\xdf\xfe8\x0f\x0c\x18i\xcb\xd3\xc8v\t\xa6\xfd\x16#\xe73\xc7\xd1\xf5\xce\xac@\xe3&\xbeb=q\x9a6\xa9(\xd1\x87\x12\x0c9k\x1f\x94\x8a>\xcb\x07\x8b\xb6\xa4(\xffp\x95\xa6F\xd0|\t\xb7;\xc5P\xb4\xfe7\xdb\x94\xee\xe8\x9c\xdb\xc2\x02[\x06\x19{{"\x9b\x9d\xb4e\xff\xf9\r\x82l\x9b\xafO\xd0\x10\x99\xa4\xd7\n\t|~90k\xd6\xa0\xb4\x07\x9c.\xebQ\xc27F*\x05!\x9d#D m\x9d\x00\x95\x1b\x8c~\x99(\xa69\xe5\x16:$\x1a\x12!\x829L\x89\x1fd\xea\xc6\x1d8\xc9\xe1\xd3\xac\xb2\xb7\x16\xba\xad\x01\xd0\x978\xb1\xf5\xdf.~\x05fE\xf3\x9d\xe0\xfd6L\xa0\xb31\xcaB\x86\xe6\xaa\x10\xb6\xea*\xa8v*\xd0\xd0\x8b3wyc\x8eL\xde\xd7\x19\xe2\xd9\xaf\x0e{-`\xf6\xd9\xecjc)\xc8v\xbd\x9ea14\x03\xf5\x11\xfa\r\x97\xe5\x0b\xad\x04\xc1\xb9"\x08\xabS\xcb\xdb\xb9yg\xb0\xf3\xd8\x1bW\xae\xbb\xbf\x90l\x06\xdd\xdfj\xae.\x0e\t\xed5"\xc4\x92\x03\xbd\xed\xd8\x9d\x1e\x86\xf8\xb6Yl\x10J\xac\x0f\x9f5\xec\x8e\x8bmT\x16\x99FH\x85P\xfes\xad)B\x99\x96"V\xdc\xe2\xdd\x1b;\xfc\x0f\xa3\xe3Pp4\'%\x1cn;\x851H\xed\xfc\xd9u\xcf\xfba\x9f\x8f=\x8f\xacws\xb0\xbc[\x12,6H?j"Z\xd6\xd0ve\xaa\x7f%\xc7ZEL\x8c\xfdbg\x00\xae\x99 olj\xbd\xc8\x9e\xaef\xfe\xa7\xb6X\xb6\x84\xd1%\x0e\xdc\x90\xd9\xe7\xd2\x979\x0e\xe8\xcbT\xb2\x10$\r,\x97->,3\x02\xe5q\x93G\xff}\xe2\xef\xc5b\xab\x04\xca\xa8\xf7\x1d\x1f\xeb\xb7\x04\xbf\xe1K\x7f\xa2\x18t\x08\xf8\xb1\n\xf4\xe549fzu$l\xf0\xe6\x8c\xa4mw\x16\x18\x05\x1b`1\xed\xcf\xe6:\x0f\xf9\x19\x83C\xcd\xa6\xd4\xcb\x1c\xa85\x8d\xb9\xad\x10\x11\x9d(\xe0\xbe\xb4\xe4\x90~\xf9Y\xb6>\xe8\x8fo\xc0-u\x04\xdb\xe9\xa6\x88\x152\x8cP\xc8AG\x1a\xbd!H\xb4\xbd\x19-\x82m \xbem\n;\x81DV\x84\xa8\xb4f\x1c\xe5\xb2h\x89I\xc0Jd;^\xea\x9fwN5\x08\xd9\xcc_\x9c:\xfb{e\x03x\xcd\x1f\xc3\xe1\xc7>j\x8f\xb9\x04w\xb2\x96\x03\'i\x80\x9c\x83\x1e\x04\xd7\x8e6vj\t\xce\xc3.I.\xad\x88yBJ^\xf5\x96\xcd\xa9\xe3\x9a\xdb\x97\xc9\xe9Xr\x9e!H\xc5\xc5\xe9\x1d\xee#\xceo\xdc}\xdfw\xc7\xf4\x9b\xae3\xd6\x9e{\xe3\xb8\xa9\xa3\xfa\x8a?z\xa0Ji_Z\xf5\xbb\x8do\x84\xf3p\xcbz\x17\xfaK1\x87r\x82\xa5\x93\xd3\x12\xdb\xed"\xd1\xfd\x12\x7f\x02\xc5L:(\xd5\xcck\xa7\xc1\xf4b\xfdX\xce\xfb\x1b\xecZ\xbcg+\xfc\x99\xda\xdbE\xd44\xf6\x1e\xdd\xda\xf5\xef\xcb\x0b\xc7\x99}\xcaX\xfeB\xe7\x16\x0c\xd3\x98\xe2j\x0e\xe8\x17\x0c\x9d\xde\x86\n\x90|a\xa2$\xee\xc35\x99\xa3\t&,\x06A\xc6\xe6a2\xf1\x87\x88DDwi\x9b\xdd\x91\xca\x99\xd6t\x86A\x01y]\xd2\xc1\xc3*\xa2\x08\xae\xd4\xebHF]x\xfd;\xa9\xfc\xca\xa4\xe6\xf9\xf5\xf4\xcf\xca>:jE\x93@ \xce\r:\x87Z\xb8O\xb9\x15\xddr\xdfD\x8e\xbfQ\x13\xec\xdcu\x13\x8bG\xe4\x85\xe2\xc0\xba(-\xd1Wah\\\xe9\x01\xd5\x07S\x04\x0e\xc6\xf9\xc7\x87\x95\x10A\x99Jw\xa9\x99(\t`\n\xe7Fy\xc0\rW\xee\x19\xea\x87\xde\x1d\xc1K7\xc1,Z\xc5\x1a\x8a]\xa0N\xe7\xd3Y\xc5\xea)\xf33"\xf6\xadn\xbc\xdd\xc1\xaa\xe7_\xaf\x9fRi\x8e\xa9\x1ax\xba,\x8fPHz\x92\x0e\x96@\xd0\x83eT\xda\xc1=\xdeZi\r(\x1dg\t\xd3\xc7\xf6:\xaaz\x17\xe8\x86\xab14t\xa7\x94\x00\x15\xb4\xd7\xe9\xe5\xb5\x9a\xbc\xc3\xc1\xf5\x94\x18\xef\x87\x81^\xa3\x83X\xe33t\xfe\xa2\xa8k\x1e\xd7m\xa7\xb1\xf5 \x9d\xa7\rz\x8c^\x1a\x15\xb4\xbc\xfd\xb7\xf8d\xae\nE\x0c\x11\x87k;\x9b\xb9\xc6\x060\xbf\xebO\xd5\x9c\xf2\xc0:\xb5p\xab\xe2\x19\x1f\x10W\xdawH5\xf4j\xb0\xb1>\x94S\x10t-v-M\xfc\x1f"s\x99\xf7\xd7\xb6\xfd\x84\xa8 \xe0\xbe3\xd2\xd7:\x0e\xabwHq\xae\xc1W\xa9\xe4\x87X\xbc\xa5\x0cwj\x02\xaf]\x9e\rg\'\xc0\xede%#8\xac\x1f\x17\x96\xb9\x84\x0b\xf4\xf7\xb74)\x96*\xcd\xd8\x8f\xf2\xcc\x10\x08\xf4\x9eH<\xc2N\r\xd9kX\x8e\xb3\xc5V\x8a\xf1{\x15* I7\xfc\xdb\xe2\xa9Mz\x06\xbb\x15\x87)\xe0x\xaeD\xdd\r\xb8\xed>*\xcb\xee\x89\x03\xd0\xee\x19\x05B)\xbf\xdd\n\xc7\xa1\xf6\n\xddj3$\xa4\xe5\xa0\xfa\x92\xd7O\x83\xaf\xba\xf4J%\x04\xe2\x9f\xb2\xe2\xfdd\x19$\x8dA\x00\xe2\x8aF\xff\xc6\',\xdd\xfe2I\x95\x03\xcf%\xc6d\x07\x18\x88\x85\xe7[\x06]\xf4\xea\x05\x8c\x0b\xad\x8d\x1b\xaf\x81\x02\x8e\x8eh\x80\xfa)\xb9\x8a\x85\xe3\xb8\xa3\xeb\xd5\xc00\xeaJ`\xfb/mc\x02j\x9ee\xf65\xaf\xf5\x02ae\xdb6A\x8f-E\xb2]\xdfr\xe4k\xd2n\xf4\x93\xea\x14\xf5"\xa5\xcf\xe5\xa85n\x89\xb9\x87\x11\x82\xbap\xae[\x1f\xd5;\x14\xf3\x1e?\xdd$\x9b\x10L3\xbcJ\x15\xf2\xdb\xa1\xf0\xa9\xa5\xe5\x96\x86\xb9\xab\xdf\xf8\xe7\xd8l\xff\xf4\x04\x03\x8a3\xc7\x0b\xe4\xb6\x9b\x94\x19\x87\xad\xcb<(fR)e3\xa8q\x82\x9c:\xf2Ie\xb0v _\x90h\xe7\xcb\xf4\xd0K\x98\xac\xc4\x97n\xb0G\xe5\xbe\xd0L\xbf\xe8\xca;.\x9eo\xf0\xf6\xce\x82~\xa4\x95\xceZ\xc4\xd8\xed\xba%\xe6\x19\xddy\x00\x89\xa8)\xdfb\xd7\x1c\x83\xb2\xb6\x1c?64Z\xa8\xce\xb1\xb7k\x18\xc5\x0b.\x95Q \x9c\x18qWur\xcb\x99\xbf[\xf0\x07\xae\x18\x10\xcd\x89\x94b6\xc0\x98\xdc\xaf\xc1\xa6\x8f\xc2\xba\xfb\x17~v\xb86V[\xa98\xf6\xae\xa9/\xc6\x18\x15\xf1\xbe\xbc\xaf\xa3\x19\x9e\x83@\x9en\x86$\x1f\x85\xb8\xc8\x98Z}\xa0~\xd5\xf7>D(9\xbe\xc5\xd3\xec\xad\xf6c)YY\xbd<\xc1\x96\xa3c.\x1c\x8fV\x0e\x91\xa5h6\r\xe1\x8d\xc2\xd9!\x10y\x0bT\xf5\xad\x00\xc55\x91\xe7E\x1e\x0e|\xcfSHR\xf8X4R=\xd7\x93b.\x92\x86\xb9\xcc\xab\xef\x07.pV;\xa1\xd9f\xb0\xa8\x85\x1dVX`N\x1f\x99\xb3\xccW\x98\xa0$\x1dy\x19\x9c\x92\xe7R\xe3\x8e\x89\xd7^\x19]\x00\x01\x1d\xc1\xe7z\x1c\xdc\x16\xc8\xb5[u\xbd\xe1\x8bk\xbeE\xa4\xe0/\x97\xef\xe9\xc7{\xd4\xf2\xfd\tK0\xd5\xac\xe3%\x18\xf2\xdf#\xe0Zu\xf8D\x1b\x9d\xc4\x9a1\xb7\x03*\xc9\xdf\x1a\xc9\x96\x98?+\xd7g\xdc\xea\xca?z\xa9\xc7\x0c}\xef\xcb\x93\xb8\xcb\xd7\xa62\xb3\xd72*p&\xfbi\x8c\xaa\xda{{\xdc\xdf\xbc\x9d\xf0$\xa8\xc4\x0fg+uO\x13pl\x1fw%\x83+1\xd78Tzo3&\xe6<\x91f\xbel4&\xeb\x18\xe9\xbf \xe0a$N\x9524\x86\xa8\x80\x91\x04]\xb7A\x80\xca7\x80\xe02\xd0\x92\xd2\xc8\x0f\xe1b\xe8\x97 g\x0f\xae\xdd\x83\xd1\xfe!\x99>~!V\xa8)+\xd9\x90\x10\x8b\x96PA\xca:\x06\x00u\xb2NT\xb3\x16)\xd8\xbcH\x0c\x0cl\xe5\x08\x9b\x8fp\xe3^J\x1b\x05*\xb9\x83\x1f\xbd\xd5J\xd9\xf0N\xfe\xa6\x9f+2\x1e\xe8\x05iz\xf9\xab\x1e\xf57\xeb\xe9\xd9xf\xfe\x1ci\x99;\xcc\x8b\x188\x87x-\x9f\xd2=\x9e\xa2\xf82{,\x17\x90u\x07\xd8\r(&\xfdi\x0f3\x01m\xdd\xdcY>>\x06@\x93k\x99\xd7\x00\xcar\xb1\x88\xceE\xe3H\xc9\xfaY\xc0?\xb7x8\xd1M5!y\xf9T\xaf\xf8\xaf\x8dkX\xf4\xfd\xa0\'gZ[\x8a\xd5h\xf5\xf0\x0e\xa7\x13\xdf\x82\xa3\x8c\xc4\xfe\x1e9\xb9/\x0f\xd5\xb5\x18\x1bv5f/3\xa1\x12\xba\x89\xf1*\x02B\x0bY\xb8\x83\xaa\xdd\xba\xb6\xd5\x88^\xf2\x83\xecW\r\xe6\xbc8Dw\x90\xfe\x1b\x8a\xa9\xf3\xa0\xa0\xc4Av\xe2\x08r0\xd6\xedm\xea(c\xd8\xabN\x0c?M\x8d\xf4\xcc\xef\xa1\xf4,\xc1\x15G\x841\xe4\xce+Lz\xe2F\xeb\xb3\xfa\xdf\xcd\xfcW3k\x90\xf2\x1c"Q#\x16\xe1\x9a\x8d\x1ap\x00Q\x84\x18\x95\x14\x8c\xd8\xab\x8a\x9d\xde\xa7\x9am\xf1\xcb\xb7\x10\x7f^/\xf5\n\xeb\x86V~\x0b\xbb\xd1"\xb9\x0f\xe3\xab[\x05\xdf\xaa\xa0g\xaa\n%\xaamg\x1d|E\xc5f\xe5\xa4\x11\x9fB\xe4\xe8\x08?\xe6\xec\xc2\xd3\xe8\xdc\xbc\\J\x1dYE\xe8\xea\xc5\x1f\x96o\xb8Me\x83\xb8\x14]7J\xa6;\x14\xfe3\x02W)\xebJ_\xc8f`\x8bU7M/\xa1\xd3\x84\xb9\xfd\xea\x94 {R\xfa#\xde\x1b\x9dx9\x19\x97\xc8`\xee\xb1P6!C,[\xf3\xe6\x1bm{9l\xe3v]\x16\x96\x8b\xc9\xf7\xe1\xd2\xce\x89\xf3\xee\xbd>\xa5\'\x19\x07>D\\u\xd2\xba\x08\xc4\xd7\x9bU~uK\xd6\x8dx6#\x8a\x98\x81\xd9[\xe0Hp\xf5\x0bG\xc8=\x9f\x01~3t\xa1\xae\xd6i\xcd\x0c\xe2\x91\xc2$\x0c\xfc\xff\xe4\xcfZ\xe5\xee\x08\xe2N(\xc9\xef\x9a\xe3\xad2\xfd\xb8\xa8\x82\xf9?\xfdx\xd5\xe7\xb2\xbe!Ef\xc5\xcc\x1b>W\x17\x07+\x8f\xab\xa2\x92C\x08\xba\xa3\x7fb\xad>\xa9\x8eV\xd3,.\x83\x14=P\xb3L\x95\xf0\x9b\xa9\xb4\xe0~F\xc4\'\xb8{\x00:QZY5N\x0b\x0ck\xf6@\x98\x9d:\xdeH\x1e\n\x86wpKH\xf0\xca\\\x12\xf3\xb6R5\xff0\x1b\xfbQ\xba\x87d\x0c5\x8bk\x85\xec\x1d\xe6\x02\xcf\x0ct\xfcb\xb7\x88x[\x81Z?\x91\x9b,<\x81\x9bC`H\x88\x90\xfdo2\x99\xae\xc2\rJ\xe8\x04\x99D\x9b?0\x03\x1b\x01!\xa3\x7f\xbaI\xa5w\x9d\x1c\xd231+\x9f\x89\xa5\x9f\x8c\xb6\xe0[wu\xce\x99U\xde\x84\xd4\x05\x04\x90\xa4\xd4\xe0\xc4P\xa90\'\x05\xb8\xa4\xaa\xa9_6\\P\xa3\xa9\xe7\x91\xca\x13\x82(\xea\xcb\xadg\x19\x11\x12\x02\xd1>C+\xec\xeb\xba\x0c\x11\xb5\x95\x13_R\xb0\xc9:,;\xc6:C\x06(\x15\xb9\xe8\x80%\x8a\xd9\xd1\\s\\\t\xea\xf0\xa3-J\xa3S\rV\x12\n\xf9k\xed\x97\xdc\x08\xcc\xc9\x85\xf14\xf2\xc7\x7f\x9c>\xa1\xeaI\xf1\xd44jz3EQ\xbcc\x83\x0b\xcaf\x08Q>\xda\x11\x0b-\xba\x18\x19n g\x85\x02\xfc\xb1\xa8qQM\x16\xc9\xb7\xbc\xa3b\x87aM\xbfyP?\x11\x0c\xd3\x89\xe5\x18E\xb2\xc9\x1d\xae}\x11i\xf9\xa083\xfeN\x83\xeb\xcf\x83\xa1\x16\xbe\xed\xda\x03mw\x1b\x97e\x92\xbcN\xb0\x0ba\xacQ\xf3X\xaa\xa1r\xbd\xd9\x9e\xe7\xb8zW\xb2L\x9bw\x8d\x19\xbf>\x07\x06\x1d\x0b\x92.\xaem\x7f\xf0\xaf/\n\xa0)\xd7y\n\xb1\xea5\xdd\xe6\x18nX\xbb+\xf9\x12\xdb\x02xh\xb11\x1b*=\x80\x95\x9a\x01\x8e\x83\xfe*\x880W\xa3F\xbc\xda\'tE\x8e6Y\xec\x98\xe0\xc3\xe5\xb6r\x0e\xb2X\xc7-\xd7\x07\xa1\x8b\xe25\x9b\xc9W\x0f3\xca\xef\xbe\xc5D9hy\r\xac\xa0D\x03\xb6{\x8e\xc2\x11s\xee\xde\x00~Q\x04\x08:\xd4\xc1eJ%\xe5[\xce\xda ;#f:x#\xe5\xb9&\xfa\xa6\xe61\xdbf\xed\xb7\x91\xd2V\x0bhb\x93+\x8c\x0e\xcdh\x0b\xf9E\x1ab\xb7\x02\x99\x94\xf4\x89j\x95\xe9V\x86\x8f\xb4,\xd2K\x05\xd1\xbah\x11\x19\x8c\x1a\x8e\xff \xce;d\xac3\x93\x19\x07\xf6\xd8SQ\xf9\x80\xb8_J\xfa\\T\xbbZG-\xbc]\xb2\xbb\xe9?\xc7\xd2(\xfc\xe3#\x99P\xd9c\xe1\x0c\x0e\xdd\xa5<\x93\xdb\xfc\x90z\xc9\xaa\xa6\xc6\xda\\\xb4\x8f\xf1EtB\xc1\xba\xfak\xb6\x7f4\x13<8G\xa49x\x83x\xaf]+H`}\xa8C\x92\x0e\x93Z 5\n4\x9d\xab\xfbMp\xff\xe0U\xe4k\x89t\xe7\xc4\xdc\xbc\xab*\x98\xe9\xd0\x91\xf7\xf3\x9c\x15\x1e@\xa8\xd6\xe2g+\xd8\x04Z\x17\xbc\x92\x0c\xfd.Kv\xed1\xa4\xaf~\xb8\xdc\x8b=\xc9H\xa4\xb16\xe7\xe8.\xa7\x9e\xad\x0e\x86*\x14\xc1\x99\xa5>\xb3m\x8a\xcd\xefw\x83\x14"\xa5I\xa7\xde\x13\x7f\xb6s\xbe^\x8f\xa3Ir\xcbTq\xe3I\x81P\r\xe9\x02\xbc\x82\xe3\x0f\x9e\xa0\xc4\x85\xb32\xa3\xf2K\xe8t\x9c?\x8c\xa8\x85\xc6\x8ek\x8bL\xb6\xba\xb4VG6\xb5.\xef\x87\xe6\x1e\x16\xac\xd5Ny\xbavE\x89{g;\xc7~\xb6m\x12%\x82\xb1_\xd7\x08sS\x1d\xacE\xceX\x11\xc2\xa7Y\n\xf7\x16\xa33\xa5:<\x88\xf5\xab\x82\x7fQ\xfcld\x93\x85,\x8d\xe5\xa7\x00\xe2\xa5\x89y&\xd8-8\xbd+|E\xfcZ\x9f\xf5[\x0fr\\\xce\xcb\x1a\xb9\xf0\xb8ny\x90\xa0p9\x0c\xf3\x97\x8a\xd7`w\x83\xe8(\xa8\xb6\xe5\xcc\'\x9b\xa2J$=q\xfc\x94K\xb6\x8d\xcdT\xfe\xf2t\x05\xd2XO\x95M\x8cM\xe9\xf4\xb6\t\xa3K}\xde\xedF\x0c\x06\x0f[\xb4\n\x0e\x92\x99\x93\xccq\x0b\xd0 ,\xf8\xc2$\x03\x1d\xac\x13\x0b@Zy\x83\xd2>|TN&Q\xad\xa9L\x10\xd8mcH4\xf9\xfa\xd40@\xb4|k\xb3vJ\xcc-\xb8\xbe\x92@\x10\x9e\xee\xbd\xcbZ\x0b!;GBb\x90\xe5\xfd\x9f\xcb0\r\x82\xf7WJ\x82\xe6\xccV\x8c]\xe6\x0c\xa3\xc8\x0e|\x8dn\xae\xf6\xff\xc7\x1e\xf7_\xdch\r=\xe4\xc5\xfb>\x98*F|\x07\xb7\x08\x14$6\x11P\t\xa9\xb9t\xa1\xfc(\xeaR\xf2\xe7~z\xbe3\xe2\x81\xe6\xda\xebD\xef3R\x91W\xbcQ{i@Z\x10\xd9\x8e\xed`\x89\x1d\x02\x8c\xeb\x8b\x04\x07\x02%M\x8c\xee\x1b\xa0\x06\x80\x9eo\xa2Ug~j\x8aL\xb3\xd9\xf5\x16\x92\xdd\xa9\xddWu\xb5\xe9eo\xc3m\xcf7\x9ar\xbd)\xc1\r\x18\x11\xb2:\xc3\x80*d\xa3W\x96~C]\x07\xfae\x9b\xfb\x05%\xa9\xb1\xf8\xca\xf5\xb7\xed\xfas*K\xc3\x8e=\x83\xfd\x08Q\x1e\x84adI]\xcc\xad\xe8\xc1\xf5\xb4\x0cM?s\xc1\xd8c%\r\xd3$\x99\xe9\x10\x98\x96\xed\x94\xb9loE\xe5\xc7.\x99\x9f!\x0e\r\xc1^o\xba\xc9\x14\xea\x05\xa6+N\x99\xf8$\x1c?\x95\xd9j.\xf4i\xff\xa8\xf3\xb2O\x12\xeaj\xa0?o\xe6:\x00=&*[\xab\xe3 \x9f\xe2\xfd\xe7oU\x86c\x0ff\xf7\x9c\xdc\xb6i\xde\x81\x91nw\xcf\xb6F\xca\xafh\xad\xc9\xe3\x8d\x8d?\xb1\x13\xe9\x97\r\x80cS\x8aB\xa0\x00S\x1e-\xcd2qfp\x90\xc8[\\[DU\xeadxm\x86\xa3\x10\xbe\x94\x06\xca\x08_\xbe\xd0Nf\x01\x82\xbc\xcfH\xb0\xbb\xae\xd6\n\xbd\xf5\x1b\xf8\xe2\xc1!Gc\x1d\x0b\x03\x8a\xe3v\xb6\xed\xf1\x93\x0b\x93\xf1\xabf.\xdd\xe7\x97\x8b\xdc?A\xf6\xd1\xfa\rS\xdf\xd1\xb5\xb1\xa0\x06\xf3\xd37\xael_\x9f5\xc7?\xbf)\xab\xe1~a}\xd8\xa36_\x16\xad\xc9\xeef\xca\xe4;\xe3\xb6\xfbjm\xfe\xa4\xd3\xf4AD`\xeb\x8f\x1d,\xeeM\x84\x81\x986\xa1?"\xc82\xca\xf1 l<F\xb2\xb2\x82@\xa9P\x9c~\xdci:G\x16\xd4\xac\xe4\xcazc1\x06JI\x1ft\x08\xbcz`\xd5qq\xec\x91\xa6\xbd\x7f\xdfk>#N\x1bS\x18&\xab\x89\x14\xae\x0c:\xd8S\xdb\xf3|\x8f\xf6\x83d:\x8e\xf6W\x10\xd4\x8e\xe0/\xd6j\x8f\xfd\xb8\xda(\xb79w\x1a\xa0+\x8a^q\xc5\x94\xd3\x1a;\xd5[\x8d\xeb\xf0\xa1\\\x94\xbb\xb5U &_\xc8\xfb\xbam\xff\x99\x0f!\xb08iX\xf9\xba\x96@\xe19znMwY\xb5\xcf\xfe\xae,--B\xac\xec\x10\xa2\x91L50[\xdfZ\xceT\x11\xb1>\x04\x9aVnDydfP\x90g\xb3\xfd0\xe7\xc4\x86b\xd2\xab\xbdT\xa7\xcdc\xab\x1b\xef5\x8c\xd5\x87\xff\xd6M\xc3\x93\x93+\xcd \t\xa6q\x150\x15\x81\x80\x01\xd3\x8a\x8e\xcd\x17\xe8w*\x8dS^X:\x90\xcb[\'\xbf\xe2\xe9\x932\x11y\x99g\x8b\xe4\xeb\xab\xd2\xff\xfe\xa45\xc9+\x91&`\x1e\xf33@-J\x1a\xe6\x91\x18\x8bZ4\xc0\\\x8d\x92\xba\x0c8\x19K\x0fGw9\xe1\xa5\xbc\x91\xdc\xe9v\x81M\xce\xe9\xda\xf7\xbf.\xb2C,(\x99\xaf)\x14\xeee\xfe\xfd\xec\xbcz\xe7Hq\xbcc\xd3\xaf\x04\xfc#\xbd;\x95\xbb-\xe8\x18N\xd4\xd79\xb1iz>Wd\xc3\x07\xc4V\xe5\x86\xad\xf0\x81x%\xdd5\xbaT\xc0M\x1f\xc2tU\xc0\xdf\xe9P\xc4\x0b\x13\x16\x1b\x8f*\x1e3M\x0b\xa8\xd5\x93\xf7\xcb\x01\x1a\x01gi\xdfo.\x1a\xec9Go\x86\xf69\\K\x80\xe1\x9c\xee5s\x86 e\xc4\xa3{\xe0\xb8\xbaxt(\xacH\xfe4\xbe\x04\xf6Y\xb0\xa6\x10Z\xdc\xc2\xb0\x90\xaf\xe3\x1eq\xff)DX|!\x9f\xbc\xe2\xf6\xa1^P\x80\x8fuz\xc9\xc1\xaf\xbb\x81\x1e\xc7=\xbd\x9b:\x0e\xf2\x97\xf6\xf4\xff\x08\xc1R\x81a\xcc\xd7\xe9\x168<Z6{\x93NrW\x82_\xc2>>ES\xaaGL\xec\xed[\x8a\xf05\x8bd_\xf7\x80j\xe3"C>\xee\xd1wrP5\xbf+B\xe3\xae\x16\xa9 \xee\xc9\x19\n\xba\xcc\x18\x1b)F\xbag\xfa\x93\x0f1\xf4c\xde\xbe\xac I\xdf\x16\x0f\xdf\xc5\x96e$q\x8b\x08\xce\x1a\x89rP!\xc8\x90,\xf6t\x87\x94\xc9U\xc1\x01\x10P\xc7@\xa4\x02hX\x9e\xf9\x94F\x10\xbe\xd9\xc5L\x1b\x0f\xac;-7\x07#\x87\xf3B\xb2\x17\x00\xc6\xd1\xb3\xb4\x97\xd9\xda\xbb7\x1fbA\x8ees\xd1*\x13\xfc\x1ep\xa4\\\x127BT\x9b\xa68\xbf\xf6\x0f\x16;\xea\xf8\xa8\xb5VS>\x9d\x9d~\xe5\xe7\xb6O\xe6\xd2\xff\xf7D\xf0JT\xfe}\'C\x89\x89L\xc3\x7f\xbd\xb9\xc8&\xce\xbd\x14\xee\xa21OsMP9\xbeS\x18V\x06\x16*JU\x00\xfa\xc4\xaci\x85E\x92Y\xc7j\x93\x1d\x8c\xd1\x11\x14k\x8f\xf7\xae\x9c{\xd27\xc9\x19\xe5\xa82\x92\xeb\xb7\x93\x8e\xe3\x89xd\xd2s\xcb\xaf\t\x1cZ&g\xcf]\xdf\x81\x90\x05\x1dA~\x86x\xbe\xb2\x0bk-h\xce\x7fZ[\x9c\xc8H\x82\x95\x061\xb5\x9f\x1b\x1c\x0f\x84\xa3W\x1a\xdb\x06ha\x0f\xe5\xc6X\xc9\x9d\xadaT`\xd9\x1e\xa5\xf9\xc4\x95j\x7f)V\xf5\t$\x98T\xb5L\x1f{@F\xcbl\x97o\x7f|HG\xee\x89\xc8\x1e%\xbc#\xae\x94\xef:\xcc\xfbx\x04T\x08\r\xaaGg\xea\x8a\x7f\xee\x81\xde\xaa[\x9br\xee5\xdes\xf2q\xd8\xe2\xe4i\x1c\x88S\x89j0sr\x92E\xa4\n\r\x86W3\x18g\xdd\x19\x85\r\xb0\xfba\x91\x1d\x17\x9ad\xa5\xc8,\x16\xc4\r\xb7\n{\x0f\xe9,\x7f\xf8Mi\x01Y\x15c\xaf\xdd\xef#c\x82m\xae\x84\xae\x16\xb7\xbd\xd7\x8a\xaep\x07\x154R\xba\xf0\xc6\x9cS\xa5\xf2\xdf\xb0!\x1a\x00z\x1a\xd1_\x13F\x9b\x11\xec\xc5\x05\xd7@Q6\xfc\';\xec$\xe7pZX\xb4\xfcx\xcdzn\xc9Z\xe5\xdf_J\x11\xc1\xe7\xefX\xe3\xd6\xbd\x90\\]\x89\xd9\nD\xb4\x92Wg\x91=\xa5\nW\x0b\x8d\xbb\x14Pl\x9bC\xc0T\x9dJ\xaa\x0c\xb0\xad6%\xf8\xd3y#i\x95lv\xb8\x9d\xc6c\xbfH#\x0b\xd5HR\xd0\x96D\xb4C\xaa\xe0\xaf&<C\x1d\x1f\x8a\xf3\x1avl\x90\xc6\xdf\x17e\xaa{\xb3\xee\xa0m\x8b\xa6\xact\x0e\x08Aph)\xfc\xe0%\x9c\xe4B\x91-\x1ev\xf0\xc6\xf8\xb3\x03\x14@\n\xad\x06V\xcc\r%U^\x95\xae\x08w\xbe\xab\xfc\xff\xfe7\xe0\x06\xd8@9Rh;\x96\x98?\x07 \xa2\x0fP\xb2e*O\xb7TH\xe2\x84N\xcdP\xa4\x05LR\\\x06\xfe\xe5\x92/\xeeZ+#\xb1\xe9\x80/c\x85\xc1\xb1x\xc7\xeb\x19\x8ea\xa5?\xe1\xb5\xb6D\xde\x06}\xb1\x96e\x89\x87\xcb$\xces\xd9\xe2\x87\xa0\x95\x93*\x9a4%\x86\xe8\x87\xf2r\x11\xfb)\x0c\x02\xdc\x95\xef\x13Hhp^=6}\x11\xb4\x8c\x00\xf0_T\x82\xdd\x9d\x89\xcd\xed\x06\x13u\xb6)x\xfd\xf3\x00KT\x05\xf1\xfe>\x82\'W\x17$\xf4;5O\xa6d\t\x81\xa2\xe6\xb9\xcd\xd0.\x88\x8eA\xdap@\xd8F\xce;\x80(RK\x8d \xec}\xaf )\xd1t+\x1d\xc2\xef\x01\xcf\xd6*\xcf6\\s>\xd2\xc3\x12y\xc2z\x12h;\xed\x8a(\xe2\xac\xc8\xb1\xbf\xf1@!\x94\xae\x13;\x94\xac\x8b\xda\xd3}\xb2\x89\xaa.MTT\x08{\xd1\x91\xc4\x95\x05u\xfe\xfe\xd4\xbe^o\xef\xaa\xba\xc2\x95\xa3\xb0\xfa\xd8\\G\xc3R\xeb\t#\xa5\xdd\x18\xadB\xc1+\x0f\xc9\x18\x8e\xcad\x1a^4\x0c\x08\xcaqv\x0c\xcc\xcf\xd4Y\xba]E7N\xb6#/\xeb\xce?\xc2\xd6\xc6\xd9\xa1\xd2\x1c\x13\xe3\xa5\x93\xf6J\x18VC\x03j\xb9\r\xe7;\xea\xa6P\xe0\x0eu\xe2z\xfd+\xea\x1d\xceN;\xcb\x8a\x06}\xea\xdce\xe1\xfb\xf4yS\x8dgL\x9c\x8f9 \x19\x82\xf0\xcf\xee\xd1bs1\xdde\x92`\x82\x9bQy\x1f8Wi\xf2\r\xf9\xc9P\xd4(\xbfW\xa8_\x8d\x17\x0e\xce\xb5\xccd\xe3{\xb7pU!ne-\xd3\xad\x00\x1d^P=\xbe\xd9{\xb5]\x04\x01v/$\x83p\xb7\x1b\x07\xa1d\x9b\xc3\xb3\xf9\x19\xcf}\xf6\xb6\xad\xd3\n\x8b3\xe1\xab\xc3#a\xaf\x0f\xad\x82\xd9\r\xc9\x9a\x03\xac\x92\xc5\x97\x1d\xfe\x0c\x8e\xe9\x07\xc6\xf6w\xdfb\xfb\x7fih\x02>ngGk\x87A\x0c\xe6\xaa\xcb\xa3\xec\xfdC\xbat \xb1%\xd1}\x9d\xe6\xd0qf\xe3X\xf4dW1n!\xa2<\xf5/\xfc\xec\x01?\xab\x8c\xb9\xd9@9\x98Fc3.\xef\xa3kN[\xfe^\x00zj7\xe8\xd2\xfe\xffRL\xe1\x8b6\x08\x14c9#\xc6<kx\xbe)U\x9de\xb4\x1dka9z\x00Y\x1c\xf0\xfb\xebjk\xf0gf-\xc4m\x1c6\xafGI\x9f\xad\xd5&\xd4\nV\xb2m\xb9\xfbA\x81\xba\xee\xd3\x9a6\x9daG\xbb\xa2\x13cW\xc0e\xa4\xf6\x05;\xf74\xb5_\x8b\x99\xea\x88\xfb7\xbb\x83\x8f\x087Se\xb5\xd8u\x13\x8c\xb0&\x85\x05G\x82^-2\xff\xc6\xa6\xc2\xef\xcc\x0b\x062\x93^vo\x02\xa4D4\xf56\xaf*^\x01[\x9eL\xe9\x1f \x0eH:on\x01x=\xbf\xd5\xbb\'\x1a\x90\xe3\x1d1L\xf5?\xd7\xb3w\xc4 l\x8e\x8a\x15\'\xa6-G+\xca~\x1b\xe9\xe7o\xe7Z\xdd\xa9])\\v\xd7-\xad9K&<\xd5\xd5\xf7\xfe\xc7\xab~9\x0fS\xe5\xf6\x9f6<\xd9;\x9b%\x18\xfal\xe6LS_\xd8\xa5\xa4\x8d_KG\xf6\x8f7X\xd5\x89\xa4\xc9^\x0fK\xe7\xb0\xa9\x8dS\xb7\x17|\xa4$\xc0\xbc\t\xe7\x0f\xde\xb7\xfc\x1a\r\x01\x10\xb7\x80\x89T\xbc\xe1\xcc>\x19,\x86\xb0\x0e\xbbW\x8b\xe0\xe1\x986*\xa7-L\xf9\xe6t\xbe\xb1 ^\xb8\xfc\xfc\xdd\xa2\x97\x05\xca\xda\x846vD\x1e\x87\xa9-\x06y\x11\xbd+%\xdc&i^\xf7DY\xb2\xeagErF \x06\t\xbd\xf1\x10\xf2\xe7\xf4\xed\xc4a\x1f\xd9\xd7\x13\xa2!\xff\x0f\xc9\x8e\xcf\xb7yJ\xe4"A+)\xad\x9dn\xedP*\xf1\xe7>\x14(\x85-\xa5\xc6I/\xb1[\xf9p\x14\x11\x9a\xf4Y\xda6\xae\xeb\xa0\x13;\xdf#\x97v;\xfc\x84\xad)\xc2lK\xd29\xba\xa3/\xbd^\xbf\x8c\xcaA\xaa\xab[](c\x80b\xf3\x18\x17\xab\x94\xeaq\x96"\xf5\xbf\xd8\x81\xd8,\xd1T\xd7\xf1\xfb\xaa>O"\xbc\xb1\x03\xcb\x1f=\x9a\xad\x12\x94\xeeI\xf6\x15Qn\xa5\xf4\xd7"\x11\xfe\xbafY(\xfa\r2K\xd6\xbe\xd9 \x02 \xf3bT\x16\x9a%\xe9l?g\x00\xf5\n"m\x9e#\xbb\xf7J\x02\x83T\xe5.\xdcs /\xe8\x85\xbfd\xb2r\x8e\xef\x83\txn\xf2\xa1<\xfe\xcf\xb1<o\x0c\xa2\'\xee\xd7\x8cL\xbd<\xd4\x8cf\x8e&\x91\x92\xb5\xe8\x07_\xbf=/e\xbc\xaeq\xc4*\x12\xbc\x13\x0e\x9ax!\xd7\xbdl\xddZ"\xca\xc0\xe7\x98\x9e\xc4IW\x8e\x83\x04\xf7\x1e\xc1|\xd7t]%\xd8\x8a!\xef\xb3\x84\xc1\xb3]=z\x1e\xacb\xed>\xe2&\xcd\xe7\xb0\x15\x1b\xd4L18\x03d\x89\xcc\xfc\xfd<\x16\x1d\xe4\xa2\x98\xea!yNi\n\xf8\xf6(j\x9d\xc8\xea\x04\x0c\xd7\xa6\x9d.\xc4\xaa\xa6\x07\xb1:\x96\xb9\x80\xeaf\x1f\x9e\xff\xcf\x89N\xf1\xc1j\x10\xf7&\x0f\x98\xf3\x9f=\x85\xc5(L=m\xba\xbb\x89U)\x87\x9f\xbf\xf9\xaa\x7f3\x8a\xad\x8bTP\xcc=\xd4mB?\xd1\xbc\x96\xc2\x8c\xfb\x1e\xb2\x9d<\xa7\x83\xfb\xf3\xb0\x11\xe3\xdd\xe5\xc0\xcc9\xb3\x87\xbb&\x05O@\xde\xa2_\x90G\xe9\xb8\x8cJZ\xccZ\xbc\x1b\xf0\xcf\xf9\xe9Z\x1a8x,\x84-\xde\x0c\x90\xeb\xe0B\xf8\x9eF\xce\x00~\xfa\xc9*\x90\x97\xc5\x1a6\x90\xd7D\xbb\xd8M\xaa\x9dk\x1b&6\xa9\xaf\xe0hB\x1d\x9b\x965\xe3AKL\xab0vD\xd7\\\xd4\xde\xdfO\xda\x9d\xb3\x01.\xf5\xfa\xd7\x02<\xbc\x0e\xf1\xc0\xf1\xc4Ds\x0bh\x17\xc0\xc2\xd0\t\xba9\x15\x02\xda\xc2\xe1p\x13\x17\xac]\xbb\xcda\xf76_pHw\x8c\x11\xd5\xf8tn"\x0e\x871!\x01$M\xc5\t\xb6\xff-\xa75\xaaJ7\xefo\x90\xd50,\xb5`K\xc4\xd0\xc8|\x94\x98\xbc\xac;\xaa;\xc6V\xaa\x8d\r\xfb\x89Qz\xd5GK\x96\x94\xfdl\xc3\xf3\x86\xa5\x8cp\x1d\xae\xdf\x81\xfe\xaf+M\xa4&-\xfc|\xbbB\xd0xt\x93!.s\xdbw\x8de\x1cd\xb9\xb0\xfe\xe633\x87y5\xfeEh\x01\x9dTN\xc3\x83X\xf6\n\xdfW\xfa\x12RK\xf4\x9f\xd7X\x96\xc6\x9c\x18.\x80&%hP\x87\xfaMZ\x8c`,_Q2NIM\xe6\xf3\xed\xb3^\x9a\x8f\xfa\x9c[4\xb9\x83}\x1eH\'2\x86d\xda')
|
1
|
+
from flask import g,request
|
2
|
+
import enum
|
3
|
+
from hiddifypanel.models import *
|
4
|
+
import yaml
|
5
|
+
import json
|
6
|
+
from hiddifypanel.panel import hiddify
|
7
|
+
|
8
|
+
|
9
|
+
def all_proxies(child_id=0):
|
10
|
+
all_proxies = hiddify.get_available_proxies(child_id)
|
11
|
+
all_proxies = [p for p in all_proxies if p.enable]
|
12
|
+
# all_cfg=Proxy.query.filter(Proxy.enable==True).all()
|
13
|
+
# if not hconfig(ConfigEnum.domain_fronting_domain):
|
14
|
+
# all_cfg=[c for c in all_cfg if 'Fake' not in c.cdn]
|
15
|
+
# if not g.is_cdn:
|
16
|
+
# all_cfg=[c for c in all_cfg if 'CDN' not in c.cdn]
|
17
|
+
# if not hconfig(ConfigEnum.ssfaketls_enable):
|
18
|
+
# all_cfg=[c for c in all_cfg if 'faketls' not in c.transport and 'v2ray' not in c.proto]
|
19
|
+
# if not hconfig(ConfigEnum.vmess_enable):
|
20
|
+
# all_cfg=[c for c in all_cfg if 'vmess' not in c.proto]
|
21
|
+
|
22
|
+
return all_proxies
|
23
|
+
|
24
|
+
|
25
|
+
def proxy_info(name, mode="tls"):
|
26
|
+
return "error"
|
27
|
+
|
28
|
+
|
29
|
+
def pbase64(full_str):
|
30
|
+
return full_str
|
31
|
+
str = full_str.split("vmess://")[1]
|
32
|
+
import base64
|
33
|
+
resp = base64.b64encode(f'{str}'.encode("utf-8"))
|
34
|
+
return "vmess://"+resp.decode()
|
35
|
+
|
36
|
+
|
37
|
+
def make_proxy(proxy, domain_db, phttp=80, ptls=443):
|
38
|
+
if type(phttp) == str:
|
39
|
+
phttp = int(phttp) if phttp != "None" else None
|
40
|
+
if type(ptls) == str:
|
41
|
+
ptls = int(ptls) if ptls != "None" else None
|
42
|
+
l3 = proxy.l3
|
43
|
+
|
44
|
+
domain = domain_db.domain
|
45
|
+
|
46
|
+
child_id = domain_db.child_id
|
47
|
+
hconfigs = get_hconfigs(child_id)
|
48
|
+
port = 0
|
49
|
+
|
50
|
+
if l3 in [ProxyL3.tls, ProxyL3.tls_h2, ProxyL3.tls_h2_h1]:
|
51
|
+
port = ptls
|
52
|
+
elif l3 == "http":
|
53
|
+
port = phttp
|
54
|
+
elif l3 == "kcp":
|
55
|
+
port = hconfigs[ConfigEnum.kcp_ports].split(",")[0]
|
56
|
+
elif l3 == "tuic":
|
57
|
+
port = hconfigs[ConfigEnum.tuic_port].split(",")[0]
|
58
|
+
|
59
|
+
name = proxy.name
|
60
|
+
if not port:
|
61
|
+
return {'name': name, 'msg': "port not defined",'type':'error', 'proto': proxy.proto}
|
62
|
+
|
63
|
+
is_cdn = ProxyCDN.CDN in proxy.cdn
|
64
|
+
if is_cdn and domain_db.mode not in [DomainType.cdn,DomainType.auto_cdn_ip]:
|
65
|
+
# print("cdn proxy not in cdn domain", domain, name)
|
66
|
+
return {'name': name, 'msg': "cdn proxy not in cdn domain",'type':'debug', 'proto': proxy.proto}
|
67
|
+
if not is_cdn and domain_db.mode in [DomainType.cdn,DomainType.auto_cdn_ip]:
|
68
|
+
# print("not cdn proxy in cdn domain", domain, name, proxy.cdn)
|
69
|
+
return {'name': name, 'msg': "not cdn proxy in cdn domain",'type':'debug', 'proto': proxy.proto}
|
70
|
+
|
71
|
+
cdn_forced_host = domain_db.cdn_ip or domain_db.domain
|
72
|
+
|
73
|
+
base = {
|
74
|
+
'name': name.replace(" ", "_"),
|
75
|
+
'cdn': is_cdn,
|
76
|
+
'mode': "CDN" if is_cdn else "direct",
|
77
|
+
'l3': l3,
|
78
|
+
'host': domain,
|
79
|
+
'port': port,
|
80
|
+
'server': cdn_forced_host,
|
81
|
+
'sni': domain,
|
82
|
+
'uuid': str(g.user_uuid),
|
83
|
+
'proto': proxy.proto,
|
84
|
+
'transport': proxy.transport,
|
85
|
+
'proxy_path': hconfigs[ConfigEnum.proxy_path],
|
86
|
+
'alpn': "h2" if proxy.l3 == 'tls_h2' else 'h2,http/1.1' if proxy.l3 == 'tls_h2_h1' else "http/1.1",
|
87
|
+
'extra_info': f'{domain_db.alias or domain}',
|
88
|
+
'fingerprint': hconfigs[ConfigEnum.utls],
|
89
|
+
'allow_insecure': domain_db.mode == DomainType.fake or "Fake" in proxy.cdn,
|
90
|
+
'dbe':proxy,
|
91
|
+
'dbdomain':domain_db
|
92
|
+
}
|
93
|
+
|
94
|
+
if base["proto"] == "trojan" and "tls" not in l3:
|
95
|
+
return {'name': name, 'msg': "trojan but not tls",'type':'warning', 'proto': proxy.proto}
|
96
|
+
|
97
|
+
if l3 == "http" and "XTLS" in proxy.transport:
|
98
|
+
return {'name': name, 'msg': "http and xtls???",'type':'warning', 'proto': proxy.proto}
|
99
|
+
if l3 == "http" and base["proto"] in ["ss", "ssr"]:
|
100
|
+
return {'name': name, 'msg': "http and ss or ssr???",'type':'warning', 'proto': proxy.proto}
|
101
|
+
if proxy.proto in ProxyProto.vmess:
|
102
|
+
base['cipher']="chacha20-poly1305"
|
103
|
+
if "Fake" in proxy.cdn:
|
104
|
+
if not hconfigs[ConfigEnum.domain_fronting_domain]:
|
105
|
+
return {'name': name, 'msg': "no domain_fronting_domain",'type':'debug', 'proto': proxy.proto}
|
106
|
+
if l3 == "http" and not hconfigs[ConfigEnum.domain_fronting_http_enable]:
|
107
|
+
return {'name': name, 'msg': "no http in domain_fronting_domain",'type':'debug', 'proto': proxy.proto}
|
108
|
+
if l3 == "tls" and not hconfigs[ConfigEnum.domain_fronting_tls_enable]:
|
109
|
+
return {'name': name, 'msg': "no tls in domain_fronting_domain",'type':'debug', 'proto': proxy.proto}
|
110
|
+
base['server'] = hconfigs[ConfigEnum.domain_fronting_domain]
|
111
|
+
base['sni'] = hconfigs[ConfigEnum.domain_fronting_domain]
|
112
|
+
# base["host"]=domain
|
113
|
+
base['mode'] = 'Fake'
|
114
|
+
|
115
|
+
elif l3 == "http" and not hconfigs[ConfigEnum.http_proxy_enable]:
|
116
|
+
return {'name': name, 'msg': "http but http is disabled ",'type':'debug', 'proto': proxy.proto}
|
117
|
+
path = {
|
118
|
+
'vless': f'{hconfigs[ConfigEnum.path_vless]}',
|
119
|
+
'trojan': f'{hconfigs[ConfigEnum.path_trojan]}',
|
120
|
+
'vmess': f'{hconfigs[ConfigEnum.path_vmess]}',
|
121
|
+
'ss': f'{hconfigs[ConfigEnum.path_ss]}',
|
122
|
+
'v2ray': f'{hconfigs[ConfigEnum.path_ss]}'
|
123
|
+
}
|
124
|
+
|
125
|
+
if base["proto"] in ['v2ray', 'ss', 'ssr']:
|
126
|
+
base['cipher'] = 'chacha20-ietf-poly1305'
|
127
|
+
if "shadowtls" not in proxy.transport:
|
128
|
+
base['uuid'] = f'{hconfigs[ConfigEnum.shared_secret]}'
|
129
|
+
|
130
|
+
if base["proto"] == "ssr":
|
131
|
+
base["ssr-obfs"] = "tls1.2_ticket_auth"
|
132
|
+
base["ssr-protocol"] = "auth_sha1_v4"
|
133
|
+
base["fakedomain"] = hconfigs[ConfigEnum.ssr_fakedomain]
|
134
|
+
base["mode"] = "FakeTLS"
|
135
|
+
return base
|
136
|
+
elif "faketls" in proxy.transport:
|
137
|
+
base['fakedomain'] = hconfigs[ConfigEnum.ssfaketls_fakedomain]
|
138
|
+
base['mode'] = 'FakeTLS'
|
139
|
+
return base
|
140
|
+
elif "shadowtls" in proxy.transport:
|
141
|
+
|
142
|
+
base['fakedomain'] = hconfigs[ConfigEnum.shadowtls_fakedomain]
|
143
|
+
base['mode'] = 'ShadowTLS'
|
144
|
+
return base
|
145
|
+
|
146
|
+
if "XTLS" in proxy.transport:
|
147
|
+
base['flow'] = 'xtls-rprx-vision'
|
148
|
+
return {**base, 'transport': 'tcp', 'l3': 'xtls'}
|
149
|
+
if "tcp" in proxy.transport:
|
150
|
+
base['transport'] = 'tcp'
|
151
|
+
base['path'] = f'/{path[base["proto"]]}{hconfigs[ConfigEnum.path_tcp]}'
|
152
|
+
return base
|
153
|
+
if proxy.transport in ["ws", "WS"]:
|
154
|
+
base['transport'] = 'ws'
|
155
|
+
base['path'] = f'/{path[base["proto"]]}{hconfigs[ConfigEnum.path_ws]}'
|
156
|
+
base["host"] = domain
|
157
|
+
return base
|
158
|
+
|
159
|
+
if proxy.transport == "grpc":
|
160
|
+
base['transport'] = 'grpc'
|
161
|
+
base['grpc_mode'] = "multi"
|
162
|
+
base['grpc_service_name'] = f'{path[base["proto"]]}{hconfigs[ConfigEnum.path_grpc]}'
|
163
|
+
base['path'] = base['grpc_service_name']
|
164
|
+
return base
|
165
|
+
|
166
|
+
if "h1" in proxy.transport:
|
167
|
+
base['transport'] = 'tcp'
|
168
|
+
base['alpn'] = 'http/1.1'
|
169
|
+
return base
|
170
|
+
return {'name': name, 'msg': 'not valid','type':'error', 'proto': proxy.proto}
|
171
|
+
|
172
|
+
|
173
|
+
def to_link(proxy):
|
174
|
+
if 'error' in proxy:
|
175
|
+
return proxy
|
176
|
+
|
177
|
+
name_link = proxy["name"]+"_"+proxy['extra_info']
|
178
|
+
if proxy['proto'] == 'vmess':
|
179
|
+
# print(proxy)
|
180
|
+
vmess_type = None
|
181
|
+
if proxy["transport"] == 'tcp':
|
182
|
+
vmess_type = 'http'
|
183
|
+
if 'grpc_mode' in proxy:
|
184
|
+
vmess_type = proxy['grpc_mode']
|
185
|
+
vmess_data = {"v": "2",
|
186
|
+
"ps": name_link,
|
187
|
+
"add": proxy['server'],
|
188
|
+
"port": proxy['port'],
|
189
|
+
"id": proxy["uuid"],
|
190
|
+
"aid": "0",
|
191
|
+
"scy": proxy['cipher'],
|
192
|
+
"net": proxy["transport"],
|
193
|
+
"type": vmess_type or "none",
|
194
|
+
"host": proxy.get("host", ""),
|
195
|
+
"alpn": proxy.get("alpn", "h2,http/1.1"),
|
196
|
+
"path": proxy["path"] if "path" in proxy else "",
|
197
|
+
"tls": "tls" if "tls" in proxy["l3"] else "",
|
198
|
+
"sni": proxy["sni"],
|
199
|
+
"fp": proxy["fingerprint"]
|
200
|
+
}
|
201
|
+
|
202
|
+
return pbase64(f'vmess://{json.dumps(vmess_data)}')
|
203
|
+
if proxy['proto'] == "ssr":
|
204
|
+
baseurl = f'ssr://proxy["encryption"]:{proxy["uuid"]}@{proxy["server"]}:{proxy["port"]}'
|
205
|
+
return baseurl
|
206
|
+
if proxy['proto'] in ['ss', 'v2ray']:
|
207
|
+
baseurl = f'ss://proxy["encryption"]:{proxy["uuid"]}@{proxy["server"]}:{proxy["port"]}'
|
208
|
+
if proxy['mode'] == 'faketls':
|
209
|
+
return f'{baseurl}?plugin=obfs-local%3Bobfs%3Dtls%3Bobfs-host%3D{proxy["fakedomain"]}&udp-over-tcp=true#{name_link}'
|
210
|
+
if proxy['mode'] == 'shadowtls':
|
211
|
+
return f'{baseurl}?plugin=shadow-tls%3Bpassword%3D{proxy["proxy_path"]}%3Bhost%3D{proxy["fakedomain"]}&udp-over-tcp=true#{name_link}'
|
212
|
+
if proxy['proto'] == 'v2ray':
|
213
|
+
return f'{baseurl}?plugin=v2ray-plugin%3Bmode%3Dwebsocket%3Bpath%3D{proxy["path"]}%3Bhost%3D{proxy["host"]}%3Btls&udp-over-tcp=true#{name_link}'
|
214
|
+
|
215
|
+
infos = f'&sni={proxy["sni"]}&type={proxy["transport"]}'
|
216
|
+
|
217
|
+
infos += f"&alpn={proxy['alpn']}"
|
218
|
+
|
219
|
+
# infos+=f'&alpn={proxy["alpn"]}'
|
220
|
+
infos += f'&path={proxy["path"]}' if "path" in proxy else ""
|
221
|
+
infos += f'&host={proxy["host"]}' if "host" in proxy else ""
|
222
|
+
if "grpc" == proxy["transport"]:
|
223
|
+
infos += f'&serviceName={proxy["grpc_service_name"]}&mode={proxy["grpc_mode"]}'
|
224
|
+
if 'vless' == proxy['proto']:
|
225
|
+
infos += "&encryption=none"
|
226
|
+
if proxy.get('fingerprint','none')!='none':
|
227
|
+
infos += "&fp="+proxy['fingerprint']
|
228
|
+
if proxy['l3'] != 'quic':
|
229
|
+
infos += '&headerType=None' # if not quic
|
230
|
+
if proxy['mode'] == 'Fake' or proxy['allow_insecure']:
|
231
|
+
infos += "&allowInsecure=true"
|
232
|
+
|
233
|
+
infos += f'#{name_link}'
|
234
|
+
baseurl = f'{proxy["proto"]}://{proxy["uuid"]}@{proxy["server"]}:{proxy["port"]}'
|
235
|
+
if 'xtls' == proxy['l3']:
|
236
|
+
return f'{baseurl}?flow={proxy["flow"]}&security=tls&type=tcp{infos}'
|
237
|
+
if proxy['l3'] == 'http':
|
238
|
+
return f'{baseurl}?security=none{infos}'
|
239
|
+
if 'tls' in proxy['l3']:
|
240
|
+
return f'{baseurl}?security=tls{infos}'
|
241
|
+
return proxy
|
242
|
+
|
243
|
+
def to_clash_yml(proxy):
|
244
|
+
return yaml.dump(to_clash(proxy))
|
245
|
+
|
246
|
+
|
247
|
+
def to_clash(proxy, meta_or_normal):
|
248
|
+
name=proxy['name']
|
249
|
+
if proxy['l3'] == "kcp":
|
250
|
+
return {'name': name, 'msg': "clash not support kcp",'type':'debug'}
|
251
|
+
if proxy.get('flow', '') == "xtls-rprx-vision":
|
252
|
+
return {'name': name, 'msg': "vision not supported",'type':'debug'}
|
253
|
+
if meta_or_normal == "normal":
|
254
|
+
if proxy['proto'] == "vless":
|
255
|
+
return {'name': name, 'msg': "vless not supported in clash",'type':'debug'}
|
256
|
+
if proxy['l3'] == "xtls":
|
257
|
+
return {'name': name, 'msg': "xtls not supported in clash",'type':'debug'}
|
258
|
+
if proxy['transport'] == "shadowtls":
|
259
|
+
return {'name': name, 'msg': "shadowtls not supported in clash",'type':'debug'}
|
260
|
+
if proxy['l3']==ProxyL3.tls_h2 and proxy['proto'] in [ProxyProto.vmess,ProxyProto.vless] and proxy['dbe'].cdn==ProxyCDN.direct:
|
261
|
+
return {'name': name, 'msg': "bug tls_h2 vmess and vless in clash meta",'type':'warning'}
|
262
|
+
base = {}
|
263
|
+
# vmess ws
|
264
|
+
base["name"] = f"""{proxy["name"]} {proxy['extra_info']} {proxy['port']} {proxy["dbdomain"].id}"""
|
265
|
+
base["type"] = str(proxy["proto"])
|
266
|
+
base["server"] = proxy["server"]
|
267
|
+
base["port"] = proxy["port"]
|
268
|
+
base['alpn'] = proxy['alpn'].split(',')
|
269
|
+
if proxy["proto"] == "ssr":
|
270
|
+
base["cipher"] = proxy["cipher"]
|
271
|
+
base["password"] = proxy["uuid"]
|
272
|
+
base["udp"] = True
|
273
|
+
base["obfs"] = proxy["ssr-obfs"]
|
274
|
+
base["protocol"] = proxy["ssr-protocol"]
|
275
|
+
base["obfs-param"] = proxy["fakedomain"]
|
276
|
+
return base
|
277
|
+
elif proxy["proto"] in ["ss", "v2ray"]:
|
278
|
+
base["cipher"] = proxy["cipher"]
|
279
|
+
base["password"] = proxy["uuid"]
|
280
|
+
base["udp_over_tcp"] = True
|
281
|
+
if proxy["transport"] == "faketls":
|
282
|
+
base["plugin"] = "obfs"
|
283
|
+
base["plugin-opts"] = {
|
284
|
+
"mode": 'tls',
|
285
|
+
"host": proxy["fakedomain"]
|
286
|
+
}
|
287
|
+
elif proxy["transport"] == "shadowtls":
|
288
|
+
base["plugin"] = "shadow-tls"
|
289
|
+
base["plugin-opts"] = {
|
290
|
+
"host": proxy["fakedomain"],
|
291
|
+
"password": proxy["proxy_path"]
|
292
|
+
}
|
293
|
+
|
294
|
+
elif proxy["proto"] == "v2ray":
|
295
|
+
base["plugin"] = "v2ray-plugin"
|
296
|
+
base["type"] = "ss"
|
297
|
+
base["plugin-opts"] = {
|
298
|
+
"mode": "websocket",
|
299
|
+
"tls": "tls" in proxy["l3"] ,
|
300
|
+
"skip-cert-verify": proxy["mode"] == "Fake" or proxy['allow_insecure'],
|
301
|
+
"host": proxy['sni'],
|
302
|
+
"path": proxy["path"]
|
303
|
+
}
|
304
|
+
return base
|
305
|
+
elif proxy["proto"] == "trojan":
|
306
|
+
base["password"] = proxy["uuid"]
|
307
|
+
base["sni"] = proxy["sni"]
|
308
|
+
|
309
|
+
else:
|
310
|
+
base["uuid"] = proxy["uuid"]
|
311
|
+
base["servername"] = proxy["sni"]
|
312
|
+
base["tls"] = "tls" in proxy["l3"]
|
313
|
+
# if meta_or_normal == "meta":
|
314
|
+
# base['client-fingerprint'] = proxy['fingerprint']
|
315
|
+
if "xtls" == proxy['l3']:
|
316
|
+
base["flow"] = proxy['flow']
|
317
|
+
base["flow-show"] = True
|
318
|
+
|
319
|
+
if proxy["proto"] == "vmess":
|
320
|
+
base["alterId"] = 0
|
321
|
+
base["cipher"] = proxy["cipher"]
|
322
|
+
base["udp"] = True
|
323
|
+
|
324
|
+
base["skip-cert-verify"] = proxy["mode"] == "Fake"
|
325
|
+
|
326
|
+
base["network"] = proxy["transport"]
|
327
|
+
|
328
|
+
if base["network"] == "ws":
|
329
|
+
base["ws-opts"] = {
|
330
|
+
"path": proxy["path"]
|
331
|
+
}
|
332
|
+
if "host" in proxy:
|
333
|
+
base["ws-opts"]["headers"] = {"Host": proxy["host"]}
|
334
|
+
|
335
|
+
if base["network"] == "tcp" and proxy['alpn'] != 'h2':
|
336
|
+
# if proxy['proto']=='vless':
|
337
|
+
base["network"] = "http"
|
338
|
+
|
339
|
+
if "path" in proxy:
|
340
|
+
base["http-opts"] = {
|
341
|
+
"path": [proxy["path"]]
|
342
|
+
}
|
343
|
+
if 'host' in proxy:
|
344
|
+
base["http-opts"]["host"] = [proxy["host"]]
|
345
|
+
if base["network"] == "tcp" and proxy['alpn'] == 'h2':
|
346
|
+
base["network"] = "h2"
|
347
|
+
|
348
|
+
if "path" in proxy:
|
349
|
+
base["h2-opts"] = {
|
350
|
+
"path": proxy["path"]
|
351
|
+
}
|
352
|
+
if 'host' in proxy:
|
353
|
+
base["h2-opts"]["host"] = [proxy["host"]]
|
354
|
+
if base["network"] == "grpc":
|
355
|
+
base["grpc-opts"] = {
|
356
|
+
"grpc-service-name": proxy["grpc_service_name"]
|
357
|
+
}
|
358
|
+
|
359
|
+
return base
|
360
|
+
|
361
|
+
|
362
|
+
|
363
|
+
def get_clash_config_names(meta_or_normal, domains):
|
364
|
+
allphttp=[p for p in request.args.get("phttp","").split(',') if p]
|
365
|
+
allptls=[p for p in request.args.get("ptls","").split(',') if p]
|
366
|
+
|
367
|
+
allp = []
|
368
|
+
for d in domains:
|
369
|
+
hconfigs = get_hconfigs(d.child_id)
|
370
|
+
for t in (['http', 'tls'] if hconfigs[ConfigEnum.http_proxy_enable] else ['tls']):
|
371
|
+
|
372
|
+
for port in hconfigs[ConfigEnum.http_ports if t == 'http' else ConfigEnum.tls_ports].split(','):
|
373
|
+
|
374
|
+
phttp = port if t == 'http' else None
|
375
|
+
ptls = port if t == 'tls' else None
|
376
|
+
if phttp and len(allphttp) and phttp not in allphttp:
|
377
|
+
continue
|
378
|
+
if ptls and len(allptls) and ptls not in allptls:
|
379
|
+
continue
|
380
|
+
|
381
|
+
for type in all_proxies(d.child_id):
|
382
|
+
pinfo = make_proxy(type, d, phttp=phttp, ptls=ptls)
|
383
|
+
if 'msg' not in pinfo:
|
384
|
+
clash = to_clash(pinfo, meta_or_normal)
|
385
|
+
if 'msg' not in clash:
|
386
|
+
allp.append(clash['name'])
|
387
|
+
|
388
|
+
return yaml.dump(allp, sort_keys=False)
|
389
|
+
|
390
|
+
|
391
|
+
def get_all_clash_configs(meta_or_normal, domains):
|
392
|
+
allphttp=[p for p in request.args.get("phttp","").split(',') if p]
|
393
|
+
allptls=[p for p in request.args.get("ptls","").split(',') if p]
|
394
|
+
|
395
|
+
allp = []
|
396
|
+
for d in domains:
|
397
|
+
hconfigs = get_hconfigs(d.child_id)
|
398
|
+
for t in (['http', 'tls'] if hconfigs[ConfigEnum.http_proxy_enable] else ['tls']):
|
399
|
+
|
400
|
+
for port in hconfigs[ConfigEnum.http_ports if t == 'http' else ConfigEnum.tls_ports].split(','):
|
401
|
+
|
402
|
+
phttp = port if t == 'http' else None
|
403
|
+
ptls = port if t == 'tls' else None
|
404
|
+
if phttp and len(allphttp) and phttp not in allphttp:
|
405
|
+
continue
|
406
|
+
if ptls and len(allptls) and ptls not in allptls:
|
407
|
+
continue
|
408
|
+
|
409
|
+
for type in all_proxies(d.child_id):
|
410
|
+
pinfo = make_proxy(type, d, phttp=phttp, ptls=ptls)
|
411
|
+
if 'msg' not in pinfo:
|
412
|
+
clash = to_clash(pinfo, meta_or_normal)
|
413
|
+
if 'msg' not in clash:
|
414
|
+
allp.append(clash)
|
415
|
+
|
416
|
+
return yaml.dump({"proxies": allp}, sort_keys=False)
|
4
417
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
418
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -393,7 +393,7 @@ responsive: {
|
|
393
393
|
%endif
|
394
394
|
</script>
|
395
395
|
|
396
|
-
%if country.lower()!=hconfig(ConfigEnum.country)
|
396
|
+
%if has_auto_cdn and hconfig(ConfigEnum.country)!="other" and country.lower()!=hconfig(ConfigEnum.country)
|
397
397
|
{% macro reload() -%}
|
398
398
|
<button onclick='document.location.reload()' class='btn btn-primary'>
|
399
399
|
{{_("Check again")}}
|