
    b                        S r SSKJr  SSKJr  SSKJr  SSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKJr  SSKJr  SSKJr   SS	KJr   SS
KJr  SrSr " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\ 5      r! " S S\5      r"S r# " S S\5      r$ " S  S!\5      r% " S" S#\5      r&\RN                  \RP                  \RR                  \RT                  S$.r+\RX                  " \RZ                  " \.S%9S&9r/\RX                  " \RZ                  " \.S%9\RZ                  " \.S%9\RZ                  " \.S%9\RZ                  " \.S%9\RX                  " \RZ                  " \.S%9\R`                  " \RZ                  " \.S%9S'9S(9\/\/\/\/S)9	r1S*r2S+r3 " S, S-\5      r4g! \ a
    SS	KJr   GN|f = f! \ a    SSKr GNf = f).z"Support for externalized runtimes.    )absolute_import)division)print_functionN   )comm)input)schema)py27_subprocesszWriting [{0}] to [{1}].z%Not writing [{0}], it already exists.c                       \ rS rSrSrSrg)Error/   z)Base class for exceptions in this module. N__name__
__module____qualname____firstlineno____doc____static_attributes__r       .lib/third_party/gae_ext_runtime/ext_runtime.pyr   r   /   s    1r   r   c                       \ rS rSrSrSrg)PluginInvocationFailed3   z?Raised when a plugin invocation returns a non-zero result code.r   Nr   r   r   r   r   r   3   s    Gr   r   c                       \ rS rSrSrSrg)InvalidRuntimeDefinition7   z@Raised when an inconsistency is found in the runtime definition.r   Nr   r   r   r   r   r   7   s    Hr   r   c                   (    \ rS rSrSrSS jrS rSrg)Params<   a  Parameters passed to the the runtime module Fingerprint() methods.

Attributes:
  appinfo: (apphosting.api.appinfo.AppInfoExternal or None) The parsed
    app.yaml file for the module if it exists.
  custom: (bool) True if the Configurator should generate a custom runtime.
  runtime (str or None) Runtime (alias allowed) that should be enforced.
  deploy: (bool) True if this is happening from deployment.
Nc                 4    Xl         X l        X0l        X@l        g Nappinfocustomruntimedeploy)selfr$   r%   r&   r'   s        r   __init__Params.__init__G   s    LKLKr   c                     U R                   =(       a    U R                   R                  5       U R                  U R                  U R                  S.$ )zReturns the object converted to a dictionary.

Returns:
  ({str: object}) A dictionary that can be converted to json using
  json.dump().
r#   )r$   ToDictr%   r&   r'   r(   s    r   r,   Params.ToDictM   s<     ||=(;(;(=kk||kk# #r   )r$   r%   r'   r&   )NFNF)r   r   r   r   r   r)   r,   r   r   r   r   r   r   <   s    
#r   r   c                   *    \ rS rSrSrS rS rS rSrg)ConfiguratorZ   zBase configurator class.

Configurators generate config files for specific classes of runtimes.  They
are returned by the Fingerprint functions in the runtimes sub-package after
a successful match of the runtime's heuristics.
c                     g)aH  Collect all information on this application.

This is called after the runtime type is detected and may gather
additional information from the source code and from the user.  Whereas
performing user queries during detection is deprecated, user queries are
allowed in CollectData().

The base class version of this does nothing.
Nr   r-   s    r   CollectDataConfigurator.CollectDatab       r   c                     g)zRun additional build behavior before the application is deployed.

This is called after the runtime type has been detected and after any
additional data has been collected.

The base class version of this does nothing.
Nr   r-   s    r   PrebuildConfigurator.Prebuildm   r5   r   c                     [        5       e)zGenerate all configuration files for the module.

Generates config files in the current working directory.

Returns:
  (callable()) Function that will delete all of the generated files.
NotImplementedErrorr-   s    r   GenerateConfigsConfigurator.GenerateConfigsv   s     
r   r   N)	r   r   r   r   r   r3   r7   r<   r   r   r   r   r0   r0   Z   s    	 r   r0   c                   0    \ rS rSrSrS rS rS rS rSr	g)	ExecutionEnvironment   zAn interface for providing system functionality to a runtime definition.

Abstract interface containing methods for console IO and system
introspection.  This exists to allow gcloud to inject special functionality.
c                     [        5       e)z5Returns the full path of the python executable (str).r:   r-   s    r   GetPythonExecutable(ExecutionEnvironment.GetPythonExecutable       

r   c                     [        5       e)zReturns true r:   r-   s    r   	CanPromptExecutionEnvironment.CanPrompt   rD   r   c                     [        5       er"   r:   r(   messages     r   PromptResponse#ExecutionEnvironment.PromptResponse   s    

r   c                     [        5       e)z8Print a message to the console.

Args:
  message: (str)
r:   rI   s     r   PrintExecutionEnvironment.Print   s     
r   r   N
r   r   r   r   r   rB   rF   rK   rN   r   r   r   r   r?   r?      s        r   r?   c                   0    \ rS rSrSrS rS rS rS rSr	g)	DefaultExecutionEnvironment   z4Standard implementation of the ExecutionEnvironment.c                 "    [         R                  $ r"   )sys
executabler-   s    r   rB   /DefaultExecutionEnvironment.GetPythonExecutable   s    >>r   c                 >    [         R                  R                  5       $ r"   )rU   stdinisattyr-   s    r   rF   %DefaultExecutionEnvironment.CanPrompt   s    99r   c                     [         R                  R                  U5        [         R                  R                  5         [	        S5      $ )Nz> )rU   stdoutwriteflushr   rI   s     r   rK   *DefaultExecutionEnvironment.PromptResponse   s.    JJWJJ;r   c                     [        U5        g r"   )printrI   s     r   rN   !DefaultExecutionEnvironment.Print   s	    	'Nr   r   NrP   r   r   r   rR   rR      s    <
r   rR   c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)ExternalRuntimeConfigurator   a  Configurator for general externalized runtimes.

Attributes:
  runtime: (ExternalizedRuntime) The runtime that produced this.
  params: (Params) Runtime parameters.
  data: ({str: object, ...} or None) Optional dictionary of runtime data
    passed back through a runtime_parameters message.
  generated_appinfo: ({str: object, ...} or None) Generated appinfo if any
    is produced by the runtime.
  path: (str) Path to the user's source directory.
c                     Xl         X l        X0l        U(       a8  0 U l        SU;  a  SU R                  S'   U R                  R	                  U5        OSU l        XPl        X`l        g)a  Constructor.

Args:
  runtime: (ExternalizedRuntime) The runtime that produced this.
  params: (Params) Runtime parameters.
  data: ({str: object, ...} or None) Optional dictionary of runtime data
    passed back through a runtime_parameters message.
  generated_appinfo: ({str: object, ...} or None) Optional dictionary
    representing the contents of app.yaml if the runtime produces this.
  path: (str) Path to the user's source directory.
  env: (ExecutionEnvironment)
envflexN)r&   paramsdatagenerated_appinfoupdatepathrh   )r(   r&   rj   rk   rl   rn   rh   s          r   r)   $ExternalRuntimeConfigurator.__init__   sb     LKI  "d''(.u% ##$56#dIHr   c                    U R                   (       d  gU R                  R                  (       a  [        R                  OU R
                  R                  n[        R                  R                  U R                  S5      nU R                  R                  (       d$  [        R                  R                  U5      (       a  U" [        R                  S5      5        gU" [        R                  SU R                  5      5        [        US5       n[         R"                  " U R                   USS9  SSS5        g! , (       d  f       g= f)z8Generates the app.yaml file if it doesn't already exist.Napp.yamlwF)default_flow_style)rl   rj   r'   logginginforh   rN   osrn   joinr$   existsFILE_EXISTS_MESSAGEformatWRITING_FILE_MESSAGEopenyaml	safe_dump)r(   notifyfilenamefs       r   MaybeWriteAppYaml-ExternalRuntimeConfigurator.MaybeWriteAppYaml   s     !!![[//W\\TXX^^F ww||DIIz2H {{bggnnX66 ''
34
&&z499=>	h	
nnT++Q5I 
		s   !D55
Ec                     Xl         g)zSets the generated appinfo.N)rl   )r(   rl   s     r   SetGeneratedAppInfo/ExternalRuntimeConfigurator.SetGeneratedAppInfo   s    .r   c                 :    U R                   R                  U 5        g r"   )r&   r3   r-   s    r   r3   'ExternalRuntimeConfigurator.CollectData   s    LLT"r   c                 :    U R                   R                  U 5        g r"   )r&   r7   r-   s    r   r7   $ExternalRuntimeConfigurator.Prebuild   s    LL$r   c                    U R                  5         U R                  R                  (       d@  U R                  (       a/  [        R
                  " U R                  5      U R                  l        U R                  R                  U 5      $ r"   )r   rj   r$   rl   r   dict_to_objectr&   r<   r-   s    r   r<   +ExternalRuntimeConfigurator.GenerateConfigs   sW    
 ;;4#9#9 //0F0FGdkk<<''--r   c                    U R                  5         U R                  R                  (       d@  U R                  (       a/  [        R
                  " U R                  5      U R                  l        U R                  R                  U 5      $ r"   )r   rj   r$   rl   r   r   r&   GenerateConfigDatar-   s    r   r   .ExternalRuntimeConfigurator.GenerateConfigData  sW    
 ;;4#9#9 //0F0FGdkk<<**400r   )rk   rh   rl   rj   rn   r&   N)r   r   r   r   r   r)   r   r   r3   r7   r<   r   r   r   r   r   re   re      s+    
<J0/# .1r   re   c                 f    UR                  S5      n[        R                  R                  " U /UQ76 $ )a  Get the absolute path from a unix-style relative path.

Args:
  basedir: (str) Platform-specific encoding of the base directory.
  pathname: (str) A unix-style (forward slash separated) path relative to
    the runtime definition root directory.

Returns:
  (str) An absolute path conforming to the conventions of the operating
  system.  Note: in order for this to work, 'pathname' must not contain
  any characters with special meaning in any of the targeted operating
  systems.  Keep those names simple.
/)splitrv   rn   rw   )basedirpathname
componentss      r   _NormalizePathr     s*     ~~c"*	g	+
	++r   c                   $    \ rS rSrSrS rS rSrg)GeneratedFilei#  z0Wraps the name and contents of a generated file.c                     Xl         X l        g)zConstructor.

Args:
  filename: (str) Unix style file path relative to the target source
    directory.
  contents: (str) File contents.
N)r   contents)r(   r   r   s      r   r)   GeneratedFile.__init__&  s     MMr   c                    [        XR                  5      n[        R                  R	                  U5      (       dX  U" [
        R                  U R                  U5      5        [        US5       nUR                  U R                  5        SSS5        U$ U" [        R                  U R                  5      5        g! , (       d  f       U$ = f)a  Write the file to the destination directory.

Args:
  dest_dir: (str) Destination directory.
  notify: (callable(str)) Function to notify the user.

Returns:
  (str or None) The full normalized path name of the destination file,
  None if it wasn't generated because it already exists.
rr   N)r   r   rv   rn   rx   r{   rz   r|   r^   r   ry   )r(   dest_dirr   rn   r   s        r   WriteToGeneratedFile.WriteTo1  s     (MM2D77>>$!((ABc?a	 k ''67 ?ks   ,B88
C)r   r   N)r   r   r   r   r   r)   r   r   r   r   r   r   r   #  s    8	r   r   c                       \ rS rSrS rSrg)PluginResultiH  c                 J    SU l         S U l        S U l        S U l        / U l        g )N)	exit_coderuntime_datarl   docker_contextfilesr-   s    r   r)   PluginResult.__init__J  s(    DND!DDDJr   )r   r   r   rl   r   N)r   r   r   r   r)   r   r   r   r   r   r   H  s    r   r   c                       \ rS rSrSrS rSrg)
_CollectoriR  z0Manages a PluginResult in a thread-safe context.c                 V    [        5       U l        [        R                  " 5       U l        g r"   )r   result	threadingLocklockr-   s    r   r)   _Collector.__init__U  s    .DK DIr   )r   r   N)r   r   r   r   r   r)   r   r   r   r   r   r   R  s
    8!r   r   )ru   errorwarndebug)	converter)python)element)r   files_to_copy)	namedescriptionauthorapi_versiongenerate_configsdetectcollect_dataprebuild	postbuildz$Missing [{0}] field in [{1}] messagezTUser input requested: [{0}] while running non-interactive with no default specified.c                       \ rS rSrSrS r\S 5       r\S 5       r	S r
S rS r   SS
 jrS rS rS r\rS rS rS rSrg	)ExternalizedRuntimeix  z%Encapsulates an externalized runtime.c                     Xl         X0l         [        R                  U5      U l        g! [
         a)  n[        SR                  UR                  5      5      eSnAff = f)z
Args:
  path: (str) Path to the root of the runtime definition.
  config: ({str: object, ...}) The runtime definition configuration (from
    runtime.yaml).
  env: (ExecutionEnvironment)
zInvalid runtime definition: {0}N)	rootrh   _RUNTIME_SCHEMAConvertValueconfig
ValueErrorr   rz   rJ   )r(   rn   r   rh   exs        r   r)   ExternalizedRuntime.__init__{  s[     IH@ $008dk @$
+
2
22::
>@ @@s   ) 
A$AAc                 :    U R                   R                  SS5      $ )Nr   unnamed)r   getr-   s    r   r   ExternalizedRuntime.name  s    ;;??69--r   c                     [        [        R                  R                  U S5      5       n[	        U [
        R                  " U5      U5      sSSS5        $ ! , (       d  f       g= f)zLoads the externalized runtime from the specified path.

Args:
  path: (str) root directory of the runtime definition.  Should
    contain a "runtime.yaml" file.

Returns:
  (ExternalizedRuntime)
zruntime.yamlN)r|   rv   rn   rw   r   r}   load)rn   rh   r   s      r   LoadExternalizedRuntime.Load  s=     
bggll40	1Q tyy|S9 
2	1	1s   !A
A#c                      UR                  5       nU(       d  g[        R                  " U< SUR                  5       < 35        ME  )a	  Process the standard error stream of a plugin.

Standard error output is just written to the log at "warning" priority and
otherwise ignored.

Args:
  section_name: (str) Section name, to be attached to log messages.
  stderr: (file) Process standard error stream.
: N)readlinert   r   rstrip)r(   section_namestderrlines       r   _ProcessPluginStderr(ExternalizedRuntime._ProcessPluginStderr  s5     __dll|T[[];<	 r   c                 |  ^ U4S jnUR                  S5      nUc#  [        R                  " S[        U5      -  5        gU[        ;   a  [        U   " UR                  S5      5        gUS:X  a"   US   Ul        UR                  S5      Ul	        gUS	:X  a0   US
   nUS   n	UR                  R                  [        X5      5        gUS:X  a  SUR                  5       US.nU" U5        gUS:X  a   US   nUR                  S5      nU R                  R                  5       (       a:  U(       a  SR                  X5      nOUS-   nU R                  R!                  U5      nO1Ub  UnO+Sn[        R                  " ["        R                  U5      5        U" SUS.5        gUS:X  a   US   Ul        g[        R                  " SU-  5        g! [         a.    [        R                  " [        R                  SU5      5         GNf = f! [         a3  n
[        R                  " [        R                  X5      5         Sn
A
gSn
A
ff = f! [         a4  n
[        R                  " [        R                  SU5      5         Sn
A
gSn
A
ff = f! [         a-    [        R                  " [        R                  SU5      5         gf = f)ae  Process a message received from the plugin.

Args:
  plugin_stdin: (file) The standard input stream of the plugin process.
  message: ({str: object, ...}) The message (this maps directly to the
    message's json object).
  result: (PluginResult) A result object in which to store data collected
    from some types of message.
  params: (Params) Parameters passed in through the
    fingerprinter.
  runtime_data: (object or None) Arbitrary runtime data obtained from the
    "detect" plugin.  This will be None if we are processing a message for
    the detect plugin itself or if no runtime data was provided.
c                 v   > [         R                  " U T5        TR                  S5        TR                  5         g )N
)jsondumpr^   r_   )responseplugin_stdins    r   SendResponse9ExternalizedRuntime._ProcessMessage.<locals>.SendResponse  s+    
ii,'r   typeNzMissing type in message: %0.80srJ   runtime_parametersr   r$   gen_filer   r   
get_configget_config_response)r   rj   r   
query_userpromptdefaultz{0} [{1}]: : query_user_response)r   r   set_docker_contextrn   zUnknown message type %s)r   rt   r   str
_LOG_FUNCSr   KeyError_MISSING_FIELD_ERRORrz   rl   r   appendr   r,   rh   rF   rK   _NO_DEFAULT_ERRORr   )r(   r   rJ   r   rj   r   r   msg_typer   r   r   r   r   r   s    `            r   _ProcessMessage#ExternalizedRuntime._ProcessMessage  sk   "
 {{6"Hmm5GDE	Z	7;;y12	)	)M%n5 ")Y!7f	Z	A:&:&M(=> 
\	!/"MMO".0h 8	\	!" I&g					!((9'SL'((1 &&
--)008
91VDE	)	) ' mm-89a  M*11.(KLM  A*11"?@@A  *11(HEF0  *11&(CDsT   /
G .H 0I #
J 4H ?H 
I )H;;I 
J*I<<J4J;:J;c                 *    UR                   R                  5       nU(       d  g [        R                  " U5      nU R	                  UR
                  XsXE5        MX  ! [         a.    [        R                  " U< SUR                  5       < 35         N9f = f)z:Process the standard output and input streams of a plugin.r   N)
r]   r   r   loadsr   rY   r   rt   ru   r   )r(   r   procr   rj   r   r   rJ   s           r   _ProcessPluginPipes'ExternalizedRuntime._ProcessPluginPipes   su     [[!!#d?**T"TZZ&O   ?t{{}=>?s   3A 5BBNc                    SU;   Gah  [        U R                  US   5      n[        5       n[        R                  " U R
                  R                  5       U/U(       a  UO/ -   [        R                  [        R                  [        R                  S9n	[        R                  " U R                  XR                  4S9n
U
R                  5         [        R                  " U R                  XUX64S9nUR                  5         U
R                  5         UR                  5         U	R                  5       nXl        X;  a5  [#        SU< SU< SU R$                  R'                  SS5      < S	U< 35      eU$ [(        R*                  " S
U-  5        g)a  Run a plugin.

Args:
  section_name: (str) Name of the config section that the plugin spec is
    from.
  plugin_spec: ({str: str, ...}) A dictionary mapping plugin locales to
    script names
  params: (Params or None) Parameters for the plugin.
  args: ([str, ...] or None) Command line arguments for the plugin.
  valid_exit_codes: (int, ...) Exit codes that will be accepted without
    raising an exception.
  runtime_data: ({str: object, ...}) A dictionary of runtime data passed
    back from detect.

Returns:
  (PluginResult) A bundle of the exit code and data produced by the plugin.

Raises:
  PluginInvocationFailed: The plugin terminated with a non-zero exit code.
r   )r]   rY   r   )targetargsz"Failed during execution of plugin z for section z of runtime r   unknownz. rc = z"No usable plugin type found for %sN)r   r   r   
subprocessPopenrh   rB   PIPEr   Threadr   r   startr   rw   waitr   r   r   r   rt   r   )r(   r   plugin_specrj   r  valid_exit_codesr   normalized_pathr   pstderr_threadstdout_threadr   s                r   	RunPluginExternalizedRuntime.RunPlugin  sI   0 ;&tyy+h2GHo
 ~f


DHH88:OL$(Db2",//!+",//	3a
  &&d.G.G-988,EGm&&d.F.F-9f-3-CDm &&(i"		*$&5|&*kkoofi&H&/	&1 2 	2
 mmm8<GHr   c                     U R                   R                  S5      nU(       aT  U R                  SX2U/S5      nUR                  (       a  g[	        XUR
                  UR                  UU R                  5      $ g)aJ  Determine if 'path' contains an instance of the runtime type.

Checks to see if the 'path' directory looks like an instance of the
runtime type.

Args:
  path: (str) The path name.
  params: (Params) Parameters used by the framework.

Returns:
  (Configurator) An object containing parameters inferred from source
    inspection.
r   )r   r   N)r   r   r  r   re   r   rl   rh   )r(   rn   rj   r   r   s        r   DetectExternalizedRuntime.DetectJ  sj     [[__X&F~~hGf			*49L9L+1+C+C+/+/885 	5 r   c                     U R                   R                  S5      nU(       aT  U R                  SUUR                  UR                  S9nUR
                  (       a  UR                  UR
                  5        ggg)zDo data collection on a detected runtime.

Args:
  configurator: (ExternalRuntimeConfigurator) The configurator retuned by
    Detect().

Raises:
  InvalidRuntimeDefinition: For a variety of problems with the runtime
    definition.
collectDatar   r   N)r   r   r  rj   rk   rl   r   )r(   configuratorr   r   s       r   r3   ExternalizedRuntime.CollectDataf  sk     ;;??=1L~~nl*11+7+<+<  >f 
	!	!(()A)AB 
"	 r   c                     U R                   R                  S5      nU(       aU  U R                  SX!R                  UR                  /UR
                  S9nUR                  (       a  UR                  Ul        ggg)zPerform any additional build behavior before the application is deployed.

Args:
  configurator: (ExternalRuntimeConfigurator) The configurator returned by
  Detect().
r   )r  r   N)r   r   r  rj   rn   rk   r   )r(   r  r   r   s       r   r7   ExternalizedRuntime.Prebuildy  sn     {{z*H~~j(4G4G!!"1B1B  Df 
		"11 
	 r   c                 \   U R                   R                  S5      nU(       a  UR                  S5      nU(       a  / n[        U5      S:w  a  [        S5      eU H  n[	        U R
                  U5      n[        R                  R                  U5      (       d  [        SU-  5      e[        US5       nUR                  5       nSSS5        UR                  [        UW5      5        M     U$ U R                  SUUR                  UR                  S	9n	U	R                   $ g! , (       d  f       Nb= f)
a  Generate list of GeneratedFile objects.

Args:
  configurator: Configurator, the runtime configurator

Returns:
  [GeneratedFile] a list of GeneratedFile objects.

Raises:
  InvalidRuntimeDefinition: For a variety of problems with the runtime
    definition.
generateConfigsfilesToCopyr   zOIf "files_to_copy" is specified, it must be the only field in generate_configs.zKFile [%s] specified in files_to_copy, but is not in the runtime definition.rNr   r  )r   r   lenr   r   r   rv   rn   isfiler|   readr   r   r  rj   rk   r   )
r(   r  r   r   all_config_filesr   	full_namefile_to_readfile_contentsr   s
             r   GetAllConfigFiles%ExternalizedRuntime.GetAllConfigFiles  s&    {{'89&**=9m	  A%( *= > > &H$TYY9)	*** ,E ,4,4 5 5 Is#|(--/M $

!
!--"H
I &   24D , 3 3-9->->   @ ||3 " $#s   0D
D+	c                    UR                   R                  (       a  [        R                  OU R                  R
                  nU R                  U5      nUc  / $ U H1  nUR                  S:X  d  M  UR                  UR                  U5        M3     / nU HX  n[        R                  R                  [        UR                  UR                  5      5      (       a  MG  UR                  U5        MZ     U$ )zDo config generation on the runtime, return file objects.

Args:
  configurator: (ExternalRuntimeConfigurator) The configurator retuned by
    Detect().

Returns:
  [GeneratedFile] list of generated file objects.
rq   )rj   r'   rt   ru   rh   rN   r'  r   r   rn   rv   rx   r   r   )r(   r  r   r#  config_fileconfig_filess         r   r   &ExternalizedRuntime.GenerateConfigData  s     *0077W\\TXX^^F--l;i'				+L--v6 ( L'WW^^N<+<+<+6+?+?A B BK( ( r   c                 (   UR                   R                  (       a  [        R                  OU R                  R
                  nU R                  U5      nUc  gSnU H$  nUR                  UR                  U5      c  M"  SnM&     U(       d  U" S5        U$ )a  Do config generation on the runtime.

This should generally be called from the configurator's GenerateConfigs()
method.

Args:
  configurator: (ExternalRuntimeConfigurator) The configurator retuned by
    Detect().

Returns:
  (bool) True if files were generated, False if not
NFTz8All config files already exist, not generating anything.)	rj   r'   rt   ru   rh   rN   r'  r   rn   )r(   r  r   r#  createdr   s         r   r<   #ExternalizedRuntime.GenerateConfigs  s     *0077W\\TXX^^F--l;G$			,++V	4	@ % GHNr   )r   rh   r   )N)r   N)r   r   r   r   r   r)   propertyr   staticmethodr   r   r   r   r  r  r3   r7   Fingerprintr'  r   r<   r   r   r   r   r   r   x  s~    -@& . . : := N:`?  ?C!%!8It8C&2$ +(T4r   r   )5r   
__future__r   r   r   r   rt   rv   r  rU   r   r   r   ruamel.yamlr}   	six.movesr   /googlecloudsdk.appengine.admin.tools.conversionr	   ImportErroryaml_conversiongooglecloudsdk.third_party.py27r
   r{   ry   	Exceptionr   r   r   objectr   r0   r?   rR   re   r   r   r   r   ru   r   warningr   r   MessageValuer   _EXEC_SECTIONRepeatedFieldr   r   r   r   r   r   r   <module>rA     s   ) &  %   	  
    %DK
 1 = 2I 2HU Hu 
#V #<$ 6 $ N 6  8"6 $_1, _1D,$"F "J6 ! ! LL]]OO]]	
 <<#&( ..		$s+<<#&s+^^||c***6<<#3NO
  > B r& rm
  %$$%
  s$    F3 G 3GG
GG