PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  pYe@s(dZdcZddZeeZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ dddZ ee jZdjdddZejedZedkrdZeedjdddZd Zd!Zd"gZd#gZeZZd$d%d$d&d'Zd(d)Z d*d+Z!d,d-Z"d.d/Z#d0d1d2d3Z$d4d5Z%d6d7Z&d$d$d$d8d9Z'd$d$d$d:d;Z(d<d<d=d>Z)d?d@Z*e+Z,d$dAd$dBe,dCdDZ-GdEdFdFZ.GdGdHdHZ/GdIdJdJe/Z0GdKdLdLZ1GdMdNdNe1e0Z2GdOdPdPe1e/Z3gZ4GdQdRdRe1e/Z5GdSdTdTZ6GdUdVdVZ7GdWdXdXZ8GdYdZdZZ9d$d[d\Z:d]d^Z;d_d`Z<dadbZ=d$S)ea^Core implementation of path-based import. This module is NOT meant to be directly imported! It has been designed such that it can be bootstrapped into Python as the implementation of import. As such it requires the injection of specific modules and attributes in order to work. One should use importlib as the public-facing version of this module. wincygwindarwincsXtjjtrHtjjtr-dndfdd}n dd}|S)N PYTHONCASEOKs PYTHONCASEOKcs tjkS)z5True if filenames must be checked case-insensitively.)_osenviron)keyr2/opt/python35/lib/python3.5/_bootstrap_external.py _relax_case%sz%_make_relax_case.._relax_casecSsdS)z5True if filenames must be checked case-insensitively.Frrrrr r )s)sysplatform startswith_CASE_INSENSITIVE_PLATFORMS#_CASE_INSENSITIVE_PLATFORMS_STR_KEY)r r)rr _make_relax_cases  rcCst|d@jddS)z*Convert a 32-bit integer to little-endian.llittle)intto_bytes)xrrr _w_long/srcCstj|dS)z/Convert 4 bytes in little-endian to an integer.r)r from_bytes) int_bytesrrr _r_long4srcGstjdd|DS)zReplacement for os.path.join().cSs%g|]}|r|jtqSr)rstrippath_separators).0partrrr ;s z_path_join..)path_sepjoin) path_partsrrr _path_join9sr"cCsttdkr4|jt\}}}||fSxEt|D]7}|tkrA|j|dd\}}||fSqAWd|fS)z Replacement for os.path.split().maxsplit)lenr rpartitionrreversedrsplit)pathfront_tailrrrr _path_split?s  r.cCs tj|S)z~Stat the path. Made a separate function to make it easier to override in experiments (e.g. cache stat results). )rstat)r*rrr _path_statKsr0c Cs:yt|}Wntk r(dSYnX|jd@|kS)z1Test whether the path is the specified mode type.Fi)r0OSErrorst_mode)r*mode stat_inforrr _path_is_mode_typeUs   r5cCs t|dS)zReplacement for os.path.isfile.i)r5)r*rrr _path_isfile^sr6cCs|stj}t|dS)zReplacement for os.path.isdir.i@)rgetcwdr5)r*rrr _path_isdircs r8icCsdj|t|}tj|tjtjBtjB|d@}y=tj|d}|j |WdQRXtj ||Wn;t k rytj |Wnt k rYnXYnXdS)zBest-effort function to write data to a path atomically. Be prepared to handle a FileExistsError if concurrent writing of the temporary file is attempted.z{}.{}iwbN) formatidropenO_EXCLO_CREATO_WRONLY_ioFileIOwritereplacer1unlink)r*datar3path_tmpfdfilerrr _write_atomicjs !  rIi rs i zAMagic number mismatch (the issue27286 workaround is for 3.5 only)i __pycache__zopt-z.pyz.pycN optimizationc CsW|dk rLtjdt|dk r:d}t||rFdnd}t|\}}|jd\}}}tjj} | dkrt ddj |r|n||| g} |dkrtj j dkrd}n tj j }t |}|dkr?|js*td j|d j| t|} t|t| tdS) aGiven the path to a .py file, return the path to its .pyc file. The .py file does not need to exist; this simply returns the path to the .pyc file calculated as if the .py file were imported. The 'optimization' parameter controls the presumed optimization level of the bytecode file. If 'optimization' is not None, the string representation of the argument is taken and verified to be alphanumeric (else ValueError is raised). The debug_override parameter is deprecated. If debug_override is not None, a True value is the same as setting 'optimization' to the empty string while a False value is equivalent to setting 'optimization' to '1'. If sys.implementation.cache_tag is None then NotImplementedError is raised. NzFthe debug_override parameter is deprecated; use 'optimization' insteadz2debug_override or optimization must be set to Noner%r#.z$sys.implementation.cache_tag is Nonez{!r} is not alphanumericz{}.{}{}) _warningswarnDeprecationWarning TypeErrorr.r'r implementation cache_tagNotImplementedErrorr flagsoptimizestrisalnum ValueErrorr:_OPTr"_PYCACHEBYTECODE_SUFFIXES) r*debug_overriderLmessageheadr-basesepresttagalmost_filenamerrr cache_from_sources.       $      rfcCs>tjjdkrtdt|\}}t|\}}|tkrftdjt||jd}|d krtdj|n}|dkr|j ddd }|j t stdjt |t t d}|j std j||jdd }t||td S) anGiven the path to a .pyc. file, return the path to its .py file. The .pyc file does not need to exist; this simply returns the path to the .py file calculated to correspond to the .pyc file. If path does not conform to PEP 3147/488 format, ValueError will be raised. If sys.implementation.cache_tag is None then NotImplementedError is raised. Nz$sys.implementation.cache_tag is Nonez%{} not bottom-level directory in {!r}rMrJz!expected only 2 or 3 dots in {!r}z9optimization portion of filename does not start with {!r}z4optimization level {!r} is not an alphanumeric valuerN>rJrg)r rSrTrUr.r\rZr:countr)r r[r&rY partitionr"SOURCE_SUFFIXES)r*r`pycache_filenamepycache dot_countrL opt_level base_filenamerrr source_from_cache@s,            rqc Cst|dkrdS|jd\}}}| sQ|jdddkrU|Syt|}Wn(ttfk r|dd }YnXt|r|S|S) zConvert a bytecode file path to a source path (if possible). This function exists purely for backwards-compatibility for PyImport_ExecCodeModuleWithFilenames() in the C API. rNNrMrgr#pyrt)r&r'lowerrqrUrZr6) bytecode_pathrcr, extension source_pathrrr _get_sourcefileas#ryc Cs\|jttr;yt|SWqXtk r7YqXXn|jttrT|SdSdS)N)endswithtuplerkrfrUr])filenamerrr _get_cachedts r}c Cs<yt|j}Wntk r-d}YnX|dO}|S)z3Calculate the mode permissions for a bytecode file.i)r0r2r1)r*r3rrr _calc_modes    r verbosityr#cGsKtjj|krG|jds+d|}t|j|dtjdS)z=Print the message to stderr if -v/PYTHONVERBOSE is turned on.#import z# rHN)rr)r rVverboser printr:stderr)r_rargsrrr _verbose_messages rc sTdfdd}y tj}Wntk rBdd}YnX|||S)zDecorator to verify that the module being requested matches the one the loader can handle. The first argument (self) must define _name which the second argument is compared against. If the comparison fails then ImportError is raised. NcsY|dkr|j}n.|j|krFtd|j|fd|||||S)Nzloader for %s cannot handle %sname)r ImportError)selfrrkwargs)methodrr _check_name_wrappers   z(_check_name.._check_name_wrappercSs\xBddddgD].}t||rt||t||qW|jj|jdS)N __module____name__ __qualname____doc__)hasattrsetattrgetattr__dict__update)newoldrCrrr _wrapsz_check_name.._wrap) _bootstrapr NameError)rrrr)rr _check_names   rcCsT|j|\}}|dkrPt|rPd}tj|j|dt|S)zTry to find a loader for the specified module by delegating to self.find_loader(). This method is deprecated in favor of finder.find_spec(). Nz,Not importing directory {}: missing __init__rN) find_loaderr&rOrPr: ImportWarning)rfullnameloaderportionsmsgrrr _find_module_shims rc Csi}|dk r||dXt || krd j|}td |t||y|dd@} Wntk rYn+Xt || krtd j|||ddS)azValidate the header of the passed-in bytecode against source_stats (if given) and returning the bytecode that can be compiled by compile(). All other arguments are used to enhance error reporting. ImportError is raised when the magic number is incorrect or the bytecode is found to be stale. EOFError is raised when the data is found to be truncated. Nrz r*r zbad magic number in {!r}: {!r}z{}z+reached EOF while reading timestamp in {!r}z0reached EOF while reading size of source in {!r}mtimezbytecode is stale for {!r}sizel) MAGIC_NUMBER_BACKCOMPAT_MAGIC_NUMBERr:rrr&EOFErrorrKeyErrorr) rE source_statsrr* exc_detailsmagic raw_timestampraw_sizer_ source_mtime source_sizerrr _validate_bytecode_headersN                rcCsptj|}t|trKtd||dk rGtj|||Stdj|d|d|dS)z get_filenameoriginT is_packagerN)rrrr ModuleSpec _set_fileattr_get_supported_file_loadersrzr{r _POPULATErrr.append) rlocationrrspec loader_classsuffixesrdirnamerrr spec_from_file_location!s<         rc@syeZdZdZdZdZdZeddZeddZ ed d d d Z ed d d Z d S)WindowsRegistryFinderz>Meta path finder for modules declared in the Windows registry.z;Software\Python\PythonCore\{sys_version}\Modules\{fullname}zASoftware\Python\PythonCore\{sys_version}\Modules\{fullname}\DebugFc CsCytjtj|SWn%tk r>tjtj|SYnXdS)N)_winregOpenKeyHKEY_CURRENT_USERr1HKEY_LOCAL_MACHINE)clsrrrr _open_registryos z$WindowsRegistryFinder._open_registrycCs|jr|j}n |j}|jd|dtjdd}y/|j|}tj|d}WdQRXWnt k rdSYnX|S)Nr sys_versionrgr%) DEBUG_BUILDREGISTRY_KEY_DEBUG REGISTRY_KEYr:r versionrr QueryValuer1)rr registry_keyrhkeyfilepathrrr _search_registryvs     z&WindowsRegistryFinder._search_registryNcCs|j|}|dkrdSyt|Wntk rEdSYnXxQtD]F\}}|jt|rPtj||||d|}|SqPWdS)Nr)rr0r1rrzr{rspec_from_loader)rrr*targetrrrrrrr find_specs     zWindowsRegistryFinder.find_speccCs-|j||}|dk r%|jSdSdS)zlFind module named in the registry. This method is deprecated. Use exec_module() instead. N)rr)rrr*rrrr find_modules z!WindowsRegistryFinder.find_module) rrrrrrr classmethodrrrrrrrr rcs rc@sFeZdZdZddZddZddZdd Zd S) _LoaderBasicszSBase class of common code needed by both SourceLoader and SourcelessFileLoader.cCsXt|j|d}|jddd}|jdd}|dkoW|dkS)zConcrete implementation of InspectLoader.is_package by checking if the path returned by get_filename has a filename of '__init__.py'.r#rMrNrJ__init__)r.rr)r')rrr| filename_base tail_namerrr rsz_LoaderBasics.is_packagecCsdS)z*Use default semantics for module creation.Nr)rrrrr create_modulesz_LoaderBasics.create_modulecCsP|j|j}|dkr6tdj|jtjt||jdS)zExecute the module.Nz4cannot load module {!r} when get_code() returns None)get_coderrr:r_call_with_frames_removedexecr)rmodulerrrr exec_modules   z_LoaderBasics.exec_modulecCstj||S)N)r_load_module_shim)rrrrr load_modulesz_LoaderBasics.load_moduleN)rrrrrrrrrrrr rs    rc@sjeZdZddZddZddZddZd d Zd dd dZddZ dS) SourceLoadercCs tdS)zOptional method that returns the modification time (an int) for the specified path, where path is a str. Raises IOError when the path cannot be handled. N)IOError)rr*rrr path_mtimeszSourceLoader.path_mtimecCsd|j|iS)aOptional method returning a metadata dict for the specified path to by the path (str). Possible keys: - 'mtime' (mandatory) is the numeric timestamp of last source code modification; - 'size' (optional) is the size in bytes of the source code. Implementing this method allows the loader to read bytecode files. Raises IOError when the path cannot be handled. r)r)rr*rrr path_statss zSourceLoader.path_statscCs|j||S)zOptional method which writes data (bytes) to a file path (a str). Implementing this method allows for the writing of bytecode files. The source path is needed in order to correctly transfer permissions )set_data)rrx cache_pathrErrr _cache_bytecodeszSourceLoader._cache_bytecodecCsdS)zOptional method which writes data (bytes) to a file path (a str). Implementing this method allows for the writing of bytecode files. Nr)rr*rErrr rszSourceLoader.set_datacCsi|j|}y|j|}Wn:tk r^}ztdd||WYdd}~XnXt|S)z4Concrete implementation of InspectLoader.get_source.z'source not available through get_data()rN)rget_datar1rr)rrr*rexcrrr get_sources zSourceLoader.get_source _optimizer#c Cs"tjt||dddd|S)zReturn the code object compiled from source. The 'data' argument can be any object type that compile() supports. r dont_inheritTrW)rrcompile)rrEr*rrrr source_to_codeszSourceLoader.source_to_codec +Cs|j|}d}yt|}Wntk r?d}YnXy|j|}Wntk rgYnXt|d}y|j|}Wntk rYnjXy"t|d|d|d|}Wnt t fk rYn-Xt d||t |d|d|d|S|j|}|j ||} t d |tj r|dk r|dk rt| |t|}y$|j|||t d |Wntk rYnX| S) zConcrete implementation of InspectLoader.get_code. Reading of bytecode requires path_stats to be implemented. To write bytecode, set_data must also be implemented. Nrrrr*z {} matches {}rvrxzcode object from {}z wrote {!r})rrfrUrrrrr1rrrrrr r dont_write_bytecoderr&r) rrrxrrvstrE bytes_datar code_objectrrr rsN            zSourceLoader.get_codeNrt) rrrrrrrrr rrrrr rs    rcspeZdZdZddZddZddZefdd Zed d Z d d Z S) FileLoaderzgBase file loader class which implements the loader protocol methods that require file system usage.cCs||_||_dS)zKCache the module name and the path to the file found by the finder.N)rr*)rrr*rrr r2s zFileLoader.__init__cCs"|j|jko!|j|jkS)N) __class__r)rotherrrr __eq__8szFileLoader.__eq__cCst|jt|jAS)N)hashrr*)rrrr __hash__<szFileLoader.__hash__cstt|j|S)zdLoad a module from a file. This method is deprecated. Use exec_module() instead. )superrr)rr)rrr r?s zFileLoader.load_modulecCs|jS)z:Return the path to the source file as found by the finder.)r*)rrrrr rKszFileLoader.get_filenamec Cs*tj|d}|jSWdQRXdS)z'Return the data from path as raw bytes.rN)r@rAread)rr*rHrrr rPszFileLoader.get_data) rrrrrrrrrrrrr)rr r-s     rc@s@eZdZdZddZddZdddd Zd S) SourceFileLoaderz>Concrete implementation of SourceLoader using the file system.cCs"t|}d|jd|jiS)z!Return the metadata for the path.rr)r0st_mtimest_size)rr*r rrr rZs zSourceFileLoader.path_statscCs"t|}|j||d|S)N_mode)rr)rrxrvrEr3rrr r_s z SourceFileLoader._cache_bytecoderic Cs5t|\}}g}x6|rPt| rPt|\}}|j|qWxt|D]v}t||}ytj|Wq^tk rw^Yq^tk r}zt d||dSWYdd}~Xq^Xq^Wy!t |||t d|Wn5tk r0}zt d||WYdd}~XnXdS)zWrite bytes data to a file.zcould not create {!r}: {!r}Nz created {!r}) r.r8rr(r"rmkdirFileExistsErrorr1rrI) rr*rErparentr|r!rrrrr rds& zSourceFileLoader.set_dataN)rrrrrrrrrrr rVs   rc@s.eZdZdZddZddZdS)SourcelessFileLoaderz-Loader which handles sourceless file imports.cCsL|j|}|j|}t|d|d|}t|d|d|S)Nrr*rv)rrrr)rrr*rEr rrr rszSourcelessFileLoader.get_codecCsdS)z'Return None as there is no source code.Nr)rrrrr rszSourcelessFileLoader.get_sourceN)rrrrrrrrrr rs  rc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ e ddZ dS)ExtensionFileLoaderz]Loader for extension modules. The constructor is designed to work with FileFinder. cCs||_||_dS)N)rr*)rrr*rrr rs zExtensionFileLoader.__init__cCs"|j|jko!|j|jkS)N)rr)rrrrr rszExtensionFileLoader.__eq__cCst|jt|jAS)N)rrr*)rrrr rszExtensionFileLoader.__hash__cCs/tjtj|}td|j|j|S)z&Create an unitialized extension modulez&extension module {!r} loaded from {!r})rrrcreate_dynamicrrr*)rrrrrr rs z!ExtensionFileLoader.create_modulecCs-tjtj|td|j|jdS)zInitialize an extension modulez(extension module {!r} executed from {!r}N)rrr exec_dynamicrrr*)rrrrr rszExtensionFileLoader.exec_modulecs0t|jdtfddtDS)z1Return True if the extension module is a package.r#c3s|]}d|kVqdS)rNr)rsuffix) file_namerr sz1ExtensionFileLoader.is_package..)r.r*anyEXTENSION_SUFFIXES)rrr)r#r rszExtensionFileLoader.is_packagecCsdS)z?Return None as an extension module cannot create a code object.Nr)rrrrr rszExtensionFileLoader.get_codecCsdS)z5Return None as extension modules have no source code.Nr)rrrrr rszExtensionFileLoader.get_sourcecCs|jS)z:Return the path to the source file as found by the finder.)r*)rrrrr rsz ExtensionFileLoader.get_filenameN)rrrrrrrrrrrrrrrrrr rs         rc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)_NamespacePatha&Represents a namespace package's path. It uses the module name to find its parent module, and from there it looks up the parent's __path__. When this changes, the module's own path is recomputed, using path_finder. For top-level modules, the parent module's path is sys.path.cCs4||_||_t|j|_||_dS)N)_name_pathr{_get_parent_path_last_parent_path _path_finder)rrr* path_finderrrr rs  z_NamespacePath.__init__cCs5|jjd\}}}|dkr+dS|dfS)z>Returns a tuple of (parent-module-name, parent-path-attr-name)rMr%r r*__path__)r r*)r(r')rrdotmerrr _find_parent_path_namess z&_NamespacePath._find_parent_path_namescCs&|j\}}ttj||S)N)r1rr modules)rparent_module_namepath_attr_namerrr r*sz_NamespacePath._get_parent_pathcCsvt|j}||jkro|j|j|}|dk rf|jdkrf|jrf|j|_||_|jS)N)r{r*r+r,r(rrr))r parent_pathrrrr _recalculates   z_NamespacePath._recalculatecCst|jS)N)iterr6)rrrr __iter__sz_NamespacePath.__iter__cCst|jS)N)r&r6)rrrr __len__sz_NamespacePath.__len__cCsdj|jS)Nz_NamespacePath({!r}))r:r))rrrr __repr__sz_NamespacePath.__repr__cCs||jkS)N)r6)ritemrrr __contains__sz_NamespacePath.__contains__cCs|jj|dS)N)r)r)rr;rrr rsz_NamespacePath.appendN) rrrrrr1r*r6r8r9r:r<rrrrr r's       r'c@sveZdZddZeddZddZddZd d Zd d Z d dZ ddZ dS)_NamespaceLoadercCst||||_dS)N)r'r))rrr*r-rrr rsz_NamespaceLoader.__init__cCsdj|jS)zsReturn repr for the module. The method is deprecated. The import machinery does the job itself. z)r:r)rrrrr module_reprsz_NamespaceLoader.module_reprcCsdS)NTr)rrrrr rsz_NamespaceLoader.is_packagecCsdS)Nr%r)rrrrr rsz_NamespaceLoader.get_sourcecCstdddddS)Nr%zrrT)r)rrrrr rsz_NamespaceLoader.get_codecCsdS)z*Use default semantics for module creation.Nr)rrrrr rsz_NamespaceLoader.create_modulecCsdS)Nr)rrrrr rsz_NamespaceLoader.exec_modulecCs td|jtj||S)zbLoad a namespace module. This method is deprecated. Use exec_module() instead. z&namespace module loaded with path {!r})rr)rr)rrrrr rsz_NamespaceLoader.load_moduleN) rrrrrr>rrrrrrrrrr r=s       r=c@seZdZdZeddZeddZeddZedd Zed d d Z ed d d dZ ed ddZ d S) PathFinderz>Meta path finder for sys.path and package __path__ attributes.cCs7x0tjjD]}t|dr|jqWdS)z}Call the invalidate_caches() method on all path entry finders stored in sys.path_importer_caches (where implemented).invalidate_cachesN)r path_importer_cachevaluesrr@)rfinderrrr r@/szPathFinder.invalidate_cachesc Csktjdk r)tj r)tjdtx;tjD],}y||SWq3tk r^w3Yq3Xq3WdSdS)zqSearch sequence of hooks for a finder for 'path'. If 'hooks' is false then use sys.path_hooks. Nzsys.path_hooks is empty)r path_hooksrOrPrr)rr*hookrrr _path_hooks7s  zPathFinder._path_hookscCs{|dkr5ytj}Wntk r4dSYnXytj|}Wn.tk rv|j|}|tj|.rMr#Nrt)r_loadersr* _path_mtimeset _path_cache_relaxed_path_cache)rr*loader_detailsloadersrr)rr rs$   zFileFinder.__init__cCs d|_dS)zInvalidate the directory mtime.r#Nrt)rQ)rrrr r@szFileFinder.invalidate_cachescCs;|j|}|dkr%dgfS|j|jp7gfS)zTry to find a loader for the specified module, or the namespace package portions. Returns (loader, list-of-portions). This method is deprecated. Use find_spec() instead. N)rrr)rrrrrr rs  zFileFinder.find_loadercCs(|||}t||d|d|S)Nrr)r)rrrr*smslrrrrr rMszFileFinder._get_specNcCsd}|jdd}y"t|jp1tjj}Wntk rUd }YnX||jkrx|j||_t r|j }|j }n|j }|}||kr-t |j|}xd|jD]M\} } d| } t || } t| r|j| || |g|SqWt|}x{|jD]p\} } t |j|| } tdj| dd|| |kr7t| r7|j| || d|Sq7W|rtd j|tj|d} |g| _| SdS) zfTry to find a spec for the specified module. Returns the matching spec, or None if not found.FrMrJr#rz trying {}rNzpossible namespace for {}rt)r'r0r*rr7rr1rQ _fill_cacher rTrurSr"rPr6rMr8rr:rrr)rrr is_namespace tail_modulercache cache_module base_pathr"r init_filename full_pathrrrr rsD"              zFileFinder.find_specc Cs |j}ytj|p!tj}Wn!tttfk rKg}YnXtjj dspt ||_ not }xZ|D]R}|j d\}}}|rdj ||j}n|}|j|qW||_ tjj trdd|D|_dS)zDFill the cache of potential modules and packages for this directory.rrMz{}.{}cSsh|]}|jqSr)ru)rfnrrr )s z)FileFinder._fill_cache..N)r*rlistdirr7rGPermissionErrorNotADirectoryErrorr r r rRrSrjr:ruaddrrT) rr*contentslower_suffix_contentsr;rr/r"new_namerrr rX s"     zFileFinder._fill_cachecsfdd}|S)aA class method which returns a closure to use on sys.path_hook which will return an instance using the specified loaders and the path called on the closure. If the path called on the closure is not a directory, ImportError is raised. cs+t|stdd||S)z-Path hook for importlib.machinery.FileFinder.zonly directories are supportedr*)r8r)r*)rrUrr path_hook_for_FileFinder5s z6FileFinder.path_hook..path_hook_for_FileFinderr)rrUrir)rrUr path_hook+s zFileFinder.path_hookcCsdj|jS)NzFileFinder({!r}))r:r*)rrrr r:=szFileFinder.__repr__)rrrrrr@rrrrMrrXrrjr:rrrr rOs    - rOc Cs|jd}|jd}|sc|r6|j}n-||krTt||}nt||}|s~t||d|}y,||d<||d<||d<||drr%_CASE_INSENSITIVE_PLATFORMS_BYTES_KEYrrrrr"r.r0r5r6r8rItype__code__rrrrr_RAW_MAGIC_NUMBERZ_msg SystemErrorrr\r[rkr]DEBUG_BYTECODE_SUFFIXESOPTIMIZED_BYTECODE_SUFFIXESrfrqryr}rrrrrrrrobjectrrrrrrrrr&rr'r=r?rOrtrrrrrrr sr      r     , !    9    A@n)+59) D