hiddifypanel 3.0.0.dev64__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev65__cp310-cp310-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
@@ -1,5 +1,72 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00?\x0e\x00\x00\x12\t\x04\x00\x05\xa0S\xd3\xba\x89s\x05O\xf8\xc1\xc8R\t\x9a\xe0\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xc8a\x7f:-\xf3@\xc5\x1f#N\xb5\x9a%\xdd~M\x03?wZl\x893\xbd\xd0\xd1\xfa\xa6\xf7\xd82\x1eO\xb4z;Pz\x1f\xaf\xa2\xf3\xf6\xd4\x81\xc7\x90hM(\x89\r\x0c\x8f\x16\x15\xd2beI+\xb9*\xab&\xadw[\xbdH\xce\xcd-v\xc9}r\xf7k\xe2\x9e\xe4I{\x87\xeci\x08l\xf7`\x9c\xc8erTyQ\xc1\xc7|\xf0\xddb\xfb\x8am\x11\x0fTK\xd4S\x94\xb5\x05\xf2Q\xd5\x06\x95\xa1\x07\x17i\x86\xd5.\xc2%\xb1\xa4\xeb/v\xa6@\xb3$Y\xbfs\x80P[sE\xd1\xd1\xaf\xed\xdeF\x9dj\\MI^\xd1\xa9\xa7]\x11\x8cHl\x12\x811O\xeb\xc1\xfe\x9e\x11\x0c\x89b\x83\xc7Z\xf7Im\xec\xc9\xac\x87Df\r\xceRMF\xbd\xbe\xf1\xbdrB\x1b\xcfQ"\xde\xce;\x99\xd8\x1b\xb9Z-\x16\xe5\xabZKa\x92\x16\xe3\x9d\x82\xb7\x00\xebUw\x8e\xc7\xbc\xd3<\xcc\xc3I\xa6"\tq\x0e\xac\x1a$\x94\xe1/1?B\x18\n\x86\xechG\x81\xeb\xb7\xe1O\x91k\xff\xd6Y\xc5Va\xf04%\x81\xa3\x19\xf8\x08U`4/\x14\xf1\x01\xdc\x81\xf1\x86\x8b\xea\x05f\x08#}\x98?{!"=g%\xa2@@=\xec3\xeep\x13\x18\xf3\xc3\xb6J\xe2\x1cY\xbb\x91\xa6\xf6\xe3S\x1d\x8c\xb0\xa3r\x92v\x0c`\tn\x1c\xcd\xc1\xaa\r\xc9\t\xb9\x80\x9b;\xe8O|\xd32X\xbb\xd9A\xedc8\xfdo\xcdI\x9a19\xce\x15!\'\x99\xf6\xb6\xc7\xc5\x10uhh-\x10\x05\xdc+\x88\xca\xaa\x11\x7f\x05\x87\xa4\x18\xcc\xb8\xfc\x0f\x93\xfc\xcd\x17\xe4c\xfe\xafX\xfb4k\xa3\x85x\x0e\x84\xff\xe0le\x17NS/\x88E^a\xd2$5[\xc1\xf9Fv\x9e\x1c\x8et\xb1[9\x9a-F\x99\x88UX~[7\xf3\'\xca\xd0M`6H\xd7\xb2\x1cA\xc9Iv\x9c\xf6\xba\xbf5\xfbvr\x98\x08\xfb75\xc1\xa2{\xb5\xea\xecA\xcf\xfa\xe71\xbcE\xba5+6\x1bd\x7f\x01x\xb4~l\x0el\x93\x86\x83\xc8&\xea\x08\x04\xba9\xb6zx\xff\\\xfe/.`\x97\xee\xb45P-\xfa\x99oV\x0e\xe2w\xcb-\x0b\x00\xceGy\xbf\xf1T\x92\xd5s\x9c\xe3U-\x05\xd9\xb4\x96\xc8i\xceL\xb4\x86\xbf\x82\x08\xd9\x8f\x87\xf6]@t\x08uc:\xc3v+\x1e\x865\x05<\xb4m#\x89Z\xb4\xd0\xd4\xef\xb16 6-s1\xc5 (\xa6x1\xfb\xce\x7f\x8e\xc8\x1a:\x07\x92\xe9\x92V7@~\x07\xf4$\xaf\xf0\t\xe3\xa8\xf2~I\nH\xc9\xe9\x8cy7Gc\xb3\x07gA\xe2\xf8\x14\xca\xb2\x02\xa7\x12\xf0\x99,\x16=\x1a[|\xe4\xc8\x8a\x07\x94\xd3\x14\x12@\xf3\xca[&\'\x88<Sz\xadf\xb2\x87\xc35PWa\x96\xab\xa4&b\xea{\xb3\xf8\x06\xfc\xe0\x84:\xbb0\xe4\x9di\x02,\x1d\xfe\xaa\xd5\x86\xf9\xca~\x92\x7f)\xd5\x92{\x8d8&\xd1\xcd\xd8<{"\x08\xf8\x9e\x1b\xf1{4kU#\xce\xb1\x04\xf1\xf0\xb1\x00\xcc\x9fIe\x84y\xbe\n\x0f\xd5/\xfc\xf8-2\xbf\x9a\xc7\xde\\\xc7\x93\x12]+$\xa9P*\xcaK{\xd7\x17#\xacEj\x89\xaa\xdbc\x92\xd7s|\x08\x93x\xd9\xde!O\x9b\xfdD\x86\x87\x8ag+EUN\xbc\xba\xd7$\xd0\x07L\xf6\xbe\x9b\xbc\xd9F\x03k\xbaa\xc1\xbd\':\x05W\xd7\xc3Q\x1b\rs\xa7X\'\x94\xdf\x07\xd1\x97\xe4\x98\xa4>\xa5$o4\x80\x92Z^0\xe4\xa5\xc6\xfd\xe4\x94\x07\xfbB\x85\xa8\xb7\xee\xdc\x86a|\xc4\xe1\xda\x17\xf5\xd4\xbec\xb9oi\xf2a\x83\xb2\xca\xe4\xa9M\xb8\xc4\xec\x1f\xdf\xbd\xdf\xc7j\x95O\x13\x03\x94!f\xbe\x90\xe2F.\xcd\x075Q\xf9\xc9\xe6\xfb\xdc\x9f\xb5x\xf0\xe2\xf4\x10\xbd[w\xbcD9y\xf8\xe6\xa5\xc3\xb0 \xe8\xaf0\x12\xfc6:j\x8a\xbd\n\xd8/#\xaeh\xb4r=\xb7y~G\xcc\xc6\xa5\x97\xd4\x8a+\xec\x84\x13\x8a\x99\x9ef\xaa\xf9\x8b\xce\xdd\xf7\x19\xd63B\x14S\xcf!\x9d\xa1\xf5\xdbP!\xa77J\x1eU1\x8baqE\xda\x0cS\n\xf3\x804\xfb\x1c\x07\x16\xe9\xb2.\xab\x99QFk\xfe\xf3U\xec\x01`H\r\xad\x07\xfa\xc9\xceTlR\x83$\xedT}\xb3\x9c\x90\x0eZ\xca\x9c%\x05\xdc\xc6\x0f\x9ai$;\xb7\xadH\x81a\xec+\xb8\xe4D\t\x193PO\x9d\x0e\xd6,\xfd\xf7\xe2\x803\x86\x8d\x035[\xb5\xae\xdd \x8a$\xc9\xce\x87\xec\xfaTu\x87\x89ST\xf0\xd1\x93T\xcc\xbb\x8dS9>:\xd3\x1a\xc0\x96/\xc2K\x15Qvt\xcfq\x1b\xee\xbf\xe0\x97\xdac\xefKy>y|\x08\xa4 a(\xc4S\xde\xf8k\xb2;\xa5\xc6\x16:r\xde\x9d\x0b\x8a6\xaf\xc3l\xf4\xd1a\xd2\x9e\xe7\xfb\x02\x8eu\xa3\x83"\xc9O\xc4\x82=\xbe\xa2$\xa2\xc2\xf2s\x8c|\xdcV\x9d\x1c)?\xb6\x81\x82h\xab\x1ao\x1b\xe9G\xbaH\xe3\x8eF\x14X\x04\xa0=\xc3:\xace\xda\xcbl1&\x83Y\xb3\xa5X\xe2+2\xe4\xec\x13\xf5O\x9e\xc3\r\xd7\xd8\xb6\n\xbb\x13\x90J\xbe\xb4\xd75\xdb\xa8.94\xd0\x10:\xc4\xa4^E\x03\xef\xae\xfb\xf6\xb0\x9b\x1b\xbf\x90!\x836B\xca\x96\x88I\x144-(\xa4\xa3\xbc\xc4d\xe13E\x0e=\xe4\x1fH\xeey\xe2\x8fl\xdf\xd9\xd5\xe2\x9am\xfc\xe5\xfe\xc8\xfad\xa2\x16e/\x06E\x98\xa7\x87"\xc05\xb9\x99\xa4\xdf[4\xe6\xa09\x01B}\xf7=\x1b\xdb\xffi[Twj\x03\xf1v\xdf\x1a\x17xx\xcc\xce\x86\xd1T3\xd0cLU\xdc\x9a\x87o\xbc\xb9\xd0\xea\x1da>k\x1e\xc0\t\n\x19b\xe7\xbb\x85D\x1db\xd5\x15\x91\xe1\x17@\xed\xdf\xb0\xdb\xa3?\x8b\n\xebRn\x06h\xc5\xb2\xb1\\\x02\xc6\xba\x81\xd3h\xa5l\xb6&\x08A\x07o\xd2%t7\xba{=\x7f\x84\xfd(@\x82Py\xf2c\xb8\xdb\x8d\xf3\xc6\xd7\x81">\x92]\x035\x7fNP0\x9b?P\xde\xff\xdfV\xaa\xa2{<R\x08%B5H\xc4\xe6\xdf\x13\x96\x17\x16\xe3\xbb+\xa6\xf5j\x06\x1b\xe8\x18\x08=\x9a\x94\xa6B\xfbh\xb1\xa5"\xfab\xcd\xe5 !V\r/\x83?v\x95\xf88\x1b\xb5\xfcp\xcdi&\xf1\x15\xaaK\xe3x+\x9e)\x8eWl$\x0b?B\xa3\xa6\xb1\x90\x18R}\xedGE\x94\x90\xd2\xf9\xefS\x16\xf4\x8e\xe1N[-\xc65*Xa\xc3\xa2\xd4\xde\xf2|Z\xaf\xc5\x17\xc3\xf51b\xbc\xd6MfF\xb6\x01\x06Vj\xe81\xeeg\xa7\xe6\x1d\xea\xd2n J_D\xea\xb7\xc1\x15\x01m\xef\xfc\xbc\xbcj\xcd\xb5E\xcf\xd4k\xe8\xea\xd0\xe6i9\xe3\t\x90j\xef\xf2\xd3\x84:\xbf\x82?TE\xcf\x92\xdb0VSZ\xa0\xbe\xf4\xabh\xa1[\x9d\\\x1c\x97f\x054\xd3J\x96\xa8\xc4P\xf6u\xb1\xe8\r\x8e\x8f/\xf7\xda4&\x18o)\x1f\x05\xd7\x83\xdb\xc5C\xa4\'*\x15\x98\x9a\xb17\x06jD\xe1\xae\xde\x0f\xe9\xbd\xabL\x17\x10\xba\x84\xa5\x1b\xae\xd2\xb6\x0b\xc3*\xdd\x85\xe3\xf7\x8b\r\x19\xfd\xa7\r\x15\x85\x9bF8\xc7\xe7\x89x3b\xbd\xa2\xb6\xecj\xd4_\xea\xd9A\xc7@\xc4\x91\xcf\x01rg\x01O\x93&T\x16*L\xf4\xcb\xd3)\xa10\xb0sv\x00\xd3=\\\x062_P?z\xa0\xa5\r<\xd4\x194\xcc\xa4\xdc\x92\xd7\xb9\x9a\x08\x05\xd4\x9c\xec\x92\x1b\xd3\xacUNZ\xbe\x0f\x94\xee\xe7\xf8>@\x00L:-\xbe\x9c\x12\x17\x85\x0fz%\xa3\xcf\xe4\xad\x1aqb\r"\xeb\xb2\xe0\x8d\xfe\x9d\x19\x03\xa3q\x0b\xb8|K\x1d\xea\xeb\xa2\x04g+#+[R\x80\xbeY\x9a\r\xa4\xe7\xa3B\xcff\x1a\xa3\xdawKZ\xcd\x04\xfbv2\xd2\xce\xe1=R\xed\x1b\xb22:E\xcfLd{\xe1gb\xadR\xcb\xd7\xbd\xe8O\xef\xdc\xde;\x13\x89\x13\xb5\xc08\xb0\x050.MG\xac\xfe\xaa\nDA\xf3K1h\x1c\xe8\xa6\xf2\x89\xa1\x15P_\x06\xe0\xf1\xe1\xdcLd\xfe\x18\xfe!\xd2uY\x96\xa9Cwco\xcf\xfe\xd0\xe9\x8b\x10\x9b\xb9\xadk\xe1\xd6x\x86EU\x99Y\x7f\x16k\xeeLE|<\x88I\x7f\xc3\x03\xe14\xc2\x80g\xcc\xd9b\xb19\xbb\xa4Cb\x00\xbd\x9a&\x00\xaaR\xda\x06-xg\x8b\xc8Jz|\xe8w\xd1\x86\x96\x1da\x19vW_\x02sN\xb4\\\xef\xcc\xa9\x9b\xf5\xd2\xe5-\xc1\xd6\xda\xa6|5\x82s\xb4\x8c\x7f\xcb\r"\xff\xe5\xe8Ey\xfd\xf6z\x8e\xa1x8T\xf9\xc2P\xfaL\xf9\xedf\x15\xac\xbc\x94\xa1\xbc\x05\x8b\x14_\xf1r\xe6\x96\xe0s7\xe7\x0eS\x88\xb8\xbdN\xc7\xfb\x077\r\xb7\x0bZ(\xd6J\xbb\xc4&qT\x88\xeal\\)\xe5_2K\x89^\xfc\xf6\x0e\x0esj\x0c\xef\xb9R\xe0\xa1K/\x87\xc4\xd0\\\x0b\xe0\xb0\x1e\xcfH\xc3S\x89}\xf3} \xd7\xa31\x1d\xdb(\xe1\xac\xfe\xc4\xef\x8e\xc4\x89\x10\xd4gK\x00\xec\xb8k\xe4w\x04\x9d\xd7x\xaa\x0c\xee\xe1\xb0\xe4d\xb5p\xf6\xfc\x8d\x83$\x0b\xaa\xa9\xe0\x1ao\x8fO\xe3\x91\x14\xbe\xfc\xd1H(m\xce\xe2\x80\x07\x1f\xdd\x97\xd5\xac\x8b,\xa9\xc8\xb6Z\x83\xd6\xbf\xa9\xa3\x1aRr\xc9\xab\x8ak\x10G\xde\xeeeVF\'\xd7\x1d\xf6\x990C\xa5#\xde\xd4\xd8\xba\xf56\xa1\xe0\\*o!8\xf7\x19\xc0%\xc3\xbc\xc4\xe1\xa4\xf6~\t\xe6l\x91\xff\x94\x05}N0\r&SG\x19!\xc6\xe9\x07n@\x1f\xe9\x85\x85\xf2X\x88z1U\x13-p\xde\xb6\xd8\xa0\x17\xe2)\xc8\x18\xd0lB!\xb5\x81\x9f\x11DZ\xa3$\x19\xe4\xa0o\x9d\r\xa0\x03\xc3e\x92\xb4v{Q\x10\xeb\t \x83\xb6\xa8:\x1f\xee\x1f\xb9e\t\x0e,_\x07\xa5\xd8)\x1e\xec\x0f\x14\x9a<,\x03\xc7\xb9\xbc\xc4\x1e\xf5\x02O\xc8sL,9\x19\xc6\x04\x7f\xacHs\xbd+P(\xf48{\xdc\xf3p\xdee\x12\x19pF\x96\x0c\xf5\r\xec\xe2\x1e\xec\xf4z\xdcz\xcb\xa8\xbe\x03\xb7=Opl\xc3:[\x00\xf1\x0b\x92\xff\t\x14e\xcah\xb3\x95d!\x05%x\xc5L\x13\x82:\r\xfa4\xc4\xbey\x800>j\xce\x91\x9c\x8a\xa5\xd6\x90\xa8\xac5\xa1\xdb\xa1\x92o\xfc\xef\x13V%\x93,\x16/!\xc9\xa2_YMX\xd3Q\x7fO\xa3\xb4\xc0h\x95Y\xa2k 3\x92\x9e\xb9z\xbe\xce\x1b\xb6\xc4)\xc5\xca\x13\xfc,\xb7\xff\x94\x8c\xc3\x10~\xa5\xac\x13\xa3\xac\xdb\xbb\t\xcb\xdd\x8d\x8d\xa9\xcb\x1b;\x9d\x0bg\xf7\xa3\x01\xae\xe6\xb6T\xd1\xdef\xbb\x80)"\xcf\x072C\xca\xa58\x97BQ\xeb`"w\x9d\xd9<\xc9^\xdd\x83\x11\xbd\xfc\xab.\xdf\x08s\x06\xfd\xfe\xeb\x1f\xe6Z\xbe\xea\x7f<\xff:\xc8-\xae1NQ\x8c/\x92u\xf2s\x8e\xfahs\x17\xb1\xdf:/\x10z5\xcd\x1dc"\xab\xa2\x13\x11&\x12\xa5\x08\x9e\x95\x84"\x1f\x1b\xf0\x08:45\xcb\xe0\x8c\xde\xce\nY\x05\xd6\xf1f\xde<3\xb1t\rU%E\xddI\xfd\xd1a\x1c\xff\xfa\x84:<\x16\xf1\xcc\x9b)\xbb\xe0\x19\xc2Eu\x88P\xeaU\xc9\xb9v\x10\x87\x14ST\x122\x00\xb0tt-\tUq\xc4\x91\x0e\xcc|\xd2\xe9\xf1\x1c\xe1\n{Q\xb4\x18\xf4\xb7Z78\xf2C\xef\xb9\x8f\xdceN\xf61;\x86\xfb \xe6<\xfb\xea\xbd\x9b\xc6 \xcb\xa2!W\xd9\x91v\x9aY\xfa\x12\xdd\xd1\x16\x0e\x01\xdc\x08+\xfd\xaf\x96\x91_F\xa1M\xf9\x0c\xab\xe9\x0f\x98\x84j\x05\x15\x95\x04\xccv\xc2\x02\xfe\x00\xe1\x90\xb2\x8d\xafE\xc1\x19\xb0\xcb \x15]&(\xb5\xa3\xed\xe1\x11\xa7\x97\xe0\xc0\xd5b\x87z)\x94\xae_\xba\x89\xf9\xb7\xef\x06i\x18I\xa3\rF\xa4A%GT/I\x19\x89\xb4\xa5l\xe6\xd2\xc2\xff\xd2\xf9\'\xf5Z\xd1\xdc|\xbc}\xe5w\xef58\xd3I8\xaf\xebO\xca\x99\xd4\xb1\x8dA\xd3K\x81\x8f\x11\xe5!m\x84\x0b\x85x\xa8y\xc2\xd2\x15C\x9c%\xe4\x18\x84\xa8\xf1oQ\xf2\xa6=\xab<\xdc\xc6\xb9\xe3]%\xd0\xefHUR\xa5\x7fn\x9b\xd3\xd0|H\xdc7\xff\xbf~\x95 \x1b\xe2\xea\xb2\xde\x05\xc6\xa4_\xd2\xff|\x8e+Y\'|\xac+*\xa9\xb4\xae6|V\xaf\xda\x8e\x98u#\xe5\x0f\x02\xa0\xb94\xb4Sr\x15\xe5\x87O\x17\xba\xab\xdb\x1a0I\x93[\xeeb8*\x85\xbc\xaa\x8e\xa42;\xd31op\xa3\xa5#\xc4\xab\xdc\xcd\x8e)>\xbe\xc5\xfdV\r\xb0GC\x99\x8e\xd8\x1aI`F7\xa0\xbf\\\xd84\x9f\xef\x93l\x95<\x8cvHr\xb4\xb1M\xf8<}nT\\\x04kA\x97\x12\x8a;\xd17\xa7\xf4\xa4]\xbf\xc1AS(\xcf\xa7\xbe\n\xb3[\x1bD]-C2!\xd2\xf9W\xd5\x1f\xac\xec\xc2\x1b\x92\xc5\x95\xa0.\xd0\x82\x82\xfe\xcbxP\xa5\x87.\x047\x92\x02S`\xf8-\x02\x1cM\x8f0\x04\xf8\x82\xb3\xc2F\xaa\xd2IT\xc4\x11B#D\xc6\xb5\x0e\x86\x98\x12\x1feu\x05M\x97\x897\xb9\r\'f\x0ev\xa6\x85\x83W\xab\xa5\x7f\xda\x0e,\xd8/W\xf4M\xfc\xe5jd\xf8v\x08\xdd\x9d\x11\x15\xc9?\x15\x9e\xfc7\xc3\x81\x19P\xe5sX\x80\x8e\x1aC\x8d\xe5\x9b&\x90\xfa=\xa0\xc1d3\xe1E\xb1e\xa1\x83\x97\x83E\xd9xG\x88\xe6T\x10\xd8^\x1eL\xd6\x05U\xe3X!\x1f\xf5K\xca\x90\xfd{\x03\x13;N\xb4S\x16)\x94>a\xec\x1d7\xf8\x8bH<D\xffb\x91\xfd\x06\xdf\xdd\x99\x8a\xa2\x17\xa6\xe9\xbd\x91&\x1aJ\xed\x92\xc5\xdb\xf7*\x02\xbbji9_\xd1\x0cw\x191\xd0\xb8\x19\xfa6\xd3o\xb1\xf3\xcc\x06\x02\xe8l\x8eC\xab\xea\x84\x8a\xa59\xc1\x01\x9c\xa0CN\x1f\x9c^\xbe\xbb\x1a.wp\x06\xcc\xf6<\xdc\xc1Yf\xeb\xd9Z\xbd`ur!*\xd0;\x06i\xf0\xd29\xcf\x90\xb8\xbc\xa4.\xf9\xee\x0c\x80k\xff\xb1\xc2K\xc9gp\xe80@\x07\xc3\x07\x0b\xc1v&\x19\xfb\xc5=\xaf\xab[Z?}2b8T\x9b\xe7\x8b\xb6S\xb4Q{\xdb\xa9\x18\x0c\xc7\xc4y\xc5V\x01\xdep*\xe1Dy\xdd\x9fZ\x11e\xc4\n9\xf7\xe5\x81\xef\xea~,d~ff\xeat\x80\x94\xe3~2\xca*\xdc\x17\x15J@\xb6\xc0\xfb\x8a\xcb\x83)e\xf6\xe8\xe5Q\xf4\xc9\xe6/\x06\xf5H\x96&\xf8\xb1\x0bl\xad\xc5T:\xf8\xdb+\x0f\xed\x16m\xfe\xdd\xf6\x89\x07\x02MB/c\xdb}\xd0\x99r\xaf\xd3\x0fl\xe7\x87\xd0U\x19b\x92\xb3\xc4\xa2\x95\x8d\xc4\x871\xb9\xebF\x13\xc4r\x13\x8a>\x0f)\xb5\xc4\x1b\x83\x0e\xc7\x06\x85\xde\xa2\xc3E\x9a\xcf\xdf=\x83G8\xf8\xdf\xb0\x07\xfes\x17\x1f\xfdZ\xb36t!\x1e')
|
1
|
+
from hiddifypanel.models import *
|
2
|
+
from hiddifypanel.panel import hiddify
|
3
|
+
import json
|
4
|
+
def sync_child_to_parent(parent_link=None):
|
5
|
+
parent_link= parent_link or hconfig(ConfigEnum.parent_panel)
|
6
|
+
if not parent_link:
|
7
|
+
raise ConnectionError("no parent link")
|
8
|
+
|
9
|
+
return send_to_panel(f"{parent_link}/api/v1/sync_child/",'PUT',hiddify.dump_db_to_dict())
|
10
|
+
|
11
|
+
def add_user_usage_to_parent(dbusers_bytes,parent_link=None):
|
12
|
+
uuid_bytes={u.uuid:b for u,b in dbusers_bytes.items()}
|
13
|
+
new_user_data=send_to_panel(parent_link+"api/v1/add_usage/",'PUT',uuid_bytes)
|
14
|
+
|
15
|
+
|
16
|
+
uuid_status={u.uuid:is_user_active(u) for u in dbusers_bytes}
|
17
|
+
hiddify.set_db_from_json(new_user_data,override_child=True,override_child_id=None,remove_users=True)
|
18
|
+
have_change=False
|
19
|
+
for u in User.query.all():
|
20
|
+
if u not in uuid_status:
|
21
|
+
have_change=True
|
22
|
+
break
|
23
|
+
if is_user_active(u)!=uuid_status[u]:
|
24
|
+
have_change=True
|
25
|
+
break
|
26
|
+
if have_change:
|
27
|
+
hiddify.quick_apply_users()
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
def send_to_parent_panel(parent_link=None):
|
36
|
+
send_to_panel(parent_link)
|
37
|
+
|
38
|
+
def send_to_panel(url,method="GET",data=None):
|
39
|
+
try:
|
40
|
+
import requests
|
41
|
+
from requests.adapters import HTTPAdapter
|
42
|
+
from requests.packages.urllib3.util.retry import Retry
|
43
|
+
|
44
|
+
retry_strategy = Retry(
|
45
|
+
total=3,
|
46
|
+
backoff_factor=0.5,
|
47
|
+
status_forcelist=[429, 500, 502, 503, 504],
|
48
|
+
method_whitelist=["HEAD", "GET", "OPTIONS"]
|
49
|
+
)
|
50
|
+
adapter = HTTPAdapter(max_retries=retry_strategy)
|
51
|
+
http = requests.Session()
|
52
|
+
http.mount("https://", adapter)
|
53
|
+
http.mount("http://", adapter)
|
54
|
+
|
55
|
+
headers = {'Content-Type': 'application/json',
|
56
|
+
'Unique-Id': hconfig(ConfigEnum.unique_id)}
|
57
|
+
print(headers)
|
58
|
+
if method=="GET":
|
59
|
+
response = http.get(url,params=data,headers=headers)
|
60
|
+
if method == "PUT":
|
61
|
+
response = http.put(url,json=data,headers=headers)
|
62
|
+
|
63
|
+
res= response.json()
|
64
|
+
print(res)
|
65
|
+
return res
|
66
|
+
except Exception as e:
|
67
|
+
print(e)
|
68
|
+
print(url)
|
69
|
+
print(headers)
|
70
|
+
print(json.dumps(data,indent=4,default=str))
|
4
71
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
72
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
hiddifypanel/panel/init_db.py
CHANGED
@@ -1,5 +1,395 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00FB\x00\x00\x12\t\x04\x00\xaeF\x9eb\x8d\xc6\x94\x9aM\xb9\xad\x1bf\x1d\xec@\x00\x00\x00\x00\x00\x00\x00\x00\xc9-RNb\xfc\xef%\xc3\x0b\x98W\x1dK\x81\xc7+\x11d\xe8\xd4\x89g\x87r\x91t\xf3H\r7X\xfansW\x17\xcc\xe2\xf6\xa0*\x05\xd0\x19P\xec\xe0\xbb\xd12\xa0\x87\x18\x03\xf2\xde\xf5E\xbf;\xcd\xc1\xd0\xff^U\xb2 K\xd1\xc0O!\xaadfg\xbd\xcfF\'6\xda\xf2\xfeZ\x8e\xfd\xa2e\x9f2L\xacV\xbe\xbb\x0cp\xea\xb4\x0f\xc7\x83\x9d\x92lv\xca\xa1\xc44u\xa0&\xd1+Ew\xba\x0f\xfa\xe3\x16\xf8r6\xcc\xe7\x1a\xab\xdc\x93\x91G{%\xeb\xc3^\x83\x0f\xa2\x81\x15\x99\x84\x1e\x93P\x14\x8f\xf6y\xae\n;\x86Z\xb1\x14\x7f.\x8a\x11\x97\x93\xfc\xd8>\xa5\xf1<\xac.#$\x9a9\x87Hm\xf3x\x01|v\r\x9a\xad\xfdz\n\x1c\xdb\xf3pZ8\xca\xba5\xb6\n\xee47\xa1\x8f\xf8\x0e1\xc1\xcf\xe7\xcf|\xb9\x98\xe0\xc8\xaa;\x82\x0e`-^d\xf7\xeaAG\xb2(}o\x03x\xf5d\xf0-\x9a9\xd1\xf5\xee\xc9\rXr\xd9\xb4\x01\xae\xf9\xae\x89\x19\xf6\x80l^6\xf1J\xb9[\x802\xe5\xd2\xc0lL\xde\'f\xb4\xab^\x14Q\xb3\xe6.C+6\xaf\x80\xc7\x07=\x9a\xc1\x84\xe1\xf1\xa4\xfa\xf8\x83j\xe6\x0fe\xe8\xdf\xb8\xce\xdb\x15\xdf\x89_\x14\xc2\x9e^\xdaz_\x90W|`#WL_eQ\x12p\xac\x977\xa4x\xa2\xd1\x1e\xdbgR\xa9,\xd1\x1a\xf8\x89\xa4"\xf1\x1a\x7f\xfd%\xc2\xa9\xa5\xc4\x01+a\xf0\x1c\xe1\xc1\xfc\xe5k\x1d\x0e\x81\x8d\xb2\xeb\xf6o;G\x1a\xcf"\x16I\xf5\x1c\x14;\x0f\x96\xc8B\xf4|y\x9dw\x19\xc3\xd6NC\xa8\x91\xe7\x00f\xa5\x19\xef\x03\xf8V\x8f\xcf\xa2\xb0T\xeaaW\xd1&\x1e\xbc\xb2\xa7$\xca\x1eb9\xff\xc6KTy\xde"\n(\x1a\x1f4\xaa\xf2\xed\x8d\x88[\x9apm\xf5\'\xbd;\x08\xbc\x9dF\xdc\xa4kh\x91w\xd0\xdc^\xa6\rv\xe9\xe2\xbb\xa0\xc2\xe1`Z\xdfA\x04\',\xfa^\xb0\xc7\x16\x02\xc6a\'\x0f\x8b"\x15\xd6\x9d\x02\xb3\xb8l\xab\x16K\x1fj&\xab\x16\xec2\x81&\x16G\x11\x12?zY\x89\'>\xa4\x0cj\xc4\x89\xe2\xdf\x92\xb6\xd8H\xc9\xdc\x1a\xb8T\xc0\xd6$\x86W=\x18\xd0\t\x96PJ\xc3l\xc8\xb9\x91\xef\x1a\xe5L\xfeH\\\xf8l\x9b\xdb\xa58\xc9\xeb\x8e\x8e=]\x1d}|E\x11\xc0\xb25\xd5\xd2\xf9\xda8.q\xd1\xc6\xbe\x10o,\xb8uE\x83\x0c\xaf\xdab\x13\xb5\xa4\x88Kc\x1c<9M#\x16}\xae\xff\x1f\x1fyK#\xdc\xa8\x98\x830\xd8\xea\x96)<\xf3\xedp7\x91o\xc4\xe2\x83 \xa0\xc6q\xd6\xe8\xbaX~\xfe/\xf4\x02\x1e\x99\x97Q\xe3\x94\xf6\xdc\x86\x07\x8d{H\xc39\xe9z\xd6\x83\x0c\xa5\x84\x06\xe8\x83\\j\x9f\x02\x7f\xf5\xf3=\x04\xf2\x8a=\xea\x06\x05\x9a\xb7\xa5be\xcc\x83Y\xacM\xbcx~\xb9)q\x9d\x0c\x0c\xa3\xb9[\x8f\x99\xd0g(\xeb\xcc\xb5j\x00\x03\xb9\xde:L!\x981b\xc2\x84\xa7\xf3\x91\xfa\xf7\xf5\xaa,\x03\xd6\xfdT\xc9I<x\xd6Y\r7\xb8~\x02\x1c\x9a8b\xe2\x95\xfe\xec|\xe9k**\x17W\xb0\x92\x0c_\x8f\xb9\x9e\xbf\x0c[d\xb6]Z\x8b\xc0l\xdb0\xfa5\xe14\xbbes\x0e\xa6\x8c\xf2y|xVC<0Rz\x04UI\x92b\xa0|\\\xc0\x9c+\xffj30=\x9bq\xb5\xa7\xfb\xea$\xf5\xa4"\x1bw\xdc\x08UNz\x00\x1b\xad\x9b\x81\xf5\x1cxJ\x94,\xb7\x08\x192?\x8a\x92\x0fa\x0b|A\xa6\x1dh\x17q\xfc\x1f$\x16E\xfa*~a\xcak\xd0-\xb2}\x9e\xa8E\xfd\xc5\xda\x0ep\x8e\xcd\xfe]E\xce~\x85\xaa/V\xb7\xbd\xf0\xb1\xfa\x90Y\x032\xc5\xa3\x98p>I+e\xe5p\xa7+\xe56\xeb^\xe7\xb8\xfb\xbc\xd6=\xebm3\xc5\x0e\xa2\xa3+\x17\xac\xc4\xc3\xee\x13?\xfc\xbdQO}\xd8/\x03x\xd7\xd6p\xe4\x1ao\x969\xba\xef\xf9\t\xaan\xe5sB]n\xee\x0fZ\xea\x7f(\xdf\n\xf9Z\x85\x1c\x01#\xba\xb8T\x8b\x14\x1b\xbf\xcaT\x93\xfe\xcb\xa2?\x85\xec\xaf\x10\x9b\x95\x1b\xca#l \xfd\x8b\x00\x10\x88E\x81\x81vs\xc9Z\xe0f\xf6\xe4m?\xda&9\xc5\xcc,\xe9\x0b\x0c\xf3I\xb2\xbb06\x96\xb3h\xa0U\xa8\xa8\xcc\xa4\xadg\xa2\xd5\xbf\x81;\\\xacL\x9b\xecr\xdc\x90\xa5/\x1b\x83%V\xec\x8d\xc9\x84\xe1\x8e\xe1\xb7\xdc\xdc\x90\xec}\xbb\xcf\x18\xa1bi/P\x18\x00+\xe3\x99\xa4\x81H\x06gp\xb9\x8b\x06\xc4\x7f\x83a\x88\x8bK\x8a\xd1\xbe\x95\x10@\xb80\xaaWA\xa7\xd6D\xf3\x84\r\xf0\xd82\xda\xaf+\x9e?\x9f\nx\xaf\xc6\xc8\x91\x99\xe9}9\xf4\x01\x97\xdcb\x11}\x1a\x82\x08\x1b\x92\xfa;\x02\xcc\x9b\x05S:\xc8\n\x1f\xfdz\x1b$\xc6\xaa\x84\xd8\xdd\xb6\xa9\xd6\xfbM\x18\xa3[>\xee\x18\xb7{\xd9\xcc\xf6$\xf9\x12\x8c\xeb\x10\x05\x1a\xed\x12Z\x08mN\xf3\xc0(\x1b>m\xea\n\xc0\xa4\xd1\x89\x11\xf8y\xa8\xb6\xc2z\xd8>\x87\x91\xcb\x87\xb2@\':s\x91\x8f_\x81\xdd\x80\xc5R\xf6&\xb2P\xa7\x95\xfbs`\x9aW\xf4-\x9e\x04/\x99\x80\x15\x86y\xfd\xe9)\x1f\x80\xf7\xe7$u_\x82\xf2\xa91Y\xdc\xa8\xb3+\xb2\xc4r\xa9\n\xf8\xb1\x06w\x82rc\xa9\xbf\x0ef\x08fv\xec\x9b\x7f\xc91\xd28\xa6f\x87\xbb[\x99\x1dghj[\x8dI\xf5\xf5\xab\xaf\xd74k\xc9p|\xab\xb3\xd0\xee\xe5(\xe4\xe7\x86\xd1\xafj#I\x97;)\x0f\xf0e$\xc9\xf7\xf8\xecy\xeb\\\xb1\x85\x7fY\xf5rqp}\x19\xbe\tq\xf8\x94\x99\x11\xf6\xb7%6\x8fd\xf2\x7f)\xea_\xc0\xe9\xde\x11%\x00\x0b\x17\xc69e[Wh\xc8\xf6q\xf9\xf0\x077I\xf9\x0b\xf8\x9aZ\xc3o\x1dx\x9a1y\xde\x1b\xb1\xaa\xa6yS\xb13\xdf\xa5\x8bO\x97\x0f\x08Kna7\x8eEY\x8cj\x8b\x9cOl\xd9\x86a<"\xf7\xaf\xbc\xa7\x15\x0f7\x17=\xd7[Z\x95\xdc>~\x1e\xdf[.\x16\x8fr\xc1 \x14\x018\x04\xbf\xab!\xfd\x86r\xf0a\x99\xb3 H\x8c\xe7\xceG\x9aHK\xe2\xb3}\x1a\xb1\xa1\xb9\x15\xe3\x1e]\xe2\x86\xf9_\xeb5X\xb3\x97L\xe6\x9a\xbcGw\xf2\xcfm\x18x7\\\x12\xa2\xe1\xee\xa3\xf1o`\xdb\x9eq~X=\xc7S\r\x8b\x1c\xd0\xfd|\xdf[\x7fa}"\xcdF\xfa\xb4\x83\x00\xe1\xeekd{B\x81N\x92\xdb\xdfXv2\x8b\x9dh 3\xfbh0\xbb\x1b.K\xa2\xda!769\xca9.gE\xf9\x17h\x07H\x03\x9a\x84n\x00\xbc\x16\xb8r(\x98/vp\xb3\xd35\x07xuQg\xa2\x8d\xe5\x9c\xa7\xc8\x86C\x15U\'\xbd\x15Z\xe3\xb1\xb2g\xe7\xb1\x8d\xc4L=\xe2\xa2\x971w\xd0\xea\xf4\x99fO\xf6\xa2\xb3\xe1?,\x81\xa7\xd8\x92 U!\xc8U\x87\xa7l\xea\xf4\xca\x1a\xaa\t\xfc\x7f\xf6\x9b\x8di\xa5\xaf\xbdu{\x8d\x07{vL\xc1XF\x9e\xa6I\x98\xd5\xc0\xfd/\xa2`\x91\xdfw\x93`9\x92\x1dH~!\xeb\x11\xa6\xfe\x18XV\xa6w\xe7\x80=\xac\xac\xcb]\xed0\xe7\t\x07\xfdlhh\xd7D\xf2\xd5\x8b\x9d\xaf,\xda\xab\xf2`\xd1\x1dN\xfds\xaa7>\xc8TH\xf6\xe2\xd7\xea\x99\xfa\xe4|u\xbe\xa5Y\xb1\x91\xa9\xd0\xf9\xec\xf2~8\x0f\xf2\xa6\xea\xde\x0e\x9c\x11\x15M\x1dK.\x9a\xa5R;\xf3\x19\xa6\x1c|\xc42q0\x87\x84\xfa\xc3\x95\xa1\x7f\xe3Y\xd8xSm\x196w\xb7H/\xca\x1fV3>w\xb7\xc7>\x87|\xb1\xd3\xc7\x1bc\xbd=\xed\xd1\x97"wI\xa7<^5W\x7fuG\x16\x92\xb4Q\xed\xde0\xaaq]\xc5\xf7\xb08e\xc4\x8b\xc7\xbc\x88\xa9\xd1\xe1\t\'B\xaa\xaf\xd9\x17\xb9\x06\x11\xc2\xa3{{\x1d\x12\xd0\x92\x10\xaa6S\xc1\xad\xcf\xa2L\xa4\xcc\x9c\x02\x9ch\xf0\xb2\xbf\x1aP$\xe04W\xa3\xa7\x93T^\x11\x1d\x85\xfa\x90\xeer\xb9\xba1\xd9\x05W\x8b~\xa9!5;c<\x9e\xe3\t\x11\xddem\x1d\xc8\xdd\t\xbaO\x8a\x8b\x12;v\x9d|\x06\xd8\x87D\xe2\x082C\x89\t_\x17">\xbe\' E\x94\xfa\x0f%|\xe8_\xbf\xa0\xf1\x07u\xd1k\x0b\xae,Q\xf77\xfc\xdbt\xf5\xb7`\x99\x85\xb9aik\x9d~K\xa7?\xfe\xaf\xeb\x01\x9f\xef\xfe5\xfb\xf9=\x92\x99\x91I\xbc`R\xfb\xa5\rD~\xb7i\xdeS\x01I<~\x95\x0e\xed\x05\xea\x101\xcb\x11[\x18\x89[\x9e\x16u\x1e\xa4.\xcc\x9a\x94\x9c;e\x08y\x88\xac\x1a\xe3\xe4\xc6\xb32\x91N\xf0\xb8\x17n~3\x1b?\'\x88(\x0b3\xee52]\xef\xa147\xfe\xa7j\xeexo~\xa8o\xee\xb0\xb3\x95\xb9Z|\x16\xc3\x93\x95\x8d^\x97\xf7\xc6UU\xe5\xab\x02V\xa9\xacRH\x13\xd9uW\x13\x11\xd5PS\xfc$\xa4_ .\x1c\xe6\xe6X\x18\x14\x81=\xd0\xc9a\xa3qC\xac\xa7\xb1\xe2R"\x9e\x1d\xd05^9\xb5\x933\x8enx N\x0e\x10\xd6\x0e\xb6\xe3#W\x91e\x03?\xa3S\x82^\xc9p\xee\xc2\x02\xc5\xdc$k{\xf6\x8d \x84\x94\x8c-\xb0`\xfb\x97\xb4P\xe4\x990D\t\x19z\xac\xa8\xa3w\xb9\xf2\xa2\xf3\x05w\xee>\xda\x11\xaaH\x9b\\>\x8a/Q-\xb5X\x1bH\xafhn\xacp\x9f\xd5\x07\xbf\x83\x96z\xde\x9d\x13\xcbq[\xc1\\+VxW\xe8xM\xaff\xaa\xe6#\xb7vK\x08\xd1\x0c*\xf6\n\xd7\x81\xe8\xa9\xdb\xfa\x8b\xbe\xc6^\x10\xf6\x94\xbd\x1a\x00?\x9d]~\x0cS\xbd\x9b\xa6t~\xe7GE\x92\xea\x8e\xe39\xd4\xce\xefH\xc3_\xe8\xf7\x1f\x9c\xd0\xf9&\x19\xb5\xd2\xec\t\x86f\xb1\x96\xe2\xbc\x95\xd8\x1d\xb2\xb7bF\xbd\xf1\x7fg\xbd+\xbb\xacpm ^\xaf\x84\x87\xf3(v\xb9$\xf2\xc9\xcb\xc7\x07\x8b\xa5U\xd0\x0bR+&\xba\x9c-\x7fW\x99\xe4\x89a\xc7\xb8\x13\xc4\x06w\x9dv,xg\x19\xf6(\xa6\x1f\xa4\xb7"\xce\xd9\xca\x10E\x15+\xd8-s\x83\xf4U_\xd4c\xff\x86;\x06\x7f\xdb\x8a\xd6\xb7\xbb\x82x\xaa\xbcY\x03\xda\xebX\xd9\x15\x91\xf0\xe6-\xb3\x7f`"\xaa\xe8g\x84\xfe1\xaf{\xb8\x01\xb0\xe2E\xe3b\xebiuU`\xfc\xc4\x99?O\xe3~\x83\xe9\x04\xb4\xd5\xfb\xc7\x9a>8\xb8\xf2\xf0\x97\xf7\xe5\x02J\xde\x06d^7\x8d%\xf4/\xec\xa4]\xe2\xde\xc4\xa7\xacJK\xb5\x82(Q\xe4r\x90\xc3c\xfa\\\xd4\xc2\x8fj;?~\x8b7/D9e{\x88>H\xb9/Bd\xa8M\x17;\x97:\x1dY\x8f\x15\xad\x04\xb8\xd2e\x01\x1e3\x06C\x0e\x07\x89\xa5\xbaty\x82\xdb\xeb\xc1nc\xbbIm\x0e38\x05.\xa3D[\xd0 \x95\xa2Kx\xb0\xff\xc1\xd1\xdd\xd2?\xc0\x86\xf4%0c^E\xd2\rx\xc9\x13\xc7{\xe7\x8e\x04\x15\x04\x9as\x89\x17\x06\x91}`\xd9\xcd\xb1\xbcJ\xd0\xbe\xaf8rM\xb4w=\xa4)\xc7\xda\xf1\xe9\xf8\xf0\xc2\xec\xde\x7f-\x1d\xe4Z\x17H\xb2|\x08)\x95C6\\\xae\xf5\x98\x97z\x81F\xb1\xf7\xd5M\xb9\xdb\xf6\x1cY>\x00\x18F\xe8\xe7\xe8\xf84\x10\x82\x83\x13\xaa2\xc4*\x0f9\x1f\x84\xb0\xda\x1b\xb8\x98)g\xcfts\x1d\xc0\xe4\xf1\x7f\x07\x0f\xcawH\xb0\x8bqB\x06\x05\xe8\'\xc9\'g\x86\x958\xe6^\xd9d\xd6\xe4<\xcc\xf1\x00\xb1\xbc\xa7\x85\xc98\xbf.3\xbcfO\xd2\x80\x06\xf9~0\x05]\x03\xf2c\xddb\x04\xe3\x8e\x15\xa6\x95\xe9\x91Mp\xb9\xd75\x1b_\xab\x92\x7f\xd4\xb2\x7f\xa6\x0b\x19p\x8a\x98\xf6\x7f\x83\xc3\xc4\xd0\x0b\xea`9q\xca\xf6\xcdz\xf3L\xfa\xa6Pp\x90\xcc\x01\xd5@\x96\xbbLrm\x87\x05\xe1\x93\xda\xcc,\xe7#\xa2\xd0Kc(\xf4\x1a\xd4\x97\xf4\x84\xaaw\x17\x1a\xc1\xc7Y~\xb6\xd1m$0\xec\x91\x0c\x1c\xa5\\\xf4\x19D\xe3\xedLK\xf3>\xef\x843\x974wT\xb2\x9b\xd11\xab\xbbg\xe1\xdc-\xfd\xeb}\x90\xa5\xc1Y\xa9\x80\x89\x17\xf2X\x89\xf2I_XS\x85\x18\xfb\xae\x17\xbc\xce\x9aj\x02H\xb78\xe4\x88wL\x0b\xfeX8\\\x87\xda\x98\x85\xb2\x7f8,UEr\xf2N\x95\xe2\xdar\xff\xb34\xf3\x11\x17\x1a\xea\xb4\xdd}\xf3\xd1\xee\xee\xfd\x97]\x11\xcd\x0e3/\x89\xfe\xbd\xd3\xc3\x9b\xa6\x81\xd3\x19\x05F\xfaV9\xcc\x82.\xc8\x02\xef\x9dI\x85\x8a\x011|U\xf9g0n2p(\xe5\x90\xf4!\xcc\xb4Z\xae*E7\xeb\xe5\xb6\xa5F\xaa\x17\xf03\xf6c\x0b\xe0\x83\xafw[\xe9\xf5\xf9\xc5\xf4x\x92\x9a\x87\x90\x84z8:D\x08\x8d%W\xc6u\xdc\xfc\x15\x02~d\xa3\xdf[\xd8c\xce1\xb7\xa6\xb1\r\xea\xdd\x1dd\x82\x0f*\xe0\xbcW\x91\xfa\x14\xbd\xdc\x19\xfe\xe8\\i\xea\xa8`M\x8b\x94q\x01U \x8b\xb7\x8b0Z\xfd\x80\xacWH\xea\xe5\xcax\xe2\x00\x06\xfc\x03\x8b\x83\x0e\x82\x96\xa5\x928\xca>Fv\x90Yb\xfb2\xea\xea?\x0f\x1e+\xca\xabq\x8d\xc93G\xae\x0b\x1c\t8\x9a\x81\xbc\xcc\xda\xed\xbd\x98E%X\xee&\x0f\xa2Gx9\x9dy4\x90\xae\xb9\xfe\xc2eu\xd1\xba\x02`\xb7V\xb1A\xb6^\x03\'\xac\xca\x9ao\xc8~\xa7\x15\x86!O@\x8b\xbbq\xe5|\xb0=\xf0\xa4\xe6\xd3\x92\x9f\x8dA\xe9\xa3\xb2\xa1\xda\xea\x00\xc9\xb6m\xbfjW"\x0eq\x84\x8a\xac\xaf\x00\x1a\x82"\xab\xc5\x18\xa1\xb6>\xd3\xc4\xcd\x93\x1e6\x9a@.?\xe0\x85~\xe8\xbd\x131\xeb\x9d\xbdJP\xe7\x1a\x14\xe1\xad\xf3\xd5\xea\xfe@\xbd\xdf \xf8\x84\x8d\xcbK7\x0f\xf0:g\xa2\xe9PG\xde\xe8J\x83\xaf\xec\r\xedC\xa9\xa0\x85/\x95\xcd`i\xcb\x97r\xc4S\x1e\x19\xcf*L\xd1~\x03\xed\xb6\xff\x0e\x03-[m\xb6y\xb9\xce\xc2\xf3\xf6\xf7\xdc\x1f\xb6c\x9b\xc5\x9a0S\x1e\xc5\xceX\ni7\xa0E\xe2MY\x7f*\x8f\xbe\xe6#|\xe9Z\xdd5\x12\xfa\xae\xe3\x86J\xd9\x9e\xe9\xb2\xbab>\xf5Yc%\xe6\xf8K\xdd\xd3-\x8bQ#\xbf\xe6\x9b~\xbd\xe6J\xdd\xc7\xb5\xa0\x9b\x12Op\xfa\\\x19\xe2\xc6N\xc5\xcby\xa2Y@C\xc4S}sc\xe3S\xd9\x0c\x1e\xfd\x98\x12TYNe\x9c\x80\x8a\x04J\xa3j\x18\xe3\x97O\xae\xca\xf4/\xd4dq\xae@\x1f\xa5\x85\x10\xa6K\x80+\xc75c"\x14\xa5B5\xedb\xa7\x02\xdf\xb1\xefT\xf4\xe2\xe3\x06cNH\xa2\xe6\xa8F\xfa\xaa\xafxe\xfby`7N\xcb\xcd\xe3\xde\x06W)\x18\xdf"\x07E,\x8d\x11\x03\xb5\x05\x02\x93\xe7\xeb\x83T\x1eV0/\xc0m\x8ffw\xfc\xf4\xef[]\xceF2=j\xee\xd5\xdc|\xd6\x0eQ\xfcnd\xb6\x80h\xb5YT\xbb\xdb-l\xd6\xe0\xffs\xcev\x9d\xde\xcf>\x93~\xaa.\xf2\x86m\xa1\xab\x10\r*\x9e*\x8cn\xbe\xdf\xa62_R\x94x\x8b\xd6\x84\xb2\xa8i\xfcK\xfdh=a\xad@KL\xe5H\x9ew\xf8\xa5\x1c\x9eP\xd9\xa9l\xa9\xc6\xf6\xa6\xa08\x8b0\xc9\xb1\x9b\xa1\x8b\x0e\xe5\xaakm\x04\x8c\x84]\xee\xdd\x1c\xc7\x91&\x08 G\x10\x11\xd2\xde\xcd\x97v\x95\x98\xa9W_\t\xdf\xa7\xf5\xdd\x82\x1d)L\x08$\xd3\x93\xd9\xebiw8\x9eL\x0cu\xae\xc2\x90\x175\xd7\x1b\x03:|\x02\xc1#\xb6\xcf\xfe\x81*\x1a]\x9e\x0b\x96\xf4#\xc6\\Td\xcf>\x10\x9c\x9bkEH\t\xe1\xcf6I\x99\xdd,+\xb4\xf5\xc2\xedF0SmpRr\xec\xd5\xea\xb6(\xcc\x04\xc7\x0f\x02\xf2\x17\xc0\x98y\xe3\x0e\x8d\n\xbe\xf7y&N\xb5]\xe7\xf6\x97\xe1\xe4\xa8\xa4/`a\xd6jy/b\xa68\xcd}\x88\x9c\x1bs\x08`^F\xcf\x9bl$\x86\x12\x18\x12@n\xe7\xc9\xc5Y\x0e\x08\xb7\xcb`\xf21\xae\xf4\xd1\xa4\xf7\x95\x08\xf4\x07\xb8XVL\xe8\x17\xc2\xb8\x94\x87!2Tcf-\xb6\x81\x8fS0\x8f8\x14&/\xc0\x89\x01={I|\x03Y\x89\xfff\xe2\xbb\x8d\xd2\xf3\x05\xe8iYU\xd6\xf1\x06\x96mA\xff\xfe\xd5\x1e\x9ewTqF\xea\xd5\xd4e(I{\xfa\xd2w\xb2\xc0\'\xfa\xc2<$lH\r\xbek\xd0\xd5\xd0\x8cD, \x8aA\x16\xc7\xa8\x12\x02\xc0nL\x99\xed\x17\xa7\xa2\xea\xa5\x00\t\x04\xe6e\xdd\x05\xa3\xead7\xb0\x00\xcfXy\xc7\xe0-\xd2\x87\x049\x0c\x1a\x9f\xbc\x1e\xb6]3\xaf\x1eJ\x8ev\xf7\xfb a8\x8f}\xa9\x0fa\xeb\x02S\xa7\x1b}\xe0\xb6e\xa0`\xa4\xf9\x1ezq\\\xf3\x1cX\x02yw\x08\xe8\x9c\xe0\xce\xeb\xd9DlP\x90\n<\xaf\xd9\x17K*q7\x08\xbc\x18B\xd1m\n\x10~\x01\x8c\x92\x9b\x10w\xbc\xd9\'\x11k\x88\x81QY\xb2\xd6\x83\xeb)\xf8\xbc\xc5Gw\xc0C\x149\xa4\xba7\xf6<\xff\xc0\x13[\x9c\x8a\x80\x83hZA:\xf2v\x84\xbb\xae\xaf\x13\xb4\x8dl\x8e\x96\x96\xfd\xe4\xe8\x13\xc3\x9f\x9b\x1b\xfa\xc6I)\x9f\n.m\xa5#\xd7p\xd6\xcd\xa6]\xebs\x12\xd47\x0e\xa9\xdf\x81\x93\xa2I\xb6(\x997\xd9\xe4\xfdJT\xa6\xa7L\x1a\x8a\xf2\x19\x1a\x1e\x1f??\xb1w\xd74\xb8V\x9d\x07\xaf!I\xa2W{\xbemW\xc0-\x9d\x12\x9e\x86t\xb1i\xe6\xf5D\x15\x1d\x8a\xa5 Ukw\x1a\xd8I\xe7\x8f\xa7\x91>\xb3\xae\xc1\xfbCg\x8b\x82\xecN\xb7r\xa7(\xf4l\x86nP\xb1W\xd5\x9c$L\r\xbc(=\x88\xff\xb7\xbf*\x19\xf7\xb6t8J\xdey\xe0\x87\x87)\x05%\xd0\xef\xf8\xb0TI\xb6\xber\xc4m\xdbE\xc5\xb1\xc0^\x1cs\xc1\xe7y\x9e\xd4\xdcC\xb8\x80\xaf\x82M\x92\xb4\xf8$K\xe6]\xb8\xf4fkp\xdb\x0c\xb9\x1c\xf0\x1ef\x07x\xfeq\xd8\xfd\x0f?\xf6\x16\xfc.L}q\xa9\xf66\x98\x15\x0f\xd40\xfc\x80\x82-%]VM\x98\xfa\xfe\xa0Ilo\xfd3\xc33 }\x01\xc1:\xfa~\xde]\x8c\x8fM\xd2\xcb\x008\xee2\xbbx\xc4\xdc\x10dZ#\x1b-\xa4\x1dn\xf1\xa4\x9d+\xc2h\xf9\xe5\xdc<X;#\xf5\xa3\xf90I~F\xbf\x9b\x1fm\xfc\xf0M\xcd\xb2\t\xd9w\x8c\xa1v\x9b\x82"\xe5_\xe8l\xd1V\xc0\xac<So`\x93\xa9\xa54\x10\xc6n\x91\xf8\xeb}n \xcfhI"C^\xaf\xc2\xcb\x1bF\x98\x16\xe7\xf2+\x0f\xd3A\xff^\xca|\n\xf4\xc4\xe6\x10\x96~\xa6\x05B\xba\xe1s\xfa\xd3Vb\x84\xeeH\t\xcf\x9c_\xc4\xca\xe62\x07\xf4t\xc9\x06\x06\x98\x9e\x84h,\x17\x06k\xa4\x83\x8b\xc9\xef\xd9qc\x02\xa9\xc6\x12\xe9\x95\x80\xe1\xee;\xf5D\x0f\xac\xc98\xd6.\xad\xafF`\x9e\xe8\xd5E\xefk\xa7\'\x87\xc5\x98f\xc2\xd8\x89\xb9N\xe9\xcdY\x01\x90n?\x012\xa3\x14,\x14\xe6\x02u\xfb\'\xc1\xae\xd1V}\x80\xcf|\x88\xa2\xdd8\xee@\xedI.\xe7\xe2}\x07>Go\x08\x1d\x85\x84\t\xc3w\x94U\xf9-#o\x0e\xe8\xc2\xbaA\xa90Lh;m!\xb6\xc6\xb2\xbdp\xc4\xd4\x8a\xa3\xc4\x18\xd1\x1fD\xd0\xb6\xd8\x046\x1fO"\xbc\xc2]k\x94\x8b\x80\x1bj^)p\xe2z\xb2\xed\xa5\x96\xde\x97\x81\x8b\xc6o+\xb6\x85\n\xe5F\xa4J$r~\xf7\xbb\xef\x8c\xf2\xcc\x9a\xf4zjl\x14\xb6\x1a\x1f\xe3\x15@\xd8z\xbe\xfels$M}\x1c|\x87\xbcU\xa19\x82+\\\x05x\xadA\xf3g\x1d\xd0"\xc2a\x1b\xc0\xa1<\x10]\x8e\x01\x8d\x07d\xe1\xe3\x10\xdf?\x8e\xd4\xe5R1\x14HQ\x12&r\xfd\xab\x86\x17\x18\xb4\x80\x16\xc5\x07\xa0\x06T\x91\xac6"\xd1\xb7\x96\x9a\xf3\x18\xd7\xda\x80\xb8B!\xbe\x0f\x1e\x8b\xb6k\x82\xd5\xdeW\x81\xbbC\xcc^\x1fdu\xca\x96\xf0\xd3\xb3\x07iaPZ\xaeLI-f\x0c.R\x17ag\x81\xda\x995\xb3\x18\xf5\x03\xf0\xf74\xc8\\4\xc0#\xe3!V\xc3\xd8\xb6\x8by\r\xb9\xc6\xcf\x8b\xdb\xf2\x99\xd0\x19b\x88\xefd\xc2\xa9B\x0e\xd6\xdd\xc3\xf6\x95w\xb5\xe2\x81V\x9a\x0f!\x94%h\xbf\x91\x10\xc5\xb9\xa1-r\xf9\n&\xdbA\x16\x17\x12\x1eJo{r\xecCYr\nM\xeb\xb3\xa3K\x90\xcb\xa9\x9253\x06\xd8+\n\xf5B1\xe6\x01y$\xd7o\xe4\xd0\xb7hY+\x93j\xd8qB\x91\x8c\xfc\x0f`\x08wl\xa5\x0c\x9fm%\x18\xd8\x80\x87\xb3\x82j2\x1a&"\xeeG\xda.\x9f\xack\xe2L\xba_\xefh\xeb^p\xa6z\x9e\x91\x9e%2\xae\x04U\x1cN[]\xc5u\xbf\xf8\x07.\xda\x0c?7F\x82\xb8\xec\x1d\xab\xcc=u\xd8K\xb2i\x17\xcb\xe1\xfa\xa7\xc4 u\xe8d\x7f[\xd6S\xfc\xa7\xac\xed8olO\xfb\x11\x85\x9e\x1a\xd3H\x04\xf4\x8b\xda\x0f\x82\xb7\xeeG\xc7\xbc\xdfHf\xe3V\x83n$Z\x14}&\x1b\xd1\xf9\x8f\x17\xfenZ\xe7\xa9\xa2\x8d\x8c\xaf\r\xb4\x8es\xd0\x95\xac\x08\xadP\x17\x9f\x81iR\xc2\x0b\x80=\x10\x9f?\xeb\xf4j0\xd3\x08\xaaB=\xf3\xbf\xe5\x96Q\xbf\xb5 \xaaLX\xf0\xd8\x0b\xb8;\xcfqtQ\x17m&Cjk0\xc1\xfe\x99p\x14\x01\xb6\x1e\x92\xfc\xca\x04\xcbU\xf8\xc3\x9f\xd0\x13(2\xd5i]\x82\xf1!\xc5\x04 s\x05\xfd0\xc9\x0f\x04\x95\xa5X\xfd\xe1K{\xb9\x84\xfd\xae\xaf\xa7\xb20\x84\x05\x9ej\xbb\x8bn\x1e$"1\xa8\x9e\x9e\xfdg\x15:\x07\x90U\xb5!Rm\x07\xf5s\xe1W\xa0\xd3U\xdd\x04R\xc8\xc9\xfbL\x13\xc4f\xcbg_\x88\x12\xc2\xdf\xb1lq\xc2!\x91\xaa\x0f\xe9]\x03\xfa\x9c\xbe\xbf\xe6z\x964\x96\x9a\xc4\xe1Zj\xa8\xa2\xbcG\x13\xb3\xcd-\x86\x1f\xd9\xf8\x93\xfdB\xeb\x083\xd3\xef_\xf7\x86\xc2j\xb58_\xaa\xb0,1\xdcy\x81\xc0\xae\xf3?\xb6\xb7\xeaoT=L\xe6`\xc4\xbf]\xe6I\x10\x9e\xbb\xc0p\x87\x12\xafIW9h\xb9\x86\xcb\xcb\xd7\x9e9\xfc\xe4\x9anI\xe5k\x19\xa23\xbf\x18\x0bPO\xfe|J\x14)\xb8\xca\x0e\x0b&\x9f]`\xf8.\xeeS\xba|bAL\x82?\xed\x06\\g\x0b.\xba^\x01\t\xab\xf7\x11\xfcd\xfd\x84\xab\x873H\xf0\xeb\x82JQ7\x9e\x93\x11\xacN\xa5Jxe\xed\x99Dp?\x01"\xd3\x16\xf8Y\xc2Fh\xbf\xc2\xac\x13iN\x12[~\xb4%\xabg)\xcbp\xa6\xd0*\x06\xb0\xde\xb6\x0e\x8f\xc9\xe1-\xd0\xfe\x1e\x92&0sB\xf1\x85\xa4\x7f\xe9l:d\xe6t\xcba^0\xc2u\x1f\x84\xab\xb9N\x8cX\xc4\xff\xde\x98\x91\x96\xee&\x8b\xf7PV\x8f\xfb\\\xfd\xec\xaf\x18\x089\xc2T\t\xefb\xe4\x90s\xa8\xe3\xf0Y_\xd3L3\xfa\xe4:+\x91\xf5\xbe \x028\xbf\x03\xa1^\rx~\xbb\x1b@E\xac\xa5\x7fI\xf3\xb2\x00\x80\x15\x7f\xa8\x89W%o_?\xbf\x8c\xff\xe6\xe7\xec\x0c\xe2Fg\xc0\xae\xe6\x8ey0l9]\xeb\xa3\xe2\x03\xb6\xf4{\xb0\x0bA\x90\x9e;So\x0f+/XnS\xb0\xbc\x12\x19\xbf\xe0\x15*\xee\xe7\xbf\x7f\x9b\x81W+\xb6\xff\x13d0\xb5\x91\x07\xec\xbd\x91\x0e\xe1\x12q\xe2\xc5;"\xa5\xe7*\xf9\xa5\x9f\xcd\x89\x9e\xa9\x1b\x14\xc4O\x00y2x\x0e\xc4\x1e\x0c\xd9\xdb\x9d\x90y\xc3\xadO\x99}a"\xf4\xcf\xd1\xee\x17x\xc7\xa2\xa8`8\xe9\x1b\x9e\xd3!\x8e\xe0_\x10m\x0c\xae\xb6Y\xaf\xee\xf9\x1cf,,\xfaa\x1c\xa8\x19h^\xa1\x8d\x1b\x9d\xf4rj\x1a\x89D\xde&\xf7\x82\xae1\xa2y\x0f\xcav\xe8\x18\x139r\xd7\xef\xc0\xf1\x92\x98\xd2\xb4\xde\x84j&;\x8d\x03\xfd\x9d`\x98\x1e/C\xe8\xb9\x00\xa1\xc6\xd7\xc04:P\xff\xa8\x1f\xda\x8f\xf6\x7f\xd7\xac\x90\x07\xf6\x81b2c\x1a/M\x19\x00\x9b\xc2\xd1C\xefj\xf7\xec\xc4O\xbf\xef~\x03\xc0\x17\xa4\xdf\xab\xbe-\xbf\xd3\x94Q\xb0\x1b_\x11\n\x18\xce\xd2\xde\x177\n\xc7\x00H\x8a/\xf3.\xd0\x16\x96\x96\x8a\xdb\xacjRP\xe7\xa2\xa9Y\xc9\x13z{\xf6\xfd]y\xed\xcb\x83\xaf\xcb\xea\x9a\xf8\xbd\x8aZ\x8a\xae\xfb\xd3\xfd=Y+\x89Vg\xcd\xed\xf5\xae\xc1\x0c\xdd\x81\xd1\x9a\x99\x1ek>F\x8b\x80?J>&i5D\xcf\xdc\xfc\xae\xc8\xaf\xf2l\xe1K+\x1doa\x02q\x13\x95\x1c\xa6\x05\x06>\xed o\x1bVsg\xed\xd3\xa9\xa5Z\x10\xf7c\x1b\x99\x13~\xb0\xbf8!\x15\xe7\x8b\x89&\xafCr[\xb6\xca3\x05\xdaH\xf2x\xff\x07\xbf\xbc\n\xdafl\x89\x9b4\xd5\x18\x90I\xff}_\x8c\xcf\xad\xe70\xb4k2VaY\xe9j\x9ef\xb9J\xb3C\xc9\xb3\xf0\xd8R\x17\xa0\xae\xcf\x08\xa1l\xa4\x06\x9fox\xe9\xd1\xc0\x1c\xa0\xcd\x03ql]juc\xeeC\x00f^\'\x86\xe1jO4\xb46\x87\xb2\x9c2\xfb\xf6\xd5H\\\x99z\x94\x0fj\xe2\x0e2,\xf6\x91\xcdM\xc4\xc9\xf9hQ?y)\x7f6\xe5\x03\xca\x1f\x0f>\x02\x9a1pY\xa3\xa7T\xb0h\xdc\xe3\x9e;\xd6x[\x99\x07\x0e<\xeb\x87\x8ff\x92\xd01?\xeatL\x9c1!\x99\x00\x94NR\x90!:\x14`4*C\x93\xf4NG\xcfG\xc2\xd8\x8dUU[b\xf4\xd4\xa6n\xf3\x00\xa1\xf6\x05\x83\xff9K\x1f\xb5/\x9f,\x92Z\\b$Q\xa5<\xeb8\x956/*\xad\x8aoS\x8b`K\xbf6nN\xa2\x820\xf7\xa8\x00:\xf9\xb2\xef\x16t\x17^\nN\x05h\x80\xd3\x05\xbd&mH\x92\xac\xc2\xb4\xfc\xd5\x19U">\xf5/\xcc\x85D\x85\x175\x9e\xe3\x84\x92`\xbct\x01\r.\xad\xdf!\xdc\xadS\xda[)\x8d\x98\x8d\r\x8d\x97\xe1\xf4pg\x1e\x1fs\xc2\x83V\x95\x14\xc5\x86\xea\x9d\x04\x9aj\x87\x81\x88Y\x15/1(\xfdh\xe5\xe4c\x135\x84\xc5E\xd1/\xd4\x11%\xac\x0b}r556W\xf2\xf7l\xe0\x80-\xbe\xde\x87\x1bS\x98\x1d\xbbl\'\xe4 \x95\xe1s\x08\x93\x17yDE\xbfU(\x90\xb3\x9e !\x0b\xdf)\n\xfa\xf1\x0e`\xbe\xae4g\xd7\'i\x0bj\t\x93\xea\xc3\x1f\xbdnP\xb5\x8as\xc5Us\xf5\x91\r\xd3n\xdb:\x98\xce\xd9\x17S\xfc\x12\xa8\xc8\x11\xd1!\xe6\x19%\x05\xdf\x91\x15\xe2\x06\xaa\x880$Dd\x9a^=\x86\xe4\n\x18rr\xe8\x14\xf3\x94{\x8f\xc6=\xe1\x95_g\t\x8e\x84\x15\x95N,\r:dC\tW\x84I{\xdf \xbdX\xa4l\xb1s\x8eo\xd4\x0e/m\xf8\x1d!s\xf1{\xcd&HB"\xdd\xc3\xa1\xdaq\x90`\x8aU\xa0\x08\xfd\xe1b\x17k\x1e\x9c\xa2\xcf%\x83\x8d\xe52\x8bn\xa2a\xbd\x84\xc7\x88o48L\xf0\xc3\x90W\xb2\xa1/\x9d\xdb\xbd\xd9e\xbb0T\xc9dHB\xe3r\x8c\xcaC\x05\x97z\x08\xd6^\xb8\x94\xfc\xb3\xe1R\x9b\x93jQ\xb0\xf1\xdb2\t\xdf\xba\xd21?\xd4\x04\x9c\xd3\xef\xc6\x1as\xa2\xb2\xe1*scY\xc52\x8b\x83\x86\x98\x1e\x02\xcf[\xbfu\xf9>8\x8c<\xfe\'\x92<\x05\x15u\xb9K\xb3\xbf\xe3\x9e\xee\x93\xb8W\x1c\x9d\xa3\xc1\xf4c/*\xae\xc3\x07&0\xf8\x87\xeeP>\xf8n\x12W\xa2{]q\x18~\xd3\n$q\x9f\xae\xebh1H\xfe\xfa>\x13x\xf7\x7f\x94z\x92\x9c0mI\xfd\x9e=\xe0\xac\xdb\x92U\xec\xb9\xdb\x89\xac\xadU\xe0\x9f;\x1dgG\xf6\x89\x02\x1a\x80\x12#\x84\x0c\x98\xf1\xc7JD\x06\xb4\x91\xc6YM\xac\x0c\x17"D\x1d\x89+\x1dA\xce\xaf\x83\xfe\x9a\x81\x11^=\xf1\xfb\x1a\xb6\xc0\xd1\n\x1c\xb9;\xea\x1c\x90nY\xd8T[8\xf5}\x1c\xc3\xfcI9Z\x02\xb3\x1ce\xbc\xd6\xbd\t0\xc3%\xbc\xee)\xe1>\x9cL\x1d\xe4n\x80\x10\xf5\xbd\xb4\xcc|\x13\xd2\x03WF\xc2\xfa$\xdf\xe4\xc4\xe69D\x16\xec\xdb\xba\xaa07FS\xfa\x9eU\x0b\x95\xf5\x94S4\xc1G\xdeI$\xca<v1\xd7\xd2\x90\xb4\xd1\xc2S\x91\xc4\xa7\xf5\x0c\xe7\xf5\xae\x1d\xa1\x86>\x11\x89\x920I(\x17\x9c@1\xc9GL\xf9\xe5\x07\xc9\xb4\x95S\xc0\x88\xdfT\xf5d\xf3\x81\x18S\xbc\xc7V\xf4\r\x95\x03{7\n\xe0\x01cs\xf8Z\xe2t\x02\x11x\x17\xcdcj\xd8!e\xea\xbc4Y\xe3\x16\xf5\x89\xf7\xce!9S]\xcdC\xc3U\xa3U\n\x0c\x01\xf0\xf7\xbfa\xcb#\xe0\xce\x12\x1d~s\xf9\x8d\xa6\x06\xdf\xfb\xe0\xb2\x8b\x16\xb9\x04\xb5\xa5\x7f?\x14\xaf\x05\xd4kc\xc8\x17\x9b\xc6\x83P\x92H/\xf0\x0b\xd2\xfe|\x95\xfe\xb9\xd261\xf9,K\t\xfc\n\xc9/\\\xa9Q)\xd3\x13\t\x04 \xd9\xaf}E(\xfc\x15M3\xf2\xf7\xe0\x06\xd4B=\xaf\'\x17\xc5\x16\xed\xcfON\x02{\xbahP\xe8\xac9\x13\xfa\x11S\x81\x1d\xf8R\xeb\xb8\xb9\xaf\xf4\x95\xed\x15+\xdd\x98\xbb\r\xc2\x1a\xa1X{[:\x93\xdb2\xa62\xc3\xdd8\x93\xff\x86g\x0f\xa0\t7*]S\xa0\xcfl\xb9\x17+j\xd6yJ5\xae\xbf\xdd\xb3X#e\xea\xa8\xa8\xdc\xda#\x08\xbf\x00\xd0\xfb/4\xf2\x0b\tb\xb9\xdf\x0fZ\x1c\x15*\x81?H\xb4\xa3 \xb7\t:*uR\xe4\xb31\x1b\nrulmW\x0c\x9dc\xdc\x1d\x07C>\xe2[\xbeW\r\xe0\x7f\x12\x9e\xa7\x9e\x10\xc7\x9af\x8bKY\xa1\x18g\xb1Z\xc0\xc7\xda\xfb5\x909\xd80\x8b\xe8\xca\xd3\x8b#7/\xdb\xe8\xe44\xc4\xe3\xae\xb6]4v\x08\xfd}\xed\x93l\x90R\xa0=.IU\\G\x1c\xdf\xf8,\xdaK\xda\x1c\x9c\x89.\xfc\x10\x8c\xe1\x0e\xad[\xbc5\x86\xb4s\x05\x02\x85\x98\x1f1\xc0\xf9>\x05\xceU\x11=ql\xae\xb4\xea\x993\xcfSo\xd5\xef/ a\x81NF\xfb:\x01\x1dE\xcd\xc3\xc6\xd6]\x8dy\xe7\xa4\xbb1<\xc7\xee\x9bv\xb8\xed|\xe3\x80>.dw\xe5\xed\x9f\x93;X\x08\x05\x04\xd0\xad\x07m\x08\x90\xd3+\xe3\xa0?\x83\xcc\x14\xde\xef5I\xb7(\x12\x11\x00P\x02\xc0\x8c\x9d\xd7\xc5J3\xd4\xec\xa4\xd4\x05\xd8\xacJ\xc7n\xbf\xdfS\x89\xa9\xbb\x14\xb1\x1d\xae^\xd2-\x16\xab{W8\xdaA>5\xfb\xa0\'\x86\xd6\xfd\xb7I\\\x82P\x1c\xab`\xa5\xdd\xca\xd6\xae\x10\xb1R@3p\x05D_\xa9\xd3\x03\x92\x16*\x8e\x80\x81\x17_\xcf\xb0\x99\xc6>nD0ny\x9b#\xacp\xcc\xdf{\x85f\xfc\xee\x9a\x9f\xd6E\x086J\xc6\xb9f\xed\x7f\xb3\xdc\x81\'g\xe33\x98\xf2hY\xff\x06\xd8\xdc\xf4@\xe4\x16\xed\xc4\xc5\x9fj"s\x00\xd6\xaf$\x8aj\xb0M\x125\x05\xc3it\xd5\x04\xc1l\x8d{\xd9{4@\xb5\xf5\r\x01\x8a2~\x8f}\x8a\xb0\x860\x0cM1p\xcaQa\x0cG\x81\xfc\xdb{\x14C\x0f\x12\xe5\x80Y\xb1b\x89\xb7\x8b/\'\xcbO\x87\xeb+$<\n\xb7\x85\xdf\xb4!\xbeV\xd1uaq\x82\xc0\x97UzdqD\xe8\xb7\xa2\xe6\x84\x11\xf9\xb6\xc6\xcc9\x90\xd9eq\xc5\xc2E\xa9T\xa9\xee\xb4\xf2\x86\x01\'K\xa5yu\xd1\xa4\xf6\x0e\xff\xa8\x0eu\xf8\x8c\xd9`\x0cR)\xdd\xa4a\xc9\xc9\xc4\xedkO!\xad\rX\xb4j\xfc\xca\x9a\x88\xda\x88\xf1\xbd$\xdb\x0e*\xf7\xffU\xdbt\xc0\xb0\xe2kArx\x14q\xf4\xb3\x0e\xf1\x80\xd80\xf3\xaa@2\xab\x12\xeb\xf5\x1d\xf6Z\x82\xb0\xdew\x08\xcc\xa5\x8c\x16\xb2\xe5|\xa9_\x9e\x8b\xbb\xa2\xd1\xeb\xdd\xd3,z\xc2\n\xaeJC\xf0\x8e=\xf7\x01\x13\x90[\x9cu\xf0s\xa3*b\xd7\xcb!w\n\xd6 Qp\t\xbb2\xf6\xf3\xd9\x99kO\x02\xd1BQ7\xa2zG\xb1\xdd\xbd\xf2\xea\x11\x9e\x9d09%*\xf6\xf7u\xaa\xef\xb3\x88\x13\x9a\x0c\xd2\xc2\xbe\x18\xdf\xb1\xfa%L\x9eP\x04\xe3e\xd9\xac\xf9\xd0\x8e\xa2\x97\xa3z\xb2L\xccf\xcc\x1e\x86\xfa\xa3\xf0\x10\xa28y\xd1\xe3\xc1U\xbe\x06\xc7\xb2\xdf\xe5\t\xe4\xee.\xd8\xd7\x9b\'o\xe8\x8d\xcb:\x07\xa5\x8f\xdfZ0\xd3*\xd4\x00\x8d(\x9f\xeb\x10\x00\xe7\x803@\x00\xa3>\x99^N\xa1|\xf7\xd9\x0bk\xe7\xfbq\n{4\x87\x95\x85\xd7\xc1\xca?\xd4g\xaea\xc7$v\xac\xfb\x85\x15\xe0\xa1\x937[F\xa5\xf4I\x08*\x94\xa5\xf0=j\x00\xe6U1Ma\xddi\xcf\x19\xb9\x99|\xce!\xfa\xb0\x1e\xeb`M\x9b\xe9\xda\x1b\x91\xb4\xdc\xe4Y\xf6\xb9\xef\xad\x81@\xc5Nx\x7f\x8f\x1f\xd0}z\xa3-\x92\xb9\x0c\xf3\xce\xa7W!\xa8\x8f5\xc4\xdd\x02\x9cB\xd0\x0b\xd1\x1b}\x1a\xdf]\x8a7\x86\x0f\xa1\xeb\x82\xd47T\xd6\xbc\x00\xa3f\xc5\xf7\x85\xdd\xf46\x9b=\xf9\xabS\x14\xee8P\xbe\xcf\x82\x1d\xcb\n|.\xf1\x9a\xa5i\x081\xed\xdc\x93$\n\x98\x81l\xf2\xd2?\xa4\x1a\x0f\xb9\x07+V\x8a \xcf\xa2c\xcf\'\x856\xd1\xf8\x023}\x87u\xf5\xdb\x05\x81\xa6\xaa\xd6\xf9\xf4\xf61>!\xa4uT\x17\nlz\xcd|6\x8c\xb7\x15\xe0\n\x02re}X\xd3%\xefO\x02\xd4\xfb\x14;\x7f\xcfV\xa0X\n2Yc\xc8\xb4\xe0\xfd\x97&?.\xb1\xd6\xf5\xa5\xc7\xe4*\xbc\xe1\xe7\x8dO\xc6\xceM\xbc&\x91\x9a\xbe\x8e$FWu\xb6\xd5\xc7\xad\xd1D\xfe-a\x8b@+\xfb$\xce\xa2\x08K\xd9C\xb0\x81-\x86\x1c\xc2\xa8\xabW\x93e\xe2\xf7\x03\x02\xe9\x9f\x81\x84=\xfb<\x0c\xefv\xea{\x8e\xd4\xae\x18\xc8:\xdf\xa1-W\x87?V\xf9@\xc6\xd1}\xfa\x91\xe3\x14\xf1\x9c\xc5\xb0\x1a\x13\x92\x89\xe9T\xe3A\x8b\x02[h"\x9c\x96\x10\xb2\xb8o\xf6\xb0\xc2\x18\xb5\xa4\xb3\xf8\xb7\xa5&\x11\x8b/r\xfc\xb8{\x0c\xc2\xfbZs4;D4w\xa1\xbb\x1f\xfe\x1e\xebj\xb1\x01w\x0f&\xc8\x90\xddpg\x17\xe7\x12ND\xef\xdeV\xae\xc3\xf1\x03\xdb\xcb\xaa\x92eSt\xd5\xa9d|\xf1\x16\xdbq\xec\xa5\xc3\xaf.\xe6\xfe\xdb"t\xec\xd3\xdc\xc0B~\xf6\x85h\xcd\xfb\xb5\x1d\xfc\x15_\x1b\x9b4\x1c\x14\xb2\xb9\xd48_\xf4\x82\x9d\x0b\x13\xdeh\r/\x00%\x1e\x95\xae\xd8\xaa\xbc\xab\\\xa8\xa4E\xfb\xb3!^q\x01\x8b\xc7\x8fFJ\xe1[\xc2\xe8\xfb#\x98\xe0\xc2z\xb2\xef\xbe\x96\xc9r=&\x90\xc3\x85\xc4\xb6\n\x1f4q\xa7\xe8|\xaa\xd4\x9dU\x1d\xeb\xf6\xd2\x9bz\x8f\xb3\xfe\xee\x96y\xae\xc8\xf0\xfc#v\xb1\x18\xf8\x98\xc3\x05\xd3\x82Y\x1d\x90\xbeT\x8f\xcd\xd7\xc0YO\xda\x07\xa0z\x84\xae:\x80\x10ks\xdc\x949\xb7\x92\xe5^\xafE\xf4\xd19p\xa6\xce"\xe4\x1a\xdei\x06\xd6\x08Xno\x16s\'\xd8\xf7P\xc6\x8c$\xa8\xa0~\xe8\x83\x0c\xd3\xac\xa1\xd8$\xfa\xceg\xd9\xa7j\xe8\x91\x85\xd7\x95\x07\xb96\x0e\x0b@\xf2~/\x10[\xfd;\xa6\x97w+s\x82\xb3\xb8Y\xab\xe6\x93\xa1\r\xf4?\x02\xe4\x84!\x15\xa2\x14\x9aEK\xe6+\nT\xfb\x85\xc3;h\x0319T<\xcd\x1c\x04\x04\xe2\x972\xd0\x98\x9e\x8c\xed\xac\x13\x15T\xac]\xd2Y]\xe9\x7fO\xe4 \xa3\x98\xf5\xd3\xc0-\xb2\xad\xb4\x1a\xe6\x83\xf5\xbciA\x08\xc1\x96\x08\xc3;\xc8\xb1\x15\x13^Ig<I\xe0p\xa8\xda\xcaC\x18!\xb0 \xff\xd7\x9f\xde\x07\x080\xcd\x99Vo\x83\xa2-\x1d\xd9\xbc\x19\xb6 \x84iXY\x92\x14\xd4\x90\xfeok*K6C\x04\x87\x94\x8a\x12\x05\xae\xc9Y\x10\x83\x99\xcb\xdb\x1b\x1ae\xa6\x93\xf1\xc4\x87\x0b\xce\x99F\xdd~{\xb3L\xc1*tXz\xeca\xa5.\xb07B\xaa\x8dY\x03\x8e\x95KL\x17\xa62\x8d\xc3\x9bN\xcc.\xa5\xd5\xdf\xb2\xdb{\xefn\xa8\x87\xa6\x1drJl\x12\x80@\x15\x9f]\x8f5<hUt$\x9a\x07\xf36\x98\xf2M\xdb\xd4\x92N\r\xba\xd1\x80\xc5\xa4\xd1\xd6\xccE\x14V\x03\x12\xc1\xf2\xd2_\x08\xada\xa7\x00\xf0K\xb6(J\xc0>\xfd"k\x04\xcb\x87\x0c\xb8RT\xf2\xb7E\xf1\r\x91\x96\xe8\x8e\x0c\xe3e\x86\xac"\x88\x7f\xfa@]\xed?*\xb5\x9d\x9d+\x9b\xbexq\x1asY\xaeu*8E_\xd3D\xd3&\x91\x0b\xc6\x85$\xae%\xfcS<m`\x92\xb1PP~\x9e\xa8\x1b\xae\x07\x168\xdb\x94t\x8e5\r\xfd\xfc;j\x8a\xc6&\x07\x905~gz\x18S{n[A\xfa\xf7\xd2W\x01P\x03:aQ\xdf\x91\xf1\x88\xcak\x8fs\x9b\x8fqKM\x05\xc5\xf8\xca\n.\x9b\x8b\xf6\'OG\xae\xe8\x17\x00/\xa5\xb9\x19\xec\xdbo\x82\x95\xcf\xe5\xed\xb3i\xa3\xd8\xb3\xade\xe5\xcf\x1b\x10*\x18\xd47\\N\xcd\xffO\xacm#0\xd8\xd1\xd5\xba\xc3\xf7\xc3Ei\xacC$\x89<E\xe4Trq\xbf\x004`\xb1\xa3Cr\xfb\xd2\x9f#=Pd\x12\xe2\xd02\xcd\x91\xd2\xa98\xb5\x96\xb3\x1c\x9b\x17q\x9c\xf7\x7f\xe9\x13\xd5c$\xb0+\xb6\x13\xb2;G\xb6\xa1\xfe\x97\xbd\xe1\xfd\x920\xaf\x1d\x91T\x98\xfcT\x0e\xb6\xbf\xaf\xd8\x99\xf0\x95\x04Z\xe4\xb6\xff@\xc13\x9e\xe8\x91K2\xdb\xf2\x00Cd\xc8\xfah\x13\xd0}\xa3\xac\xdb\xaeb\xa7\xfd\xe3y\xa3\xc9_\xd8\x8f\x9f\x0ew\x03\x8c1\x1b\x06r~\x03g\xd8W\xc8)\xf0l\xbc\x03C\x9e\xb3\x02\xc2{h\xf1\x82rH\xf2\x9b&|\t,$\x8a\x07F\xa9BN\x9a|\xe65\x1cK\x15\x00\x10V\x1cq\x15N\x91\xe1\x0b\xefGNUO\xd7\x11,\xec\xce\xf2\xd0c\x90\xa6\x06\x93\xb0r\xccj\xa6\xa8\x0e\xc92\xaa\xec\x01\xe9\xf3{\xb2\xb4\x19O\x9b9jI\xa8*\xa5P\xed\xb1\xadV\xa1v\xc0\xe0\xeb\xcc\xe1\x06P\xee\xe6\x9a\xd4\xf7\xb1XuN\nC/0h\xc6\xce\xbb[1,N\x08L\xa4\xdd\xa8\x97gt-\xfa7\xc6\xaa\xff\xe9\xabV\xec\xf3\xfe\xd6hL\x9eY\xc6\ti\xae`\x16\xb4\x97!\x1a-}]8\xbdK\xf5f\xffX\xb2y\x19K\xff\xe6\xe9\xda0\xcc\x8b+\x81w\xd1\x88\xf02\ti\xdd\xd7\x1c4\xe8\x88s\xd19\xb9\n\x18e\t\xba!\xb4\xe6b\xdd\\\xd7\xc5u\x96\xe8:^`\xb4A\xe9H\x0e\xfcE\xca?\xcc\x99<\xe1\x8a\xec$\xb6\x84\x80\xf9\x14\xfe\xdc\xd0\xbdI\x96\xc2+\xc1P\x03v\x91\xf5\x90\xa1\xf9\x92{\x98\xf8\xed\xb7a\x9cy_W\x87\xd16!/j\x1a9YLTCS\xb5\xf8R5\xf1\xc9\xb3\xdc\x0b\x81\xc6\xc6\x0b\xacv\xd5\xc6\x86w\xfd(\xdf\x9d\xc8uAias\rO\xe7\xd9w\xed\xec\xff\x03M\xc7g\x1d\xcf]\xa8\xd22\xc3\xe4U\x94\x93\xcf\xefh=3\xaa\nG\xe6\x95|L\xfe\xa1\x0c\x87\x85\xad\x86\x07o\xd2u2\x07;}P\xee\xaeS\xe7\xedK.\x13>\xd9y\xa9\xe6C\xff\x13\x87\x91\x8d~\x9cA;\xd7\x08\xe9\xecQ\xd6\xec\x12\xfa\xbd^\xb7\x10"\xc0%\'d\xdf\x7fS\xc2\xb8\xf5b0NG\xa8gW\x08\xf8\xdb\xc4\x02@\xf9\x8b\xa4\xc6\xeb\xd53L\x1a\x06\x80\x10\xdcX{\xbe\x8fd!\xb3\x00Sk\x03%\xdb\xb4\x9eP\xbb\xbe\x96\x12U\xb7\xe0Q#Yx\x8b\x0f\x932\xf3\x01\x9d\xae3\xb5l\xe9Z\x83,\x1b\xec\x00\xde_o\xc3\x14|\xbeqJ\xdc(U$\xad\x0f&_\xd5\xc4k\x98\xd8\xe92\x80;Fs\xcbn\x01\xa4\x97\x98Z\x863\xa4\x1b\xc5\xa4D\xf1P\x01&\x9c\xd6\x10}\x1ff\x92\xba\x8d\x90Hp\xd4\xf22\xab@\x06`\xc9\xfb\xf8\xe6\x8a\xc8.\x9fH\xbdd\xec\xc1=Q\nj3\x84\xa1\xdfEI\xc8\xdf\xf8\x81j.\xf7\x9fPL\xc6\xd0\x11\xb3]k\xd2 \xa5\xf5\x1b\x12\x1d\x91\xb2@f\xd5\x8e\xd2\xe3\x91\xaa\xac\xed\xf2\x06\xd6ij\xc2T\xd7\x9c`\x1a\xd9\x0c}C\xb84c2\x1ab\xc5\xee}{K\xa55\xfb\xfeP:,uN\x00/c>G\x94\xa5\xe4\x03\xf3%TXgg\xb7\xdc\xe2\x8b\x99\x8e6\xefw\xedDL\xa1\xbb\xe1s\xf6t\xb9\xde\xbe\xbb\x149\x1e\xe46\x18\x1bH}\xa4#\x83\x8bd\xdb=\x1a\xadF\x15B\xd6g\xaf\x9a\xdf\x99\x1b\x18\xb3\xb3\x9f\xca\x979\x95!\xa3s\x18T\x07\xa9\x80\xe8\xcdEP\xd7\x84\xb4\xda\xf7u/\x1cM\xef\x0e\xea\xa4+6\xb7\x01\x97\x9a\xfd\x86i=\xa1\x19%-vh\xcc\x88^5\x84w\x18\x01\xfa\x0b\xab\xa5"\xfc\x0f\xc9\tp\x01u\x87ow\\={\xddj\xe33Zq\x9f \x89?\xf6\x9a/^\xab\xe3V_)\xff\x98JJ\xe2\xb3\xf1V?R\xe5\x7f\x9f\xd78\x9a\x17e\x89\xe4\x13\xb4;\x991 \x83\xb6!\x96|\xc0\xb7kcE=`\xa9o&N,\xb1|n\xd8!\xde\xce\xc9Q!\x0f\xbe\'\xc5\xdd\xf2\xaci9\x07\x1d\x8e\xd3\xf5\xb8?d\xb3\xd4\xcb\x90\xa4fW"\xd4\x1cC\x11\x0br\xe6\xd3}\x8a\x80\xfb\xc5\xee7\x958\xcf\xacuR\x07\xe8\xb3[>4\x1b\xb8\x0e\xb9\x867D\xd9"0!\x84\x87s-\xd8\xe2=\x89\xab\xe4\x15}O\x81\x0c\x94\x000\x88\ny\xb9\x9f\x1f\xe5\xa7Dmv$_\xf5`g\xa4\xa3\x85uph\xbf\xacH\xeb6\xf4^\xe1\xec\xd3\xa3\x08YXqL\x16\xb4\xf0\x85\xceZV\xa8\x07\xfdP\r\xea\xfe\x9ef\t\xee[\x81 \x0c\xb8\xdf\x18\xbd.\x89 \xc3s\x8d\x92jy\x04}\xd8\x8f\x94\xce\xb1B|\x85\x89\xb3\xa3\x18~U>\rv\xf4&\xd3?\x1a\xc9\xd7\xb4/~\xb0\x90\r\xb9\x1e\xbd*\x96\x99\xd7\x1f/\x10\xea\x7f\xe8&\x9b\x9f\xda\xe6\x17\xed\xb0\x8eXx\xf3\x9ed\xfe\x85\x19\xf9\xea\xd9\x8b\xa2\xdalBr\xcb\x9e\x8b\xa6\xdd\x97\x82\xb0\x99\r\xc1\xa61\xa5H\x92\x15\xe8\xbc+\xa0\xb2\xbe\xb5\xa8V\xf6@{\xf4\xa2\x11\xa9\x8c\x10\x9c:\x19O\xf8\xbc\xa5\xe6\x8a\xb7\x9f\x87b\x90\n\x9d\x05P\xb9\x1e\x07j4\xcdE\xa2Z\x1f\xbe\xbfO\x94M\x00t\xc5*\xd6F\xe6\xe09g\xbbZ\xc4\xc6\xa9\x90\xdaQGj\x11\x89\x8b7\xf3\x9e\xeb\xf9\x88\nw\x90\x93\xd8\xa6\xd6\x18f;\x81k\xacA\r\xbc3\x9c\xe6U\xa0+4\xb8M\x8fK\x01"\x11\xfbwf\xd1E+\xf8Y\x97\xd8-\x98\x82:\xcd\xf4\x9c5-\x1e7\xc6ck\xbc\x96\xce\xf3-\xbfT3\xc8\x97wX\xfa\x9d&\xda\x0b\xf1\x88\xab\x9a\x82\x17\xfe\x94\xf0\xbc\xf4\xc4\x8e\ru=K\xe0\xd8jaf\xc3\xb7\x1a\xd8\x1a\xfbVK\x05\xdb\rO\xdd\x88\x13\xbc\x9d\x9f|-(Tj\xba\xfb\x88\xdbQ\xc1\\o\x1e\x11\xb1!\xe9j\xf6\x18k\xf5\xd7b\x9cP\xa1\x11<\xea\x83\x9at\x8d\xcaQ\xe91\x82h\xb2\x03\x0c\xae\xb0\xa1\x85\xf5~bM@. ^?\x97:\\J\x08P\xd7*otZ\xdd\xbf\xe1\xcd\xf6\xdf_\x88|h\x85;\xeb{\xf9}\x85\xafI\x8e\xf0\xca\xc9\x8dw>\x9c\x94lG\xae)b\x83\xc4}\xaa\xaf\xd7\xfa\x10\x1b\x95\xc8E0\xb1\xdf\xbeS\xc8d\xd1\xb0/4\xc7\xd6\x96\x18JAm.}\xba\xc3\x01i\xf7\x14WH\x9e\xa3\xfb\x08)\xb3\xbd\xbf-\xd6\x99\xe4 v\x8f<\xa3r3I\xd9&\xb4\xe7\x8f\x07\x07\xd3\'\xeb~i\x87\nfB\x8d\xbf\x1b=\xc6\xb3&Y\xe7U\xebq\x1f\xd5\nB\xb2\x96\xd3u(h\xdb\xb2\x82_=\xbf\xbb\xc0\xf9\x98\x9c\xe3C?\xe9\xcc\x08\x16\x96\xb0Z\xcae\xd8\xa9\xd3\xf1w\xf4\xf8\x99}\x066@\xad\xcd\xe4\xc0\x13\x88\x82\x81\xdfY\x8b\xae\xd1Wd\x8a\xa8\xcf1p\xcc\xc9\xc1\xf7F\xae\xb3\x7f\xd2\xa4\xc9\xc3\x91+\xd8Y\xe9XN\x18EB\xa8E[\x90D0T:c\x0b\x95\x9e}U\x87p\xe5\xbc\xc4WHr\x86\x95\x82\x92\xc8%\r\xa6?.\xb2\xc3\x12\xdd\xe0\x89\x9aG-:\x14]\xdc\xa1<*\x9dP\xa2pu\xa4\x1cY.\x83i\xf4\x84h\xcc\xd8A\xd05eWy\xa5?\xa8\xb0@\xa5\x0c)J\xfbY\xe0\x95`I#\x97r_\xa8\x0f\t\xccS\xa0\xe0pA\xdd2"\x1a\xd5\xe9\xa9\x91P\xe4`\x18\xae*"I\x80z\x98I\xbb\x9bX7\xa9\xee.\xd8\xc1 \xdf9b9\xc2\x84r\t:\xa1r[\xb5\xc8a\x8f\xaa\xf9iP\x16\xf4N\xb3\x86\xf8LH\xc7f\x95\xe8\xcd\x9c\x1b\x8a7\xbc\xec\xadZ-S\xb5&\xa7=\x14D\x86\xdc!\xf5\x9d N\x199a{\xf9#\xc9?\xb7$\xd1\xc1\xd3?v\xd1\xf8\x86r\xedn\xf3\x9e\xe4<f\x9f\xf3\'\xceZ\x95\xad9<2]\x93\x0e\xd6\xe2/\x14!)Y\x19\xc6\x98\xe2ER\xfa\xa1\xf5\x1b0\x9e\xd0\x80\xfc\x7f\xc1 \xb3\xfd\x8c\xdc\x1eK\xd11\xbf1\x91S\xb4K\'m\xa6\xc7\x91\x97c\xd9\xf4\xc7\x08\xae\xeab\xd2MZ\x0c\x7f\xa7Bv\xd9KJ\x0eQ\xbe\xc7\'$7"I\xcb\x1fcO\xa0&\x89\xeb\xe5,\xcfv\xa8z\xc3\xb0o\xce\x11h\xa8\x03\x9d\x87?ux\x02\xf4p{\xee\xdf\xb1\xe8\xcf\xce\x04Tr\x95w\xb0\xd7\xe4^H\xd98\x99\x8b\x95b\xd7T\xae\xa4\x8b\xae5\xe4.f\xffk\\\x9f0g\x13H\x15\x7f,~\xd3\xaa\x11B\xfc\x94g\xf9v\x05\xb3\xcd\xbcV\xc7Y3hd\x96\x87\xf69\xf4l\xc6\x99\x9b\x9f\xe6e\xab9q\xf3\x9e\x96O 6N\xf5\x9fy}\x88\x92\xae\x9c~!A\x0e\x0b\xf5F\x1f\x832\x85\xb5f\xf9\xba\xcdw\x96@\xc2\xd8\x7f\x0cM\x90\x05ay\xbc\xb3i\xaf\x87\xa2N\x9f\xaf\x88\xc9\x87X=\xce\xfe\xae\xb5\xd9\xbf\x9c"\xedo\xfc|\x0fQ\x9b\xa5\x86\x8a(@\xef\xa0\xf8m\xe7L\x7f}A)W\xc52\xff\xac\xcfy\xb0\xa0\x88\xf1\x130=\xe3\xa0\nI\x80B\x04F\xfa;\xde9\x9b\xc4\xecWz\x9c\xefb{zN\xbeJfU\x9f\xcf\xcfp%\xa7\x9c!\xc6\xa1\x9a\x1eKh\x1b\xc1\x05\x86\xc3\xe9` 2\xb7e\x8c-\x8eH\xd8\x9e\xb0\x80o\x15\x10\xe1\xbe\xf7\xed\x18G]\xe4\n\xda\xeai\xdc\x80D1\xb7)\x82\x1f:m\xe8m\x8d\xec\xa1?\xbc\x17\x89\xb0\xff5\x9b\x81m\xbe\xa9`\x89\xcf0z\xdd\xb1\xc7\x17\xc9t\xa8\xe5P\'3\xd0\x9e\xb3\xc5\xae\x8b"\xe1\x1b\x15\x85\xd7"Q\x90\x89\xc6g\x8d9\x9e\x1bz\x08\x96}\xfbYt;\n=\x90\xed!\x99\xc6\x9e\xa3\xec\xaa\xff[\xcax\x9c\x12\x18\xd2\x0es\xcf>a\xb9\xa20\x1bf\x05\xc3\xcb\xca\xb33!\x07\xb6\x8c\xe0\x14\xe0\x05`h(\x14\xe3\xe0\xe4]B\'\xa4L\x00\\\x1e\xeb\x06\xb0\xa2\xd4G\xa2\xaa\x94\x83L0M!V\xb5\x14\x12\xc7\x9f~sL\x04w\xa7\xc7@\xda&*6ol\xeb\x04\xbdAy.\xe3(\xf8\xc9l\xbf\xfd\xa4\'\xae\xd6p\xe5\xb6=\x9b\x19U\xfe\x07\xf7\xd2b,V\x1f\xa9\xbf\xa9\x96\xef\x87\xb3\x16\xd8O\xa6\xd8\xf2H\xa9\xbac\xaa7\xff\xd7\xd1\x12\xa5\x9f\xa4TmV\xe2(\x8a\t\xb7E\xe1F&\xfa,7\x86y}\xcf5A\xfdVQ<6\x86\xd8Nu\xbd\x85\x99\xee\x86!!\x8c \xa3\xc4\xf9\xa0M\xa9\x0cE\xe91\xc3r\xfb-\xc7\xb7\xb6!\xc8\xd8z\xdbC\xba\x90\xd2\xd9\xad\x930\x8c\x12m^o\xa9\xa0_\xfc\x00\\\x1bIS\x9fz\x828\xb4l\x03A\xe1\xd6D=\xf7"\x81\x14S\xe1\x99<\xc3C\xc4\x88x\xe5\x85\xc9\xc6\xbc\xdaN\xad\xa4\x00{\xc4\xa0A!\x05\xb9\x86\x01\xd0\x14\xd6\xe1\xfa02Vw\xb5\xa7\x88qE\x92\xd8$Az\xf2\xa6\\u\xfd^\xfc%WBP\x89\x84m\x9aD$\x1ad\xacAx\xd0i\xa9\xe5\x8a\xe6\xb0?\x81(\xd3\x7f@>\xe1\xca\x16q\xae1O<?\x90\xaa}\x98rD\x99\x95\x98\xaf\x92\x19\xa9\x17\x03+\xaf\xb9\x13\xa4\xf9\xa2\xbc\x87\xfb\xcc\xaahK\x0cw\xd5\xee\xafh\xc9\xba\xcf\x05\x17,\x1f/\x87O\x97\x99\x065\xc6\x98\xdc\xd2\x7f\xf9\xed\xd4\xa9\x0e\xca\x1bc\x1b\x13A\xefj\x8b\xb0g\x9b\xbcj\xb73\x80x\xd5;\x0f\x96\x03\xd5\x86\x87\x87fw\x19Wf+\x0e\x99\xe5\xacmm\x01\xf8\xcbF\xeb\xbc\x9b\x1e\xfa\xd9\x0ci\xb3\xea\xde\xdeK\xdf\x96\x9b\x1b\n\xec\x0e\x1f\xa9\r$\xa0,\rg\x03\x03^bl\r5\xee%\xbd\xd6\xdd\xb3\x80\nTUA\x01\xa7\xd0l\x82\xf5\xbbJ\x91\x07\xfdu\xca\x18\xed+\xde\xb9\x14\xe3\xaaL\x03 _*\xc1\xbf\xcb\xc6\\\x8azI,\x9a\xfe\xbc\x03\x91e$\x03\x85\xc0;\xe4\x9eW\xdf\xea\xb2\x94%\xf7z|S\xb6\x844\x0c\xe2\xdf\x97\xaa\xb9G\xefa7J!\x82\x81p3\xc4\xe3\xdb\xa7\xc5N\x04\xf1=\xe6<\x0b\xd4\x91\x0c^\xe2=\xfe\x92\x19)\xe2\x8c\x97\x87\x1e\x84\xbb\x90\xd2\t\xb3\x04E\x11A\x0f\xfc\xb1P\x12\xb1\x85\x8a\xd4m\xac,\xa4\x03i8\xd5vX7=\xbb\x17j\xae|8K\xf5\xb04/2\xa0a\xbb,\xd2\xc7\x18\x99e\x82,\xcd1\x1a\x14\xd1\x11\xb3h\x05g\x12?\xc9\xcaS\x1c\xc5\x06\t\xb7\xd28Hs\x1cP|&Z\xa2y\xc0\x11\xacs\x8e\x1d\xca\xc1\xca\x86\xcd\xa1\x01Z\xd5b\n\x80\xf1\x189\x1d&\xcc\xc7w\x96\x05\xfeb\x1f\xdf9\x1e`K\x18\xaa#>\xcc\xe3\xcb:\x00\\\xf8\x93\x9ft\xb8\x03bA\xc8\x95\xef\xcf\'H=\x9e9]\xd7\x81\xe3\xe6\xb7\xfb\xa5\xd30qh-]\xee.S6\xe3SV/\x81\xf2\xb4N\xab\t\xa6q\x87Q\x00\xf7\x14 \x1bt\x85\r$\x80]\xfe\x07\xdd,"WE\x94\x90%{(\x9b\xedh\xc3\x19E\x85\xbfH\x9an\xee\x02\xc7\x8b\xa5N\x1d-\xd5T\x81\xec\x86\x03\x0c\x19ZQ\x84\xfe\x98\x06C\x93\x16\xdd\xbc\x1e\xb5\x8d\x9a\xa4\xe5\xc7\xae\xden\xeb\n\xb8\xd9\'\xb4\xc1\xbb\xb6xXR\xf2\x1f\xb9\xfa\xf3\x98C\xa3\xe7\x9b\x82VE\xf4\xee\xb6\x1a\xdb\xf4\x89\xe8\x97,\x8d8\xcc3\xb5\xd4\xa2x\xa6\xd0\xf3\x99\xbe6\xc9\xee\xd5\xe7"/\x83\x12\xf2\xa23\x0c-\xd7>M\x93\xdf(\xf7\xa4d\xeb\x1f\xd6\xd5x\x07\xe2s\xf5\xa7s\xbb\xacw.I5&C\x92\x7fi\xd7\x1f\x94K\x87\x8c:H\x8b\xedr\x15*\xd5T|\xef~8u\x1c\x9d\x83\xc3\x98\xeb\x1cn#\x11\xfe{\x18\x01o6\xf4\xd5.e*.\x1a\x07\x99\xe5!\x1a\xcbU\\K\xb1<g\x05\x99nr\xec\xd1\x14\x19\xd4\xa5\xd0L\x04T\x9f\xe6U\xb5$@7\x08\xf7R"\xeb\x82,\xf4Uo\x87\xf2\x13X\x8cwG\xe3\x8c\x0b\x03\r\x84\xfb\xff\xac\xd3\xde\xe6\xb9[\xdd\xba\x9d\x89R\x1b.\x85O\xc2\xe8\x94L\xdb\xb8\x88 -\xca\x03<\xb6\xb9\xab3q\xb5\xde\x8b;\x14hv\xaf"\x0c\x05\xa9}\xd9(\xb2\x10U\'\xadY+8\x82cQhaB\x05\x1fT\xeb$\x82\xcbY\xf6KD\x9a9\xcbRjw\xa7q\x8d\x13\xf3b\x15\x87o\xcc \xf4\xcd\x7f\xfd_\xb5\x05a,\x18\xf5\x02\xda\x84\xc1d\rC\xcf2\x8dH\x84\xa7\xc18\xd3a\xaa\x96o\x19= \x03\'s\xa71*\xddL\xe8y7n\x03\xb24-\xce\x18\xc0\x18\x86\xb2\xe2\xaeb\xcc\x1fUL\xe9K\x04V>\xc3\xd1J\xa2t\xb9\xc8\\q\xcb\xb1\x01\x14\xd0mkh\xdee\xf3D\x8d+\x9d\xa6HV\xff\xab\xa5\r\xf5\xb6\xf6\x91\x1b\x82{\x14]\xac:\r\x13\xffp\x89\xb9\x10o\xb7\x10\xa3\xdf\x83\xfe%RQ\x89\x16\x83\x04\xc1o \x0b\xc8T0t^\x93Ug\xe5\x9b\x07\xfc\x04\xcbE\xc2\xf9Y\x0c\xf41\xd5\xe2\xc4+\xf5]! \xb1\xbb\xaf\xd6\xfco:\x97-\xf3\xf1\x10\xfd\x97:gq\xe5~\xa61:\x14!\xe2|>\xbf\x1f\xb6\xc7\xef\xd1D\x17\xbas\x99\x03\xaf\x14\xbd\x7f$?\x00b\x17Fz@oj_\xe7a\x0c\x94\xf8w\x9faT\x05\xd7\x1c=\xd5\x02\xed\x84\xf5\xb0\xd5\xa4\xea\x17\xa9\x15=P\xff\xa2\x94\xc9 \xe6\xb79\xa1A\xd9\\\xf9\xf9\xfd]\x92\x8a\xff$\x0e\x8d6\xd7\x95$\xd5K\xfe\xa0s\x14\xb6\xea1\xdc\xc7tns0 \x08\xc3@r\xb1\x8f\xc3\x93w\xb1\xeb\\m\x06n#_\xb6V\x052Y\xcc\x93\x81\x91\x94!\r\x05\xda\x90\x90V\xead?\xbd-\xa1\xa5\x03\xdb\xc6UID\xf8\x11\x0coI}\xf4x\x03O7\xbbd\xbe,u\xa5Y\xd8\x91\xd6\xbe1\xe7,\xefJO\xf7\xc4~gw\x02\xe9QQN\xb4\x13\xc4\x0b\xe0x\xf3\xf1\x10\x96,\x13\xd5\x82\xacG\xe7\xb8\xc2u\r@\xcb\x04\xe9|\x8d\xd1\xa7\xd2\xa6\x00\\\xfd\x83\x06\xce\x05\x160\xf3\xc8\x05\xc4\x1a\xbaM\x04|iCn\x85r\xad\x02!e\xf6w\xac\xdbD\x84\x1b\xad\x19\xa8\x1e\xbeG\x7f7\x1d\x1e\xe6\x9b\xfaH\x84O\xee]<\xd9\x89\xc68F\xf8\xfeW\xa2LFV\xa4\xb7\x8b@Rv\xe4\xaaPx5\xa02@B\xa4"O\'<\xed\xa6L\xbe\xd9U@\xa8\xc8j\xb6\x1339+\r\x16\xe89<)\x1aS\xc2\xa9\xa8\xd341\xc7[\x97]S\x95\xde\x89\x04)\xfd\xb7\xabA\xfa\xf3\x87O\x1f\xef\xbd\x97\xdcVvtN\x90\x03\xe1\x13uf\x11\x83\xa4\xd4s\xd1\xbd\xdc\xa1\xe4"\x93\x94:U\xdap\xee\xe1\xf0\x92\xd6g\xa4X\x8c\xebY\x10#:\xe8\xee\xdb\xedKzz?\xef \xcd\x8b\x8b\xb4_\xa2\x19\xbf,^{5N=\x80V\xd6^\x1dW"^`\n\x89\x8aA\xfb\x8e\xa1\x19\x1d\xf0mu\xe7\xf3\x9c\x85\xdbI\x18\x19Y\x027;eNd\xe3\x89FT\x82h\xafv\x0b\x8b\xd9\x1e\xf8N/\xa8\xa8/\x19\xa8\x80bU&\xf9A\x18\xd0Pj\xa8V\xda\x7f\x9d\x06}\xe8\xa7\x8cO\x92\xa7\x17\xa5\xce\xa56\xec\xd3\xbc+\x18\xbb\xd1xP\xf2FN\x8d\x16\x0e6?B\x95\xe4a;Z\xf0\x98Fqj\xbb\xee\xd9?v\n\xb8\xac\xc2\x9fW_U\xe6\x1d\xbc\x92Nnd\xfe\xcd\x94\x02\x9f\xfbrM\x19\x93#j+Q\x06\xd9\xe7\x08\xa8\xdb]\xa7\xe4\xa9\x1d\xbdL\x93\xaf\xc8\xd4$N\xba\xd1\xc7\xcc\xf6N\x02m\xbcY\x04\x96p\xf8M\x03\x045X\xec\x82\xff\xa9\xb6\xd69\xa4\xa0-\xc0\xc7t\xef\xbc\xd6L\x15\x13\x8fn\x96\xabJVJ8\x9fa=\x9f\xee\x7f8D\xe2\x80\xc8&\xe3\xca\xee"\xce{\\\x96\xa0Tw\xc8\x13I\xf5\xd6I\xecrC\xf7\x7f\xacx\x80\xf1;N\xc9\x87/!\xf6xR3\xcd*\x11\xfb\xa1?\xa5*e\x86\xb5\xf66*e\xecu\xbb\x81C:\x8d\xac\xfe8b\x04\xe5\xf1\x0f)\xed\x187\xc7\x99\xd5\x0c\xc1\xd7\xc7lf\x8b\xf9\n\xc3f\xc2\xbeN\xa5\xbc{(s\rM\xe5yi\xfdP\xd6\xbdt\xfe \xb8\x04\x1f\xf9|$J\x18\xbc\x10\xc4\x94\xea\x1a\x932\xe6\'! \x01\xfd\xf4\x1e\xc0\xec;\x90H\xba\xc2\xde{\xcbM\xb8J\x99\xd3\x88\x0cY\x0f\x07\x89\x98N?\xfbd\xf4\xee\xfc\xda\x8aV.!\x92\xdb\xf9\x88,\xc4\xfd"\xc0\x1c\xf5X\xe3\x9b\xc3U\xd7\xa9\xe5DL5d\xef\x8cv\xf9\xb6e{\xab\x99\x8c\xaa\xa3\xdd\xc0\xdd<]^v\xee\xd6\xcc\xcf/~\xfe\x1e\xaf0\x10\x1d\x0c\xa6\xae\xaa\xc5\xd3r\x97\x96\x8fC \xbf\xb3Rg\xb7X\xf7l\xb4\x1f\x8c\xa92$44\x07x\xea!\xe6}\x03\x0e\x14G\xd7(\xb4\xc3\xda\t{\xf9n$6\xe9\x90\x80\x1d\xb9\x80\x80\xde\xbb*\xb3\x8aG\xca1$\xce\x96b\xbc\xe2\x9b\x95\xf1\xf5\x85\xf3\xad\xde\xf5\xcf\x1e\x18\x8f\xf6\x8c\x8e\x8e\xae\x80\xa9.d\x10\x17\x84$\xf9s\x1eU\xa7!\t\x1b\x1c13\xd3\xc7\x9aop\xa3\x03A\xe1if\xda\xb9\x08\x95}N0T\xe1\xf9\xca78\xfcBv\x05 \x94_P\x01\xae\x83\x9f<U\x8c\x02\xbd4\xc1\xc2\x8b\\\xfc\x02\xdc=.\xdeF24\x80\xa5[aWc\xd6f\xd1\xea\xaf\x86\xd5\x15\xb8\x18\xcd\xd1\xee\xfb\x1c`\x7f\x94\x89n\x0e\x05\xf8E\xb0\xb6\rj\x07\xd2\x97QG\xf3\xe7/\xb3\xd9z\xcef9\x1fO4_\x04J\xe5rTqiU\xed\x96\xd6\xaf\xbc\x19\x81\xa3\xb9\\\xf1\xa3\x93j\xdb\xa2gw\xb8\xe8=\x97\x8d>\xf2\x9b\xa0o\xc4\xa9\xc8\xb6{\x95N\xc8\n\x83,\xc2s.\xbd]\xcbW%\\K\xa8FY\xd4v\xb0<\xfa[\x85\xc0c\xfc\x063\xaf\x89\xb8\x8d\xe2sk;\xc7+\xd1x\xa5(\xd6\xaa\xd3\xe5\xfb\x925\x8e.\xd0o\xb3\xfe\x1b[\x8eC\xdf76{t\xb0\xd5\xf6xw{\xb7b\xb8\xc5l\x84\x19\xa8\xb0\x10\xe2.&_/\x7f\xa1\xc5+}\x02WkT\x94\xb9\xdc<\xe1\xb7\xc84\xae\xce\xd6\xac\x8awO\xcc\xc9\xe1\x1e\xf7?\xaf\xb1\x04Eh\xe0 a\xe4\xa7\xb5_e<\xa9K\x8f\x89\xc3\xf0\xb3n\xe4Q\x95\xfb\xda\xff\xda\xc8\xd3/\xe7\xb9\xf7poH\xd3\xc4{\xad\xe2"\xb1\x00\x1c\xe8\xeex\x8fmq1]90\xc6\xa2\xf2V\xf5\x9d$\xb3?\x1c\x84\x0b\x07\xa8\xd9#\x8b\xc7B\x98?O\xd6\xf4u\xf6\xe8<\x01}E\xaa1M\xbb{\xcb\xb0\xfdq^\xee\xa2\x86@\xb3,)C6\xfe\xbb;\xfe\x0e\x02\xc4\xe0\x07\xb2jWc\xf9\\e\x06w@\xfc\xa8\x16\xe0G\x93\xe4*\xc3\x8e\xd9\t\x14Z\xd18T\x96Y\xb9\xb9{H\x0f\xf8+\x93\xdd"uBz1\x85\xb9\xfa\x18\xee8 \xeaW\x1f\xbc\xd2/=\xcd\x0f\xad.\x12\xb4\xe3\xb5\x10?0\xa2\x93\xc5\xe6\x8f\t\xd1l\xd0\xe8\xff\x12;2\xf4\xd2\x8a\xe0[}\xc8\xc4\x06\x93\xeb\xf0\x1a.2\r\xd3\xa9\x08\x10\x99\x97\\{c\x00{\x9b@Ey\x1b\xeb\xa1U]\xba\xae\xc8n\x07\xd7\x13\xca\x84v\xd3E\x86J\xc3C~\xe66\xd0\xa2\xacG\xf7x\xb2\xadt$I\xf3<\x1d\x1c<\xc6\x10\xe6j\xf4\x84"\x12,9\xc0\x84\xc6b\x04T.<\x97\xf7\x15\x12|[\xbcKw\xbdF\x8d\xfa^G\x0cL\xf3\x1b\xb3H\xcc\xdc\xe8Dx\xf2\xfb\x83,\xd9N\xc5\xb8)\x8b\xc2\x80\xab\xac\x11\x90\xd3\xea4\xab\x10\xa2}\xcc\x93\xd6\x15\xd9W\xd8$\x91\x08O\x7f\xfa\x9e\xc3My\xba\xe1\xf2UX\xf6\xf0L!\x7fL\xcf Xq<\xe7\t\x1eL\x90\xe1\xb0\xba\xa6H\xbfU\x11\xd5\x91\x83\xd5\xb5an\xcc\xfc0\xef\x88\xce.\x14\x98\xb3\x03\x9b{\x05\x1d5\x8b\xd5\xb1\xc5\x9a\xf4\x98\x9f\xb2u\x1b\xc0\xa4\xcd\xb8\xb1\xe9Vj\x9c]P|\x89\xd7\x95:g#\x00\x8fL)\xa7\xa5\x06\x08\xd4\xad{Q\xa9\x13\xbf\t\xad?\xcf\xff\xb7\xb6v\xfc\x9f\x04\xe2\xcfh\xbfcB\xdftPU\x04\xed\x8f\xfdU/\xf4\xc7<\x91n\xc0D\xccse,\x19J\xb7\x9d\xa6\x8fH\x98\x07>\xdaFBZ\x83\xd2\x7f\x87\x8c\x83_-\x07\xa8$Un~\x83\xf6\x17B\xfc\xeck\x84_\x80~\xc8+K\xa4"4\x85\xf8\xc0W\x03\xd7\xd8\xd9m\xa7\x92\xba\x00\xbe_\x98)\xee\xd5\xf5\xd9\xc4k\x87\x8d<\xaf\xe3t\xf4\x8b;\xa06\xe9R\x0c,\xb74\x08\x9288\x18\x0e-4\xbc"Y8\x14\xda\xd0l\xe8KF\xae\x9b\xc2\x1a\xad=@D_\x18\xa5b\xdbe9\xca\xba\xc2t\xafd\xce\xba\xe9\x99\x10d\x19\xe96d\xb2\xc4:i\xb6\xcf\xca8{\x0c\xb8\x1b4\x14\xf1B\x8a\t\x07\xa9M\x1eo\x87l\xb1\xed\xb7k\xf8\x80\xdd\xc4L\x1d\xf6J\x0728\x16\xeeD\xe4\xa8/\xde^\xb1?2?\xaa\x07R\x97\xd4\xcaX-\xb4\xa0\xe0\xb7WLp\xab\x9fO[\xe2V?YC\xb0\xf3~F\x9fS\xab\xa1 \xdbQ\xbd\x05\xcd\xb3\xf3\xe0\x08\xb5\xf1\xc0\x00\xb6\xee\x88=\xbcM5\x14;\xa2\xa3\xf9M\x07\x8c\x7f\x04\x83\xdd\xcc\xf4\xdb\x07a\xb3\x81GnGw s\xf5U~\x9f\xfc\xf3d\x11T\x8e\x03\xbaZXX\x91\x96h\x81\xf8\xe4\xea\x9a,\xf3\xae$\xc4:\xb8\x89\xe9\xdb\x11B\x03\x9c\tA\xebW\x84-\x9e^\x9d\xa3I\x88\x14\xe2\xb1\xa8heAj\xae>\xa9!\'U\xc4\x9c\xb9\x87\xdc\x8dU\xc8\xb0\xc4\xf7\xbf\xe5\x18dP>5t;5\xc0\x1ba\xdc\x81A\x86\xd0Rbuc\x84\xff\xfb&\xc3\xe8\xba8G\xc7\xd7\xd0\xb1\x85`x\x17\xd1\x84\x07\xd5<I2L\xfe0\x05\xc6\x11\xb1\x1a\x9b\x91F\xbfi\xf7\x1a<\x8cZ\x048\xc8\xffD\x82X.y\xab\xc6\xca<\xe1,\x01H\xd8\xd5itC}\xdd\x83VS\xb3B1\x8f\xc5O\x0f)`\x86\xc4\xed_\xa6\x0b\xea\xc4\xf7\xad\xca\xa7\xfb\xc7\x0f\x9d\xcd~\xedF\xaaI\xa7W\xa5.\xc2\xa0\xe6\xb4\xea\xa2\xba\xc37\xbcY\x97\xfex\xf4\xcaQ\x1e\xca3\xa1\xec\x95kI\x02\xda\x91Sq\xa2N\n\x8cT\xb4\xac\xa6\t\xe3\xdd_\xb7"\xbfJ\xfc}\x91\xd2\xac\x996\x19&$IR\xad&\xe4\x90\xc8\xe1*zh\x84\xdeo\xabh\xa9\xf4\xb6\x1ffi\xccs\xa6\xe4\x9f\xceE\x9c\xa0?xG\xe8r4\xca\xc4H{\x8a\xe4\xc8\x80b\x9f\xf1)\xe2\xfd\x1d\x0e\x8d\xdf*J\xa0\x96\xaap\x04!\x15\xf0\xc5]\xdc\x0bD\r\'\xf1\xdc\xa5\xbeRz\xe5FI\x8a\xc3\xd8\x9fo\xc0p\x1e+\xbbO\xd3\xfa\xb9r\xe5\xc6$\x05\xd2\xb5\xaa\xf7\xed\x80\xf9\xa8\xd1\xdeD\x13\xbf\x1c\x8b\xe0\xca7\x84}a6[\xd8\x972\xdfT\x9b\xa2M\xab\xff\xc7J"\xe0\xe4~Q\xc3\xaf\xadm\xf6\xc6\x9d\xf0\xaa\x97\xae\xc6K\xd2\x8c\x0c\xe2_P\xf7]\xd3Z9$m\x0e\xb7\x8b%~A\xc2c\xc7\x03\x9e\xe4\x9d\xfa!$\x07\x9d\xa2\x13\xac\x14\xa0\x9e$\x1a\x9f\xf6\x18\xc4qu+\xeb\x8b\xc5A/[\xa244c\x16m"\x07$G\xa6\xbd\x14\xf6\xf30\'\xd6\xc4\xa0\xfb\xe9\xb1\x95\xfe\xed\x8c\xad-w\xca)\xa2l\x89Z\x9c\xc5\xce\xac\x0f\x12(L\xdf\xf8\xb4\xda\x9c\x8c\xc4~\xcf\xa5\x9a\r\xbb\xe2q\x96\xc8\x0e\xdc\xaa\xc7J0\x15s\x87-\xe1\xf0^\xabXHCA\x03&\xd7^Y\t\x92\x8c+\xf8\xda\x1b\xa8,\xe0\xa1}}1\xdft\xc0^\xa1cv\x88\xaf`\xdaY\xdehz7\xbbr>\x8c~\x8f\xed\xdf\x9cq$\x0b\xe8p\xcc\x12\xdc\xc1\xf5\x81\x1e\xdaD\xf7\xb2\x85WM)\xba\xee\xbc\x08t\xee5\xc3\xca\x80\xae\x1d\xe0\xcd-\x0f\xb7\x8a\xf1\xb5\x10\xb0\x10D;qX\xc4z\x11\xda-\xdf\xf6\xe7s\xbd~\xea8\x15\xc9l-;z\x8c\xee\x89\xe1\x9ft\x86\xb0*\xa8\x1a<z\x00F\xf1[\xa7\xec3\x0e\xa4\xc0\r\xa8\x02\xc4\xb3\xc7\xf5\xb0_\xd9.\xf3Wa\x00\xf1\x8f\xa3\x88\xcf\xb6\x1e@\x9e_zFC\xf9\xd7\xd4\x13/$HO\x07\x83\xc5B\xaf\xba\'\xb6\xde\xa0a\x84\xe9\xfa\x05\xb5\xe6z\x847\xf5\x0f\xd8\x84\xb2A&\x90\x03\xf8\x10\x8bB\xd9\xba\x95u\xed\xaeUPI\xaa\xf6\xc8K\xb1\xa7\xf9\x96v\xb2\xfa\xa5\xda\xa0\x8a\xfe\x84\xc0\x84\xef\xe8\xa6\x0c\x011\xf3\xf2m\x18\x97\xaa\x80yx\xd0\xf9\xe84\xb5\xe9\xeci\tY\'\x83\xa50\xba8\xcd\x91\x8a\x92\xfd\x91\'\xc6\x03\x15\xb4\xfe\xde\x1d\xa0&\x9e\x13\xca\x16g\r^F\x80W\xcb3>\xa6]\x87\x81&\xa5\xf8!<\xdd\xf7@~\xecB\xd61r)\xd9SPz\x19\x12\xc9\xe3\n\xbe\x92[J*Ia\x15 \xe1?\x87\x00\x1e8+}\x8d6\x18\x10~\xc1{\xc5\xb8\xd6\xe8\x8f\xd5\xf3\xe6\x83o\xbe\xeb{\nBef\xad\x926\x92v\xc7\xf0!\x87\x1cO\nxG\x870\xbe\xbf\xce\xb8\x85\x19(\xd3\x91zq\xf5\xc2\x8c\xfb\xa4\xf0\xc4\x0c\xfa(J\x16\xa9\x80\xc2\xf2\xf1\xe1\xfdB\xb4\x15V:K\x80\x0bK\x17\xac\xec\x88Z@\xf4FN\x0c\xdf\xcf\x1aX\xa8\xee\xb3|[=\x9f{\xf7\x1b\x9e\xc8b\xc3\xd7o?\'\xa1\xf5\xcd\xd4\xc7"I\xc3\x82\x12\x07I\t\xf7\xb5\xecN?0L)\x94J\x1bf\x1a\xd5Q\xa4\x1a K\x90=.~6\xf0\xb7A=\x06J\'\x1b\x0c\x03DH\xb7\x88\xa2\xbd[\xc3\x91\xf2\x04Y\x8e]\x93\x1c\xf5\xb9V\x1a\x86\x16JDS\xc8\xc6\xd8\xd9`YJ\x1c\xbd\xcdy#\x84 \x9e\x89%\xd3}\x88iw$\xdb\xd1\xa7\xd4\xd2\x9e\xcb\x02K5:\xbc\x83\xf0l\x92\x14y=\xf7f\x19?aL\xd7\x11,0\xd0\xd5\xcbW\xbc`g\xa6\xfe\xb1-\xb6\xf8\x06v\xc5\xc3>\xa0I\xf1\x00Kf\xec\xcb\x8c\xdc\xbc\xa8\xb6\x90\xff|e\x1b\x804M\xa1|\xd4\x95\x8du&\xe6\xb7\xda\xe2\xd4\xd9\x02h\x08\x88\x96JQ\x1e\xb14g\x93\xb0d\xb4\x7f\xfe\x0c\x86;\x81\xc2\x99\x13[\x1cV\x105\x97\xb5\x99\xa9\x1eg_%@\x93\xec\xd1\xef)\xfd\x9d\x1cS\xc1UX-\xfcq\x05be\x8a\xee\x19\x1a{8\xb5\x12\xe9\xd5\x16\xf6\xb9\'\x96\x94,Y\t\x8c\xa2\xe2y\xeeaMh\xc2\x16\x16\xdd>\xc1n\xd1FCy\xc1\x13Zn:\x94\xb8\xe9\xc6\xb8@_\xf2k\xd4rm\x0f\xf3O\x08\xc0\xbbYgeg\x0c\xdd\xeb]\x18\xff0\x9e\xd7.`\xb2L\xac\x1e\xa8\xa57\x11\xeb)7\x0ciK\x8e;B n\xaf\xcc\x81\xdbH\xe1\xd0\xff\xa9\xa7c\x18]\x87\xac\x92\xd2\xcb\n\x02%\xc0r\x14\xcd\x02\x11\xf8\x9fk@\xea)m"\xa5\xfa\x9du1\xef0\xf64\xbb\x96%\xdd\x06\xd1\xc8D\xd6\xe9\xdd\xb6.b\xc4\xe2\xe0\xbe0\xef3M\xcb\x12\xfd_qN\x03SF\xc4\xf9\x81\x8f\xcb\xcc?c6\x16\x04\xd0\x87\xb1l\xe9wW$r\xa6:(L\x1a\xb1W\xa0T\xb4t\xd0lV5\xa9\xe1\\\x7fS.\x87\xc5\xb5\xb5\xbdi[\x8fLI\xe3W\x17\x11\xc4,S\x1f1\r9\x95\xb5\xb3\x86\n\x03S\xe1\xfc\xc7\xba\xee\xa5o\x12\xc1i+\xd5\xe8\xdecXe\x00\x86\xe5F\x96q_]\x83~\xda\x9ch\xfe\xbfq\xa4\xd4|U\x10\xe2\xc2>SK\xd1CT\xda\x84\xc3RY)\xe3\xb7Zy\x02\x04\xdb\x1b\xd2}Y\xb3\x85\xe5\xdf\x99\xa4\xdf3\xb6\xd8\x03\xd3\xack\xfc\x06t\xa5g8\x0b;\xcb\xaa\xcf!\x8d+\x9c\xbd\xa1|]\xce\xf0\xd9\xb7\xd9;\xa1\xc0Hm[01x+j)\xe4J\x15\xe1y\xf1\\[6mxj\xa4\xb0\xc9\x0e\x0e\xa9\xed\xf0\xa7\xe9]\xd8\x02&\xad\x00q\xed\xbec\xc8,\xdd\x92\xfd\xcd\xedY\xe2\xa7\xd9q^,\xa2y7\x00\xad\xc7\xd8\x82?\xf8\xa8\x98\x95 \xb6\xeb\xff\'\x8a8\x14\xfeb\x15\xdd\x04\xa8{\x8f#\x80\xcd\xbe\x13O\x19)\xc2\xd1\x02\xf4\x0ch\xdbA\x8d\x00\x95\xfe&\x9ba\xfa\x02\xd3\x93\x9b\x82A\xcb\x84\xe4\x88\xf0\x96\x90\xe5E\x0b.YX\xf5p\xbe\xcdj\xa1\xa1d:\xeeMF\x16\xef\\\x12KuB\xafy\xd8G;\xdd$\xe1\xa8.(\xd3\x16\x1c\xa1\x19\xea\x92\x15\x93\xa2\t\x87\xd0~\x15\x9ae^\xa9iJ\x85B4\xed6_\x8bO\xf7\x8as\xe9\xfaqZ\xfd`>I?\x7f\xba\xd0n\x8d\x9a\xc0\xe8\xea\xaa\x16\xe5\xe3\xb7m%j\xcc|\x94\x17\xbdOE5\x15\xb8G\x87h\x16naz\xe9?%\x83\xab\xdc\xe3}jK\xad9J\xc0\xb6\xc5\xa0\x93H\x92\x13\x02\xa6Z8\xb9NY\xa5\x12l:\xe2\xf0\xe32S\xac\x8d\x89e\xb19\x99g\xf3gm\tBx\xfc\xa9\xcf\x0b\xe6\xb4\x96\xb1\xb3\xf6\xd2WW\xaei\x06\xc2\x05d\x9c?\xe0\'\xc1\xc5\x9e\x83\x10\xa1\xe0\xe2+\x8b\xeb\xe3O\xe0#\x1b\xf1\xbaxX=\xeb\xe8\xe98vn\x1av\xcf\xb0\xb0\xa0\xb7V>}b\x8e\x17\xc8/\x8f\xfc\xe1W\x03\xa9\x81\x14\xc3-&\x1b=Q\x92\xcc\xb1\x045\n\x90nX*\x05\xb54o?\x99%@\xc2gs\x13y7\xd4\x85p\xd4\x08\xe7\x80\xbb\xa2\xd19\xd9Q\x94@\xc8<+j\x05}.\xc2\xcb\xc1?\x999*gcn\'**f\xb7l\xcd\x10%w\xa7\xd3\xf8\xac\xc9\tE@\xbf\x15C^*\xe2DK\x14}\xa9\xb8J\x97g\xc2\xe99\xe6\x83\x13\x1d\xef M\xd9\x85\x0b\xed\td\xe1\xa0oF\x9c,Sv\xa1\xa6\xe1\xbaL\xb7\x99y\xe1@\xa7\x18q\xef\xcbH\x85_q\x16\xe8:n\x87$\x8fRs\xd9\xdd=G\xa54\xcd~\xbb[\xce\xcbP\xa9\xb0/\x15t\x7f\xd2|>\x00\xe1\xc6\xe5\xf3SJ\xba\x0ey\xfeNw8h@\xc1\xf8\x19\xb3\x8c\x8e\x93\xadyu\x0f\xbd{f\xe8\xeeU\xea\x93E\xd8E[OMi\x1d\xc8e\'s\x10\x88F\xac\xba\x17K\xe5\xf2\x9c\\"v\x9cC\x15 \x9a\x9f\xdcN\xd8\xc2e\xeci\xb5\'\xaa\xce>"\x06\xf4\x0bQ\x1a\xbfa{\x15\x8c\xa3\\@\xb8\xca\xcb\xf7\x87>W.\xae\x0cm\xe7l\xa9\xce0L\'\xffV\xc0\xb6*x\xe1Hf\xf5\x07RYU~\xf7\xea\xa1,\x01\x82<\xe3\r\x95\x8b1\xbdH\x9drq\x08y}\xe3\x06\xbd\x03\x1f\x1b\xba >xw\x14\xe4\'Jv\xdc\xd2\x8bx\xe96k\xb7R\x0c\x9e\x98\xd6\xe0B\xe31\xb5!\xb4\xa8L3')
|
1
|
+
from hiddifypanel.models import *
|
2
|
+
from hiddifypanel.panel.database import db
|
3
|
+
import sys
|
4
|
+
from hiddifypanel import Events
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
from dateutil import relativedelta
|
9
|
+
import datetime
|
10
|
+
|
11
|
+
from hiddifypanel.panel import hiddify
|
12
|
+
import random
|
13
|
+
import uuid
|
14
|
+
import urllib
|
15
|
+
import string
|
16
|
+
|
17
|
+
def init_db():
|
18
|
+
db.create_all()
|
19
|
+
|
20
|
+
try:
|
21
|
+
db.engine.execute(f'update proxy set transport="WS" where transport = "ws"')
|
22
|
+
db.engine.execute(f'DELETE from proxy where transport = "h1"')
|
23
|
+
except:
|
24
|
+
pass
|
25
|
+
if hconfig(ConfigEnum.license):
|
26
|
+
add_column(ParentDomain.alias)
|
27
|
+
add_column(User.start_date)
|
28
|
+
add_column(User.package_days)
|
29
|
+
add_column(Child.unique_id)
|
30
|
+
add_column(Domain.alias)
|
31
|
+
add_column(Domain.child_id)
|
32
|
+
add_column(Proxy.child_id)
|
33
|
+
add_column(BoolConfig.child_id)
|
34
|
+
add_column(StrConfig.child_id)
|
35
|
+
|
36
|
+
if len(Domain.query.all())!=0 and BoolConfig.query.count()==0:
|
37
|
+
db.engine.execute(f'DROP TABLE bool_config')
|
38
|
+
db.engine.execute(f'ALTER TABLE bool_config_old RENAME TO bool_config')
|
39
|
+
if len(Domain.query.all())!=0 and StrConfig.query.count()==0:
|
40
|
+
db.engine.execute(f'DROP TABLE str_config')
|
41
|
+
db.engine.execute(f'ALTER TABLE str_config_old RENAME TO str_config')
|
42
|
+
|
43
|
+
try:
|
44
|
+
add_column(User.monthly)
|
45
|
+
db.engine.execute('ALTER TABLE user RENAME COLUMN monthly_usage_limit_GB TO usage_limit_GB')
|
46
|
+
except:
|
47
|
+
pass
|
48
|
+
try:
|
49
|
+
db.engine.execute(f'update str_config set child_id=0 where child_id is NULL')
|
50
|
+
db.engine.execute(f'update bool_config set child_id=0 where child_id is NULL')
|
51
|
+
db.engine.execute(f'update domain set child_id=0 where child_id is NULL')
|
52
|
+
db.engine.execute(f'update proxy set child_id=0 where child_id is NULL')
|
53
|
+
except:
|
54
|
+
pass
|
55
|
+
|
56
|
+
add_column(Domain.cdn_ip)
|
57
|
+
db_version=int(hconfig(ConfigEnum.db_version) or 0)
|
58
|
+
start_version=db_version
|
59
|
+
# print(f"Current DB version is {db_version}")
|
60
|
+
if not Child.query.filter(Child.id==0).first():
|
61
|
+
print(Child.query.filter(Child.id==0).first())
|
62
|
+
db.session.add(Child(unique_id="self",id=0))
|
63
|
+
db.session.commit()
|
64
|
+
|
65
|
+
|
66
|
+
for ver in range(1,40):
|
67
|
+
if ver<=db_version:continue
|
68
|
+
|
69
|
+
db_action=sys.modules[__name__].__dict__.get(f'_v{ver}',None)
|
70
|
+
if not db_action:continue
|
71
|
+
if start_version==0 and ver==10:continue
|
72
|
+
|
73
|
+
print(f"Updating db from version {db_version}")
|
74
|
+
db_action()
|
75
|
+
Events.db_init_event.notify(db_version=db_version)
|
76
|
+
print(f"Updated successfuly db from version {db_version} to {ver}")
|
77
|
+
|
78
|
+
db_version=ver
|
79
|
+
db.session.commit()
|
80
|
+
set_hconfig(ConfigEnum.db_version,db_version,commit=False)
|
81
|
+
|
82
|
+
|
83
|
+
db.session.commit()
|
84
|
+
return BoolConfig.query.all()
|
85
|
+
|
86
|
+
def _v27():
|
87
|
+
# add_config_if_not_exist(ConfigEnum.cloudflare, "")
|
88
|
+
set_hconfig(ConfigEnum.netdata, False)
|
89
|
+
def _v26():
|
90
|
+
add_config_if_not_exist(ConfigEnum.cloudflare, "")
|
91
|
+
|
92
|
+
def _v25():
|
93
|
+
add_config_if_not_exist(ConfigEnum.country, "ir")
|
94
|
+
add_config_if_not_exist(ConfigEnum.parent_panel, "")
|
95
|
+
add_config_if_not_exist(ConfigEnum.is_parent, False)
|
96
|
+
add_config_if_not_exist(ConfigEnum.license, "")
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
def _v21():
|
101
|
+
db.session.bulk_save_objects(get_proxy_rows_v1())
|
102
|
+
|
103
|
+
|
104
|
+
def _v20():
|
105
|
+
if hconfig(ConfigEnum.domain_fronting_domain):
|
106
|
+
fake_domains=[hconfig(ConfigEnum.domain_fronting_domain)]
|
107
|
+
|
108
|
+
direct_domain=Domain.query.filter(Domain.mode in [DomainType.direct,DomainType.relay]).first()
|
109
|
+
if direct_domain:
|
110
|
+
direct_host=direct_domain.domain
|
111
|
+
else:
|
112
|
+
direct_host=hiddify.get_ip(4)
|
113
|
+
|
114
|
+
for fd in fake_domains:
|
115
|
+
if not Domain.query.filter(Domain.domain==fd).first():
|
116
|
+
db.session.add(Domain(domain=fd,mode='fake',alias='moved from domain fronting',cdn_ip=direct_host))
|
117
|
+
|
118
|
+
def _v19():
|
119
|
+
set_hconfig(ConfigEnum.path_trojan,get_random_string(7,15))
|
120
|
+
set_hconfig(ConfigEnum.path_vless,get_random_string(7,15))
|
121
|
+
set_hconfig(ConfigEnum.path_vmess,get_random_string(7,15))
|
122
|
+
set_hconfig(ConfigEnum.path_ss,get_random_string(7,15))
|
123
|
+
set_hconfig(ConfigEnum.path_grpc,get_random_string(7,15))
|
124
|
+
set_hconfig(ConfigEnum.path_tcp,get_random_string(7,15))
|
125
|
+
set_hconfig(ConfigEnum.path_ws,get_random_string(7,15))
|
126
|
+
|
127
|
+
|
128
|
+
def _v17():
|
129
|
+
for u in User.query.all():
|
130
|
+
if u.expiry_time:
|
131
|
+
if not u.package_days:
|
132
|
+
if not u.last_reset_time:
|
133
|
+
u.package_days=(u.expiry_time-datetime.date.today()).days
|
134
|
+
u.start_date=datetime.date.today()
|
135
|
+
else:
|
136
|
+
u.package_days=(u.expiry_time-u.last_reset_time).days
|
137
|
+
u.start_date=u.last_reset_time
|
138
|
+
u.expiry_time=None
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
def _v16():
|
143
|
+
|
144
|
+
add_config_if_not_exist(ConfigEnum.tuic_enable,False)
|
145
|
+
add_config_if_not_exist(ConfigEnum.shadowtls_enable,False)
|
146
|
+
add_config_if_not_exist(ConfigEnum.shadowtls_fakedomain,"en.wikipedia.org")
|
147
|
+
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
def _v14():
|
152
|
+
add_config_if_not_exist(ConfigEnum.utls,"chrome")
|
153
|
+
|
154
|
+
def _v13():
|
155
|
+
add_config_if_not_exist(ConfigEnum.telegram_bot_token,"")
|
156
|
+
add_config_if_not_exist(ConfigEnum.package_mode,"release")
|
157
|
+
|
158
|
+
def _v12():
|
159
|
+
db.engine.execute(f'drop TABLE child')
|
160
|
+
db.create_all()
|
161
|
+
db.session.add(Child(id=0,unique_id="default"))
|
162
|
+
|
163
|
+
def _v11():
|
164
|
+
add_column(User.last_online)
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
def _v1():
|
170
|
+
|
171
|
+
next10year = datetime.date.today() + relativedelta.relativedelta(years=6)
|
172
|
+
external_ip=hiddify.get_ip(4)
|
173
|
+
rnd_domains=get_random_domains(5)
|
174
|
+
data = [
|
175
|
+
StrConfig(key=ConfigEnum.db_version,value=1),
|
176
|
+
User(name="default",usage_limit_GB=3000,package_days=3650,mode=UserMode.weekly),
|
177
|
+
Domain(domain=external_ip+".sslip.io",mode=DomainType.direct),
|
178
|
+
StrConfig(key=ConfigEnum.admin_secret,value=str(uuid.uuid4())),
|
179
|
+
StrConfig(key=ConfigEnum.http_ports,value="80"),
|
180
|
+
StrConfig(key=ConfigEnum.tls_ports,value="443"),
|
181
|
+
|
182
|
+
StrConfig(key=ConfigEnum.decoy_domain,value=rnd_domains[0]),
|
183
|
+
StrConfig(key=ConfigEnum.proxy_path,value=get_random_string()),
|
184
|
+
BoolConfig(key=ConfigEnum.firewall,value=True),
|
185
|
+
BoolConfig(key=ConfigEnum.netdata,value=True),
|
186
|
+
StrConfig(key=ConfigEnum.lang,value='fa'),
|
187
|
+
|
188
|
+
BoolConfig(key=ConfigEnum.block_iran_sites,value=True),
|
189
|
+
BoolConfig(key=ConfigEnum.allow_invalid_sni,value=True),
|
190
|
+
BoolConfig(key=ConfigEnum.kcp_enable,value=False),
|
191
|
+
StrConfig(key=ConfigEnum.kcp_ports,value="88"),
|
192
|
+
BoolConfig(key=ConfigEnum.auto_update,value=True),
|
193
|
+
BoolConfig(key=ConfigEnum.speed_test,value=True),
|
194
|
+
BoolConfig(key=ConfigEnum.only_ipv4,value=False),
|
195
|
+
|
196
|
+
BoolConfig(key=ConfigEnum.vmess_enable,value=True),
|
197
|
+
BoolConfig(key=ConfigEnum.http_proxy_enable,value=True),
|
198
|
+
StrConfig(key=ConfigEnum.shared_secret,value=str(uuid.uuid4())),
|
199
|
+
|
200
|
+
BoolConfig(key=ConfigEnum.telegram_enable,value=True),
|
201
|
+
# StrConfig(key=ConfigEnum.telegram_secret,value=uuid.uuid4().hex),
|
202
|
+
StrConfig(key=ConfigEnum.telegram_adtag,value=""),
|
203
|
+
StrConfig(key=ConfigEnum.telegram_fakedomain, value=rnd_domains[1]),
|
204
|
+
|
205
|
+
BoolConfig(key=ConfigEnum.ssfaketls_enable,value=False),
|
206
|
+
# StrConfig(key=ConfigEnum.ssfaketls_secret,value=str(uuid.uuid4())),
|
207
|
+
StrConfig(key=ConfigEnum.ssfaketls_fakedomain, value=rnd_domains[2]),
|
208
|
+
|
209
|
+
BoolConfig(key=ConfigEnum.shadowtls_enable,value=False),
|
210
|
+
# StrConfig(key=ConfigEnum.shadowtls_secret,value=str(uuid.uuid4())),
|
211
|
+
StrConfig(key=ConfigEnum.shadowtls_fakedomain, value=rnd_domains[3]),
|
212
|
+
|
213
|
+
BoolConfig(key=ConfigEnum.ssr_enable,value=False),
|
214
|
+
# StrConfig(key=ConfigEnum.ssr_secret,value=str(uuid.uuid4())),
|
215
|
+
StrConfig(key=ConfigEnum.ssr_fakedomain, value=rnd_domains[4]),
|
216
|
+
|
217
|
+
BoolConfig(key=ConfigEnum.tuic_enable,value=False),
|
218
|
+
StrConfig(key=ConfigEnum.tuic_port,value=3048),
|
219
|
+
|
220
|
+
BoolConfig(key=ConfigEnum.domain_fronting_tls_enable,value=False),
|
221
|
+
BoolConfig(key=ConfigEnum.domain_fronting_http_enable,value=False),
|
222
|
+
StrConfig(key=ConfigEnum.domain_fronting_domain,value=""),
|
223
|
+
|
224
|
+
# BoolConfig(key=ConfigEnum.torrent_block,value=False),
|
225
|
+
|
226
|
+
*get_proxy_rows_v1()
|
227
|
+
]
|
228
|
+
fake_domains=['speedtest.net']
|
229
|
+
for fd in fake_domains:
|
230
|
+
if not Domain.query.filter(Domain.domain==fd).first():
|
231
|
+
db.session.add(Domain(domain=fd,mode='fake',alias='fake domain',cdn_ip=external_ip))
|
232
|
+
# for c in ConfigEnum:
|
233
|
+
# if c in [d.key for d in data if type(d) in [BoolConfig,StrConfig]]:
|
234
|
+
# continue
|
235
|
+
# if c.type()==bool:
|
236
|
+
# data.append(BoolConfig(key=c,value=False))
|
237
|
+
# else:
|
238
|
+
# data.append(StrConfig(key=c,value=""))
|
239
|
+
|
240
|
+
|
241
|
+
|
242
|
+
db.session.bulk_save_objects(data)
|
243
|
+
|
244
|
+
def _v2():
|
245
|
+
add_config_if_not_exist(ConfigEnum.telegram_lib, "python")
|
246
|
+
add_config_if_not_exist(ConfigEnum.admin_lang, hconfig(ConfigEnum.lang))
|
247
|
+
|
248
|
+
def _v3():
|
249
|
+
add_config_if_not_exist(ConfigEnum.branding_title, "")
|
250
|
+
add_config_if_not_exist(ConfigEnum.branding_site, "")
|
251
|
+
add_config_if_not_exist(ConfigEnum.branding_freetext, "")
|
252
|
+
add_config_if_not_exist(ConfigEnum.v2ray_enable, False)
|
253
|
+
|
254
|
+
|
255
|
+
def _v6():
|
256
|
+
try:
|
257
|
+
Proxy.query.filter(Proxy.name=='tls XTLS direct trojan').delete()
|
258
|
+
Proxy.query.filter(Proxy.name=='tls XTLSVision direct trojan').delete()
|
259
|
+
except:
|
260
|
+
pass
|
261
|
+
# db.session.bulk_save_objects([
|
262
|
+
# *make_proxy_rows(["XTLS direct vless"])
|
263
|
+
# ])
|
264
|
+
|
265
|
+
|
266
|
+
def _v9():
|
267
|
+
try:
|
268
|
+
add_column(User.mode)
|
269
|
+
add_column(User.comment)
|
270
|
+
for u in User.query.all():
|
271
|
+
u.mode= UserMode.monthly if u.monthly else UserMode.no_reset
|
272
|
+
except:
|
273
|
+
pass
|
274
|
+
|
275
|
+
add_config_if_not_exist(ConfigEnum.is_parent, False)
|
276
|
+
add_config_if_not_exist(ConfigEnum.parent_panel, '')
|
277
|
+
add_config_if_not_exist(ConfigEnum.unique_id,str(uuid.uuid4()))
|
278
|
+
|
279
|
+
def _v10():
|
280
|
+
all_configs=get_hconfigs()
|
281
|
+
try:
|
282
|
+
db.engine.execute("ALTER TABLE `str_config` RENAME TO `str_config_old`")
|
283
|
+
db.engine.execute("ALTER TABLE `bool_config` RENAME TO `bool_config_old`")
|
284
|
+
except:
|
285
|
+
pass
|
286
|
+
db.create_all()
|
287
|
+
|
288
|
+
rows=[]
|
289
|
+
|
290
|
+
for c,v in all_configs.items():
|
291
|
+
if c.type()==bool:
|
292
|
+
rows.append(BoolConfig(key=c,value=v,child_id=0))
|
293
|
+
else:
|
294
|
+
rows.append(StrConfig(key=c,value=v,child_id=0))
|
295
|
+
|
296
|
+
db.session.bulk_save_objects(rows)
|
297
|
+
|
298
|
+
|
299
|
+
|
300
|
+
|
301
|
+
|
302
|
+
def get_proxy_rows_v1():
|
303
|
+
return make_proxy_rows([
|
304
|
+
# 'WS Fake vless',
|
305
|
+
# 'WS Fake trojan',
|
306
|
+
# 'WS Fake vmess',
|
307
|
+
# 'grpc Fake vless',
|
308
|
+
# 'grpc Fake trojan',
|
309
|
+
# 'grpc Fake vmess',
|
310
|
+
# "XTLS direct vless",
|
311
|
+
# "XTLS direct trojan",
|
312
|
+
"XTLS direct vless",
|
313
|
+
"WS direct vless",
|
314
|
+
"WS direct trojan",
|
315
|
+
"WS direct vmess",
|
316
|
+
"WS CDN vless",
|
317
|
+
"WS CDN trojan",
|
318
|
+
"WS CDN vmess",
|
319
|
+
"grpc CDN vless",
|
320
|
+
"grpc CDN trojan",
|
321
|
+
"grpc CDN vmess",
|
322
|
+
"tcp direct vless",
|
323
|
+
"tcp direct trojan",
|
324
|
+
"tcp direct vmess",
|
325
|
+
"grpc direct vless",
|
326
|
+
"grpc direct trojan",
|
327
|
+
"grpc direct vmess",
|
328
|
+
# "h1 direct vless",
|
329
|
+
# "h1 direct vmess",
|
330
|
+
"faketls direct ss",
|
331
|
+
"WS direct v2ray",
|
332
|
+
"shadowtls direct ss",
|
333
|
+
"tcp direct ssr",
|
334
|
+
"WS CDN v2ray"]
|
335
|
+
)
|
336
|
+
|
337
|
+
def make_proxy_rows(cfgs):
|
338
|
+
|
339
|
+
for l3 in ["tls_h2","tls", "http", "kcp"]:
|
340
|
+
for c in cfgs:
|
341
|
+
transport,cdn,proto=c.split(" ")
|
342
|
+
if l3=="kcp" and cdn!="direct":
|
343
|
+
continue
|
344
|
+
if proto=="trojan" and l3 not in ["tls",'xtls','tls_h2']:
|
345
|
+
continue
|
346
|
+
if transport in ["grpc","XTLS","faketls"] and l3=="http":
|
347
|
+
continue
|
348
|
+
# if l3 == "tls_h2" and transport =="grpc":
|
349
|
+
# continue
|
350
|
+
enable=l3!="http" or proto=="vmess"
|
351
|
+
if not Proxy.query.filter(Proxy.l3==l3,Proxy.transport==transport,Proxy.cdn==cdn,Proxy.proto==proto).first():
|
352
|
+
yield Proxy(l3=l3,transport=transport,cdn=cdn,proto=proto,enable=enable,name=f'{l3} {c}')
|
353
|
+
|
354
|
+
|
355
|
+
def add_config_if_not_exist(key:ConfigEnum,val):
|
356
|
+
table=BoolConfig if key.type()==bool else StrConfig
|
357
|
+
if table.query.filter(table.key==key).count()==0:
|
358
|
+
db.session.add(table(key=key,value=val,child_id=0))
|
359
|
+
def add_column(column):
|
360
|
+
try:
|
361
|
+
column_type = column.type.compile(db.engine.dialect)
|
362
|
+
db.engine.execute(f'ALTER TABLE {column.table.name} ADD COLUMN {column.name} {column_type}')
|
363
|
+
except:
|
364
|
+
pass
|
365
|
+
|
366
|
+
|
367
|
+
def get_random_string(min_=10,max_=30):
|
368
|
+
# With combination of lower and upper case
|
369
|
+
length=random.randint(min_, max_)
|
370
|
+
characters = string.ascii_letters + string.digits
|
371
|
+
result_str = ''.join(random.choice(characters) for i in range(length))
|
372
|
+
return result_str
|
373
|
+
|
374
|
+
def get_random_domains(count=1,retry=3):
|
375
|
+
try:
|
376
|
+
irurl="https://api.ooni.io/api/v1/measurements?probe_cc=IR&test_name=web_connectivity&anomaly=false&confirmed=false&failure=false&order_by=test_start_time&limit=1000"
|
377
|
+
# cnurl="https://api.ooni.io/api/v1/measurements?probe_cc=CN&test_name=web_connectivity&anomaly=false&confirmed=false&failure=false&order_by=test_start_time&limit=1000"
|
378
|
+
import requests
|
379
|
+
data_ir=requests.get(irurl).json()
|
380
|
+
# data_cn=requests.get(url).json()
|
381
|
+
from urllib.parse import urlparse
|
382
|
+
domains=[urlparse(d['input']).netloc.lower() for d in data_ir['results'] if d['scores']['blocking_country']==0.0]
|
383
|
+
domains=[d for d in domains if not d.endswith(".ir")]
|
384
|
+
|
385
|
+
return random.sample(domains, count)
|
386
|
+
except Exception as e:
|
387
|
+
print('Error, getting random domains... ',e,'retrying...',retry)
|
388
|
+
if retry<=0:
|
389
|
+
defdomains=["fa.wikipedia.org",'en.wikipedia.org','wikipedia.org','yahoo.com','en.yahoo.com']
|
390
|
+
print('Error, using default domains')
|
391
|
+
return random.sample(defdomains, count)
|
392
|
+
return get_random_domains(count,retry-1)
|
393
|
+
|
4
394
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
395
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|