4 * This file is part of Composer.
6 * (c) Nils Adermann <naderman@naderman.de>
7 * Jordi Boggiano <j.boggiano@seld.be>
9 * For the full copyright and license information, please view
10 * the license that is located at the bottom of this file.
13 // Avoid APC causing random fatal errors per https://github.com/composer/composer/issues/264
14 if (extension_loaded('apc') && ini_get('apc.enable_cli') && ini_get('apc.cache_by_default')) {
15 if (version_compare(phpversion('apc'), '3.0.12', '>=')) {
16 ini_set('apc.cache_by_default', 0);
18 fwrite(STDERR, 'Warning: APC <= 3.0.12 may cause fatal errors when running composer commands.'.PHP_EOL);
19 fwrite(STDERR, 'Update APC, or set apc.enable_cli or apc.cache_by_default to 0 in your php.ini.'.PHP_EOL);
23 Phar::mapPhar('composer.phar');
24 require 'phar://composer.phar/bin/composer';
26 __HALT_COMPILER(); ?>
\r
27 ù
\91\0\0ë
\ 1\0\0\11\0\0\0\ 1\0\r\0\0\0composer.phar
\0\0\0\0+
\0\0\0src/Composer/Autoload/AutoloadGenerator.phpþa
\0\0\92àqZþa
\0\0tG
\9d\94¶
\ 1\0\0\0\0\0\0+
\0\0\0src/Composer/Autoload/ClassMapGenerator.php«
\11\0\0\92àqZ«
\11\0\0\10ëÊ
\9a¶
\ 1\0\0\0\0\0\0\16\0\0\0src/Composer/Cache.phpt
\13\0\0\92àqZt
\13\0\0\0\11&#¶
\ 1\0\0\0\0\0\0%
\0\0\0src/Composer/Command/AboutCommand.phpË
\ 2\0\0\92àqZË
\ 2\0\0º¡Ãh¶
\ 1\0\0\0\0\0\0'
\0\0\0src/Composer/Command/ArchiveCommand.phpL
\14\0\0\92àqZL
\14\0\0\85\r;V¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Command/BaseCommand.phpÉ
\0\0\92àqZÉ
\0\0\97P!£¶
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Command/BaseDependencyCommand.phpÉ
\18\0\0\92àqZÉ
\18\0\0D{²Ð¶
\ 1\0\0\0\0\0\01
\0\0\0src/Composer/Command/CheckPlatformReqsCommand.php
\82\f\0\0\92àqZ
\82\f\0\0\a\88D
\86¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Command/ClearCacheCommand.php]
\ 5\0\0\92àqZ]
\ 5\0\0\1f\82ß´¶
\ 1\0\0\0\0\0\0&
\0\0\0src/Composer/Command/ConfigCommand.php
\87H
\0\0\92àqZ
\87H
\0\0Ä×
\ 5Ö¶
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/Command/CreateProjectCommand.php;6
\0\0\92àqZ;6
\0\0ü
\80\ 4y¶
\ 1\0\0\0\0\0\0'
\0\0\0src/Composer/Command/DependsCommand.php·
\ 2\0\0\92àqZ·
\ 2\0\0o±¹ú¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Command/DiagnoseCommand.phpÕG
\0\0\92àqZÕG
\0\0ðõü
\v¶
\ 1\0\0\0\0\0\0,
\0\0\0src/Composer/Command/DumpAutoloadCommand.php
\12
29 \0\0'K¬
\9e¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Command/ExecCommand.phpi
\a\0\0\92àqZi
\a\0\0\ 4Eþ
\80¶
\ 1\0\0\0\0\0\0&
\0\0\0src/Composer/Command/GlobalCommand.phpü
\a\0\0\92àqZü
\a\0\0ÝH
\8f\¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Command/HomeCommand.phpÃ
\ e\0\0\92àqZÃ
\ e\0\0¯àyB¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Command/InitCommand.phpºJ
\0\0\92àqZºJ
\0\0"T¼
\96¶
\ 1\0\0\0\0\0\0'
\0\0\0src/Composer/Command/InstallCommand.phpý
\13\0\0\92àqZý
\13\0\00ö:
\89¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Command/LicensesCommand.php&
\ e\0\0\92àqZ&
\ e\0\0Óv
\83\1e¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Command/OutdatedCommand.php°
31 \0\07àzk¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Command/ProhibitsCommand.phpË
\ 2\0\0\92àqZË
\ 2\0\0\1ag
\8fð¶
\ 1\0\0\0\0\0\0&
\0\0\0src/Composer/Command/RemoveCommand.php
\9b\15\0\0\92àqZ
\9b\15\0\0>Sþ
\98¶
\ 1\0\0\0\0\0\0'
\0\0\0src/Composer/Command/RequireCommand.phpÖ
\0\0\92àqZÖ
\0\0B÷õE¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Command/RunScriptCommand.phpq
\ e\0\0\92àqZq
\ e\0\0p@
\86¶
\ 1\0\0\0\0\0\0+
\0\0\0src/Composer/Command/ScriptAliasCommand.phpo
\ 5\0\0\92àqZo
\ 5\0\0\r5Þl¶
\ 1\0\0\0\0\0\0&
\0\0\0src/Composer/Command/SearchCommand.phpã
\b\0\0\92àqZã
\b\0\0ñ
\v¼w¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Command/SelfUpdateCommand.phpÈ2
\0\0\92àqZÈ2
\0\0+}
\94\14¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Command/ShowCommand.phpug
\0\0\92àqZug
\0\0ÀÕé
\13¶
\ 1\0\0\0\0\0\0&
\0\0\0src/Composer/Command/StatusCommand.php/
\15\0\0\92àqZ/
\15\0\0ôE
\12_¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Command/SuggestsCommand.php¨
\r\0\0\92àqZ¨
\r\0\0¼Ñ
\ 5c¶
\ 1\0\0\0\0\0\0&
\0\0\0src/Composer/Command/UpdateCommand.php¯#
\0\0\92àqZ¯#
\0\0\97ú
\8dT¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Command/ValidateCommand.php#
\14\0\0\92àqZ#
\14\0\0\89\0\9d~¶
\ 1\0\0\0\0\0\0\19\0\0\0src/Composer/Composer.phpù
\0\0\92àqZù
\0\0\86\83R
\ f¶
\ 1\0\0\0\0\0\0\17\0\0\0src/Composer/Config.phpÅ"
\0\0\92àqZÅ"
\0\0FÅ
\9d¡¶
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/Config/ConfigSourceInterface.php
\ e\ 2\0\0\92àqZ
\ e\ 2\0\0³
\f[/¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Config/JsonConfigSource.php!
\13\0\0\92àqZ!
\13\0\0¾S
\rN¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Console/Application.php§3
\0\0\92àqZ§3
\0\0\89D;q¶
\ 1\0\0\0\0\0\0,
\0\0\0src/Composer/Console/HtmlOutputFormatter.php3
\ 6\0\0\92àqZ3
\ 6\0\0Ú
\81Eu¶
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/DependencyResolver/Decisions.phpQ
\ f\0\0\92àqZQ
\ f\0\0?
\98¬$¶
\ 1\0\0\0\0\0\01
\0\0\0src/Composer/DependencyResolver/DefaultPolicy.php
\ 2\17\0\0\92àqZ
\ 2\17\0\0õÝv
\7f¶
\ 1\0\0\0\0\0\0/
\0\0\0src/Composer/DependencyResolver/GenericRule.php·
\ 3\0\0\92àqZ·
\ 3\0\0Ì~¯³¶
\ 1\0\0\0\0\0\0>
\0\0\0src/Composer/DependencyResolver/Operation/InstallOperation.phpC
\ 2\0\0\92àqZC
\ 2\0\0´\õ*¶
\ 1\0\0\0\0\0\0I
\0\0\0src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php÷
\ 2\0\0\92àqZ÷
\ 2\0\0ïÎà÷¶
\ 1\0\0\0\0\0\0K
\0\0\0src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.phpý
\ 2\0\0\92àqZý
\ 2\0\0\193#
\86¶
\ 1\0\0\0\0\0\0@
\0\0\0src/Composer/DependencyResolver/Operation/OperationInterface.phpÓ
\0\0\0\92àqZÓ
\0\0\0Ùâ&ä¶
\ 1\0\0\0\0\0\0=
\0\0\0src/Composer/DependencyResolver/Operation/SolverOperation.php¹
\ 1\0\0\92àqZ¹
\ 1\0\0&¢e
32 ¶
\ 1\0\0\0\0\0\0@
\0\0\0src/Composer/DependencyResolver/Operation/UninstallOperation.phpI
\ 2\0\0\92àqZI
\ 2\0\0FûÂɶ
\ 1\0\0\0\0\0\0=
\0\0\0src/Composer/DependencyResolver/Operation/UpdateOperation.phph
\ 3\0\0\92àqZh
\ 3\0\0öSÕ]¶
\ 1\0\0\0\0\0\03
\0\0\0src/Composer/DependencyResolver/PolicyInterface.php
\ 1\0\0\92àqZ
\ 1\0\0\18\9f\8bR¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/DependencyResolver/Pool.php°"
\0\0\92àqZ°"
\0\0\1d \8e%¶
\ 1\0\0\0\0\0\0+
\0\0\0src/Composer/DependencyResolver/Problem.php¥
\18\0\0\92àqZ¥
\18\0\0@
\88<4¶
\ 1\0\0\0\0\0\0+
\0\0\0src/Composer/DependencyResolver/Request.php
\83\ 4\0\0\92àqZ
\83\ 4\0\0åVP
\84¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/DependencyResolver/Rule.php¶
\18\0\0\92àqZ¶
\18\0\0Ú{
\8d\8d¶
\ 1\0\0\0\0\0\01
\0\0\0src/Composer/DependencyResolver/Rule2Literals.php§
\ 4\0\0\92àqZ§
\ 4\0\0~Ð'ò¶
\ 1\0\0\0\0\0\0+
\0\0\0src/Composer/DependencyResolver/RuleSet.phpª
34 \0\0_Î
\82\e¶
\ 1\0\0\0\0\0\04
\0\0\0src/Composer/DependencyResolver/RuleSetGenerator.phpL
\e\0\0\92àqZL
\e\0\0¡³`
\ 5¶
\ 1\0\0\0\0\0\03
\0\0\0src/Composer/DependencyResolver/RuleSetIterator.php
\11\ 6\0\0\92àqZ
\11\ 6\0\0\9bCü$¶
\ 1\0\0\0\0\0\02
\0\0\0src/Composer/DependencyResolver/RuleWatchChain.phpi
\ 1\0\0\92àqZi
\ 1\0\0hï
\9a,¶
\ 1\0\0\0\0\0\02
\0\0\0src/Composer/DependencyResolver/RuleWatchGraph.phpá
\ 6\0\0\92àqZá
\ 6\0\0\89rôv¶
\ 1\0\0\0\0\0\01
\0\0\0src/Composer/DependencyResolver/RuleWatchNode.phpé
\ 3\0\0\92àqZé
\ 3\0\0hØÑ´¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/DependencyResolver/Solver.php
\9f8
\0\0\92àqZ
\9f8
\0\0\1epöb¶
\ 1\0\0\0\0\0\06
\0\0\0src/Composer/DependencyResolver/SolverBugException.php
\98\ 1\0\0\92àqZ
\98\ 1\0\0\7f"qN¶
\ 1\0\0\0\0\0\0;
\0\0\0src/Composer/DependencyResolver/SolverProblemsException.phpô
\a\0\0\92àqZô
\a\0\0×|Ŧ¶
\ 1\0\0\0\0\0\0/
\0\0\0src/Composer/DependencyResolver/Transaction.phpÙ
\13\0\0\92àqZÙ
\13\0\05ÖHÀ¶
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/Downloader/ArchiveDownloader.php³
\0\0\92àqZ³
\0\0ÖðÞ
\9f¶
\ 1\0\0\0\0\0\01
\0\0\0src/Composer/Downloader/ChangeReportInterface.phpÌ
\0\0\0\92àqZÌ
\0\0\0¯à¨¿¶
\ 1\0\0\0\0\0\0+
\0\0\0src/Composer/Downloader/DownloadManager.php`
\15\0\0\92àqZ`
\15\0\0\86ë
\9d¾¶
\ 1\0\0\0\0\0\0/
\0\0\0src/Composer/Downloader/DownloaderInterface.phpÊ
\ 1\0\0\92àqZÊ
\ 1\0\0gs!l¶
\ 1\0\0\0\0\0\03
\0\0\0src/Composer/Downloader/DvcsDownloaderInterface.phpÑ
\0\0\0\92àqZÑ
\0\0\0&Á
\9c¿¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Downloader/FileDownloader.php
\8d\18\0\0\92àqZ
\8d\18\0\01
\82ã
\14¶
\ 1\0\0\0\0\0\0/
\0\0\0src/Composer/Downloader/FilesystemException.php
36 \ 1\0\0.-
\1e\8b¶
\ 1\0\0\0\0\0\0,
\0\0\0src/Composer/Downloader/FossilDownloader.php`
\v\0\0\92àqZ`
\v\0\0ÿI©u¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Downloader/GitDownloader.php?4
\0\0\92àqZ?4
\0\0e
\8d\17'¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Downloader/GzipDownloader.phpó
\ 6\0\0\92àqZó
\ 6\0\0}Úo¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Downloader/HgDownloader.php8
\0\0\92àqZ8
\0\0ëyàn¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Downloader/PathDownloader.phpK
\11\0\0\92àqZK
\11\0\09
\95&c¶
\ 1\0\0\0\0\0\00
\0\0\0src/Composer/Downloader/PearPackageExtractor.phpu
\e\0\0\92àqZu
\e\0\0z
\84\15\87¶
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Downloader/PerforceDownloader.php§
\a\0\0\92àqZ§
\a\0\0â
\83\10¨¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Downloader/PharDownloader.phpå
\0\0\0\92àqZå
\0\0\0ÞÉ
\1fç¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Downloader/RarDownloader.php
\9e\a\0\0\92àqZ
\9e\a\0\06 3U¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Downloader/SvnDownloader.phpH
\14\0\0\92àqZH
\14\0\0\ 3ùÀF¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Downloader/TarDownloader.phpã
\0\0\0\92àqZã
\0\0\0Í
\92X?¶
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Downloader/TransportException.php=
\ 2\0\0\92àqZ=
\ 2\0\0ZÎÈÞ¶
\ 1\0\0\0\0\0\09
\0\0\0src/Composer/Downloader/VcsCapableDownloaderInterface.phpÔ
\0\0\0\92àqZÔ
\0\0\0`§ôö¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Downloader/VcsDownloader.php"
\16\0\0\92àqZ"
\16\0\0\9c\1a\9fp¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Downloader/XzDownloader.php§
\ 4\0\0\92àqZ§
\ 4\0\0W$;á¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Downloader/ZipDownloader.php
\98\13\0\0\92àqZ
\98\13\0\0\9b@
\ 2ü¶
\ 1\0\0\0\0\0\0&
\0\0\0src/Composer/EventDispatcher/Event.php
\ 2\0\0\92àqZ
\ 2\0\0±
\99jï¶
\ 1\0\0\0\0\0\00
\0\0\0src/Composer/EventDispatcher/EventDispatcher.phpß0
\0\0\92àqZß0
\0\0}f
\18\a¶
\ 1\0\0\0\0\0\09
\0\0\0src/Composer/EventDispatcher/EventSubscriberInterface.php©
\0\0\0\92àqZ©
\0\0\0h·
\ 10¶
\ 1\0\0\0\0\0\09
\0\0\0src/Composer/EventDispatcher/ScriptExecutionException.phpv
\0\0\0\92àqZv
\0\0\0wZ8S¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Exception/NoSslException.phpf
\0\0\0\92àqZf
\0\0\0ËíM
\9d¶
\ 1\0\0\0\0\0\0\18\0\0\0src/Composer/Factory.phpU=
\0\0\92àqZU=
\0\0%êÿí¶
\ 1\0\0\0\0\0\0\1a\0\0\0src/Composer/IO/BaseIO.php
\8c\10\0\0\92àqZ
\8c\10\0\0(
\82l
\91¶
\ 1\0\0\0\0\0\0\1c\0\0\0src/Composer/IO/BufferIO.php*
\ 4\0\0\92àqZ*
\ 4\0\0¢®hT¶
\ 1\0\0\0\0\0\0\1d\0\0\0src/Composer/IO/ConsoleIO.php
\87\16\0\0\92àqZ
\87\16\0\0h
\97tH¶
\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/IO/IOInterface.phpì
\ 5\0\0\92àqZì
\ 5\0\0\0Õ
\9d\ e¶
\ 1\0\0\0\0\0\0\1a\0\0\0src/Composer/IO/NullIO.phpÀ
\ 4\0\0\92àqZÀ
\ 4\0\0F`sʶ
\ 1\0\0\0\0\0\0\1a\0\0\0src/Composer/Installer.phpX
\9c\0\0\92àqZX
\9c\0\0éå*
\1c¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Installer/BinaryInstaller.phpÛ
\11\0\0\92àqZÛ
\11\0\0<x> ¶
\ 1\0\0\0\0\0\02
\0\0\0src/Composer/Installer/BinaryPresenceInterface.phpË
\0\0\0\92àqZË
\0\0\0À5
\9a¨¶
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Installer/InstallationManager.php-
\17\0\0\92àqZ-
\17\0\0¾}
\8c7¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Installer/InstallerEvent.php
\ e\ 6\0\0\92àqZ
\ e\ 6\0\0lÔzi¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Installer/InstallerEvents.phpÞ
\0\0\0\92àqZÞ
\0\0\0ì
\9f@G¶
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/Installer/InstallerInterface.phpã
\ 2\0\0\92àqZã
\ 2\0\0^
\83\93ʶ
\ 1\0\0\0\0\0\0+
\0\0\0src/Composer/Installer/LibraryInstaller.php^
\13\0\0\92àqZ^
\13\0\0\10\1aÍr¶
\ 1\0\0\0\0\0\0/
\0\0\0src/Composer/Installer/MetapackageInstaller.php
\9c\ 4\0\0\92àqZ
\9c\ 4\0\0Æ
\12Å!¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Installer/NoopInstaller.php+
\ 5\0\0\92àqZ+
\ 5\0\0À·M}¶
\ 1\0\0\0\0\0\0'
\0\0\0src/Composer/Installer/PackageEvent.phpe
\ 3\0\0\92àqZe
\ 3\0\0;°
\1a¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Installer/PackageEvents.php¸
\ 1\0\0\92àqZ¸
\ 1\0\0dbØs¶
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Installer/PearBinaryInstaller.phpâ
\f\0\0\92àqZâ
\f\0\0;øiU¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Installer/PearInstaller.php¢
\a\0\0\92àqZ¢
\a\0\0È
\82¶Ñ¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Installer/PluginInstaller.php
\9f\ 6\0\0\92àqZ
\9f\ 6\0\0<tú,¶
\ 1\0\0\0\0\0\0+
\0\0\0src/Composer/Installer/ProjectInstaller.php
\1d\ 6\0\0\92àqZ
\1d\ 6\0\0*0@P¶
\ 1\0\0\0\0\0\04
\0\0\0src/Composer/Installer/SuggestedPackagesReporter.php
\10\a\0\0\92àqZ
\10\a\0\0+±]Ķ
\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Json/JsonFile.phpï
\13\0\0\92àqZï
\13\0\0_(
\18\v¶
\ 1\0\0\0\0\0\0#
\0\0\0src/Composer/Json/JsonFormatter.php
\ 6\ 6\0\0\92àqZ
\ 6\ 6\0\0\1eÐqu¶
\ 1\0\0\0\0\0\0%
\0\0\0src/Composer/Json/JsonManipulator.php°2
\0\0\92àqZ°2
\0\0\8eè
\ 4ζ
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/Json/JsonValidationException.php\
\ 1\0\0\92àqZ\
\ 1\0\0.Xóܶ
\ 1\0\0\0\0\0\0%
\0\0\0src/Composer/Package/AliasPackage.php
\ 5\17\0\0\92àqZ
\ 5\17\0\0¹
\97~
\9a¶
\ 1\0\0\0\0\0\07
\0\0\0src/Composer/Package/Archiver/ArchivableFilesFilter.php
\ 2\0\0\92àqZ
\ 2\0\0yY+¦¶
\ 1\0\0\0\0\0\07
\0\0\0src/Composer/Package/Archiver/ArchivableFilesFinder.phpÞ
\ 5\0\0\92àqZÞ
\ 5\0\0\f²²¹¶
\ 1\0\0\0\0\0\00
\0\0\0src/Composer/Package/Archiver/ArchiveManager.php°
\f\0\0\92àqZ°
\f\0\0gþÒ)¶
\ 1\0\0\0\0\0\03
\0\0\0src/Composer/Package/Archiver/ArchiverInterface.php
\a\ 1\0\0\92àqZ
\a\ 1\0\0ñ´>
\v¶
\ 1\0\0\0\0\0\03
\0\0\0src/Composer/Package/Archiver/BaseExcludeFilter.php
\96\ 6\0\0\92àqZ
\96\ 6\0\0y¶=ƶ
\ 1\0\0\0\0\0\07
\0\0\0src/Composer/Package/Archiver/ComposerExcludeFilter.php
\1f\ 1\0\0\92àqZ
\1f\ 1\0\0\8bSZ0¶
\ 1\0\0\0\0\0\02
\0\0\0src/Composer/Package/Archiver/GitExcludeFilter.phpq
\ 3\0\0\92àqZq
\ 3\0\05¾i&¶
\ 1\0\0\0\0\0\01
\0\0\0src/Composer/Package/Archiver/HgExcludeFilter.php
\v\ 5\0\0\92àqZ
\v\ 5\0\0\r\95¦S¶
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Package/Archiver/PharArchiver.php>
\ 6\0\0\92àqZ>
\ 6\0\0 5
\89í¶
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/Package/Archiver/ZipArchiver.php¼
\ 4\0\0\92àqZ¼
\ 4\0\0\91XÝë¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Package/BasePackage.php&
\r\0\0\92àqZ&
\r\0\0\e'
\1fݶ
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Package/CompletePackage.phpü
\ 6\0\0\92àqZü
\ 6\0\0þM˶¶
\ 1\0\0\0\0\0\01
\0\0\0src/Composer/Package/CompletePackageInterface.phpõ
\ 1\0\0\92àqZõ
\ 1\0\0¦Ê
\81ò¶
\ 1\0\0\0\0\0\0+
\0\0\0src/Composer/Package/Dumper/ArrayDumper.phpë
\v\0\0\92àqZë
\v\0\0Ó8WE¶
\ 1\0\0\0\0\0\0\1d\0\0\0src/Composer/Package/Link.php
\88\ 5\0\0\92àqZ
\88\ 5\0\0å¶Y«¶
\ 1\0\0\0\0\0\07
\0\0\0src/Composer/Package/LinkConstraint/EmptyConstraint.php
\82\ 1\0\0\92àqZ
\82\ 1\0\0\ eé~
\8b¶
\ 1\0\0\0\0\0\0?
\0\0\0src/Composer/Package/LinkConstraint/LinkConstraintInterface.phpd
\ 1\0\0\92àqZd
\ 1\0\0¤ôLn¶
\ 1\0\0\0\0\0\07
\0\0\0src/Composer/Package/LinkConstraint/MultiConstraint.php
\82\ 1\0\0\92àqZ
\82\ 1\0\0ób`ý¶
\ 1\0\0\0\0\0\0:
\0\0\0src/Composer/Package/LinkConstraint/SpecificConstraint.phpi
\ 1\0\0\92àqZi
\ 1\0\0Þ
\94\9a%¶
\ 1\0\0\0\0\0\09
\0\0\0src/Composer/Package/LinkConstraint/VersionConstraint.phpX
\ 1\0\0\92àqZX
\ 1\0\0\ 2}`y¶
\ 1\0\0\0\0\0\0+
\0\0\0src/Composer/Package/Loader/ArrayLoader.php
\1f\1e\0\0\92àqZ
\1f\1e\0\0n~
\9c\9b¶
\ 1\0\0\0\0\0\07
\0\0\0src/Composer/Package/Loader/InvalidPackageException.phpE
\ 2\0\0\92àqZE
\ 2\0\0xb
\13¾¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Package/Loader/JsonLoader.phpù
\ 1\0\0\92àqZù
\ 1\0\0!~
\88{¶
\ 1\0\0\0\0\0\0/
\0\0\0src/Composer/Package/Loader/LoaderInterface.php²
\0\0\0\92àqZ²
\0\0\0¦}úζ
\ 1\0\0\0\0\0\01
\0\0\0src/Composer/Package/Loader/RootPackageLoader.php$
\17\0\0\92àqZ$
\17\0\0Ârü°¶
\ 1\0\0\0\0\0\05
\0\0\0src/Composer/Package/Loader/ValidatingArrayLoader.phpT:
\0\0\92àqZT:
\0\0AôX϶
\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Package/Locker.php©!
\0\0\92àqZ©!
\0\0A
\8aõë¶
\ 1\0\0\0\0\0\0 \0\0\0src/Composer/Package/Package.phpÉ
\1a\0\0\92àqZÉ
\1a\0\0cÃ
\8fh¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Package/PackageInterface.php
\a\0\0\92àqZ
\a\0\0ûÇ^ƶ
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Package/RootAliasPackage.php
\1f \0\0\92àqZ
\1f \0\0 _
\80ø¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Package/RootPackage.php
\11\ 5\0\0\92àqZ
\11\ 5\0\0\ 2\8eÎ_¶
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/Package/RootPackageInterface.php¹
\ 3\0\0\92àqZ¹
\ 3\0\0"maV¶
\ 1\0\0\0\0\0\0/
\0\0\0src/Composer/Package/Version/VersionGuesser.phpO
\1e\0\0\92àqZO
\1e\0\0\88S
\9c\11¶
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Package/Version/VersionParser.phpo
\ 4\0\0\92àqZo
\ 4\0\0m
\1e\80;¶
\ 1\0\0\0\0\0\00
\0\0\0src/Composer/Package/Version/VersionSelector.phpK
\f\0\0\92àqZK
\f\0\0²<
\ fȶ
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/Plugin/Capability/Capability.phpW
\0\0\0\92àqZW
\0\0\0æ_¨1¶
\ 1\0\0\0\0\0\02
\0\0\0src/Composer/Plugin/Capability/CommandProvider.php
\97\0\0\0\92àqZ
\97\0\0\0ûOâ>¶
\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Plugin/Capable.php
\7f\0\0\0\92àqZ
\7f\0\0\0Æq
\15+¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Plugin/CommandEvent.phpâ
\ 2\0\0\92àqZâ
\ 2\0\0³ÆÇW¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Plugin/PluginEvents.phpÂ
\0\0\0\92àqZÂ
\0\0\0^Íþ
\ 6¶
\ 1\0\0\0\0\0\0'
\0\0\0src/Composer/Plugin/PluginInterface.phpô
\0\0\0\92àqZô
\0\0\0)'*ض
\ 1\0\0\0\0\0\0%
\0\0\0src/Composer/Plugin/PluginManager.php
\1f$
\0\0\92àqZ
\1f$
\0\0ë
\8e"»¶
\ 1\0\0\0\0\0\0,
\0\0\0src/Composer/Plugin/PreFileDownloadEvent.php`
\ 2\0\0\92àqZ`
\ 2\0\0\09-ζ
\ 1\0\0\0\0\0\04
\0\0\0src/Composer/Question/StrictConfirmationQuestion.php
\1e\ 5\0\0\92àqZ
\1e\ 5\0\0'.³è¶
\ 1\0\0\0\0\0\0+
\0\0\0src/Composer/Repository/ArrayRepository.php
\13\ e\0\0\92àqZ
\13\ e\0\0éÌt
\0¶
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Repository/ArtifactRepository.php»
\f\0\0\92àqZ»
\f\0\0\88Ý÷<¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Repository/BaseRepository.php]
\r\0\0\92àqZ]
\r\0\0ä&3
\87¶
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Repository/ComposerRepository.php
\87T
\0\0\92àqZ
\87T
\0\0Ç
\93×{¶
\ 1\0\0\0\0\0\0/
\0\0\0src/Composer/Repository/CompositeRepository.php;
\b\0\0\92àqZ;
\b\0\0¤¯S
\1f¶
\ 1\0\0\0\0\0\0;
\0\0\0src/Composer/Repository/ConfigurableRepositoryInterface.php
\85\0\0\0\92àqZ
\85\0\0\0±
\9f_
\1c¶
\ 1\0\0\0\0\0\00
\0\0\0src/Composer/Repository/FilesystemRepository.php$
\ 5\0\0\92àqZ$
\ 5\0\0¾Ãá
\85¶
\ 1\0\0\0\0\0\04
\0\0\0src/Composer/Repository/InstalledArrayRepository.php£
\0\0\0\92àqZ£
\0\0\0/ö~>¶
\ 1\0\0\0\0\0\09
\0\0\0src/Composer/Repository/InstalledFilesystemRepository.php£
\0\0\0\92àqZ£
\0\0\0V
37 \95_¶
\ 1\0\0\0\0\0\08
\0\0\0src/Composer/Repository/InstalledRepositoryInterface.php
\87\0\0\0\92àqZ
\87\0\0\0\18£9p¶
\ 1\0\0\0\0\0\06
\0\0\0src/Composer/Repository/InvalidRepositoryException.phpn
\0\0\0\92àqZn
\0\0\0à
\93ë
\98¶
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/Repository/PackageRepository.phpj
\ 3\0\0\92àqZj
\ 3\0\0¥ôò̶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Repository/PathRepository.phpw
39 \0\0\0~õ³¶
\ 1\0\0\0\0\0\02
\0\0\0src/Composer/Repository/Pear/BaseChannelReader.phpI
\ 5\0\0\92àqZI
\ 5\0\0c
\b6³¶
\ 1\0\0\0\0\0\0,
\0\0\0src/Composer/Repository/Pear/ChannelInfo.phpÄ
\ 1\0\0\92àqZÄ
\ 1\0\0:T*ɶ
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Repository/Pear/ChannelReader.phpí
\ 6\0\0\92àqZí
\ 6\0\0?ÈYT¶
\ 1\0\0\0\0\0\04
\0\0\0src/Composer/Repository/Pear/ChannelRest10Reader.php®
\0\0\92àqZ®
\0\0\99ÖÛú¶
\ 1\0\0\0\0\0\04
\0\0\0src/Composer/Repository/Pear/ChannelRest11Reader.php&
\0\0\92àqZ&
\0\0òUb
\b¶
\ 1\0\0\0\0\0\05
\0\0\0src/Composer/Repository/Pear/DependencyConstraint.phpq
\ 2\0\0\92àqZq
\ 2\0\09
\ e\17=¶
\ 1\0\0\0\0\0\0/
\0\0\0src/Composer/Repository/Pear/DependencyInfo.phpq
\ 1\0\0\92àqZq
\ 1\0\0fºTò¶
\ 1\0\0\0\0\0\08
\0\0\0src/Composer/Repository/Pear/PackageDependencyParser.php
\85\16\0\0\92àqZ
\85\16\0\0÷$Li¶
\ 1\0\0\0\0\0\0,
\0\0\0src/Composer/Repository/Pear/PackageInfo.php°
\ 3\0\0\92àqZ°
\ 3\0\0\9f\r¸
\f¶
\ 1\0\0\0\0\0\0,
\0\0\0src/Composer/Repository/Pear/ReleaseInfo.php
\92\ 1\0\0\92àqZ
\92\ 1\0\0o
\93\8aö
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Repository/PearRepository.phpª
\16\0\0\92àqZª
\16\0\0)
\9f\83}¶
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Repository/PlatformRepository.php
\ 2\e\0\0\92àqZ
\ 2\e\0\0fVÉ¢¶
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/Repository/RepositoryFactory.php2
\12\0\0\92àqZ2
\12\0\0\12t
\ 4>¶
\ 1\0\0\0\0\0\0/
\0\0\0src/Composer/Repository/RepositoryInterface.phpÛ
\ 1\0\0\92àqZÛ
\ 1\0\0\92\11âÁ¶
\ 1\0\0\0\0\0\0-
\0\0\0src/Composer/Repository/RepositoryManager.php,
41 \0\0¾
\85\
\95¶
\ 1\0\0\0\0\0\07
\0\0\0src/Composer/Repository/RepositorySecurityException.phpo
\0\0\0\92àqZo
\0\0\0pÕ«ª¶
\ 1\0\0\0\0\0\0/
\0\0\0src/Composer/Repository/Vcs/BitbucketDriver.phpô
\1e\0\0\92àqZô
\1e\0\0\ 4x¤ü¶
\ 1\0\0\0\0\0\0,
\0\0\0src/Composer/Repository/Vcs/FossilDriver.php
\9d\12\0\0\92àqZ
\9d\12\0\0\ eÀ]µ¶
\ 1\0\0\0\0\0\02
\0\0\0src/Composer/Repository/Vcs/GitBitbucketDriver.phpê
\ 5\0\0\92àqZê
\ 5\0\0Ã
\8e»
\14¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Repository/Vcs/GitDriver.php¼
\11\0\0\92àqZ¼
\11\0\0\8a©Ðê¶
\ 1\0\0\0\0\0\0,
\0\0\0src/Composer/Repository/Vcs/GitHubDriver.php¡+
\0\0\92àqZ¡+
\0\0ýYû
42 ¶
\ 1\0\0\0\0\0\0,
\0\0\0src/Composer/Repository/Vcs/GitLabDriver.phpÍ#
\0\0\92àqZÍ#
\0\0ßNìʶ
\ 1\0\0\0\0\0\01
\0\0\0src/Composer/Repository/Vcs/HgBitbucketDriver.phpä
\ 5\0\0\92àqZä
\ 5\0\0i
\9büà¶
\ 1\0\0\0\0\0\0(
\0\0\0src/Composer/Repository/Vcs/HgDriver.phpe
\12\0\0\92àqZe
\12\0\0O!O
\13¶
\ 1\0\0\0\0\0\0.
\0\0\0src/Composer/Repository/Vcs/PerforceDriver.php'
\0\0\92àqZ'
\0\0ÙóH
\ 5¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Repository/Vcs/SvnDriver.php
\15\e\0\0\92àqZ
\15\e\0\0\1dÕzï¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Repository/Vcs/VcsDriver.phpæ
44 \0\0eׯ-¶
\ 1\0\0\0\0\0\02
\0\0\0src/Composer/Repository/Vcs/VcsDriverInterface.php÷
\ 2\0\0\92àqZ÷
\ 2\0\0ÇX[
\89¶
\ 1\0\0\0\0\0\0)
\0\0\0src/Composer/Repository/VcsRepository.php´
\1e\0\0\92àqZ´
\1e\0\0\ 1ªÖG¶
\ 1\0\0\0\0\0\03
\0\0\0src/Composer/Repository/WritableArrayRepository.php
\ f\ 3\0\0\92àqZ
\ f\ 3\0\0¾G
\17*¶
\ 1\0\0\0\0\0\07
\0\0\0src/Composer/Repository/WritableRepositoryInterface.php
\89\ 1\0\0\92àqZ
\89\ 1\0\0\91/sï¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Script/CommandEvent.phpW
\0\0\0\92àqZW
\0\0\0£VZt¶
\ 1\0\0\0\0\0\0\1d\0\0\0src/Composer/Script/Event.phpµ
\ 2\0\0\92àqZµ
\ 2\0\0lt¦M¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Script/PackageEvent.php
\9c\0\0\0\92àqZ
\9c\0\0\0§ÿÉ
\r¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Script/ScriptEvents.phpP
\ 4\0\0\92àqZP
\ 4\0\0\87\8f\ 4¶¶
\ 1\0\0\0\0\0\0 \0\0\0src/Composer/SelfUpdate/Keys.php
\9d\ 1\0\0\92àqZ
\9d\ 1\0\0\vîÊN¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/SelfUpdate/Versions.phpì
\ 5\0\0\92àqZì
\ 5\0\0͵
\91\83¶
\ 1\0\0\0\0\0\0 \0\0\0src/Composer/Util/AuthHelper.phpË
\ 3\0\0\92àqZË
\ 3\0\0>zx
\96¶
\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Util/Bitbucket.php%
\15\0\0\92àqZ%
\15\0\0n=gÓ¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Util/ComposerMirror.php±
\ 4\0\0\92àqZ±
\ 4\0\0½øØ¶
\ 1\0\0\0\0\0\0%
\0\0\0src/Composer/Util/ConfigValidator.php¥
\ e\0\0\92àqZ¥
\ e\0\08ñ
\9eê¶
\ 1\0\0\0\0\0\0"
\0\0\0src/Composer/Util/ErrorHandler.php
\87\ 4\0\0\92àqZ
\87\ 4\0\0He
\1c"¶
\ 1\0\0\0\0\0\0 \0\0\0src/Composer/Util/Filesystem.php3/
\0\0\92àqZ3/
\0\0m44ô¶
\ 1\0\0\0\0\0\0\19\0\0\0src/Composer/Util/Git.php!&
\0\0\92àqZ!&
\0\0lsý×¶
\ 1\0\0\0\0\0\0\1c\0\0\0src/Composer/Util/GitHub.phpÏ
46 \0\0ÁØ\å¶
\ 1\0\0\0\0\0\0\1c\0\0\0src/Composer/Util/GitLab.php
\99\f\0\0\92àqZ
\99\f\0\0\17BLF¶
\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Util/IniHelper.php]
\ 3\0\0\92àqZ]
\ 3\0\0®äéä¶
\ 1\0\0\0\0\0\0$
\0\0\0src/Composer/Util/NoProxyPattern.php¾
\ 6\0\0\92àqZ¾
\ 6\0\0Z+°m¶
\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Util/Perforce.php
\821
\0\0\92àqZ
\821
\0\0,
\9cbx¶
\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Util/Platform.phpü
\ 4\0\0\92àqZü
\ 4\0\0sfç¶
\ 1\0\0\0\0\0\0%
\0\0\0src/Composer/Util/ProcessExecutor.phpÚ
\v\0\0\92àqZÚ
\v\0\0£ÒÙ
\ 5¶
\ 1\0\0\0\0\0\0&
\0\0\0src/Composer/Util/RemoteFilesystem.phpýb
\0\0\92àqZýb
\0\0Mùjж
\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Util/Silencer.phpé
\ 2\0\0\92àqZé
\ 2\0\0\93Vjf¶
\ 1\0\0\0\0\0\0!
\0\0\0src/Composer/Util/SpdxLicense.php
\ 3\ 1\0\0\92àqZ
\ 3\ 1\0\0¾7
47 ñ¶
\ 1\0\0\0\0\0\0*
\0\0\0src/Composer/Util/StreamContextFactory.php
\18\10\0\0\92àqZ
\18\10\0\0ËH*v¶
\ 1\0\0\0\0\0\0\19\0\0\0src/Composer/Util/Svn.php
\82\13\0\0\92àqZ
\82\13\0\0Â Vr¶
\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Util/TlsHelper.phpp
49 \0\0¤eÞæ¶
\ 1\0\0\0\0\0\0\19\0\0\0src/Composer/Util/Url.phpÀ
\a\0\0\92àqZÀ
\a\0\0lqh
\17¶
\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/XdebugHandler.php
\93\ f\0\0\92àqZ
\93\ f\0\0ÕWÖ>¶
\ 1\0\0\0\0\0\0\11\0\0\0src/bootstrap.php¹
\ 1\0\0\92àqZ¹
\ 1\0\0\15I}
\9c¶
\ 1\0\0\0\0\0\0%
\0\0\0src/Composer/Autoload/ClassLoader.phpl4
\0\0\92àqZl4
\0\0\92ø[÷¶
\ 1\0\0\0\0\0\0#
\0\0\0res/composer-repository-schema.jsonð
\ f\0\0\92àqZð
\ f\0\0\81GÐà¶
\ 1\0\0\0\0\0\0\18\0\0\0res/composer-schema.jsony
\95\0\0\92àqZy
\95\0\0³Ì¶`¶
\ 1\0\0\0\0\0\06
\0\0\0vendor/composer/spdx-licenses/res/spdx-exceptions.json}
\a\0\0\92àqZ}
\a\0\0\ 3/Y
\9e¶
\ 1\0\0\0\0\0\04
\0\0\0vendor/composer/spdx-licenses/res/spdx-licenses.jsonà
\8c\0\0\92àqZà
\8c\0\0£
\7f\1aO¶
\ 1\0\0\0\0\0\0*
\0\0\0vendor/seld/cli-prompt/res/hiddeninput.exe
\0$
\0\0\92àqZ
\0$
\0\0\95\8d¥v¶
\ 1\0\0\0\0\0\0&
\0\0\0vendor/symfony/console/Application.php#W
\0\0\92àqZ#W
\0\0\eèðz¶
\ 1\0\0\0\0\0\0*
\0\0\0vendor/symfony/console/Command/Command.phpò"
\0\0\92àqZò"
\0\0ÊRÑç¶
\ 1\0\0\0\0\0\0.
\0\0\0vendor/symfony/console/Command/HelpCommand.phpØ
\a\0\0\92àqZØ
\a\0\0$Y
\1c«¶
\ 1\0\0\0\0\0\0.
\0\0\0vendor/symfony/console/Command/ListCommand.phpZ
\b\0\0\92àqZZ
\b\0\0É£
\16¶
\ 1\0\0\0\0\0\0(
\0\0\0vendor/symfony/console/ConsoleEvents.phpé
\0\0\0\92àqZé
\0\0\0RÛÔe¶
\ 1\0\0\0\0\0\0<
\0\0\0vendor/symfony/console/Descriptor/ApplicationDescription.phpÐ
\b\0\0\92àqZÐ
\b\0\0\99\8e5°¶
\ 1\0\0\0\0\0\00
\0\0\0vendor/symfony/console/Descriptor/Descriptor.php
\8e\a\0\0\92àqZ
\8e\a\0\0éð8
\9f¶
\ 1\0\0\0\0\0\09
\0\0\0vendor/symfony/console/Descriptor/DescriptorInterface.phpü
\0\0\0\92àqZü
\0\0\0±Q
\aµ¶
\ 1\0\0\0\0\0\04
\0\0\0vendor/symfony/console/Descriptor/JsonDescriptor.phpá
\r\0\0\92àqZá
\r\0\0\87 àÆ¶
\ 1\0\0\0\0\0\08
\0\0\0vendor/symfony/console/Descriptor/MarkdownDescriptor.php¹
\ e\0\0\92àqZ¹
\ e\0\0k
\9f.a¶
\ 1\0\0\0\0\0\04
\0\0\0vendor/symfony/console/Descriptor/TextDescriptor.php²
\1e\0\0\92àqZ²
\1e\0\0\8fùâ¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/symfony/console/Descriptor/XmlDescriptor.php
\ 2\1c\0\0\92àqZ
\ 2\1c\0\0
50 ]
\85ζ
\ 1\0\0\0\0\0\04
\0\0\0vendor/symfony/console/Event/ConsoleCommandEvent.php°
\ 1\0\0\92àqZ°
\ 1\0\0\a!
\0ȶ
\ 1\0\0\0\0\0\0-
\0\0\0vendor/symfony/console/Event/ConsoleEvent.phpÅ
\ 2\0\0\92àqZÅ
\ 2\0\0ÒxÛ\¶
\ 1\0\0\0\0\0\06
\0\0\0vendor/symfony/console/Event/ConsoleExceptionEvent.php
\12\ 3\0\0\92àqZ
\12\ 3\0\0á
\162é¶
\ 1\0\0\0\0\0\06
\0\0\0vendor/symfony/console/Event/ConsoleTerminateEvent.phpz
\ 2\0\0\92àqZz
\ 2\0\0³,îL¶
\ 1\0\0\0\0\0\0=
\0\0\0vendor/symfony/console/Exception/CommandNotFoundException.phpÔ
\ 1\0\0\92àqZÔ
\ 1\0\0È÷ L¶
\ 1\0\0\0\0\0\07
\0\0\0vendor/symfony/console/Exception/ExceptionInterface.phpf
\0\0\0\92àqZf
\0\0\0¡ABª¶
\ 1\0\0\0\0\0\0=
\0\0\0vendor/symfony/console/Exception/InvalidArgumentException.php¦
\0\0\0\92àqZ¦
\0\0\0Ö̽Z¶
\ 1\0\0\0\0\0\0;
\0\0\0vendor/symfony/console/Exception/InvalidOptionException.php¦
\0\0\0\92àqZ¦
\0\0\0\13Ë×H¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/symfony/console/Exception/LogicException.php
\92\0\0\0\92àqZ
\92\0\0\0ÍO\e¶
\ 1\0\0\0\0\0\05
\0\0\0vendor/symfony/console/Exception/RuntimeException.php
\96\0\0\0\92àqZ
\96\0\0\0Ùí,6¶
\ 1\0\0\0\0\0\04
\0\0\0vendor/symfony/console/Formatter/OutputFormatter.php2
\ e\0\0\92àqZ2
\ e\0\0RÌYh¶
\ 1\0\0\0\0\0\0=
\0\0\0vendor/symfony/console/Formatter/OutputFormatterInterface.php
\8c\ 1\0\0\92àqZ
\8c\ 1\0\0òññÀ¶
\ 1\0\0\0\0\0\09
\0\0\0vendor/symfony/console/Formatter/OutputFormatterStyle.phpJ
\10\0\0\92àqZJ
\10\0\0ÏDSȶ
\ 1\0\0\0\0\0\0B
\0\0\0vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php
\84\ 1\0\0\92àqZ
\84\ 1\0\0÷½
\10G¶
\ 1\0\0\0\0\0\0>
\0\0\0vendor/symfony/console/Formatter/OutputFormatterStyleStack.php>
\ 5\0\0\92àqZ>
\ 5\0\0[
\86¿
\96¶
\ 1\0\0\0\0\0\06
\0\0\0vendor/symfony/console/Helper/DebugFormatterHelper.phpx
\b\0\0\92àqZx
\b\0\0N©Ø¼¶
\ 1\0\0\0\0\0\02
\0\0\0vendor/symfony/console/Helper/DescriptorHelper.phpw
\ 5\0\0\92àqZw
\ 5\0\0ÅHð.¶
\ 1\0\0\0\0\0\0.
\0\0\0vendor/symfony/console/Helper/DialogHelper.phpú
\1e\0\0\92àqZú
\1e\0\0¼
\fO
\81¶
\ 1\0\0\0\0\0\01
\0\0\0vendor/symfony/console/Helper/FormatterHelper.phpc
\ 4\0\0\92àqZc
\ 4\0\0\93ý«N¶
\ 1\0\0\0\0\0\0(
\0\0\0vendor/symfony/console/Helper/Helper.php¨
\a\0\0\92àqZ¨
\a\0\0\9coû3¶
\ 1\0\0\0\0\0\01
\0\0\0vendor/symfony/console/Helper/HelperInterface.phpå
\0\0\0\92àqZå
\0\0\0\1f\8a \18¶
\ 1\0\0\0\0\0\0+
\0\0\0vendor/symfony/console/Helper/HelperSet.phpÉ
\a\0\0\92àqZÉ
\a\0\0\9cf
\155¶
\ 1\0\0\0\0\0\02
\0\0\0vendor/symfony/console/Helper/InputAwareHelper.phpc
\ 1\0\0\92àqZc
\ 1\0\0ñø
\90|¶
\ 1\0\0\0\0\0\0/
\0\0\0vendor/symfony/console/Helper/ProcessHelper.phpÑ
\0\0\92àqZÑ
\0\0@±ã
\81¶
\ 1\0\0\0\0\0\0-
\0\0\0vendor/symfony/console/Helper/ProgressBar.phpk%
\0\0\92àqZk%
\0\0ì
\19îa¶
\ 1\0\0\0\0\0\00
\0\0\0vendor/symfony/console/Helper/ProgressHelper.php\
\e\0\0\92àqZ\
\e\0\0\91ÃYÓ¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/symfony/console/Helper/ProgressIndicator.phpK
\14\0\0\92àqZK
\14\0\0í
\1cꡦ
\ 1\0\0\0\0\0\00
\0\0\0vendor/symfony/console/Helper/QuestionHelper.php
\1c\0\0\92àqZ
\1c\0\0L
\17ú4¶
\ 1\0\0\0\0\0\07
\0\0\0vendor/symfony/console/Helper/SymfonyQuestionHelper.phpl
52 \0\0\1e÷ÞL¶
\ 1\0\0\0\0\0\0'
\0\0\0vendor/symfony/console/Helper/Table.php¨*
\0\0\92àqZ¨*
\0\0e{))¶
\ 1\0\0\0\0\0\0+
\0\0\0vendor/symfony/console/Helper/TableCell.php
\80\ 3\0\0\92àqZ
\80\ 3\0\0Ìî*Û¶
\ 1\0\0\0\0\0\0-
\0\0\0vendor/symfony/console/Helper/TableHelper.php
\ e\f\0\0\92àqZ
\ e\f\0\0QRº
\1e¶
\ 1\0\0\0\0\0\00
\0\0\0vendor/symfony/console/Helper/TableSeparator.phpÊ
\0\0\0\92àqZÊ
\0\0\0az
\1f\1c¶
\ 1\0\0\0\0\0\0,
\0\0\0vendor/symfony/console/Helper/TableStyle.php
\1f
54 \0\0PÞµ¦¶
\ 1\0\0\0\0\0\0*
\0\0\0vendor/symfony/console/Input/ArgvInput.php7
\16\0\0\92àqZ7
\16\0\0ØQ|ʶ
\ 1\0\0\0\0\0\0+
\0\0\0vendor/symfony/console/Input/ArrayInput.php
\14\v\0\0\92àqZ
\14\v\0\0ʹóþ¶
\ 1\0\0\0\0\0\0&
\0\0\0vendor/symfony/console/Input/Input.php¢
\v\0\0\92àqZ¢
\v\0\0\94\87B"¶
\ 1\0\0\0\0\0\0.
\0\0\0vendor/symfony/console/Input/InputArgument.php
\10\ 6\0\0\92àqZ
\10\ 6\0\0&<¦¯¶
\ 1\0\0\0\0\0\04
\0\0\0vendor/symfony/console/Input/InputAwareInterface.php
\9a\0\0\0\92àqZ
\9a\0\0\0\87jT
\9f¶
\ 1\0\0\0\0\0\00
\0\0\0vendor/symfony/console/Input/InputDefinition.php
\8a\19\0\0\92àqZ
\8a\19\0\0émáP¶
\ 1\0\0\0\0\0\0/
\0\0\0vendor/symfony/console/Input/InputInterface.php
\9d\ 3\0\0\92àqZ
\9d\ 3\0\0®#£
\10¶
\ 1\0\0\0\0\0\0,
\0\0\0vendor/symfony/console/Input/InputOption.php
\18\f\0\0\92àqZ
\18\f\0\0ùýN4¶
\ 1\0\0\0\0\0\0,
\0\0\0vendor/symfony/console/Input/StringInput.php
\96\ 6\0\0\92àqZ
\96\ 6\0\0cì\(¶
\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/console/LICENSE)
\ 4\0\0\92àqZ)
\ 4\0\0·)E`¶
\ 1\0\0\0\0\0\0/
\0\0\0vendor/symfony/console/Logger/ConsoleLogger.php.
\0\0\92àqZ.
\0\0¤
\8c\85ζ
\ 1\0\0\0\0\0\00
\0\0\0vendor/symfony/console/Output/BufferedOutput.php_
\ 1\0\0\92àqZ_
\ 1\0\0\8b >P¶
\ 1\0\0\0\0\0\0/
\0\0\0vendor/symfony/console/Output/ConsoleOutput.php°
\a\0\0\92àqZ°
\a\0\0]k~o¶
\ 1\0\0\0\0\0\08
\0\0\0vendor/symfony/console/Output/ConsoleOutputInterface.phpà
\0\0\0\92àqZà
\0\0\0\87\86ÆÊ¶
\ 1\0\0\0\0\0\0,
\0\0\0vendor/symfony/console/Output/NullOutput.phpÏ
\ 3\0\0\92àqZÏ
\ 3\0\0®
\98\8bZ¶
\ 1\0\0\0\0\0\0(
\0\0\0vendor/symfony/console/Output/Output.php
\98 \0\0\92àqZ
\98 \0\0\1fpf\¶
\ 1\0\0\0\0\0\01
\0\0\0vendor/symfony/console/Output/OutputInterface.php
\17\ 3\0\0\92àqZ
\17\ 3\0\0\0ì
\ 6&¶
\ 1\0\0\0\0\0\0.
\0\0\0vendor/symfony/console/Output/StreamOutput.phpÂ
\ 5\0\0\92àqZÂ
\ 5\0\0\ 4¥<I¶
\ 1\0\0\0\0\0\02
\0\0\0vendor/symfony/console/Question/ChoiceQuestion.phpw
56 \0\02
\15t
\ 6¶
\ 1\0\0\0\0\0\08
\0\0\0vendor/symfony/console/Question/ConfirmationQuestion.phpç
\ 2\0\0\92àqZç
\ 2\0\0\ròf¶
\ 1\0\0\0\0\0\0,
\0\0\0vendor/symfony/console/Question/Question.phpË
\0\0\92àqZË
\0\0ÒqµR¶
\ 1\0\0\0\0\0\0 \0\0\0vendor/symfony/console/Shell.phpå
\ f\0\0\92àqZå
\ f\0\0\95\9axS¶
\ 1\0\0\0\0\0\0,
\0\0\0vendor/symfony/console/Style/OutputStyle.php\
\ 5\0\0\92àqZ\
\ 5\0\0wפ
\ 4¶
\ 1\0\0\0\0\0\0/
\0\0\0vendor/symfony/console/Style/StyleInterface.phpÏ
\ 3\0\0\92àqZÏ
\ 3\0\0&nÅѶ
\ 1\0\0\0\0\0\0-
\0\0\0vendor/symfony/console/Style/SymfonyStyle.php¶
\1f\0\0\92àqZ¶
\1f\0\0ª×
\10ì¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/symfony/console/Tester/ApplicationTester.phpÏ
\ 5\0\0\92àqZÏ
\ 5\0\0s
\9e9i¶
\ 1\0\0\0\0\0\0/
\0\0\0vendor/symfony/console/Tester/CommandTester.phpª
\ 6\0\0\92àqZª
\ 6\0\0µ.âr¶
\ 1\0\0\0\0\0\0(
\0\0\0vendor/symfony/debug/BufferingLogger.phpt
\ 1\0\0\92àqZt
\ 1\0\0=
\0hܶ
\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/debug/Debug.phpé
\ 2\0\0\92àqZé
\ 2\0\0Àxa?¶
\ 1\0\0\0\0\0\0)
\0\0\0vendor/symfony/debug/DebugClassLoader.php¡
\1d\0\0\92àqZ¡
\1d\0\0ó
\80v
\87¶
\ 1\0\0\0\0\0\0%
\0\0\0vendor/symfony/debug/ErrorHandler.php
\80C
\0\0\92àqZ
\80C
\0\0¥æõ¾¶
\ 1\0\0\0\0\0\09
\0\0\0vendor/symfony/debug/Exception/ClassNotFoundException.php
\84\ 1\0\0\92àqZ
\84\ 1\0\0n
\90¡
\85¶
\ 1\0\0\0\0\0\08
\0\0\0vendor/symfony/debug/Exception/ContextErrorException.php
\98\ 1\0\0\92àqZ
\98\ 1\0\0-
57 d2¶
\ 1\0\0\0\0\0\01
\0\0\0vendor/symfony/debug/Exception/DummyException.php
\ 2\ 1\0\0\92àqZ
\ 2\ 1\0\0-"ûd¶
\ 1\0\0\0\0\0\06
\0\0\0vendor/symfony/debug/Exception/FatalErrorException.phpï
\ 6\0\0\92àqZï
\ 6\0\0æ
\ffz¶
\ 1\0\0\0\0\0\06
\0\0\0vendor/symfony/debug/Exception/FatalThrowableError.phpD
\ 2\0\0\92àqZD
\ 2\0\0¡
\fÂí¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/symfony/debug/Exception/FlattenException.php²
\16\0\0\92àqZ²
\16\0\0HòÑ
\ f¶
\ 1\0\0\0\0\0\07
\0\0\0vendor/symfony/debug/Exception/OutOfMemoryException.php~
\0\0\0\92àqZ~
\0\0\0ë¨oâ¶
\ 1\0\0\0\0\0\0=
\0\0\0vendor/symfony/debug/Exception/UndefinedFunctionException.php
\88\ 1\0\0\92àqZ
\88\ 1\0\0¢G
\82n¶
\ 1\0\0\0\0\0\0;
\0\0\0vendor/symfony/debug/Exception/UndefinedMethodException.php
\86\ 1\0\0\92àqZ
\86\ 1\0\0¨LÚ:¶
\ 1\0\0\0\0\0\0)
\0\0\0vendor/symfony/debug/ExceptionHandler.php
\193
\0\0\92àqZ
\193
\0\0iè
\8a4¶
\ 1\0\0\0\0\0\0I
\0\0\0vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php7
\12\0\0\92àqZ7
\12\0\0Ñj/=¶
\ 1\0\0\0\0\0\0E
\0\0\0vendor/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php
\ 3\ 1\0\0\92àqZ
\ 3\ 1\0\0ĹBV¶
\ 1\0\0\0\0\0\0M
\0\0\0vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.phpu
\b\0\0\92àqZu
\b\0\0éj
\ 3\19¶
\ 1\0\0\0\0\0\0K
\0\0\0vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.phpN
\ 5\0\0\92àqZN
\ 5\0\0Ço-ç¶
\ 1\0\0\0\0\0\0\1c\0\0\0vendor/symfony/debug/LICENSE)
\ 4\0\0\92àqZ)
\ 4\0\0·)E`¶
\ 1\0\0\0\0\0\0:
\0\0\0vendor/symfony/filesystem/Exception/ExceptionInterface.phpi
\0\0\0\92àqZi
\0\0\0$ ÿ
\9b¶
\ 1\0\0\0\0\0\0=
\0\0\0vendor/symfony/filesystem/Exception/FileNotFoundException.php¼
\ 1\0\0\92àqZ¼
\ 1\0\0pí\¶¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/symfony/filesystem/Exception/IOException.php
\87\ 1\0\0\92àqZ
\87\ 1\0\0\80ü#Ѷ
\ 1\0\0\0\0\0\0<
\0\0\0vendor/symfony/filesystem/Exception/IOExceptionInterface.php¦
\0\0\0\92àqZ¦
\0\0\0jÙwM¶
\ 1\0\0\0\0\0\0(
\0\0\0vendor/symfony/filesystem/Filesystem.phpö2
\0\0\92àqZö2
\0\0ëP
\81ò¶
\ 1\0\0\0\0\0\0!
\0\0\0vendor/symfony/filesystem/LICENSE)
\ 4\0\0\92àqZ)
\ 4\0\0·)E`¶
\ 1\0\0\0\0\0\0)
\0\0\0vendor/symfony/filesystem/LockHandler.php¢
\ 5\0\0\92àqZ¢
\ 5\0\0D
\91;i¶
\ 1\0\0\0\0\0\01
\0\0\0vendor/symfony/finder/Adapter/AbstractAdapter.php\
\v\0\0\92àqZ\
\v\0\0Æ
\93É
\80¶
\ 1\0\0\0\0\0\05
\0\0\0vendor/symfony/finder/Adapter/AbstractFindAdapter.php
\8b\19\0\0\92àqZ
\8b\19\0\0]vk1¶
\ 1\0\0\0\0\0\02
\0\0\0vendor/symfony/finder/Adapter/AdapterInterface.php
\9b\ 3\0\0\92àqZ
\9b\ 3\0\0M
\aþ
\e¶
\ 1\0\0\0\0\0\00
\0\0\0vendor/symfony/finder/Adapter/BsdFindAdapter.php2
\a\0\0\92àqZ2
\a\0\0Q/ÇC¶
\ 1\0\0\0\0\0\00
\0\0\0vendor/symfony/finder/Adapter/GnuFindAdapter.php
\15\a\0\0\92àqZ
\15\a\0\0(
\fí?¶
\ 1\0\0\0\0\0\0,
\0\0\0vendor/symfony/finder/Adapter/PhpAdapter.phpô
\a\0\0\92àqZô
\a\0\0\16\1d:?¶
\ 1\0\0\0\0\0\0/
\0\0\0vendor/symfony/finder/Comparator/Comparator.php
\8c\ 3\0\0\92àqZ
\8c\ 3\0\0\16wþT¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/symfony/finder/Comparator/DateComparator.php#
\ 3\0\0\92àqZ#
\ 3\0\0\16°
\1fζ
\ 1\0\0\0\0\0\05
\0\0\0vendor/symfony/finder/Comparator/NumberComparator.php|
\ 3\0\0\92àqZ|
\ 3\0\0ITÇͶ
\ 1\0\0\0\0\0\09
\0\0\0vendor/symfony/finder/Exception/AccessDeniedException.php
\84\0\0\0\92àqZ
\84\0\0\0½¾s
\9c¶
\ 1\0\0\0\0\0\0;
\0\0\0vendor/symfony/finder/Exception/AdapterFailureException.php¬
\ 2\0\0\92àqZ¬
\ 2\0\0Xå
\91\9e¶
\ 1\0\0\0\0\0\06
\0\0\0vendor/symfony/finder/Exception/ExceptionInterface.php
\84\0\0\0\92àqZ
\84\0\0\0\1cGz-¶
\ 1\0\0\0\0\0\0A
\0\0\0vendor/symfony/finder/Exception/OperationNotPermitedException.php)
\ 1\0\0\92àqZ)
\ 1\0\0ìcj=¶
\ 1\0\0\0\0\0\0@
\0\0\0vendor/symfony/finder/Exception/ShellCommandFailureException.phpº
\ 2\0\0\92àqZº
\ 2\0\0\18Êø
\1c¶
\ 1\0\0\0\0\0\0/
\0\0\0vendor/symfony/finder/Expression/Expression.php
\a\ 6\0\0\92àqZ
\a\ 6\0\0µoÔ
\ 6¶
\ 1\0\0\0\0\0\0)
\0\0\0vendor/symfony/finder/Expression/Glob.phpf
\ 4\0\0\92àqZf
\ 4\0\0lïÜP¶
\ 1\0\0\0\0\0\0*
\0\0\0vendor/symfony/finder/Expression/Regex.php
\ 4\ f\0\0\92àqZ
\ 4\ f\0\0Qr
\93¡¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/symfony/finder/Expression/ValueInterface.phpÍ
\ 1\0\0\92àqZÍ
\ 1\0\0²~øb¶
\ 1\0\0\0\0\0\0 \0\0\0vendor/symfony/finder/Finder.php¹-
\0\0\92àqZ¹-
\0\0Q
\1aÿ2¶
\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/finder/Glob.phpK
\ 5\0\0\92àqZK
\ 5\0\0já±n¶
\ 1\0\0\0\0\0\07
\0\0\0vendor/symfony/finder/Iterator/CustomFilterIterator.php[
\ 2\0\0\92àqZ[
\ 2\0\0
\ 4åW¶
\ 1\0\0\0\0\0\0:
\0\0\0vendor/symfony/finder/Iterator/DateRangeFilterIterator.phpx
\ 2\0\0\92àqZx
\ 2\0\0\ fô
\ 3P¶
\ 1\0\0\0\0\0\0;
\0\0\0vendor/symfony/finder/Iterator/DepthRangeFilterIterator.phpî
\ 1\0\0\92àqZî
\ 1\0\0üÍ
\9dq¶
\ 1\0\0\0\0\0\0A
\0\0\0vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.phpí
\ 5\0\0\92àqZí
\ 5\0\0n
\ 5õH¶
\ 1\0\0\0\0\0\04
\0\0\0vendor/symfony/finder/Iterator/FilePathsIterator.php
\ 6\0\0\92àqZ
\ 6\0\0fQCe¶
\ 1\0\0\0\0\0\09
\0\0\0vendor/symfony/finder/Iterator/FileTypeFilterIterator.phpZ
\ 2\0\0\92àqZZ
\ 2\0\0(
\1a&ø¶
\ 1\0\0\0\0\0\0<
\0\0\0vendor/symfony/finder/Iterator/FilecontentFilterIterator.php5
\ 2\0\0\92àqZ5
\ 2\0\0\9aí
\1f\14¶
\ 1\0\0\0\0\0\09
\0\0\0vendor/symfony/finder/Iterator/FilenameFilterIterator.phpr
\ 1\0\0\92àqZr
\ 1\0\0t
\b\1au¶
\ 1\0\0\0\0\0\01
\0\0\0vendor/symfony/finder/Iterator/FilterIterator.phpÃ
\ 2\0\0\92àqZÃ
\ 2\0\0\9a+µÞ¶
\ 1\0\0\0\0\0\0=
\0\0\0vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php-
\ 5\0\0\92àqZ-
\ 5\0\0ºÎÒ_¶
\ 1\0\0\0\0\0\05
\0\0\0vendor/symfony/finder/Iterator/PathFilterIterator.phpÏ
\ 1\0\0\92àqZÏ
\ 1\0\0º
\1cªÇ¶
\ 1\0\0\0\0\0\0=
\0\0\0vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
\13 \0\0\92àqZ
\13 \0\0 \12ÿ¶
\ 1\0\0\0\0\0\0:
\0\0\0vendor/symfony/finder/Iterator/SizeRangeFilterIterator.phpe
\ 2\0\0\92àqZe
\ 2\0\0\9f\92áé¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/symfony/finder/Iterator/SortableIterator.php*
\ 6\0\0\92àqZ*
\ 6\0\0\80õ´^¶
\ 1\0\0\0\0\0\0\1d\0\0\0vendor/symfony/finder/LICENSE)
\ 4\0\0\92àqZ)
\ 4\0\0·)E`¶
\ 1\0\0\0\0\0\0'
\0\0\0vendor/symfony/finder/Shell/Command.php?
\v\0\0\92àqZ?
\v\0\0\9aPw
\89¶
\ 1\0\0\0\0\0\0%
\0\0\0vendor/symfony/finder/Shell/Shell.phpp
\ 4\0\0\92àqZp
\ 4\0\0\18Ó}g¶
\ 1\0\0\0\0\0\0%
\0\0\0vendor/symfony/finder/SplFileInfo.phpý
\ 2\0\0\92àqZý
\ 2\0\0\13`ØÓ¶
\ 1\0\0\0\0\0\0(
\0\0\0vendor/symfony/polyfill-mbstring/LICENSE)
\ 4\0\0\92àqZ)
\ 4\0\0î*L
\14¶
\ 1\0\0\0\0\0\0-
\0\0\0vendor/symfony/polyfill-mbstring/Mbstring.phpÄ6
\0\0\92àqZÄ6
\0\0U.
\17ݶ
\ 1\0\0\0\0\0\0@
\0\0\0vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php2A
\0\0\92àqZ2A
\0\0½
\11=¨¶
\ 1\0\0\0\0\0\0@
\0\0\0vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php¡A
\0\0\92àqZ¡A
\0\0\ eÚ Í¶
\ 1\0\0\0\0\0\0.
\0\0\0vendor/symfony/polyfill-mbstring/bootstrap.php±
\ f\0\0\92àqZ±
\ f\0\0|
\8a©Ò¶
\ 1\0\0\0\0\0\07
\0\0\0vendor/symfony/process/Exception/ExceptionInterface.phpf
\0\0\0\92àqZf
\0\0\0]ö>T¶
\ 1\0\0\0\0\0\0=
\0\0\0vendor/symfony/process/Exception/InvalidArgumentException.php¨
\0\0\0\92àqZ¨
\0\0\0ÐÀ+_¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/symfony/process/Exception/LogicException.php
\94\0\0\0\92àqZ
\94\0\0\0 ³ãñ¶
\ 1\0\0\0\0\0\0;
\0\0\0vendor/symfony/process/Exception/ProcessFailedException.phpx
\ 3\0\0\92àqZx
\ 3\0\0¨Ìzy¶
\ 1\0\0\0\0\0\0=
\0\0\0vendor/symfony/process/Exception/ProcessTimedOutException.php
\1f\ 4\0\0\92àqZ
\1f\ 4\0\0\7fï
\ e«¶
\ 1\0\0\0\0\0\05
\0\0\0vendor/symfony/process/Exception/RuntimeException.php
\98\0\0\0\92àqZ
\98\0\0\0¢
\eØ:¶
\ 1\0\0\0\0\0\0+
\0\0\0vendor/symfony/process/ExecutableFinder.php
\99\ 4\0\0\92àqZ
\99\ 4\0\0|O¿é¶
\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/process/LICENSE)
\ 4\0\0\92àqZ)
\ 4\0\0·)E`¶
\ 1\0\0\0\0\0\0.
\0\0\0vendor/symfony/process/PhpExecutableFinder.phpg
\ 4\0\0\92àqZg
\ 4\0\0\8dçµ
\ 6¶
\ 1\0\0\0\0\0\0%
\0\0\0vendor/symfony/process/PhpProcess.phpú
\ 3\0\0\92àqZú
\ 3\0\0¯
\93Õ
\81¶
\ 1\0\0\0\0\0\0.
\0\0\0vendor/symfony/process/Pipes/AbstractPipes.php]
\a\0\0\92àqZ]
\a\0\0g
\18\16`¶
\ 1\0\0\0\0\0\0/
\0\0\0vendor/symfony/process/Pipes/PipesInterface.phpD
\ 1\0\0\92àqZD
\ 1\0\0vØî¡¶
\ 1\0\0\0\0\0\0*
\0\0\0vendor/symfony/process/Pipes/UnixPipes.phpâ
\a\0\0\92àqZâ
\a\0\0\7fß
\10Ŷ
\ 1\0\0\0\0\0\0-
\0\0\0vendor/symfony/process/Pipes/WindowsPipes.php
\89\v\0\0\92àqZ
\89\v\0\0\bÀ"¢¶
\ 1\0\0\0\0\0\0"
\0\0\0vendor/symfony/process/Process.php£R
\0\0\92àqZ£R
\0\0\8b\84&E¶
\ 1\0\0\0\0\0\0)
\0\0\0vendor/symfony/process/ProcessBuilder.phpß
59 \0\0^
\83\178¶
\ 1\0\0\0\0\0\0'
\0\0\0vendor/symfony/process/ProcessUtils.phpK
\ 6\0\0\92àqZK
\ 6\0\0µ½~ò¶
\ 1\0\0\0\0\0\0\1c\0\0\0vendor/seld/jsonlint/LICENSE"
\ 4\0\0\92àqZ"
\ 4\0\0a
\83sy¶
\ 1\0\0\0\0\0\0@
\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/DuplicateKeyException.php*
\ 1\0\0\92àqZ*
\ 1\0\0\19\95pñ¶
\ 1\0\0\0\0\0\05
\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php/2
\0\0\92àqZ/2
\0\0ß
\98ö¶
\ 1\0\0\0\0\0\00
\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php
\ 6\ f\0\0\92àqZ
\ 6\ f\0\0%ÿ3N¶
\ 1\0\0\0\0\0\0;
\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/ParsingException.php
\1e\ 1\0\0\92àqZ
\1e\ 1\0\0\89²
\10ñ¶
\ 1\0\0\0\0\0\04
\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/Undefined.php>
\0\0\0\92àqZ>
\0\0\0ÿq
\9f\9f¶
\ 1\0\0\0\0\0\0\1e\0\0\0vendor/seld/cli-prompt/LICENSE"
\ 4\0\0\92àqZ"
\ 4\0\0\88ñ?e¶
\ 1\0\0\0\0\0\0&
\0\0\0vendor/seld/cli-prompt/res/example.php'
\ 1\0\0\92àqZ'
\ 1\0\0I
\1c\ 5£¶
\ 1\0\0\0\0\0\0(
\0\0\0vendor/seld/cli-prompt/src/CliPrompt.phpC
\ 6\0\0\92àqZC
\ 6\0\0Ð}
\8dp¶
\ 1\0\0\0\0\0\0(
\0\0\0vendor/justinrainbow/json-schema/LICENSE
\ 4\0\0\92àqZ
\ 4\0\0ºç
\ 6©¶
\ 1\0\0\0\0\0\0.
\0\0\0vendor/justinrainbow/json-schema/demo/demo.phpñ
\ 1\0\0\92àqZñ
\ 1\0\0f
\e\12C¶
\ 1\0\0\0\0\0\0N
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php¡
\0\0\92àqZ¡
\0\0\86wÌl¶
\ 1\0\0\0\0\0\0T
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php)
\r\0\0\92àqZ)
\r\0\0#©
\14\14¶
\ 1\0\0\0\0\0\0J
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php
\f\ e\0\0\92àqZ
\f\ e\0\0Òé`
\13¶
\ 1\0\0\0\0\0\0S
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php¼
\ 1\0\0\92àqZ¼
\ 1\0\0ÿ Q
\9c¶
\ 1\0\0\0\0\0\0N
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php]
\ 3\0\0\92àqZ]
\ 3\0\0V
\8eU<¶
\ 1\0\0\0\0\0\0G
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php;
\r\0\0\92àqZ;
\r\0\0!/)
\18¶
\ 1\0\0\0\0\0\0P
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php
\85\14\0\0\92àqZ
\85\14\0\0\93T
\9cÚ¶
\ 1\0\0\0\0\0\0P
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php
\9a
61 \0\0\15\1ez&¶
\ 1\0\0\0\0\0\0P
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.phpÃ
\11\0\0\92àqZÃ
\11\0\0©Å¼x¶
\ 1\0\0\0\0\0\0P
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.phpN
\0\0\92àqZN
\0\0QÓmV¶
\ 1\0\0\0\0\0\0P
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php
\7f\ 4\0\0\92àqZ
\7f\ 4\0\0¥w
\9a\87¶
\ 1\0\0\0\0\0\0X
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.phpa
\ 4\0\0\92àqZa
\ 4\0\0\v qö
\ 1\0\0\0\0\0\0Y
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.phpp
\ 2\0\0\92àqZp
\ 2\0\0\12r
\1fë¶
\ 1\0\0\0\0\0\0\
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php
\89\ 1\0\0\92àqZ
\89\ 1\0\0\93µ+j¶
\ 1\0\0\0\0\0\0N
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php&
\ f\0\0\92àqZ&
\ f\0\04
\98©T¶
\ 1\0\0\0\0\0\0S
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.phpr!
\0\0\92àqZr!
\0\0\89Ö
\91\b¶
\ 1\0\0\0\0\0\0F
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.phpè
\ 6\0\0\92àqZè
\ 6\0\0\ 6{N
\96¶
\ 1\0\0\0\0\0\0P
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.phpI
\0\0\0\92àqZI
\0\0\0%|
\19°¶
\ 1\0\0\0\0\0\0V
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php
\95\0\0\0\92àqZ
\95\0\0\0\8bàG
\ 5¶
\ 1\0\0\0\0\0\0T
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.phpl
\0\0\0\92àqZl
\0\0\0A!L×¶
\ 1\0\0\0\0\0\0T
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.phpl
\0\0\0\92àqZl
\0\0\0è2÷þ¶
\ 1\0\0\0\0\0\0]
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.phpu
\0\0\0\92àqZu
\0\0\0=hç
\a¶
\ 1\0\0\0\0\0\0W
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.phpw
\0\0\0\92àqZw
\0\0\0N-ò[¶
\ 1\0\0\0\0\0\0S
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.phpÞ
\ 2\0\0\92àqZÞ
\ 2\0\0\¸
\r
62 ¶
\ 1\0\0\0\0\0\0W
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.phpo
\0\0\0\92àqZo
\0\0\0píÛù¶
\ 1\0\0\0\0\0\0N
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php
\85\0\0\0\92àqZ
\85\0\0\0\b%
\85\97¶
\ 1\0\0\0\0\0\0^
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php
\80\0\0\0\92àqZ
\80\0\0\0u-#1¶
\ 1\0\0\0\0\0\0R
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.phpj
\0\0\0\92àqZj
\0\0\0å
\1a>
\8f¶
\ 1\0\0\0\0\0\0Q
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.phpf
\0\0\0\92àqZf
\0\0\0¬¤
\84þ¶
\ 1\0\0\0\0\0\0K
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.phpþ
\ 5\0\0\92àqZþ
\ 5\0\0M
\8f\84õ¶
\ 1\0\0\0\0\0\0;
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php
\ 2\0\0\92àqZ
\ 2\0\0f4÷³¶
\ 1\0\0\0\0\0\0A
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php
\9c\r\0\0\92àqZ
\9c\r\0\0\ 2åfO¶
\ 1\0\0\0\0\0\0J
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php
\ 1\ 1\0\0\92àqZ
\ 1\ 1\0\0o
\8a+}¶
\ 1\0\0\0\0\0\0T
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.phpá
\0\0\0\92àqZá
\0\0\0[þA
\81¶
\ 1\0\0\0\0\0\0G
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php¥
\ 4\0\0\92àqZ¥
\ 4\0\0Ô§Lb¶
\ 1\0\0\0\0\0\0R
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php%
\ 5\0\0\92àqZ%
\ 5\0\05"
\10 ¶
\ 1\0\0\0\0\0\0R
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php,
\ 2\0\0\92àqZ,
\ 2\0\01
\955þ¶
\ 1\0\0\0\0\0\0X
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php®
\0\0\0\92àqZ®
\0\0\0ÿ
\8bÁå¶
\ 1\0\0\0\0\0\0C
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php
\ 5\v\0\0\92àqZ
\ 5\v\0\0£
\9f)à¶
\ 1\0\0\0\0\0\0D
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php&
\13\0\0\92àqZ&
\13\0\0¼î
\82¢¶
\ 1\0\0\0\0\0\0H
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php
\83\0\0\0\92àqZ
\83\0\0\0\12J
\80\1f¶
\ 1\0\0\0\0\0\0I
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php
\85\0\0\0\92àqZ
\85\0\0\0íæ
\ee¶
\ 1\0\0\0\0\0\0=
\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Validator.phpÇ
\ 5\0\0\92àqZÇ
\ 5\0\0ù
\85oÞ¶
\ 1\0\0\0\0\0\0%
\0\0\0vendor/composer/spdx-licenses/LICENSE
\1c\ 4\0\0\92àqZ
\1c\ 4\0\0\ 6Bhí¶
\ 1\0\0\0\0\0\02
\0\0\0vendor/composer/spdx-licenses/src/SpdxLicenses.phpH
\14\0\0\92àqZH
\14\0\0Í
\89T
\ 4¶
\ 1\0\0\0\0\0\0\1e\0\0\0vendor/composer/semver/LICENSE
\1c\ 4\0\0\92àqZ
\1c\ 4\0\0\ 6Bhí¶
\ 1\0\0\0\0\0\0)
\0\0\0vendor/composer/semver/src/Comparator.php
\ 2\ 4\0\0\92àqZ
\ 2\ 4\0\0wl
\83ï¶
\ 1\0\0\0\0\0\0<
\0\0\0vendor/composer/semver/src/Constraint/AbstractConstraint.php×
\ 2\0\0\92àqZ×
\ 2\0\0õî>
\8e¶
\ 1\0\0\0\0\0\04
\0\0\0vendor/composer/semver/src/Constraint/Constraint.phpª
\f\0\0\92àqZª
\f\0\0ÇO7²¶
\ 1\0\0\0\0\0\0=
\0\0\0vendor/composer/semver/src/Constraint/ConstraintInterface.phpß
\0\0\0\92àqZß
\0\0\00C,
\87¶
\ 1\0\0\0\0\0\09
\0\0\0vendor/composer/semver/src/Constraint/EmptyConstraint.phpé
\ 1\0\0\92àqZé
\ 1\0\0!-Ø
\99¶
\ 1\0\0\0\0\0\09
\0\0\0vendor/composer/semver/src/Constraint/MultiConstraint.php1
\ 5\0\0\92àqZ1
\ 5\0\0í xU¶
\ 1\0\0\0\0\0\0%
\0\0\0vendor/composer/semver/src/Semver.phpv
\ 6\0\0\92àqZv
\ 6\0\0\8b×È
\9b¶
\ 1\0\0\0\0\0\0,
\0\0\0vendor/composer/semver/src/VersionParser.php¿*
\0\0\92àqZ¿*
\0\0\13)mƶ
\ 1\0\0\0\0\0\0!
\0\0\0vendor/composer/ca-bundle/LICENSE
\1c\ 4\0\0\92àqZ
\1c\ 4\0\0*!^`¶
\ 1\0\0\0\0\0\0*
\0\0\0vendor/composer/ca-bundle/src/CaBundle.php
\15\1d\0\0\92àqZ
\15\1d\0\0Ê
\v~Ķ
\ 1\0\0\0\0\0\0\16\0\0\0vendor/psr/log/LICENSE=
\ 4\0\0\92àqZ=
\ 4\0\0p±
\8eO¶
\ 1\0\0\0\0\0\0)
\0\0\0vendor/psr/log/Psr/Log/AbstractLogger.php;
\ 4\0\0\92àqZ;
\ 4\0\0ñ>3[¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/psr/log/Psr/Log/InvalidArgumentException.php`
\0\0\0\92àqZ`
\0\0\0 \88X1¶
\ 1\0\0\0\0\0\0#
\0\0\0vendor/psr/log/Psr/Log/LogLevel.phpû
\0\0\0\92àqZû
\0\0\0jðñ8¶
\ 1\0\0\0\0\0\0/
\0\0\0vendor/psr/log/Psr/Log/LoggerAwareInterface.php|
\0\0\0\92àqZ|
\0\0\0$
\13£
\88¶
\ 1\0\0\0\0\0\0+
\0\0\0vendor/psr/log/Psr/Log/LoggerAwareTrait.php§
\0\0\0\92àqZ§
\0\0\0T½úB¶
\ 1\0\0\0\0\0\0*
\0\0\0vendor/psr/log/Psr/Log/LoggerInterface.phpÆ
\ 2\0\0\92àqZÆ
\ 2\0\0»
\12sg¶
\ 1\0\0\0\0\0\0&
\0\0\0vendor/psr/log/Psr/Log/LoggerTrait.phpi
\ 4\0\0\92àqZi
\ 4\0\035§Þ¶
\ 1\0\0\0\0\0\0%
\0\0\0vendor/psr/log/Psr/Log/NullLogger.php
\9e\0\0\0\92àqZ
\9e\0\0\0Ç
\ 2Ã
\1f¶
\ 1\0\0\0\0\0\03
\0\0\0vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.phpü
\f\0\0\92àqZü
\f\0\0iq0ض
\ 1\0\0\0\0\0\0\13\0\0\0vendor/autoload.php
\82\0\0\0\92àqZ
\82\0\0\0£û}ä¶
\ 1\0\0\0\0\0\0'
\0\0\0vendor/composer/autoload_namespaces.phpd
\0\0\0\92àqZd
\0\0\0Z¡¦H¶
\ 1\0\0\0\0\0\0!
\0\0\0vendor/composer/autoload_psr4.php
\98\ 4\0\0\92àqZ
\98\ 4\0\0\9e\1c{¢¶
\ 1\0\0\0\0\0\0%
\0\0\0vendor/composer/autoload_classmap.phpd
\0\0\0\92àqZd
\0\0\0Z¡¦H¶
\ 1\0\0\0\0\0\0"
\0\0\0vendor/composer/autoload_files.phpÃ
\0\0\0\92àqZÃ
\0\0\0ÒÂür¶
\ 1\0\0\0\0\0\0!
\0\0\0vendor/composer/autoload_real.phpI
\a\0\0\92àqZI
\a\0\0çÝ
\18P¶
\ 1\0\0\0\0\0\0#
\0\0\0vendor/composer/autoload_static.php¬
\0\0\92àqZ¬
\0\0bU
\93è¶
\ 1\0\0\0\0\0\0\1f\0\0\0vendor/composer/ClassLoader.php
\81\18\0\0\92àqZ
\81\18\0\0\82Aãd¶
\ 1\0\0\0\0\0\0(
\0\0\0vendor/composer/ca-bundle/res/cacert.pem
\1d\9a\ 3\0\92àqZ
\1d\9a\ 3\0\1aÛ¾§¶
\ 1\0\0\0\0\0\0\f\0\0\0bin/composer
\ 6\0\0\92àqZ
\ 6\0\0Ð
\7f\9e=¶
\ 1\0\0\0\0\0\0\a\0\0\0LICENSE.
\ 4\0\0\92àqZ.
\ 4\0\0 Õ
\b\ 3¶
\ 1\0\0\0\0\0\0<?php
74 namespace Composer\Autoload;
77 use Composer\EventDispatcher\EventDispatcher;
78 use Composer\Installer\InstallationManager;
79 use Composer\IO\IOInterface;
80 use Composer\Package\AliasPackage;
81 use Composer\Package\PackageInterface;
82 use Composer\Repository\InstalledRepositoryInterface;
83 use Composer\Util\Filesystem;
84 use Composer\Script\ScriptEvents;
90 class AutoloadGenerator
95 private $eventDispatcher;
105 private $devMode = false;
110 private $classMapAuthoritative = false;
115 private $apcu = false;
120 private $runScripts = false;
122 public function __construct(EventDispatcher $eventDispatcher, IOInterface $io = null)
124 $this->eventDispatcher = $eventDispatcher;
128 public function setDevMode($devMode = true)
130 $this->devMode = (bool) $devMode;
139 public function setClassMapAuthoritative($classMapAuthoritative)
141 $this->classMapAuthoritative = (bool) $classMapAuthoritative;
149 public function setApcu($apcu)
151 $this->apcu = (bool) $apcu;
159 public function setRunScripts($runScripts = true)
161 $this->runScripts = (bool) $runScripts;
164 public function dump(Config $config, InstalledRepositoryInterface $localRepo, PackageInterface $mainPackage, InstallationManager $installationManager, $targetDir, $scanPsr0Packages = false, $suffix = '')
166 if ($this->classMapAuthoritative) {
168 $scanPsr0Packages = true;
170 if ($this->runScripts) {
171 $this->eventDispatcher->dispatchScript(ScriptEvents::PRE_AUTOLOAD_DUMP, $this->devMode, array(), array(
172 'optimize' => (bool) $scanPsr0Packages,
176 $filesystem = new Filesystem();
177 $filesystem->ensureDirectoryExists($config->get('vendor-dir'));
181 $basePath = $filesystem->normalizePath(realpath(realpath(getcwd())));
182 $vendorPath = $filesystem->normalizePath(realpath(realpath($config->get('vendor-dir'))));
183 $useGlobalIncludePath = (bool) $config->get('use-include-path');
184 $prependAutoloader = $config->get('prepend-autoloader') === false ? 'false' : 'true';
185 $targetDir = $vendorPath.'/'.$targetDir;
186 $filesystem->ensureDirectoryExists($targetDir);
188 $vendorPathCode = $filesystem->findShortestPathCode(realpath($targetDir), $vendorPath, true);
189 $vendorPathCode52 = str_replace('__DIR__', 'dirname(__FILE__)', $vendorPathCode);
190 $vendorPathToTargetDirCode = $filesystem->findShortestPathCode($vendorPath, realpath($targetDir), true);
192 $appBaseDirCode = $filesystem->findShortestPathCode($vendorPath, $basePath, true);
193 $appBaseDirCode = str_replace('__DIR__', '$vendorDir', $appBaseDirCode);
195 $namespacesFile = <<<EOF
198 // autoload_namespaces.php @generated by Composer
200 \$vendorDir = $vendorPathCode52;
201 \$baseDir = $appBaseDirCode;
210 // autoload_psr4.php @generated by Composer
212 \$vendorDir = $vendorPathCode52;
213 \$baseDir = $appBaseDirCode;
220 $packageMap = $this->buildPackageMap($installationManager, $mainPackage, $localRepo->getCanonicalPackages());
221 $autoloads = $this->parseAutoloads($packageMap, $mainPackage);
224 foreach ($autoloads['psr-0'] as $namespace => $paths) {
225 $exportedPaths = array();
226 foreach ($paths as $path) {
227 $exportedPaths[] = $this->getPathCode($filesystem, $basePath, $vendorPath, $path);
229 $exportedPrefix = var_export($namespace, true);
230 $namespacesFile .= " $exportedPrefix => ";
231 $namespacesFile .= "array(".implode(', ', $exportedPaths)."),\n";
233 $namespacesFile .= ");\n";
236 foreach ($autoloads['psr-4'] as $namespace => $paths) {
237 $exportedPaths = array();
238 foreach ($paths as $path) {
239 $exportedPaths[] = $this->getPathCode($filesystem, $basePath, $vendorPath, $path);
241 $exportedPrefix = var_export($namespace, true);
242 $psr4File .= " $exportedPrefix => ";
243 $psr4File .= "array(".implode(', ', $exportedPaths)."),\n";
247 $classmapFile = <<<EOF
250 // autoload_classmap.php @generated by Composer
252 \$vendorDir = $vendorPathCode52;
253 \$baseDir = $appBaseDirCode;
260 $targetDirLoader = null;
261 $mainAutoload = $mainPackage->getAutoload();
262 if ($mainPackage->getTargetDir() && !empty($mainAutoload['psr-0'])) {
263 $levels = substr_count($filesystem->normalizePath($mainPackage->getTargetDir()), '/') + 1;
264 $prefixes = implode(', ', array_map(function ($prefix) {
265 return var_export($prefix, true);
266 }, array_keys($mainAutoload['psr-0'])));
267 $baseDirFromTargetDirCode = $filesystem->findShortestPathCode($targetDir, $basePath, true);
269 $targetDirLoader = <<<EOF
271 public static function autoload(\$class)
273 \$dir = $baseDirFromTargetDirCode . '/';
274 \$prefixes = array($prefixes);
275 foreach (\$prefixes as \$prefix) {
276 if (0 !== strpos(\$class, \$prefix)) {
279 \$path = \$dir . implode('/', array_slice(explode('\\\\', \$class), $levels)).'.php';
280 if (!\$path = stream_resolve_include_path(\$path)) {
293 if (!empty($autoloads['exclude-from-classmap'])) {
294 $blacklist = '{(' . implode('|', $autoloads['exclude-from-classmap']) . ')}';
299 if ($scanPsr0Packages) {
300 $namespacesToScan = array();
303 foreach (array('psr-0', 'psr-4') as $psrType) {
304 foreach ($autoloads[$psrType] as $namespace => $paths) {
305 $namespacesToScan[$namespace][] = array('paths' => $paths, 'type' => $psrType);
309 krsort($namespacesToScan);
311 foreach ($namespacesToScan as $namespace => $groups) {
312 foreach ($groups as $group) {
313 foreach ($group['paths'] as $dir) {
314 $dir = $filesystem->normalizePath($filesystem->isAbsolutePath($dir) ? $dir : $basePath.'/'.$dir);
319 $namespaceFilter = $namespace === '' ? null : $namespace;
320 $classMap = $this->addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist, $namespaceFilter, $classMap);
326 foreach ($autoloads['classmap'] as $dir) {
327 $classMap = $this->addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist, null, $classMap);
331 foreach ($classMap as $class => $code) {
332 $classmapFile .= ' '.var_export($class, true).' => '.$code;
334 $classmapFile .= ");\n";
337 if (!$config->get('autoloader-suffix') && is_readable($vendorPath.'/autoload.php')) {
338 $content = file_get_contents($vendorPath.'/autoload.php');
339 if (preg_match('{ComposerAutoloaderInit([^:\s]+)::}', $content, $match)) {
345 $suffix = $config->get('autoloader-suffix') ?: md5(uniqid('', true));
349 file_put_contents($targetDir.'/autoload_namespaces.php', $namespacesFile);
350 file_put_contents($targetDir.'/autoload_psr4.php', $psr4File);
351 file_put_contents($targetDir.'/autoload_classmap.php', $classmapFile);
352 $includePathFilePath = $targetDir.'/include_paths.php';
353 if ($includePathFileContents = $this->getIncludePathsFile($packageMap, $filesystem, $basePath, $vendorPath, $vendorPathCode52, $appBaseDirCode)) {
354 file_put_contents($includePathFilePath, $includePathFileContents);
355 } elseif (file_exists($includePathFilePath)) {
356 unlink($includePathFilePath);
358 $includeFilesFilePath = $targetDir.'/autoload_files.php';
359 if ($includeFilesFileContents = $this->getIncludeFilesFile($autoloads['files'], $filesystem, $basePath, $vendorPath, $vendorPathCode52, $appBaseDirCode)) {
360 file_put_contents($includeFilesFilePath, $includeFilesFileContents);
361 } elseif (file_exists($includeFilesFilePath)) {
362 unlink($includeFilesFilePath);
364 file_put_contents($targetDir.'/autoload_static.php', $this->getStaticFile($suffix, $targetDir, $vendorPath, $basePath, $staticPhpVersion));
365 file_put_contents($vendorPath.'/autoload.php', $this->getAutoloadFile($vendorPathToTargetDirCode, $suffix));
366 file_put_contents($targetDir.'/autoload_real.php', $this->getAutoloadRealFile(true, (bool) $includePathFileContents, $targetDirLoader, (bool) $includeFilesFileContents, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath, $prependAutoloader, $staticPhpVersion));
368 $this->safeCopy(__DIR__.'/ClassLoader.php', $targetDir.'/ClassLoader.php');
369 $this->safeCopy(__DIR__.'/../../../LICENSE', $targetDir.'/LICENSE');
371 if ($this->runScripts) {
372 $this->eventDispatcher->dispatchScript(ScriptEvents::POST_AUTOLOAD_DUMP, $this->devMode, array(), array(
373 'optimize' => (bool) $scanPsr0Packages,
378 private function addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist = null, $namespaceFilter = null, array $classMap = array())
380 foreach ($this->generateClassMap($dir, $blacklist, $namespaceFilter) as $class => $path) {
381 $pathCode = $this->getPathCode($filesystem, $basePath, $vendorPath, $path).",\n";
382 if (!isset($classMap[$class])) {
383 $classMap[$class] = $pathCode;
384 } elseif ($this->io && $classMap[$class] !== $pathCode && !preg_match('{/(test|fixture|example|stub)s?/}i', strtr($classMap[$class].' '.$path, '\\', '/'))) {
385 $this->io->writeError(
386 '<warning>Warning: Ambiguous class resolution, "'.$class.'"'.
387 ' was found in both "'.str_replace(array('$vendorDir . \'', "',\n"), array($vendorPath, ''), $classMap[$class]).'" and "'.$path.'", the first will be used.</warning>'
395 private function generateClassMap($dir, $blacklist = null, $namespaceFilter = null, $showAmbiguousWarning = true)
397 return ClassMapGenerator::createMap($dir, $blacklist, $showAmbiguousWarning ? $this->io : null, $namespaceFilter);
400 public function buildPackageMap(InstallationManager $installationManager, PackageInterface $mainPackage, array $packages)
403 $packageMap = array(array($mainPackage, ''));
405 foreach ($packages as $package) {
406 if ($package instanceof AliasPackage) {
409 $this->validatePackage($package);
411 $packageMap[] = array(
413 $installationManager->getInstallPath($package),
425 protected function validatePackage(PackageInterface $package)
427 $autoload = $package->getAutoload();
428 if (!empty($autoload['psr-4']) && null !== $package->getTargetDir()) {
429 $name = $package->getName();
430 $package->getTargetDir();
431 throw new \InvalidArgumentException("PSR-4 autoloading is incompatible with the target-dir property, remove the target-dir in package '$name'.");
433 if (!empty($autoload['psr-4'])) {
434 foreach ($autoload['psr-4'] as $namespace => $dirs) {
435 if ($namespace !== '' && '\\' !== substr($namespace, -1)) {
436 throw new \InvalidArgumentException("psr-4 namespaces must end with a namespace separator, '$namespace' does not, use '$namespace\\'.");
449 public function parseAutoloads(array $packageMap, PackageInterface $mainPackage)
451 $mainPackageMap = array_shift($packageMap);
452 $sortedPackageMap = $this->sortPackageMap($packageMap);
453 $sortedPackageMap[] = $mainPackageMap;
454 array_unshift($packageMap, $mainPackageMap);
456 $psr0 = $this->parseAutoloadsType($packageMap, 'psr-0', $mainPackage);
457 $psr4 = $this->parseAutoloadsType($packageMap, 'psr-4', $mainPackage);
458 $classmap = $this->parseAutoloadsType(array_reverse($sortedPackageMap), 'classmap', $mainPackage);
459 $files = $this->parseAutoloadsType($sortedPackageMap, 'files', $mainPackage);
460 $exclude = $this->parseAutoloadsType($sortedPackageMap, 'exclude-from-classmap', $mainPackage);
468 'classmap' => $classmap,
470 'exclude-from-classmap' => $exclude,
480 public function createLoader(array $autoloads)
482 $loader = new ClassLoader();
484 if (isset($autoloads['psr-0'])) {
485 foreach ($autoloads['psr-0'] as $namespace => $path) {
486 $loader->add($namespace, $path);
490 if (isset($autoloads['psr-4'])) {
491 foreach ($autoloads['psr-4'] as $namespace => $path) {
492 $loader->addPsr4($namespace, $path);
496 if (isset($autoloads['classmap'])) {
498 if (!empty($autoloads['exclude-from-classmap'])) {
499 $blacklist = '{(' . implode('|', $autoloads['exclude-from-classmap']) . ')}';
502 foreach ($autoloads['classmap'] as $dir) {
504 $loader->addClassMap($this->generateClassMap($dir, $blacklist, null, false));
505 } catch (\RuntimeException $e) {
506 $this->io->writeError('<warning>'.$e->getMessage().'</warning>');
514 protected function getIncludePathsFile(array $packageMap, Filesystem $filesystem, $basePath, $vendorPath, $vendorPathCode, $appBaseDirCode)
516 $includePaths = array();
518 foreach ($packageMap as $item) {
519 list($package, $installPath) = $item;
521 if (null !== $package->getTargetDir() && strlen($package->getTargetDir()) > 0) {
522 $installPath = substr($installPath, 0, -strlen('/'.$package->getTargetDir()));
525 foreach ($package->getIncludePaths() as $includePath) {
526 $includePath = trim($includePath, '/');
527 $includePaths[] = empty($installPath) ? $includePath : $installPath.'/'.$includePath;
531 if (!$includePaths) {
535 $includePathsCode = '';
536 foreach ($includePaths as $path) {
537 $includePathsCode .= " " . $this->getPathCode($filesystem, $basePath, $vendorPath, $path) . ",\n";
543 // include_paths.php @generated by Composer
545 \$vendorDir = $vendorPathCode;
546 \$baseDir = $appBaseDirCode;
554 protected function getIncludeFilesFile(array $files, Filesystem $filesystem, $basePath, $vendorPath, $vendorPathCode, $appBaseDirCode)
557 foreach ($files as $fileIdentifier => $functionFile) {
558 $filesCode .= ' ' . var_export($fileIdentifier, true) . ' => '
559 . $this->getPathCode($filesystem, $basePath, $vendorPath, $functionFile) . ",\n";
569 // autoload_files.php @generated by Composer
571 \$vendorDir = $vendorPathCode;
572 \$baseDir = $appBaseDirCode;
580 protected function getPathCode(Filesystem $filesystem, $basePath, $vendorPath, $path)
582 if (!$filesystem->isAbsolutePath($path)) {
583 $path = $basePath . '/' . $path;
585 $path = $filesystem->normalizePath($path);
588 if (strpos($path.'/', $vendorPath.'/') === 0) {
589 $path = substr($path, strlen($vendorPath));
590 $baseDir = '$vendorDir';
592 if ($path !== false) {
596 $path = $filesystem->normalizePath($filesystem->findShortestPath($basePath, $path, true));
597 if (!$filesystem->isAbsolutePath($path)) {
598 $baseDir = '$baseDir . ';
603 if (preg_match('/\.phar.+$/', $path)) {
604 $baseDir = "'phar://' . " . $baseDir;
607 return $baseDir . (($path !== false) ? var_export($path, true) : "");
610 protected function getAutoloadFile($vendorPathToTargetDirCode, $suffix)
612 $lastChar = $vendorPathToTargetDirCode[strlen($vendorPathToTargetDirCode) - 1];
613 if ("'" === $lastChar || '"' === $lastChar) {
614 $vendorPathToTargetDirCode = substr($vendorPathToTargetDirCode, 0, -1).'/autoload_real.php'.$lastChar;
616 $vendorPathToTargetDirCode .= " . '/autoload_real.php'";
622 // autoload.php @generated by Composer
624 require_once $vendorPathToTargetDirCode;
626 return ComposerAutoloaderInit$suffix::getLoader();
631 protected function getAutoloadRealFile($useClassMap, $useIncludePath, $targetDirLoader, $useIncludeFiles, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath, $prependAutoloader, $staticPhpVersion = 70000)
636 // autoload_real.php @generated by Composer
638 class ComposerAutoloaderInit$suffix
640 private static \$loader;
642 public static function loadClassLoader(\$class)
644 if ('Composer\\Autoload\\ClassLoader' === \$class) {
645 require __DIR__ . '/ClassLoader.php';
649 public static function getLoader()
651 if (null !== self::\$loader) {
652 return self::\$loader;
655 spl_autoload_register(array('ComposerAutoloaderInit$suffix', 'loadClassLoader'), true, $prependAutoloader);
656 self::\$loader = \$loader = new \\Composer\\Autoload\\ClassLoader();
657 spl_autoload_unregister(array('ComposerAutoloaderInit$suffix', 'loadClassLoader'));
662 if ($useIncludePath) {
663 $file .= <<<'INCLUDE_PATH'
664 $includePaths = require __DIR__ . '/include_paths.php';
665 $includePaths[] = get_include_path();
666 set_include_path(implode(PATH_SEPARATOR, $includePaths));
672 $file .= <<<STATIC_INIT
673 \$useStaticLoader = PHP_VERSION_ID >= $staticPhpVersion && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
674 if (\$useStaticLoader) {
675 require_once __DIR__ . '/autoload_static.php';
677 call_user_func(\Composer\Autoload\ComposerStaticInit$suffix::getInitializer(\$loader));
682 if (!$this->classMapAuthoritative) {
684 $map = require __DIR__ . '/autoload_namespaces.php';
685 foreach ($map as $namespace => $path) {
686 $loader->set($namespace, $path);
689 $map = require __DIR__ . '/autoload_psr4.php';
690 foreach ($map as $namespace => $path) {
691 $loader->setPsr4($namespace, $path);
699 $file .= <<<'CLASSMAP'
700 $classMap = require __DIR__ . '/autoload_classmap.php';
702 $loader->addClassMap($classMap);
710 if ($this->classMapAuthoritative) {
711 $file .= <<<'CLASSMAPAUTHORITATIVE'
712 $loader->setClassMapAuthoritative(true);
714 CLASSMAPAUTHORITATIVE;
718 $apcuPrefix = substr(base64_encode(md5(uniqid('', true), true)), 0, -3);
720 \$loader->setApcuPrefix('$apcuPrefix');
725 if ($useGlobalIncludePath) {
726 $file .= <<<'INCLUDEPATH'
727 $loader->setUseIncludePath(true);
732 if ($targetDirLoader) {
733 $file .= <<<REGISTER_TARGET_DIR_AUTOLOAD
734 spl_autoload_register(array('ComposerAutoloaderInit$suffix', 'autoload'), true, true);
737 REGISTER_TARGET_DIR_AUTOLOAD;
740 $file .= <<<REGISTER_LOADER
741 \$loader->register($prependAutoloader);
746 if ($useIncludeFiles) {
747 $file .= <<<INCLUDE_FILES
748 if (\$useStaticLoader) {
749 \$includeFiles = Composer\Autoload\ComposerStaticInit$suffix::\$files;
751 \$includeFiles = require __DIR__ . '/autoload_files.php';
753 foreach (\$includeFiles as \$fileIdentifier => \$file) {
754 composerRequire$suffix(\$fileIdentifier, \$file);
761 $file .= <<<METHOD_FOOTER
767 $file .= $targetDirLoader;
769 if ($useIncludeFiles) {
770 return $file . <<<FOOTER
773 function composerRequire$suffix(\$fileIdentifier, \$file)
775 if (empty(\$GLOBALS['__composer_autoload_files'][\$fileIdentifier])) {
778 \$GLOBALS['__composer_autoload_files'][\$fileIdentifier] = true;
785 return $file . <<<FOOTER
791 protected function getStaticFile($suffix, $targetDir, $vendorPath, $basePath, &$staticPhpVersion)
793 $staticPhpVersion = 50600;
798 // autoload_static.php @generated by Composer
800 namespace Composer\Autoload;
802 class ComposerStaticInit$suffix
807 $loader = new ClassLoader();
809 $map = require $targetDir . '/autoload_namespaces.php';
810 foreach ($map as $namespace => $path) {
811 $loader->set($namespace, $path);
814 $map = require $targetDir . '/autoload_psr4.php';
815 foreach ($map as $namespace => $path) {
816 $loader->setPsr4($namespace, $path);
819 $classMap = require $targetDir . '/autoload_classmap.php';
821 $loader->addClassMap($classMap);
824 $filesystem = new Filesystem();
826 $vendorPathCode = ' => ' . $filesystem->findShortestPathCode(realpath($targetDir), $vendorPath, true, true) . " . '/";
827 $appBaseDirCode = ' => ' . $filesystem->findShortestPathCode(realpath($targetDir), $basePath, true, true) . " . '/";
829 $absoluteVendorPathCode = ' => ' . substr(var_export(rtrim($vendorDir, '\\/') . '/', true), 0, -1);
830 $absoluteAppBaseDirCode = ' => ' . substr(var_export(rtrim($baseDir, '\\/') . '/', true), 0, -1);
833 $prefix = "\0Composer\Autoload\ClassLoader\0";
834 $prefixLen = strlen($prefix);
835 if (file_exists($targetDir . '/autoload_files.php')) {
836 $maps = array('files' => require $targetDir . '/autoload_files.php');
841 foreach ((array) $loader as $prop => $value) {
842 if ($value && 0 === strpos($prop, $prefix)) {
843 $maps[substr($prop, $prefixLen)] = $value;
847 foreach ($maps as $prop => $value) {
848 if (count($value) > 32767) {
851 $staticPhpVersion = 70000;
853 $value = var_export($value, true);
854 $value = str_replace($absoluteVendorPathCode, $vendorPathCode, $value);
855 $value = str_replace($absoluteAppBaseDirCode, $appBaseDirCode, $value);
856 $value = ltrim(preg_replace('/^ */m', ' $0$0', $value));
858 $file .= sprintf(" public static $%s = %s;\n\n", $prop, $value);
859 if ('files' !== $prop) {
860 $initializer .= " \$loader->$prop = ComposerStaticInit$suffix::\$$prop;\n";
864 return $file . <<<INITIALIZER
865 public static function getInitializer(ClassLoader \$loader)
867 return \Closure::bind(function () use (\$loader) {
869 }, null, ClassLoader::class);
876 protected function parseAutoloadsType(array $packageMap, $type, PackageInterface $mainPackage)
878 $autoloads = array();
880 foreach ($packageMap as $item) {
881 list($package, $installPath) = $item;
883 $autoload = $package->getAutoload();
884 if ($this->devMode && $package === $mainPackage) {
885 $autoload = array_merge_recursive($autoload, $package->getDevAutoload());
889 if (!isset($autoload[$type]) || !is_array($autoload[$type])) {
892 if (null !== $package->getTargetDir() && $package !== $mainPackage) {
893 $installPath = substr($installPath, 0, -strlen('/'.$package->getTargetDir()));
896 foreach ($autoload[$type] as $namespace => $paths) {
897 foreach ((array) $paths as $path) {
898 if (($type === 'files' || $type === 'classmap' || $type === 'exclude-from-classmap') && $package->getTargetDir() && !is_readable($installPath.'/'.$path)) {
900 if ($package === $mainPackage) {
901 $targetDir = str_replace('\\<dirsep\\>', '[\\\\/]', preg_quote(str_replace(array('/', '\\'), '<dirsep>', $package->getTargetDir())));
902 $path = ltrim(preg_replace('{^'.$targetDir.'}', '', ltrim($path, '\\/')), '\\/');
905 $path = $package->getTargetDir() . '/' . $path;
909 if ($type === 'exclude-from-classmap') {
911 $path = preg_replace('{/+}', '/', preg_quote(trim(strtr($path, '\\', '/'), '/')));
914 $path = str_replace('\\*\\*', '.+?', $path);
915 $path = str_replace('\\*', '[^/]+?', $path);
919 $path = preg_replace_callback(
920 '{^((?:(?:\\\\\\.){1,2}+/)+)}',
921 function ($matches) use (&$updir) {
922 if (isset($matches[1])) {
924 $updir = str_replace('\\.', '.', $matches[1]);
931 if (empty($installPath)) {
932 $installPath = strtr(getcwd(), '\\', '/');
935 $resolvedPath = realpath($installPath . '/' . $updir);
936 $autoloads[] = preg_quote(strtr($resolvedPath, '\\', '/')) . '/' . $path;
940 $relativePath = empty($installPath) ? (empty($path) ? '.' : $path) : $installPath.'/'.$path;
942 if ($type === 'files') {
943 $autoloads[$this->getFileIdentifier($package, $path)] = $relativePath;
945 } elseif ($type === 'classmap') {
946 $autoloads[] = $relativePath;
950 $autoloads[$namespace][] = $relativePath;
958 protected function getFileIdentifier(PackageInterface $package, $path)
960 return md5($package->getName() . ':' . $path);
971 protected function sortPackageMap(array $packageMap)
975 $usageList = array();
977 foreach ($packageMap as $item) {
978 list($package, $path) = $item;
979 $name = $package->getName();
980 $packages[$name] = $package;
981 $paths[$name] = $path;
983 foreach (array_merge($package->getRequires(), $package->getDevRequires()) as $link) {
984 $target = $link->getTarget();
985 $usageList[$target][] = $name;
989 $computing = array();
991 $computeImportance = function ($name) use (&$computeImportance, &$computing, &$computed, $usageList) {
993 if (isset($computed[$name])) {
994 return $computed[$name];
998 if (isset($computing[$name])) {
1002 $computing[$name] = true;
1005 if (isset($usageList[$name])) {
1006 foreach ($usageList[$name] as $user) {
1007 $weight -= 1 - $computeImportance($user);
1011 unset($computing[$name]);
1012 $computed[$name] = $weight;
1017 $weightList = array();
1019 foreach ($packages as $name => $package) {
1020 $weight = $computeImportance($name);
1021 $weightList[$name] = $weight;
1024 $stable_sort = function (&$array) {
1025 static $transform, $restore;
1030 $transform = function (&$v, $k) use (&$i) {
1031 $v = array($v, ++$i, $k, $v);
1034 $restore = function (&$v, $k) {
1039 array_walk($array, $transform);
1041 array_walk($array, $restore);
1044 $stable_sort($weightList);
1046 $sortedPackageMap = array();
1048 foreach (array_keys($weightList) as $name) {
1049 $sortedPackageMap[] = array($packages[$name], $paths[$name]);
1052 return $sortedPackageMap;
1061 protected function safeCopy($source, $target)
1063 $source = fopen($source, 'r');
1064 $target = fopen($target, 'w+');
1066 stream_copy_to_stream($source, $target);
1089 namespace Composer\Autoload;
1091 use Symfony\Component\Finder\Finder;
1092 use Composer\IO\IOInterface;
1093 use Composer\Util\Filesystem;
1101 class ClassMapGenerator
1109 public static function dump($dirs, $file)
1113 foreach ($dirs as $dir) {
1114 $maps = array_merge($maps, static::createMap($dir));
1117 file_put_contents($file, sprintf('<?php return %s;', var_export($maps, true)));
1131 public static function createMap($path, $blacklist = null, IOInterface $io = null, $namespace = null)
1133 if (is_string($path)) {
1134 if (is_file($path)) {
1135 $path = array(new \SplFileInfo($path));
1136 } elseif (is_dir($path)) {
1137 $path = Finder::create()->files()->followLinks()->name('/\.(php|inc|hh)$/')->in($path);
1139 throw new \RuntimeException(
1140 'Could not scan for classes inside "'.$path.
1141 '" which does not appear to be a file nor a folder'
1147 $filesystem = new Filesystem();
1148 $cwd = realpath(getcwd());
1150 foreach ($path as $file) {
1151 $filePath = $file->getPathname();
1152 if (!in_array(pathinfo($filePath, PATHINFO_EXTENSION), array('php', 'inc', 'hh'))) {
1156 if (!$filesystem->isAbsolutePath($filePath)) {
1157 $filePath = $cwd . '/' . $filePath;
1158 $filePath = $filesystem->normalizePath($filePath);
1160 $filePath = preg_replace('{[\\\\/]{2,}}', '/', $filePath);
1164 if ($blacklist && preg_match($blacklist, strtr(realpath($filePath), '\\', '/'))) {
1168 $classes = self::findClasses($filePath);
1170 foreach ($classes as $class) {
1172 if (null !== $namespace && 0 !== strpos($class, $namespace)) {
1176 if (!isset($map[$class])) {
1177 $map[$class] = $filePath;
1178 } elseif ($io && $map[$class] !== $filePath && !preg_match('{/(test|fixture|example|stub)s?/}i', strtr($map[$class].' '.$filePath, '\\', '/'))) {
1180 '<warning>Warning: Ambiguous class resolution, "'.$class.'"'.
1181 ' was found in both "'.$map[$class].'" and "'.$filePath.'", the first will be used.</warning>'
1197 private static function findClasses($path)
1199 $extraTypes = PHP_VERSION_ID < 50400 ? '' : '|trait';
1200 if (defined('HHVM_VERSION') && version_compare(HHVM_VERSION, '3.3', '>=')) {
1201 $extraTypes .= '|enum';
1206 $contents = @php_strip_whitespace($path);
1208 if (!file_exists($path)) {
1209 $message = 'File at "%s" does not exist, check your classmap definitions';
1210 } elseif (!is_readable($path)) {
1211 $message = 'File at "%s" is not readable, check its permissions';
1212 } elseif ('' === trim(file_get_contents($path))) {
1216 $message = 'File at "%s" could not be parsed as PHP, it may be binary or corrupted';
1218 $error = error_get_last();
1219 if (isset($error['message'])) {
1220 $message .= PHP_EOL . 'The following message may be helpful:' . PHP_EOL . $error['message'];
1222 throw new \RuntimeException(sprintf($message, $path));
1226 if (!preg_match('{\b(?:class|interface'.$extraTypes.')\s}i', $contents)) {
1231 $contents = preg_replace('{<<<\s*(\'?)(\w+)\\1(?:\r\n|\n|\r)(?:.*?)(?:\r\n|\n|\r)\\2(?=\r\n|\n|\r|;)}s', 'null', $contents);
1233 $contents = preg_replace('{"[^"\\\\]*+(\\\\.[^"\\\\]*+)*+"|\'[^\'\\\\]*+(\\\\.[^\'\\\\]*+)*+\'}s', 'null', $contents);
1235 if (substr($contents, 0, 2) !== '<?') {
1236 $contents = preg_replace('{^.+?<\?}s', '<?', $contents, 1, $replacements);
1237 if ($replacements === 0) {
1242 $contents = preg_replace('{\?>.+<\?}s', '?><?', $contents);
1244 $pos = strrpos($contents, '?>');
1245 if (false !== $pos && false === strpos(substr($contents, $pos), '<?')) {
1246 $contents = substr($contents, 0, $pos);
1251 \b(?<![\$:>])(?P<type>class|interface'.$extraTypes.') \s++ (?P<name>[a-zA-Z_\x7f-\xff:][a-zA-Z0-9_\x7f-\xff:\-]*+)
1252 | \b(?<![\$:>])(?P<ns>namespace) (?P<nsname>\s++[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\s*+\\\\\s*+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)*+)? \s*+ [\{;]
1254 }ix', $contents, $matches);
1259 for ($i = 0, $len = count($matches['type']); $i < $len; $i++) {
1260 if (!empty($matches['ns'][$i])) {
1261 $namespace = str_replace(array(' ', "\t", "\r", "\n"), '', $matches['nsname'][$i]) . '\\';
1263 $name = $matches['name'][$i];
1265 if ($name === 'extends' || $name === 'implements') {
1268 if ($name[0] === ':') {
1270 $name = 'xhp'.substr(str_replace(array('-', ':'), array('_', '__'), $name), 1);
1271 } elseif ($matches['type'][$i] === 'enum') {
1276 $name = rtrim($name, ':');
1278 $classes[] = ltrim($namespace . $name, '\\');
1299 use Composer\IO\IOInterface;
1300 use Composer\Util\Filesystem;
1301 use Composer\Util\Silencer;
1302 use Symfony\Component\Finder\Finder;
1311 private static $cacheCollected = false;
1314 private $enabled = true;
1316 private $filesystem;
1324 public function __construct(IOInterface $io, $cacheDir, $whitelist = 'a-z0-9.', Filesystem $filesystem = null)
1327 $this->root = rtrim($cacheDir, '/\\') . '/';
1328 $this->whitelist = $whitelist;
1329 $this->filesystem = $filesystem ?: new Filesystem();
1331 if (preg_match('{(^|[\\\\/])(\$null|NUL|/dev/null)([\\\\/]|$)}', $cacheDir)) {
1332 $this->enabled = false;
1338 (!is_dir($this->root) && !Silencer::call('mkdir', $this->root, 0777, true))
1339 || !is_writable($this->root)
1341 $this->io->writeError('<warning>Cannot create cache directory ' . $this->root . ', or directory is not writable. Proceeding without cache</warning>');
1342 $this->enabled = false;
1346 public function isEnabled()
1348 return $this->enabled;
1351 public function getRoot()
1356 public function read($file)
1358 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1359 if ($this->enabled && file_exists($this->root . $file)) {
1360 $this->io->writeError('Reading '.$this->root . $file.' from cache', true, IOInterface::DEBUG);
1362 return file_get_contents($this->root . $file);
1368 public function write($file, $contents)
1370 if ($this->enabled) {
1371 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1373 $this->io->writeError('Writing '.$this->root . $file.' into cache', true, IOInterface::DEBUG);
1376 return file_put_contents($this->root . $file, $contents);
1377 } catch (\ErrorException $e) {
1378 $this->io->writeError('<warning>Failed to write into cache: '.$e->getMessage().'</warning>', true, IOInterface::DEBUG);
1379 if (preg_match('{^file_put_contents\(\): Only ([0-9]+) of ([0-9]+) bytes written}', $e->getMessage(), $m)) {
1381 unlink($this->root . $file);
1384 '<warning>Writing %1$s into cache failed after %2$u of %3$u bytes written, only %4$u bytes of free space available</warning>',
1385 $this->root . $file,
1388 @disk_free_space($this->root . dirname($file))
1391 $this->io->writeError($message);
1406 public function copyFrom($file, $source)
1408 if ($this->enabled) {
1409 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1410 $this->filesystem->ensureDirectoryExists(dirname($this->root . $file));
1412 if (!file_exists($source)) {
1413 $this->io->writeError('<error>'.$source.' does not exist, can not write into cache</error>');
1414 } elseif ($this->io->isDebug()) {
1415 $this->io->writeError('Writing '.$this->root . $file.' into cache from '.$source);
1418 return copy($source, $this->root . $file);
1427 public function copyTo($file, $target)
1429 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1430 if ($this->enabled && file_exists($this->root . $file)) {
1432 touch($this->root . $file, filemtime($this->root . $file), time());
1433 } catch (\ErrorException $e) {
1436 Silencer::call('touch', $this->root . $file);
1439 $this->io->writeError('Reading '.$this->root . $file.' from cache', true, IOInterface::DEBUG);
1441 return copy($this->root . $file, $target);
1447 public function gcIsNecessary()
1449 return (!self::$cacheCollected && !mt_rand(0, 50));
1452 public function remove($file)
1454 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1455 if ($this->enabled && file_exists($this->root . $file)) {
1456 return $this->filesystem->unlink($this->root . $file);
1462 public function clear()
1464 if ($this->enabled) {
1465 return $this->filesystem->removeDirectory($this->root);
1471 public function gc($ttl, $maxSize)
1473 if ($this->enabled) {
1474 $expire = new \DateTime();
1475 $expire->modify('-'.$ttl.' seconds');
1477 $finder = $this->getFinder()->date('until '.$expire->format('Y-m-d H:i:s'));
1478 foreach ($finder as $file) {
1479 $this->filesystem->unlink($file->getPathname());
1482 $totalSize = $this->filesystem->size($this->root);
1483 if ($totalSize > $maxSize) {
1484 $iterator = $this->getFinder()->sortByAccessedTime()->getIterator();
1485 while ($totalSize > $maxSize && $iterator->valid()) {
1486 $filepath = $iterator->current()->getPathname();
1487 $totalSize -= $this->filesystem->size($filepath);
1488 $this->filesystem->unlink($filepath);
1493 self::$cacheCollected = true;
1501 public function sha1($file)
1503 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1504 if ($this->enabled && file_exists($this->root . $file)) {
1505 return sha1_file($this->root . $file);
1511 public function sha256($file)
1513 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1514 if ($this->enabled && file_exists($this->root . $file)) {
1515 return hash_file('sha256', $this->root . $file);
1521 protected function getFinder()
1523 return Finder::create()->in($this->root)->files();
1538 namespace Composer\Command;
1540 use Symfony\Component\Console\Input\InputInterface;
1541 use Symfony\Component\Console\Output\OutputInterface;
1546 class AboutCommand extends BaseCommand
1548 protected function configure()
1552 ->setDescription('Shows the short information about Composer.')
1554 <info>php composer.phar about</info>
1560 protected function execute(InputInterface $input, OutputInterface $output)
1562 $this->getIO()->write(<<<EOT
1563 <info>Composer - Package Management for PHP</info>
1564 <comment>Composer is a dependency manager tracking local dependencies of your projects and libraries.
1565 See https://getcomposer.org/ for more information.</comment>
1582 namespace Composer\Command;
1584 use Composer\Factory;
1585 use Composer\IO\IOInterface;
1586 use Composer\Config;
1587 use Composer\Composer;
1588 use Composer\Repository\CompositeRepository;
1589 use Composer\Repository\RepositoryFactory;
1590 use Composer\Script\ScriptEvents;
1591 use Composer\Plugin\CommandEvent;
1592 use Composer\Plugin\PluginEvents;
1593 use Composer\Util\Filesystem;
1594 use Symfony\Component\Console\Input\InputArgument;
1595 use Symfony\Component\Console\Input\InputInterface;
1596 use Symfony\Component\Console\Input\InputOption;
1597 use Symfony\Component\Console\Output\OutputInterface;
1604 class ArchiveCommand extends BaseCommand
1606 protected function configure()
1609 ->setName('archive')
1610 ->setDescription('Creates an archive of this composer package.')
1611 ->setDefinition(array(
1612 new InputArgument('package', InputArgument::OPTIONAL, 'The package to archive instead of the current project'),
1613 new InputArgument('version', InputArgument::OPTIONAL, 'A version constraint to find the package to archive'),
1614 new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the resulting archive: tar or zip'),
1615 new InputOption('dir', null, InputOption::VALUE_REQUIRED, 'Write the archive to this directory'),
1616 new InputOption('file', null, InputOption::VALUE_REQUIRED, 'Write the archive with the given file name.'
1617 .' Note that the format will be appended.'),
1618 new InputOption('ignore-filters', false, InputOption::VALUE_NONE, 'Ignore filters when saving package'),
1621 The <info>archive</info> command creates an archive of the specified format
1622 containing the files and directories of the Composer project or the specified
1623 package in the specified version and writes it to the specified directory.
1625 <info>php composer.phar archive [--format=zip] [--dir=/foo] [package [version]]</info>
1632 protected function execute(InputInterface $input, OutputInterface $output)
1634 $config = Factory::createConfig();
1635 $composer = $this->getComposer(false);
1637 $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'archive', $input, $output);
1638 $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);
1639 $composer->getEventDispatcher()->dispatchScript(ScriptEvents::PRE_ARCHIVE_CMD);
1642 if (null === $input->getOption('format')) {
1643 $input->setOption('format', $config->get('archive-format'));
1645 if (null === $input->getOption('dir')) {
1646 $input->setOption('dir', $config->get('archive-dir'));
1649 $returnCode = $this->archive(
1652 $input->getArgument('package'),
1653 $input->getArgument('version'),
1654 $input->getOption('format'),
1655 $input->getOption('dir'),
1656 $input->getOption('file'),
1657 $input->getOption('ignore-filters'),
1661 if (0 === $returnCode && $composer) {
1662 $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_ARCHIVE_CMD);
1668 protected function archive(IOInterface $io, Config $config, $packageName = null, $version = null, $format = 'tar', $dest = '.', $fileName = null, $ignoreFilters = false, Composer $composer = null)
1671 $archiveManager = $composer->getArchiveManager();
1673 $factory = new Factory;
1674 $downloadManager = $factory->createDownloadManager($io, $config);
1675 $archiveManager = $factory->createArchiveManager($config, $downloadManager);
1679 $package = $this->selectPackage($io, $packageName, $version);
1685 $package = $this->getComposer()->getPackage();
1688 $io->writeError('<info>Creating the archive into "'.$dest.'".</info>');
1689 $packagePath = $archiveManager->archive($package, $format, $dest, $fileName, $ignoreFilters);
1690 $fs = new Filesystem;
1691 $shortPath = $fs->findShortestPath(getcwd(), $packagePath, true);
1693 $io->writeError('Created: ', false);
1694 $io->write(strlen($shortPath) < strlen($packagePath) ? $shortPath : $packagePath);
1699 protected function selectPackage(IOInterface $io, $packageName, $version = null)
1701 $io->writeError('<info>Searching for the specified package.</info>');
1703 if ($composer = $this->getComposer(false)) {
1704 $localRepo = $composer->getRepositoryManager()->getLocalRepository();
1705 $repo = new CompositeRepository(array_merge(array($localRepo), $composer->getRepositoryManager()->getRepositories()));
1707 $defaultRepos = RepositoryFactory::defaultRepos($this->getIO());
1708 $io->writeError('No composer.json found in the current directory, searching packages from ' . implode(', ', array_keys($defaultRepos)));
1709 $repo = new CompositeRepository($defaultRepos);
1712 $packages = $repo->findPackages($packageName, $version);
1714 if (count($packages) > 1) {
1715 $package = reset($packages);
1716 $io->writeError('<info>Found multiple matches, selected '.$package->getPrettyString().'.</info>');
1717 $io->writeError('Alternatives were '.implode(', ', array_map(function ($p) {
1718 return $p->getPrettyString();
1719 }, $packages)).'.');
1720 $io->writeError('<comment>Please use a more specific constraint to pick a different package.</comment>');
1721 } elseif ($packages) {
1722 $package = reset($packages);
1723 $io->writeError('<info>Found an exact match '.$package->getPrettyString().'.</info>');
1725 $io->writeError('<error>Could not find a package matching '.$packageName.'.</error>');
1745 namespace Composer\Command;
1747 use Composer\Composer;
1748 use Composer\Config;
1749 use Composer\Console\Application;
1750 use Composer\IO\IOInterface;
1751 use Composer\IO\NullIO;
1752 use Symfony\Component\Console\Input\InputInterface;
1753 use Symfony\Component\Console\Output\OutputInterface;
1754 use Symfony\Component\Console\Command\Command;
1762 abstract class BaseCommand extends Command
1780 public function getComposer($required = true, $disablePlugins = null)
1782 if (null === $this->composer) {
1783 $application = $this->getApplication();
1784 if ($application instanceof Application) {
1786 $this->composer = $application->getComposer($required, $disablePlugins);
1787 } elseif ($required) {
1788 throw new \RuntimeException(
1789 'Could not create a Composer\Composer instance, you must inject '.
1790 'one if this command is not used with a Composer\Console\Application instance'
1795 return $this->composer;
1801 public function setComposer(Composer $composer)
1803 $this->composer = $composer;
1809 public function resetComposer()
1811 $this->composer = null;
1812 $this->getApplication()->resetComposer();
1822 public function isProxyCommand()
1830 public function getIO()
1832 if (null === $this->io) {
1833 $application = $this->getApplication();
1834 if ($application instanceof Application) {
1836 $this->io = $application->getIO();
1838 $this->io = new NullIO();
1848 public function setIO(IOInterface $io)
1856 protected function initialize(InputInterface $input, OutputInterface $output)
1858 if (true === $input->hasParameterOption(array('--no-ansi')) && $input->hasOption('no-progress')) {
1859 $input->setOption('no-progress', true);
1862 parent::initialize($input, $output);
1874 protected function getPreferredInstallOptions(Config $config, InputInterface $input, $keepVcsRequiresPreferSource = false)
1876 $preferSource = false;
1877 $preferDist = false;
1879 switch ($config->get('preferred-install')) {
1881 $preferSource = true;
1892 if ($input->getOption('prefer-source') || $input->getOption('prefer-dist') || ($keepVcsRequiresPreferSource && $input->hasOption('keep-vcs') && $input->getOption('keep-vcs'))) {
1893 $preferSource = $input->getOption('prefer-source') || ($keepVcsRequiresPreferSource && $input->hasOption('keep-vcs') && $input->getOption('keep-vcs'));
1894 $preferDist = $input->getOption('prefer-dist');
1897 return array($preferSource, $preferDist);
1912 namespace Composer\Command;
1914 use Composer\DependencyResolver\Pool;
1915 use Composer\Package\Link;
1916 use Composer\Package\PackageInterface;
1917 use Composer\Repository\ArrayRepository;
1918 use Composer\Repository\CompositeRepository;
1919 use Composer\Repository\PlatformRepository;
1920 use Composer\Repository\RepositoryFactory;
1921 use Composer\Plugin\CommandEvent;
1922 use Composer\Plugin\PluginEvents;
1923 use Symfony\Component\Console\Formatter\OutputFormatterStyle;
1924 use Composer\Package\Version\VersionParser;
1925 use Symfony\Component\Console\Helper\Table;
1926 use Symfony\Component\Console\Input\InputArgument;
1927 use Symfony\Component\Console\Input\InputInterface;
1928 use Symfony\Component\Console\Input\InputOption;
1929 use Symfony\Component\Console\Output\OutputInterface;
1936 class BaseDependencyCommand extends BaseCommand
1938 const ARGUMENT_PACKAGE = 'package';
1939 const ARGUMENT_CONSTRAINT = 'constraint';
1940 const OPTION_RECURSIVE = 'recursive';
1941 const OPTION_TREE = 'tree';
1948 protected function configure()
1950 $this->setDefinition(array(
1951 new InputArgument(self::ARGUMENT_PACKAGE, InputArgument::REQUIRED, 'Package to inspect'),
1952 new InputArgument(self::ARGUMENT_CONSTRAINT, InputArgument::OPTIONAL, 'Optional version constraint', '*'),
1953 new InputOption(self::OPTION_RECURSIVE, 'r', InputOption::VALUE_NONE, 'Recursively resolves up to the root package'),
1954 new InputOption(self::OPTION_TREE, 't', InputOption::VALUE_NONE, 'Prints the results as a nested tree'),
1966 protected function doExecute(InputInterface $input, OutputInterface $output, $inverted = false)
1969 $composer = $this->getComposer();
1970 $commandEvent = new CommandEvent(PluginEvents::COMMAND, $this->getName(), $input, $output);
1971 $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);
1974 $platformOverrides = $composer->getConfig()->get('platform') ?: array();
1975 $repository = new CompositeRepository(array(
1976 new ArrayRepository(array($composer->getPackage())),
1977 $composer->getRepositoryManager()->getLocalRepository(),
1978 new PlatformRepository(array(), $platformOverrides),
1981 $pool->addRepository($repository);
1984 list($needle, $textConstraint) = array_pad(
1985 explode(':', $input->getArgument(self::ARGUMENT_PACKAGE)),
1987 $input->getArgument(self::ARGUMENT_CONSTRAINT)
1991 $packages = $pool->whatProvides($needle);
1992 if (empty($packages)) {
1993 throw new \InvalidArgumentException(sprintf('Could not find package "%s" in your project', $needle));
1998 if (!$repository->findPackage($needle, $textConstraint)) {
1999 $defaultRepos = new CompositeRepository(RepositoryFactory::defaultRepos($this->getIO()));
2000 if ($match = $defaultRepos->findPackage($needle, $textConstraint)) {
2001 $repository->addRepository(new ArrayRepository(array(clone $match)));
2006 $needles = array($needle);
2008 foreach ($packages as $package) {
2009 $needles = array_merge($needles, array_map(function (Link $link) {
2010 return $link->getTarget();
2011 }, $package->getReplaces()));
2016 if ('*' !== $textConstraint) {
2017 $versionParser = new VersionParser();
2018 $constraint = $versionParser->parseConstraints($textConstraint);
2024 $renderTree = $input->getOption(self::OPTION_TREE);
2025 $recursive = $renderTree || $input->getOption(self::OPTION_RECURSIVE);
2028 $results = $repository->getDependents($needles, $constraint, $inverted, $recursive);
2029 if (empty($results)) {
2030 $extra = (null !== $constraint) ? sprintf(' in versions %smatching %s', $inverted ? 'not ' : '', $textConstraint) : '';
2031 $this->getIO()->writeError(sprintf('<info>There is no installed package depending on "%s"%s</info>',
2033 } elseif ($renderTree) {
2034 $this->initStyles($output);
2035 $root = $packages[0];
2036 $this->getIO()->write(sprintf('<info>%s</info> %s %s', $root->getPrettyName(), $root->getPrettyVersion(), $root->getDescription()));
2037 $this->printTree($results);
2039 $this->printTable($output, $results);
2051 protected function printTable(OutputInterface $output, $results)
2058 foreach ($results as $result) {
2063 list($package, $link, $children) = $result;
2064 $unique = (string) $link;
2065 if (isset($doubles[$unique])) {
2068 $doubles[$unique] = true;
2069 $version = (strpos($package->getPrettyVersion(), 'No version set') === 0) ? '-' : $package->getPrettyVersion();
2070 $rows[] = array($package->getPrettyName(), $version, $link->getDescription(), sprintf('%s (%s)', $link->getTarget(), $link->getPrettyConstraint()));
2072 $queue = array_merge($queue, $children);
2076 $table = array_merge($rows, $table);
2077 } while (!empty($results));
2080 $renderer = new Table($output);
2081 $renderer->setStyle('compact');
2082 $renderer->getStyle()->setVerticalBorderChar('');
2083 $renderer->getStyle()->setCellRowContentFormat('%s ');
2084 $renderer->setRows($table)->render();
2092 protected function initStyles(OutputInterface $output)
2094 $this->colors = array(
2102 foreach ($this->colors as $color) {
2103 $style = new OutputFormatterStyle($color);
2104 $output->getFormatter()->setStyle($color, $style);
2115 protected function printTree($results, $prefix = '', $level = 1)
2117 $count = count($results);
2119 foreach ($results as $result) {
2125 list($package, $link, $children) = $result;
2127 $color = $this->colors[$level % count($this->colors)];
2128 $prevColor = $this->colors[($level - 1) % count($this->colors)];
2129 $isLast = (++$idx == $count);
2130 $versionText = (strpos($package->getPrettyVersion(), 'No version set') === 0) ? '' : $package->getPrettyVersion();
2131 $packageText = rtrim(sprintf('<%s>%s</%1$s> %s', $color, $package->getPrettyName(), $versionText));
2132 $linkText = sprintf('%s <%s>%s</%2$s> %s', $link->getDescription(), $prevColor, $link->getTarget(), $link->getPrettyConstraint());
2133 $circularWarn = $children === false ? '(circular dependency aborted here)' : '';
2134 $this->writeTreeLine(rtrim(sprintf("%s%s%s (%s) %s", $prefix, $isLast ? '└──' : '├──', $packageText, $linkText, $circularWarn)));
2136 $this->printTree($children, $prefix . ($isLast ? ' ' : '│ '), $level + 1);
2141 private function writeTreeLine($line)
2143 $io = $this->getIO();
2144 if (!$io->isDecorated()) {
2145 $line = str_replace(array('└', '├', '──', '│'), array('`-', '|-', '-', '|'), $line);
2163 namespace Composer\Command;
2165 use Composer\Package\Link;
2166 use Composer\Package\PackageInterface;
2167 use Composer\Semver\Constraint\Constraint;
2168 use Symfony\Component\Console\Helper\Table;
2169 use Symfony\Component\Console\Input\InputInterface;
2170 use Symfony\Component\Console\Output\OutputInterface;
2171 use Composer\Repository\PlatformRepository;
2173 class CheckPlatformReqsCommand extends BaseCommand
2175 protected function configure()
2177 $this->setName('check-platform-reqs')
2178 ->setDescription('Check that platform requirements are satisfied.')
2180 Checks that your PHP and extensions versions match the platform requirements of the installed packages.
2182 <info>php composer.phar check-platform-reqs</info>
2188 protected function execute(InputInterface $input, OutputInterface $output)
2190 $composer = $this->getComposer();
2192 $repos = $composer->getRepositoryManager()->getLocalRepository();
2194 $allPackages = array_merge(array($composer->getPackage()), $repos->getPackages());
2195 $requires = $composer->getPackage()->getDevRequires();
2196 foreach ($requires as $require => $link) {
2197 $requires[$require] = array($link);
2203 foreach ($allPackages as $package) {
2204 foreach ($package->getRequires() as $require => $link) {
2205 $requires[$require][] = $link;
2210 $platformRepo = new PlatformRepository(array(), array());
2211 $currentPlatformPackages = $platformRepo->getPackages();
2212 $currentPlatformPackageMap = array();
2217 foreach ($currentPlatformPackages as $currentPlatformPackage) {
2218 $currentPlatformPackageMap[$currentPlatformPackage->getName()] = $currentPlatformPackage;
2228 foreach ($requires as $require => $links) {
2229 if (preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $require)) {
2230 if (isset($currentPlatformPackageMap[$require])) {
2232 $version = $currentPlatformPackageMap[$require]->getVersion();
2234 foreach ($links as $link) {
2235 if (!$link->getConstraint()->matches(new Constraint('=', $version))) {
2237 $currentPlatformPackageMap[$require]->getPrettyName(),
2238 $currentPlatformPackageMap[$require]->getPrettyVersion(),
2240 '<error>failed</error>',
2244 $exitCode = max($exitCode, 1);
2250 $currentPlatformPackageMap[$require]->getPrettyName(),
2251 $currentPlatformPackageMap[$require]->getPrettyVersion(),
2253 '<info>success</info>',
2261 '<error>missing</error>',
2264 $exitCode = max($exitCode, 2);
2269 $this->printTable($output, $results);
2274 protected function printTable(OutputInterface $output, $results)
2278 foreach ($results as $result) {
2282 list($platformPackage, $version, $link, $status) = $result;
2286 $link ? sprintf('%s %s %s (%s)', $link->getSource(), $link->getDescription(), $link->getTarget(), $link->getPrettyConstraint()) : '',
2290 $table = array_merge($rows, $table);
2293 $renderer = new Table($output);
2294 $renderer->setStyle('compact');
2295 $renderer->getStyle()->setVerticalBorderChar('');
2296 $renderer->getStyle()->setCellRowContentFormat('%s ');
2297 $renderer->setRows($table)->render();
2312 namespace Composer\Command;
2315 use Composer\Factory;
2316 use Symfony\Component\Console\Input\InputInterface;
2317 use Symfony\Component\Console\Output\OutputInterface;
2322 class ClearCacheCommand extends BaseCommand
2324 protected function configure()
2327 ->setName('clear-cache')
2328 ->setAliases(array('clearcache'))
2329 ->setDescription('Clears composer\'s internal package cache.')
2331 The <info>clear-cache</info> deletes all cached packages from composer's
2338 protected function execute(InputInterface $input, OutputInterface $output)
2340 $config = Factory::createConfig();
2341 $io = $this->getIO();
2343 $cachePaths = array(
2344 'cache-vcs-dir' => $config->get('cache-vcs-dir'),
2345 'cache-repo-dir' => $config->get('cache-repo-dir'),
2346 'cache-files-dir' => $config->get('cache-files-dir'),
2347 'cache-dir' => $config->get('cache-dir'),
2350 foreach ($cachePaths as $key => $cachePath) {
2351 $cachePath = realpath($cachePath);
2353 $io->writeError("<info>Cache directory does not exist ($key): $cachePath</info>");
2357 $cache = new Cache($io, $cachePath);
2358 if (!$cache->isEnabled()) {
2359 $io->writeError("<info>Cache is not enabled ($key): $cachePath</info>");
2364 $io->writeError("<info>Clearing cache ($key): $cachePath</info>");
2368 $io->writeError('<info>All caches cleared.</info>');
2383 namespace Composer\Command;
2385 use Composer\Util\Platform;
2386 use Composer\Util\Silencer;
2387 use Symfony\Component\Console\Input\InputInterface;
2388 use Symfony\Component\Console\Input\InputArgument;
2389 use Symfony\Component\Console\Input\InputOption;
2390 use Symfony\Component\Console\Output\OutputInterface;
2391 use Composer\Config;
2392 use Composer\Config\JsonConfigSource;
2393 use Composer\Factory;
2394 use Composer\Json\JsonFile;
2395 use Composer\Semver\VersionParser;
2396 use Composer\Package\BasePackage;
2402 class ConfigCommand extends BaseCommand
2412 protected $configFile;
2417 protected $configSource;
2422 protected $authConfigFile;
2427 protected $authConfigSource;
2432 protected function configure()
2436 ->setDescription('Sets config options.')
2437 ->setDefinition(array(
2438 new InputOption('global', 'g', InputOption::VALUE_NONE, 'Apply command to the global config file'),
2439 new InputOption('editor', 'e', InputOption::VALUE_NONE, 'Open editor'),
2440 new InputOption('auth', 'a', InputOption::VALUE_NONE, 'Affect auth config file (only used for --editor)'),
2441 new InputOption('unset', null, InputOption::VALUE_NONE, 'Unset the given setting-key'),
2442 new InputOption('list', 'l', InputOption::VALUE_NONE, 'List configuration settings'),
2443 new InputOption('file', 'f', InputOption::VALUE_REQUIRED, 'If you want to choose a different composer.json or config.json'),
2444 new InputOption('absolute', null, InputOption::VALUE_NONE, 'Returns absolute paths when fetching *-dir config values instead of relative'),
2445 new InputArgument('setting-key', null, 'Setting key'),
2446 new InputArgument('setting-value', InputArgument::IS_ARRAY, 'Setting value'),
2449 This command allows you to edit composer config settings and repositories
2450 in either the local composer.json file or the global config.json file.
2452 Additionally it lets you edit most properties in the local composer.json.
2454 To set a config setting:
2456 <comment>%command.full_name% bin-dir bin/</comment>
2458 To read a config setting:
2460 <comment>%command.full_name% bin-dir</comment>
2461 Outputs: <info>bin</info>
2463 To edit the global config.json file:
2465 <comment>%command.full_name% --global</comment>
2467 To add a repository:
2469 <comment>%command.full_name% repositories.foo vcs https://bar.com</comment>
2471 To remove a repository (repo is a short alias for repositories):
2473 <comment>%command.full_name% --unset repo.foo</comment>
2475 To disable packagist:
2477 <comment>%command.full_name% repo.packagist false</comment>
2479 You can alter repositories in the global config.json file by passing in the
2480 <info>--global</info> option.
2482 To edit the file in an external editor:
2484 <comment>%command.full_name% --editor</comment>
2486 To choose your editor you can set the "EDITOR" env variable.
2488 To get a list of configuration values in the file:
2490 <comment>%command.full_name% --list</comment>
2492 You can always pass more than one option. As an example, if you want to edit the
2493 global config.json file.
2495 <comment>%command.full_name% --editor --global</comment>
2504 protected function initialize(InputInterface $input, OutputInterface $output)
2506 parent::initialize($input, $output);
2508 if ($input->getOption('global') && null !== $input->getOption('file')) {
2509 throw new \RuntimeException('--file and --global can not be combined');
2512 $io = $this->getIO();
2513 $this->config = Factory::createConfig($io);
2517 $configFile = $input->getOption('global')
2518 ? ($this->config->get('home') . '/config.json')
2519 : ($input->getOption('file') ?: Factory::getComposerFile());
2523 ($configFile === 'composer.json' || $configFile === './composer.json')
2524 && !file_exists($configFile)
2525 && realpath(getcwd()) === realpath($this->config->get('home'))
2527 file_put_contents($configFile, "{\n}\n");
2530 $this->configFile = new JsonFile($configFile, null, $io);
2531 $this->configSource = new JsonConfigSource($this->configFile);
2533 $authConfigFile = $input->getOption('global')
2534 ? ($this->config->get('home') . '/auth.json')
2535 : dirname(realpath($configFile)) . '/auth.json';
2537 $this->authConfigFile = new JsonFile($authConfigFile, null, $io);
2538 $this->authConfigSource = new JsonConfigSource($this->authConfigFile, true);
2541 if ($input->getOption('global') && !$this->configFile->exists()) {
2542 touch($this->configFile->getPath());
2543 $this->configFile->write(array('config' => new \ArrayObject));
2544 Silencer::call('chmod', $this->configFile->getPath(), 0600);
2546 if ($input->getOption('global') && !$this->authConfigFile->exists()) {
2547 touch($this->authConfigFile->getPath());
2548 $this->authConfigFile->write(array('bitbucket-oauth' => new \ArrayObject, 'github-oauth' => new \ArrayObject, 'gitlab-oauth' => new \ArrayObject, 'gitlab-token' => new \ArrayObject, 'http-basic' => new \ArrayObject));
2549 Silencer::call('chmod', $this->authConfigFile->getPath(), 0600);
2552 if (!$this->configFile->exists()) {
2553 throw new \RuntimeException(sprintf('File "%s" cannot be found in the current directory', $configFile));
2560 protected function execute(InputInterface $input, OutputInterface $output)
2563 if ($input->getOption('editor')) {
2564 $editor = escapeshellcmd(getenv('EDITOR'));
2566 if (Platform::isWindows()) {
2567 $editor = 'notepad';
2569 foreach (array('editor', 'vim', 'vi', 'nano', 'pico', 'ed') as $candidate) {
2570 if (exec('which '.$candidate)) {
2571 $editor = $candidate;
2578 $file = $input->getOption('auth') ? $this->authConfigFile->getPath() : $this->configFile->getPath();
2579 system($editor . ' ' . $file . (Platform::isWindows() ? '' : ' > `tty`'));
2584 if (!$input->getOption('global')) {
2585 $this->config->merge($this->configFile->read());
2586 $this->config->merge(array('config' => $this->authConfigFile->exists() ? $this->authConfigFile->read() : array()));
2590 if ($input->getOption('list')) {
2591 $this->listConfiguration($this->config->all(), $this->config->raw(), $output);
2596 $settingKey = $input->getArgument('setting-key');
2602 if (array() !== $input->getArgument('setting-value') && $input->getOption('unset')) {
2603 throw new \RuntimeException('You can not combine a setting value with --unset');
2607 if (array() === $input->getArgument('setting-value') && !$input->getOption('unset')) {
2608 $properties = array('name', 'type', 'description', 'homepage', 'version', 'minimum-stability', 'prefer-stable', 'keywords', 'license', 'extra');
2609 $rawData = $this->configFile->read();
2610 $data = $this->config->all();
2611 if (preg_match('/^repos?(?:itories)?(?:\.(.+))?/', $settingKey, $matches)) {
2612 if (!isset($matches[1]) || $matches[1] === '') {
2613 $value = isset($data['repositories']) ? $data['repositories'] : array();
2615 if (!isset($data['repositories'][$matches[1]])) {
2616 throw new \InvalidArgumentException('There is no '.$matches[1].' repository defined');
2619 $value = $data['repositories'][$matches[1]];
2621 } elseif (strpos($settingKey, '.')) {
2622 $bits = explode('.', $settingKey);
2623 if ($bits[0] === 'extra') {
2626 $data = $data['config'];
2629 foreach ($bits as $bit) {
2630 $key = isset($key) ? $key.'.'.$bit : $bit;
2632 if (isset($data[$key])) {
2634 $data = $data[$key];
2640 throw new \RuntimeException($settingKey.' is not defined.');
2644 } elseif (isset($data['config'][$settingKey])) {
2645 $value = $this->config->get($settingKey, $input->getOption('absolute') ? 0 : Config::RELATIVE_PATHS);
2646 } elseif (in_array($settingKey, $properties, true) && isset($rawData[$settingKey])) {
2647 $value = $rawData[$settingKey];
2649 throw new \RuntimeException($settingKey.' is not defined');
2652 if (is_array($value)) {
2653 $value = json_encode($value);
2656 $this->getIO()->write($value);
2661 $values = $input->getArgument('setting-value');
2663 $booleanValidator = function ($val) {
2664 return in_array($val, array('true', 'false', '1', '0'), true);
2666 $booleanNormalizer = function ($val) {
2667 return $val !== 'false' && (bool) $val;
2671 $uniqueConfigValues = array(
2672 'process-timeout' => array('is_numeric', 'intval'),
2673 'use-include-path' => array($booleanValidator, $booleanNormalizer),
2674 'preferred-install' => array(
2676 return in_array($val, array('auto', 'source', 'dist'), true);
2682 'store-auths' => array(
2684 return in_array($val, array('true', 'false', 'prompt'), true);
2687 if ('prompt' === $val) {
2691 return $val !== 'false' && (bool) $val;
2694 'notify-on-install' => array($booleanValidator, $booleanNormalizer),
2695 'vendor-dir' => array('is_string', function ($val) {
2698 'bin-dir' => array('is_string', function ($val) {
2701 'archive-dir' => array('is_string', function ($val) {
2704 'archive-format' => array('is_string', function ($val) {
2707 'data-dir' => array('is_string', function ($val) {
2710 'cache-dir' => array('is_string', function ($val) {
2713 'cache-files-dir' => array('is_string', function ($val) {
2716 'cache-repo-dir' => array('is_string', function ($val) {
2719 'cache-vcs-dir' => array('is_string', function ($val) {
2722 'cache-ttl' => array('is_numeric', 'intval'),
2723 'cache-files-ttl' => array('is_numeric', 'intval'),
2724 'cache-files-maxsize' => array(
2726 return preg_match('/^\s*([0-9.]+)\s*(?:([kmg])(?:i?b)?)?\s*$/i', $val) > 0;
2732 'bin-compat' => array(
2734 return in_array($val, array('auto', 'full'));
2740 'discard-changes' => array(
2742 return in_array($val, array('stash', 'true', 'false', '1', '0'), true);
2745 if ('stash' === $val) {
2749 return $val !== 'false' && (bool) $val;
2752 'autoloader-suffix' => array('is_string', function ($val) {
2753 return $val === 'null' ? null : $val;
2755 'sort-packages' => array($booleanValidator, $booleanNormalizer),
2756 'optimize-autoloader' => array($booleanValidator, $booleanNormalizer),
2757 'classmap-authoritative' => array($booleanValidator, $booleanNormalizer),
2758 'apcu-autoloader' => array($booleanValidator, $booleanNormalizer),
2759 'prepend-autoloader' => array($booleanValidator, $booleanNormalizer),
2760 'disable-tls' => array($booleanValidator, $booleanNormalizer),
2761 'secure-http' => array($booleanValidator, $booleanNormalizer),
2764 return file_exists($val) && is_readable($val);
2767 return $val === 'null' ? null : $val;
2772 return is_dir($val) && is_readable($val);
2775 return $val === 'null' ? null : $val;
2778 'github-expose-hostname' => array($booleanValidator, $booleanNormalizer),
2779 'htaccess-protect' => array($booleanValidator, $booleanNormalizer),
2781 $multiConfigValues = array(
2782 'github-protocols' => array(
2784 if (!is_array($vals)) {
2785 return 'array expected';
2788 foreach ($vals as $val) {
2789 if (!in_array($val, array('git', 'https', 'ssh'))) {
2790 return 'valid protocols include: git, https, ssh';
2800 'github-domains' => array(
2802 if (!is_array($vals)) {
2803 return 'array expected';
2812 'gitlab-domains' => array(
2814 if (!is_array($vals)) {
2815 return 'array expected';
2826 if ($input->getOption('unset') && (isset($uniqueConfigValues[$settingKey]) || isset($multiConfigValues[$settingKey]))) {
2827 return $this->configSource->removeConfigSetting($settingKey);
2829 if (isset($uniqueConfigValues[$settingKey])) {
2830 return $this->handleSingleValue($settingKey, $uniqueConfigValues[$settingKey], $values, 'addConfigSetting');
2832 if (isset($multiConfigValues[$settingKey])) {
2833 return $this->handleMultiValue($settingKey, $multiConfigValues[$settingKey], $values, 'addConfigSetting');
2837 $uniqueProps = array(
2838 'name' => array('is_string', function ($val) {
2841 'type' => array('is_string', function ($val) {
2844 'description' => array('is_string', function ($val) {
2847 'homepage' => array('is_string', function ($val) {
2850 'version' => array('is_string', function ($val) {
2853 'minimum-stability' => array(
2855 return isset(BasePackage::$stabilities[VersionParser::normalizeStability($val)]);
2858 return VersionParser::normalizeStability($val);
2861 'prefer-stable' => array($booleanValidator, $booleanNormalizer),
2863 $multiProps = array(
2864 'keywords' => array(
2866 if (!is_array($vals)) {
2867 return 'array expected';
2878 if (!is_array($vals)) {
2879 return 'array expected';
2890 if ($input->getOption('global') && (isset($uniqueProps[$settingKey]) || isset($multiProps[$settingKey]) || substr($settingKey, 0, 6) === 'extra.')) {
2891 throw new \InvalidArgumentException('The '.$settingKey.' property can not be set in the global config.json file. Use `composer global config` to apply changes to the global composer.json');
2893 if ($input->getOption('unset') && (isset($uniqueProps[$settingKey]) || isset($multiProps[$settingKey]))) {
2894 return $this->configSource->removeProperty($settingKey);
2896 if (isset($uniqueProps[$settingKey])) {
2897 return $this->handleSingleValue($settingKey, $uniqueProps[$settingKey], $values, 'addProperty');
2899 if (isset($multiProps[$settingKey])) {
2900 return $this->handleMultiValue($settingKey, $multiProps[$settingKey], $values, 'addProperty');
2904 if (preg_match('/^repos?(?:itories)?\.(.+)/', $settingKey, $matches)) {
2905 if ($input->getOption('unset')) {
2906 return $this->configSource->removeRepository($matches[1]);
2909 if (2 === count($values)) {
2910 return $this->configSource->addRepository($matches[1], array(
2911 'type' => $values[0],
2912 'url' => $values[1],
2916 if (1 === count($values)) {
2917 $value = strtolower($values[0]);
2918 if (true === $booleanValidator($value)) {
2919 if (false === $booleanNormalizer($value)) {
2920 return $this->configSource->addRepository($matches[1], false);
2923 $value = JsonFile::parseJson($values[0]);
2925 return $this->configSource->addRepository($matches[1], $value);
2929 throw new \RuntimeException('You must pass the type and a url. Example: php composer.phar config repositories.foo vcs https://bar.com');
2933 if (preg_match('/^extra\.(.+)/', $settingKey, $matches)) {
2934 if ($input->getOption('unset')) {
2935 return $this->configSource->removeProperty($settingKey);
2938 return $this->configSource->addProperty($settingKey, $values[0]);
2942 if (preg_match('/^platform\.(.+)/', $settingKey, $matches)) {
2943 if ($input->getOption('unset')) {
2944 return $this->configSource->removeConfigSetting($settingKey);
2947 return $this->configSource->addConfigSetting($settingKey, $values[0]);
2949 if ($settingKey === 'platform' && $input->getOption('unset')) {
2950 return $this->configSource->removeConfigSetting($settingKey);
2954 if (preg_match('/^(bitbucket-oauth|github-oauth|gitlab-oauth|gitlab-token|http-basic)\.(.+)/', $settingKey, $matches)) {
2955 if ($input->getOption('unset')) {
2956 $this->authConfigSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2957 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2962 if ($matches[1] === 'bitbucket-oauth') {
2963 if (2 !== count($values)) {
2964 throw new \RuntimeException('Expected two arguments (consumer-key, consumer-secret), got '.count($values));
2966 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2967 $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('consumer-key' => $values[0], 'consumer-secret' => $values[1]));
2968 } elseif (in_array($matches[1], array('github-oauth', 'gitlab-oauth', 'gitlab-token'), true)) {
2969 if (1 !== count($values)) {
2970 throw new \RuntimeException('Too many arguments, expected only one token');
2972 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2973 $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], $values[0]);
2974 } elseif ($matches[1] === 'http-basic') {
2975 if (2 !== count($values)) {
2976 throw new \RuntimeException('Expected two arguments (username, password), got '.count($values));
2978 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2979 $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('username' => $values[0], 'password' => $values[1]));
2985 throw new \InvalidArgumentException('Setting '.$settingKey.' does not exist or is not supported by this command');
2988 protected function handleSingleValue($key, array $callbacks, array $values, $method)
2990 list($validator, $normalizer) = $callbacks;
2991 if (1 !== count($values)) {
2992 throw new \RuntimeException('You can only pass one value. Example: php composer.phar config process-timeout 300');
2995 if (true !== $validation = $validator($values[0])) {
2996 throw new \RuntimeException(sprintf(
2997 '"%s" is an invalid value'.($validation ? ' ('.$validation.')' : ''),
3002 return call_user_func(array($this->configSource, $method), $key, $normalizer($values[0]));
3005 protected function handleMultiValue($key, array $callbacks, array $values, $method)
3007 list($validator, $normalizer) = $callbacks;
3008 if (true !== $validation = $validator($values)) {
3009 throw new \RuntimeException(sprintf(
3010 '%s is an invalid value'.($validation ? ' ('.$validation.')' : ''),
3011 json_encode($values)
3015 return call_user_func(array($this->configSource, $method), $key, $normalizer($values));
3026 protected function listConfiguration(array $contents, array $rawContents, OutputInterface $output, $k = null)
3029 $io = $this->getIO();
3030 foreach ($contents as $key => $value) {
3031 if ($k === null && !in_array($key, array('config', 'repositories'))) {
3035 $rawVal = isset($rawContents[$key]) ? $rawContents[$key] : null;
3037 if (is_array($value) && (!is_numeric(key($value)) || ($key === 'repositories' && null === $k))) {
3038 $k .= preg_replace('{^config\.}', '', $key . '.');
3039 $this->listConfiguration($value, $rawVal, $output, $k);
3045 if (is_array($value)) {
3046 $value = array_map(function ($val) {
3047 return is_array($val) ? json_encode($val) : $val;
3050 $value = '['.implode(', ', $value).']';
3053 if (is_bool($value)) {
3054 $value = var_export($value, true);
3057 if (is_string($rawVal) && $rawVal != $value) {
3058 $io->write('[<comment>' . $k . $key . '</comment>] <info>' . $rawVal . ' (' . $value . ')</info>');
3060 $io->write('[<comment>' . $k . $key . '</comment>] <info>' . $value . '</info>');
3077 namespace Composer\Command;
3079 use Composer\Config;
3080 use Composer\Factory;
3081 use Composer\Installer;
3082 use Composer\Installer\ProjectInstaller;
3083 use Composer\Installer\InstallationManager;
3084 use Composer\Installer\SuggestedPackagesReporter;
3085 use Composer\IO\IOInterface;
3086 use Composer\Package\BasePackage;
3087 use Composer\DependencyResolver\Pool;
3088 use Composer\DependencyResolver\Operation\InstallOperation;
3089 use Composer\Package\Version\VersionSelector;
3090 use Composer\Package\AliasPackage;
3091 use Composer\Repository\RepositoryFactory;
3092 use Composer\Repository\CompositeRepository;
3093 use Composer\Repository\PlatformRepository;
3094 use Composer\Repository\InstalledFilesystemRepository;
3095 use Composer\Script\ScriptEvents;
3096 use Composer\Util\Silencer;
3097 use Symfony\Component\Console\Input\InputArgument;
3098 use Symfony\Component\Console\Input\InputInterface;
3099 use Symfony\Component\Console\Input\InputOption;
3100 use Symfony\Component\Console\Output\OutputInterface;
3101 use Symfony\Component\Finder\Finder;
3102 use Composer\Json\JsonFile;
3103 use Composer\Config\JsonConfigSource;
3104 use Composer\Util\Filesystem;
3105 use Composer\Package\Version\VersionParser;
3115 class CreateProjectCommand extends BaseCommand
3120 protected $suggestedPackagesReporter;
3122 protected function configure()
3125 ->setName('create-project')
3126 ->setDescription('Creates new project from a package into given directory.')
3127 ->setDefinition(array(
3128 new InputArgument('package', InputArgument::OPTIONAL, 'Package name to be installed'),
3129 new InputArgument('directory', InputArgument::OPTIONAL, 'Directory where the files should be created'),
3130 new InputArgument('version', InputArgument::OPTIONAL, 'Version, will default to latest'),
3131 new InputOption('stability', 's', InputOption::VALUE_REQUIRED, 'Minimum-stability allowed (unless a version is specified).'),
3132 new InputOption('prefer-source', null, InputOption::VALUE_NONE, 'Forces installation from package sources when possible, including VCS information.'),
3133 new InputOption('prefer-dist', null, InputOption::VALUE_NONE, 'Forces installation from package dist even for dev versions.'),
3134 new InputOption('repository', null, InputOption::VALUE_REQUIRED, 'Pick a different repository (as url or json config) to look for the package.'),
3135 new InputOption('repository-url', null, InputOption::VALUE_REQUIRED, 'DEPRECATED: Use --repository instead.'),
3136 new InputOption('dev', null, InputOption::VALUE_NONE, 'Enables installation of require-dev packages (enabled by default, only present for BC).'),
3137 new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables installation of require-dev packages.'),
3138 new InputOption('no-custom-installers', null, InputOption::VALUE_NONE, 'DEPRECATED: Use no-plugins instead.'),
3139 new InputOption('no-scripts', null, InputOption::VALUE_NONE, 'Whether to prevent execution of all defined scripts in the root package.'),
3140 new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'),
3141 new InputOption('no-secure-http', null, InputOption::VALUE_NONE, 'Disable the secure-http config option temporarily while installing the root package. Use at your own risk. Using this flag is a bad idea.'),
3142 new InputOption('keep-vcs', null, InputOption::VALUE_NONE, 'Whether to prevent deleting the vcs folder.'),
3143 new InputOption('remove-vcs', null, InputOption::VALUE_NONE, 'Whether to force deletion of the vcs folder without prompting.'),
3144 new InputOption('no-install', null, InputOption::VALUE_NONE, 'Whether to skip installation of the package dependencies.'),
3145 new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'),
3148 The <info>create-project</info> command creates a new project from a given
3149 package into a new directory. If executed without params and in a directory
3150 with a composer.json file it installs the packages for the current project.
3152 You can use this command to bootstrap new projects or setup a clean
3153 version-controlled installation for developers of your project.
3155 <info>php composer.phar create-project vendor/project target-directory [version]</info>
3157 You can also specify the version with the package name using = or : as separator.
3159 <info>php composer.phar create-project vendor/project:version target-directory</info>
3161 To install unstable packages, either specify the version you want, or use the
3162 --stability=dev (where dev can be one of RC, beta, alpha or dev).
3164 To setup a developer workable version you should create the project using the source
3165 controlled code by appending the <info>'--prefer-source'</info> flag.
3167 To install a package from another repository than the default one you
3168 can pass the <info>'--repository=https://myrepository.org'</info> flag.
3175 protected function execute(InputInterface $input, OutputInterface $output)
3177 $config = Factory::createConfig();
3178 $io = $this->getIO();
3180 list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input, true);
3182 if ($input->getOption('dev')) {
3183 $io->writeError('<warning>You are using the deprecated option "dev". Dev packages are installed by default now.</warning>');
3185 if ($input->getOption('no-custom-installers')) {
3186 $io->writeError('<warning>You are using the deprecated option "no-custom-installers". Use "no-plugins" instead.</warning>');
3187 $input->setOption('no-plugins', true);
3190 return $this->installProject(
3194 $input->getArgument('package'),
3195 $input->getArgument('directory'),
3196 $input->getArgument('version'),
3197 $input->getOption('stability'),
3200 !$input->getOption('no-dev'),
3201 $input->getOption('repository') ?: $input->getOption('repository-url'),
3202 $input->getOption('no-plugins'),
3203 $input->getOption('no-scripts'),
3204 $input->getOption('keep-vcs'),
3205 $input->getOption('no-progress'),
3206 $input->getOption('no-install'),
3207 $input->getOption('ignore-platform-reqs'),
3208 !$input->getOption('no-secure-http'),
3209 $input->getOption('remove-vcs')
3213 public function installProject(IOInterface $io, Config $config, InputInterface $input, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repository = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false, $noInstall = false, $ignorePlatformReqs = false, $secureHttp = true, $removeVcs = false)
3218 $io->loadConfiguration($config);
3220 $this->suggestedPackagesReporter = new SuggestedPackagesReporter($io);
3222 if ($packageName !== null) {
3223 $installedFromVcs = $this->installRootPackage($io, $config, $packageName, $directory, $packageVersion, $stability, $preferSource, $preferDist, $installDevPackages, $repository, $disablePlugins, $noScripts, $keepVcs, $noProgress, $ignorePlatformReqs, $secureHttp);
3225 $installedFromVcs = false;
3228 $composer = Factory::create($io, null, $disablePlugins);
3229 $composer->getDownloadManager()->setOutputProgress(!$noProgress);
3231 $fs = new Filesystem();
3233 if ($noScripts === false) {
3235 $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_ROOT_PACKAGE_INSTALL, $installDevPackages);
3239 $config = $composer->getConfig();
3240 list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input);
3243 if ($noInstall === false) {
3244 $installer = Installer::create($io, $composer);
3245 $installer->setPreferSource($preferSource)
3246 ->setPreferDist($preferDist)
3247 ->setDevMode($installDevPackages)
3248 ->setRunScripts(!$noScripts)
3249 ->setIgnorePlatformRequirements($ignorePlatformReqs)
3250 ->setSuggestedPackagesReporter($this->suggestedPackagesReporter)
3251 ->setOptimizeAutoloader($config->get('optimize-autoloader'));
3253 if ($disablePlugins) {
3254 $installer->disablePlugins();
3257 $status = $installer->run();
3258 if (0 !== $status) {
3263 $hasVcs = $installedFromVcs;
3266 && $installedFromVcs
3269 || !$io->isInteractive()
3270 || $io->askConfirmation('<info>Do you want to remove the existing VCS (.git, .svn..) history?</info> [<comment>Y,n</comment>]? ', true)
3273 $finder = new Finder();
3274 $finder->depth(0)->directories()->in(getcwd())->ignoreVCS(false)->ignoreDotFiles(false);
3275 foreach (array('.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg', '.fslckout', '_FOSSIL_') as $vcsName) {
3276 $finder->name($vcsName);
3280 $dirs = iterator_to_array($finder);
3282 foreach ($dirs as $dir) {
3283 if (!$fs->removeDirectory($dir)) {
3284 throw new \RuntimeException('Could not remove '.$dir);
3287 } catch (\Exception $e) {
3288 $io->writeError('<error>An error occurred while removing the VCS metadata: '.$e->getMessage().'</error>');
3296 $package = $composer->getPackage();
3297 $configSource = new JsonConfigSource(new JsonFile('composer.json'));
3298 foreach (BasePackage::$supportedLinkTypes as $type => $meta) {
3299 foreach ($package->{'get'.$meta['method']}() as $link) {
3300 if ($link->getPrettyConstraint() === 'self.version') {
3301 $configSource->addLink($type, $link->getTarget(), $package->getPrettyVersion());
3307 if ($noScripts === false) {
3309 $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_CREATE_PROJECT_CMD, $installDevPackages);
3313 $vendorComposerDir = $config->get('vendor-dir').'/composer';
3314 if (is_dir($vendorComposerDir) && $fs->isDirEmpty($vendorComposerDir)) {
3315 Silencer::call('rmdir', $vendorComposerDir);
3316 $vendorDir = $config->get('vendor-dir');
3317 if (is_dir($vendorDir) && $fs->isDirEmpty($vendorDir)) {
3318 Silencer::call('rmdir', $vendorDir);
3325 protected function installRootPackage(IOInterface $io, Config $config, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repository = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false, $ignorePlatformReqs = false, $secureHttp = true)
3328 $config->merge(array('config' => array('secure-http' => false)));
3331 if (null === $repository) {
3332 $sourceRepo = new CompositeRepository(RepositoryFactory::defaultRepos($io, $config));
3334 $sourceRepo = RepositoryFactory::fromString($io, $config, $repository, true);
3337 $parser = new VersionParser();
3338 $requirements = $parser->parseNameVersionPairs(array($packageName));
3339 $name = strtolower($requirements[0]['name']);
3340 if (!$packageVersion && isset($requirements[0]['version'])) {
3341 $packageVersion = $requirements[0]['version'];
3344 if (null === $stability) {
3345 if (preg_match('{^[^,\s]*?@('.implode('|', array_keys(BasePackage::$stabilities)).')$}i', $packageVersion, $match)) {
3346 $stability = $match[1];
3348 $stability = VersionParser::parseStability($packageVersion);
3352 $stability = VersionParser::normalizeStability($stability);
3354 if (!isset(BasePackage::$stabilities[$stability])) {
3355 throw new \InvalidArgumentException('Invalid stability provided ('.$stability.'), must be one of: '.implode(', ', array_keys(BasePackage::$stabilities)));
3358 $pool = new Pool($stability);
3359 $pool->addRepository($sourceRepo);
3362 $prettyPhpVersion = null;
3363 if (!$ignorePlatformReqs) {
3364 $platformOverrides = $config->get('platform') ?: array();
3366 $platform = new PlatformRepository(array(), $platformOverrides);
3367 $phpPackage = $platform->findPackage('php', '*');
3368 $phpVersion = $phpPackage->getVersion();
3369 $prettyPhpVersion = $phpPackage->getPrettyVersion();
3373 $versionSelector = new VersionSelector($pool);
3374 $package = $versionSelector->findBestCandidate($name, $packageVersion, $phpVersion, $stability);
3377 $errorMessage = "Could not find package $name with " . ($packageVersion ? "version $packageVersion" : "stability $stability");
3378 if ($phpVersion && $versionSelector->findBestCandidate($name, $packageVersion, null, $stability)) {
3379 throw new \InvalidArgumentException($errorMessage .' in a version installable using your PHP version '.$prettyPhpVersion.'.');
3382 throw new \InvalidArgumentException($errorMessage .'.');
3385 if (null === $directory) {
3386 $parts = explode("/", $name, 2);
3387 $directory = getcwd() . DIRECTORY_SEPARATOR . array_pop($parts);
3391 if (function_exists('pcntl_async_signals')) {
3392 @mkdir($directory, 0777, true);
3393 if ($realDir = realpath($directory)) {
3394 pcntl_async_signals(true);
3395 pcntl_signal(SIGINT, function () use ($realDir) {
3396 $fs = new Filesystem();
3397 $fs->removeDirectory($realDir);
3403 $io->writeError('<info>Installing ' . $package->getName() . ' (' . $package->getFullPrettyVersion(false) . ')</info>');
3405 if ($disablePlugins) {
3406 $io->writeError('<info>Plugins have been disabled.</info>');
3409 if ($package instanceof AliasPackage) {
3410 $package = $package->getAliasOf();