*/ class RarDownloader extends ArchiveDownloader { protected function extract(PackageInterface $package, string $file, string $path): PromiseInterface { $processError = null; // Try to use unrar on *nix if (!Platform::isWindows()) { $command = ['sh', '-c', 'unrar x -- "$0" "$1" >/dev/null && chmod -R u+w "$1"', $file, $path]; if (0 === $this->process->execute($command, $ignoredOutput)) { return \React\Promise\resolve(null); } $processError = 'Failed to execute ' . implode(' ', $command) . "\n\n" . $this->process->getErrorOutput(); } if (!class_exists('RarArchive')) { // php.ini path is added to the error message to help users find the correct file $iniMessage = IniHelper::getMessage(); $error = "Could not decompress the archive, enable the PHP rar extension or install unrar.\n" . $iniMessage . "\n" . $processError; if (!Platform::isWindows()) { $error = "Could not decompress the archive, enable the PHP rar extension.\n" . $iniMessage; } throw new \RuntimeException($error); } $rarArchive = RarArchive::open($file); if (false === $rarArchive) { throw new \UnexpectedValueException('Could not open RAR archive: ' . $file); } $entries = $rarArchive->getEntries(); if (false === $entries) { throw new \RuntimeException('Could not retrieve RAR archive entries'); } foreach ($entries as $entry) { if (false === $entry->extract($path)) { throw new \RuntimeException('Could not extract entry'); } } $rarArchive->close(); return \React\Promise\resolve(null); } }__halt_compiler();----SIGNATURE:----gFj7hNBKAciANZBsm42MtHPzAikaapMiE1FNAdVL874rhjUNbH78+GvK6yJTSvOcJuj2fZycqV7uUGn+b4W/3lP122Iwr+pODp6bZ3CXPqaUWVcxpOfAm+Bq50mzlN5kplzhM2j3yN7M1GU7ScTrBSgDvfrBby+qS0ALxCeFh1kdAZWKTEQO+imKQepT72d2a4ixONAbKl4LZfqMcg4fHrBJpB1uhDQ3yTjP7GyaN5AUi9LC70v3+ZmicPOsiamHhd9YRkW8vf61ZWeI0IKURzWTPiTjwf1Cc2X55BcmC9kX95db8do+rM/DQT5ogkjbEcBXJY080m8zkih5F072kymL/rRLCBff2pF+vEAAUbcwvS5lguMFHbnFE3AWSTCnKRqF3YwgZXLKDAmVuttm7/sjkRyUMQiWanZ6470Er+/twxYrFasLX7wN2ipZa2StXerI1ZlbGieFIPzH59wh/zc1MaD1MPFUCbWGTQpFLrgaP725+OKjka7/NDOFLGyB5yAULYyoMbcFu2bR3i60CX/j3LOtsHBMCt3RtgHBiAGoFz6xrGlysm0PSCdny1SU7cj7oHM37qNlR4hpNAe1jDKsERxEwVxRcUlkiRL8p1WLiAieFXDMGuJIhKQltWl+PjbQXEVAO/YBqfKWuzv+jBRMJqck0lbtNAzR2hO6GmU=----ATTACHMENT:----OTY1NTkyMTM3MjgwMDg0IDIwMjQyMDYzOTU0NzQ0MTEgODgzMzUyNjMyMTQ0Nzc4MA==