From b5a8497ec9558d0061024ac4b49f445bbe7d1094 Mon Sep 17 00:00:00 2001
From: Aurelien Larcher <aurelien.larcher@gmail.com>
Date: Sat, 09 Jan 2021 00:07:08 +0100
Subject: [PATCH] python-39: add Python 3.9.1

---
 components/python/python39/patches/13-SOABI.patch                 |   14 
 components/python/python39/patches/14-default-lib-path.patch      |   52 
 components/python/python39/idle-39.p5m                            |  201 +
 components/python/python39/patches/26-locale-encoding.patch       |  102 
 components/python/python39/patches/05-encoding-alias.patch        |   37 
 components/python/python39/patches/27-cgiserver.patch             |   43 
 components/python/python39/patches/33-bpo-37961.patch             |   77 
 components/python/python39/patches/29-Setup.patch                 |   11 
 components/python/python39/patches/34-bpo-41891.patch             |  110 
 components/python/python39/patches/32-bpo-39101.patch             |   79 
 components/python/python39/patches/28-gid-convert.patch           |   18 
 components/python/python39/patches/03-ucred.patch                 |  484 ++
 components/python/python39/patches/22-asyncio-watcher.patch       |   31 
 components/python/python39/tkinter-39.p5m                         |   68 
 components/python/python39/patches/20-test_fixes.patch            |  159 
 components/python/python39/patches/08-py_db.patch                 |  756 +++
 components/python/python39/patches/36-test-opts.patch             |   18 
 components/python/python39/manifests/sample-manifest.p5m          | 2469 ++++++++++++
 components/python/python39/patches/11-pic-compile.patch           |   56 
 components/python/python39/Makefile                               |  206 +
 components/python/python39/patches/23-sendfile-reenable.patch     |   29 
 components/python/python39/patches/06-rbac.patch                  | 1574 ++++++++
 components/python/python39/patches/37-test-zipfile.patch          |   18 
 components/python/python39/patches/10-include.patch               |   14 
 components/python/python39/patches/01-setup.patch                 |  103 
 components/python/python39/patches/24-strxfrm-fix.patch           |   47 
 components/python/python39/patches/35-20142.patch                 |  194 +
 components/python/python39/python39.license                       |  279 +
 components/python/python39/patches/04-dlpi.patch                  | 1353 +++++++
 components/python/python39/patches/17-setsockopt.patch            |   42 
 components/python/python39/patches/19-pty.patch                   |   63 
 components/python/python39/patches/16-test-vmlimit.patch          |   29 
 components/python/python39/test/results-64.master                 |   11 
 components/python/python39/patches/02-vendor-packages.patch       |    8 
 components/python/python39/patches/18-obmalloc-adi.patch          |   58 
 components/python/python39/pkg5                                   |   27 
 components/python/python39/patches/21-sched_get_priority.patch    |   43 
 components/python/python39/patches/31-regrtest-processgroup.patch |   19 
 components/python/python39/patches/15-gethostname.patch           |   17 
 components/python/python39/python-39.p5m                          | 2484 ++++++++++++
 components/python/python39/patches/09-ossaudiodev.patch           |   60 
 components/python/python39/patches/30-madvise.patch               |   11 
 42 files changed, 11,474 insertions(+), 0 deletions(-)

diff --git a/components/python/python39/Makefile b/components/python/python39/Makefile
new file mode 100644
index 0000000..57f5cca
--- /dev/null
+++ b/components/python/python39/Makefile
@@ -0,0 +1,206 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2019, Michal Nowak
+# Copyright (c) 2021, Aurelien Larcher
+#
+
+BUILD_BITS = 64
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=	        Python
+COMPONENT_VERSION=      3.9.1
+COMPONENT_FMRI=		runtime/python-39
+COMPONENT_PROJECT_URL=  https://python.org/
+COMPONENT_SUMMARY=      The Python interpreter, libraries and utilities
+COMPONENT_CLASSIFICATION= Development/Python
+COMPONENT_SRC=          $(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=      $(COMPONENT_SRC).tar.xz
+COMPONENT_ARCHIVE_HASH= \
+    sha256:991c3f8ac97992f3d308fefeb03a64db462574eadbff34ce8bc5bb583d9903ff
+COMPONENT_ARCHIVE_URL = $(COMPONENT_PROJECT_URL)ftp/python/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
+COMPONENT_LICENSE=      PSFv2
+COMPONENT_LICENSE_FILE=	python39.license
+
+CONFIGURE_FIX_LIBTOOL_RPATH = no
+
+TEST_TARGET= $(TEST_64)
+
+# Define to avoid modifications at each major bump
+COMPONENT_PYVER=3.9
+
+include $(WS_MAKE_RULES)/common.mk
+
+PATH=$(PATH.gnu)
+
+# Need to preserve timestamp for Grammar files.  If the pickle files are older,
+# Python will try to rebuild them.
+PKGSEND_PUBLISH_OPTIONS += -T \*Grammar\*.txt
+PKGSEND_PUBLISH_OPTIONS += -T \*Grammar\*.pickle
+
+# We patch auto* files, so regenerate headers and configure
+COMPONENT_PREP_ACTION = (cd $(@D) ; autoheader ; autoconf -f)
+
+# we don't want to leak $(CC_BITS) into BASECFLAGS as it causes problems with
+# python-config
+CC += $(CFLAGS)
+
+gcc_OPT = -O2
+
+CPPFLAGS += -IPython
+
+# to find the ncurses headers
+CPPFLAGS += -I/usr/include/ncurses
+# enable large files how they did in JDS
+CPPFLAGS += -D_LARGEFILE64_SOURCE
+
+# libffi for _ctypes
+CPPFLAGS += $(shell pkg-config --cflags-only-I libffi)
+
+# because python links with $(CC) ... $(LDFLAGS) ...
+LDFLAGS = $(CC_BITS) $(CC_PIC)
+
+# build pic
+CFLAGS += $(CC_PIC)
+CFLAGS += $(CFLAGS.$(MACH))
+
+# XPG6
+CFLAGS +=       $(CPP_XPG6MODE)
+
+# The python build is profile-guided for gcc.  Use of xprofile requires that
+# the same options be used during compilation and linking.  The targets chosen
+# are based on Solaris 11 minimum supported system requirements.
+XPROFILE_DIR = $(BUILD_DIR_$(BITS))/.profile
+
+# PYTHONPATH in the environment can be harmful, but setting it to empty via
+# _INSTALL_ENV causes problems too, so just ignore the entire environment.
+# (see 20396493) Because of this, we have to explicitly specify PATH in
+# multiple places below. Also up the limit of maximum opened files for
+# testing purposes and pgo.
+ENV := ulimit -n 16384; $(ENV) -i
+
+# Configure script should look into sbin folder when looking for dtrace
+CONFIGURE_ENV += PATH="$(PATH):/usr/sbin"
+
+# Disable epoll on illumos
+CONFIGURE_ENV += ac_cv_func_epoll_ctl=no
+CONFIGURE_ENV += ac_cv_func_epoll_create1=no
+
+CONFIGURE_ENV += ac_cv_func_getentropy=no
+
+CONFIGURE_OPTIONS  +=           --infodir=$(CONFIGURE_INFODIR)
+CONFIGURE_OPTIONS  +=           --enable-shared
+CONFIGURE_OPTIONS  +=           --enable-optimizations
+CONFIGURE_OPTIONS  +=           --with-dtrace
+CONFIGURE_OPTIONS  +=           --with-system-expat
+CONFIGURE_OPTIONS  +=           --with-system-ffi
+CONFIGURE_OPTIONS  +=           --without-ensurepip
+CONFIGURE_OPTIONS  +=           --enable-ipv6
+CONFIGURE_OPTIONS  +=           --with-c-locale-coercion
+CONFIGURE_OPTIONS  +=           --bindir=$(USRBINDIR)
+# https://bugs.python.org/issue25003
+# CONFIGURE_OPTIONS  +=         "ac_cv_func_getentropy=no"
+CONFIGURE_OPTIONS  +=           CPPFLAGS="$(CPPFLAGS) -DSKIP_ZIP_PATH "
+CONFIGURE_OPTIONS  +=           LDFLAGS="$(LDFLAGS)"
+CONFIGURE_OPTIONS  +=           CFLAGS="$(CFLAGS)"
+CONFIGURE_OPTIONS  +=           DFLAGS="-$(BITS)"
+CONFIGURE_OPTIONS  +=           XPROFILE_DIR="$(XPROFILE_DIR)"
+
+COMPONENT_BUILD_ENV += DFLAGS="-$(BITS)"
+COMPONENT_BUILD_ENV += XPROFILE_DIR="$(XPROFILE_DIR)"
+COMPONENT_BUILD_ENV += PATH="$(PATH)"
+
+# Some tests have non-ASCII characters encoded for international domain names;
+# the publish step will fail in 'pkgdepend generate' without this:
+COMPONENT_PUBLISH_ENV += LC_ALL=en_US.UTF-8
+
+# 64 bit shared objects need to go in a 64-bit directory
+COMPONENT_INSTALL_ARGS.64 += DESTSHARED=$(CONFIGURE_PREFIX)/lib/python$(COMPONENT_PYVER)/lib-dynload
+
+# Simplify the definitions of CC, CXX, CFLAGS and LDFLAGS so they hard-code
+# neither paths from our build systems nor Studio-specific options.
+COMPONENT_PRE_INSTALL_ACTION= \
+    (cd $(@D) ; \
+    $(GSED) -i -e 's/^CC=.*/CC=\t\tgcc/' -e 's/^CXX=.*/CXX=\t\tg++/' \
+    -e 's/^CFLAGS=.*/CFLAGS=\t\t\$$\(BASECFLAGS) \$$\(OPT) \$$\(EXTRA_CFLAGS)/' \
+    -e 's|^LDFLAGS=.*|LDFLAGS=|' Makefile)
+
+# Because we stripped the Makefile above, we need to pass several things in the
+# environment, and use -e to tell gmake to pay attention to the environment.
+COMPONENT_INSTALL_ENV  += CC="$(CC)"
+COMPONENT_INSTALL_ENV  += CXX="$(CXX)"
+COMPONENT_INSTALL_ENV  += CFLAGS="$(CFLAGS)"
+COMPONENT_INSTALL_ENV  += LDFLAGS="$(LDFLAGS)"
+COMPONENT_INSTALL_ENV  += PATH="$(PATH)"
+COMPONENT_INSTALL_ARGS += -e
+
+# Strip build machine paths from _sysconfigdata.py & config/Makefile,
+# then (re)compile _sysconfigdata.py since we just updated it.
+# Note that once Python 3.9 has been integrated and propagated to build
+# machines, then the LD_LIBRARY_PATH setting and PROTO_DIR prefix below
+# can both be removed.
+COMPONENT_POST_INSTALL_ACTION= \
+    (cd $(PROTOUSRLIBDIR)/python$(COMPONENT_PYVER) ; \
+     $(GSED) -i -e 's|$(SOURCE_DIR)|.|g' -e 's|$(COMPONENT_DIR)|..|g' \
+    -e 's|$(SPRO_VROOT)/bin/||g' _sysconfigdata__sunos5_.py config-$(COMPONENT_PYVER)/Makefile; \
+    LD_LIBRARY_PATH=$(PROTOUSRLIBDIR64) $(PROTO_DIR)$(PYTHON.$(COMPONENT_PYVER).$(BITS)) -m py_compile _sysconfigdata__sunos5_.py)
+
+# You can set TESTOPTS_PYTHON_TEST to a particular test if you want to run just
+# one test.  For example:
+# $ TESTOPTS_PYTHON_TEST=test_sys
+TESTOPTS_PYTHON_TEST =
+COMPONENT_TEST_ENV = PATH="$(PATH)"
+# Using "-uall,-network" ensures all tests are run except the network tests.
+# The network tests contain many expected failures when run behind a firewall.
+# The "-v" ensures verbose mode.
+COMPONENT_TEST_ENV += EXTRATESTOPTS="-v -uall,-network $(TESTOPTS_PYTHON_TEST)"
+# Prevent the tests from getting stuck waiting for input.
+COMPONENT_TEST_TARGETS = test < /dev/null
+
+# The test output contains details from each test, in whatever order they
+# complete.  The default _TRANSFORMER is not powerful enough to deal with
+# this; we need heavier artillery.  Extract just the sections that start
+# with "tests OK." and end with "Re-running failed tests..." for comparison.
+COMPONENT_TEST_TRANSFORMER = $(NAWK)
+COMPONENT_TEST_TRANSFORMS  = "'/tests OK./ {results = 1}; /Total duration/ {results = 0}; /Re-running failed tests in verbose mode/ {results = 0} {if (results) print $0 }'"
+
+# Required for dump(1)
+REQUIRED_PACKAGES += developer/object-file
+# Required to build ossaudiodev module
+REQUIRED_PACKAGES += system/header/header-audio
+# Auto-generated dependencies
+REQUIRED_PACKAGES += compress/bzip2
+REQUIRED_PACKAGES += compress/xz
+REQUIRED_PACKAGES += database/sqlite-3
+REQUIRED_PACKAGES += library/database/gdbm
+REQUIRED_PACKAGES += library/expat
+REQUIRED_PACKAGES += library/libffi
+REQUIRED_PACKAGES += library/ncurses
+REQUIRED_PACKAGES += library/readline
+REQUIRED_PACKAGES += library/security/openssl
+REQUIRED_PACKAGES += library/zlib
+REQUIRED_PACKAGES += runtime/tcl-8
+REQUIRED_PACKAGES += runtime/tk-8
+REQUIRED_PACKAGES += system/library
+REQUIRED_PACKAGES += system/library/math
diff --git a/components/python/python39/idle-39.p5m b/components/python/python39/idle-39.p5m
new file mode 100644
index 0000000..e493ef7
--- /dev/null
+++ b/components/python/python39/idle-39.p5m
@@ -0,0 +1,201 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
+#
+<transform file path=usr/lib/python3.9/lib-dynload/.*\.so -> \
+    add pkg.linted.userland.action001.2 true>
+<transform file path=.*/(idle_)?tests?/.* -> default facet.optional.test true>
+
+# Dependency resolution works only if the version is already installed in the build zone
+<transform file path=.+\.py$ -> \
+    default pkg.depend.bypass-generate .* >
+<transform file path=.+\.pyc$ -> \
+    default pkg.depend.bypass-generate .* >
+<transform file path=usr/bin.*$ -> \
+    default pkg.depend.bypass-generate .* >
+
+set name=pkg.fmri value=pkg:/library/python/idle-39@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Python 3.9 IDLE"
+set name=info.classification value="$(COMPONENT_CLASSIFICATION)"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+
+depend fmri=pkg:/library/python/tkinter-39 type=require
+
+license $(COMPONENT_LICENSE_FILE) license='$(COMPONENT_LICENSE)'
+#
+link path=usr/bin/idle target=idle3.9 mediator=python mediator-version=3.9
+link path=usr/bin/idle3 target=idle3.9 mediator=python mediator-version=3.9
+file path=usr/bin/idle3.9
+file path=usr/lib/python3.9/idlelib/CREDITS.txt
+file path=usr/lib/python3.9/idlelib/ChangeLog
+file path=usr/lib/python3.9/idlelib/HISTORY.txt
+file path=usr/lib/python3.9/idlelib/Icons/README.txt
+file path=usr/lib/python3.9/idlelib/Icons/folder.gif
+file path=usr/lib/python3.9/idlelib/Icons/idle.ico
+file path=usr/lib/python3.9/idlelib/Icons/idle_16.gif
+file path=usr/lib/python3.9/idlelib/Icons/idle_16.png
+file path=usr/lib/python3.9/idlelib/Icons/idle_256.png
+file path=usr/lib/python3.9/idlelib/Icons/idle_32.gif
+file path=usr/lib/python3.9/idlelib/Icons/idle_32.png
+file path=usr/lib/python3.9/idlelib/Icons/idle_48.gif
+file path=usr/lib/python3.9/idlelib/Icons/idle_48.png
+file path=usr/lib/python3.9/idlelib/Icons/minusnode.gif
+file path=usr/lib/python3.9/idlelib/Icons/openfolder.gif
+file path=usr/lib/python3.9/idlelib/Icons/plusnode.gif
+file path=usr/lib/python3.9/idlelib/Icons/python.gif
+file path=usr/lib/python3.9/idlelib/Icons/tk.gif
+file path=usr/lib/python3.9/idlelib/NEWS.txt
+file path=usr/lib/python3.9/idlelib/NEWS2x.txt
+file path=usr/lib/python3.9/idlelib/README.txt
+file path=usr/lib/python3.9/idlelib/TODO.txt
+file path=usr/lib/python3.9/idlelib/__init__.py
+file path=usr/lib/python3.9/idlelib/__main__.py
+file path=usr/lib/python3.9/idlelib/autocomplete.py
+file path=usr/lib/python3.9/idlelib/autocomplete_w.py
+file path=usr/lib/python3.9/idlelib/autoexpand.py
+file path=usr/lib/python3.9/idlelib/browser.py
+file path=usr/lib/python3.9/idlelib/calltip.py
+file path=usr/lib/python3.9/idlelib/calltip_w.py
+file path=usr/lib/python3.9/idlelib/codecontext.py
+file path=usr/lib/python3.9/idlelib/colorizer.py
+file path=usr/lib/python3.9/idlelib/config-extensions.def
+file path=usr/lib/python3.9/idlelib/config-highlight.def
+file path=usr/lib/python3.9/idlelib/config-keys.def
+file path=usr/lib/python3.9/idlelib/config-main.def
+file path=usr/lib/python3.9/idlelib/config.py
+file path=usr/lib/python3.9/idlelib/config_key.py
+file path=usr/lib/python3.9/idlelib/configdialog.py
+file path=usr/lib/python3.9/idlelib/debugger.py
+file path=usr/lib/python3.9/idlelib/debugger_r.py
+file path=usr/lib/python3.9/idlelib/debugobj.py
+file path=usr/lib/python3.9/idlelib/debugobj_r.py
+file path=usr/lib/python3.9/idlelib/delegator.py
+file path=usr/lib/python3.9/idlelib/dynoption.py
+file path=usr/lib/python3.9/idlelib/editor.py
+file path=usr/lib/python3.9/idlelib/extend.txt
+file path=usr/lib/python3.9/idlelib/filelist.py
+file path=usr/lib/python3.9/idlelib/format.py
+file path=usr/lib/python3.9/idlelib/grep.py
+file path=usr/lib/python3.9/idlelib/help.html
+file path=usr/lib/python3.9/idlelib/help.py
+file path=usr/lib/python3.9/idlelib/help_about.py
+file path=usr/lib/python3.9/idlelib/history.py
+file path=usr/lib/python3.9/idlelib/hyperparser.py
+file path=usr/lib/python3.9/idlelib/idle.bat
+file path=usr/lib/python3.9/idlelib/idle.py
+file path=usr/lib/python3.9/idlelib/idle.pyw
+file path=usr/lib/python3.9/idlelib/idle_test/README.txt
+file path=usr/lib/python3.9/idlelib/idle_test/__init__.py
+file path=usr/lib/python3.9/idlelib/idle_test/htest.py
+file path=usr/lib/python3.9/idlelib/idle_test/mock_idle.py
+file path=usr/lib/python3.9/idlelib/idle_test/mock_tk.py
+file path=usr/lib/python3.9/idlelib/idle_test/template.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_autocomplete.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_autocomplete_w.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_autoexpand.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_browser.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_calltip.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_calltip_w.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_codecontext.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_colorizer.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_config.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_config_key.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_configdialog.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_debugger.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_debugger_r.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_debugobj.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_debugobj_r.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_delegator.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_editmenu.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_editor.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_filelist.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_format.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_grep.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_help.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_help_about.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_history.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_hyperparser.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_iomenu.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_macosx.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_mainmenu.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_multicall.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_outwin.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_parenmatch.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_pathbrowser.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_percolator.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_pyparse.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_pyshell.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_query.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_redirector.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_replace.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_rpc.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_run.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_runscript.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_scrolledlist.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_search.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_searchbase.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_searchengine.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_sidebar.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_squeezer.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_stackviewer.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_statusbar.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_text.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_textview.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_tooltip.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_tree.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_undo.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_warning.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_window.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_zoomheight.py
+file path=usr/lib/python3.9/idlelib/iomenu.py
+file path=usr/lib/python3.9/idlelib/macosx.py
+file path=usr/lib/python3.9/idlelib/mainmenu.py
+file path=usr/lib/python3.9/idlelib/multicall.py
+file path=usr/lib/python3.9/idlelib/outwin.py
+file path=usr/lib/python3.9/idlelib/parenmatch.py
+file path=usr/lib/python3.9/idlelib/pathbrowser.py
+file path=usr/lib/python3.9/idlelib/percolator.py
+file path=usr/lib/python3.9/idlelib/pyparse.py
+file path=usr/lib/python3.9/idlelib/pyshell.py
+file path=usr/lib/python3.9/idlelib/query.py
+file path=usr/lib/python3.9/idlelib/redirector.py
+file path=usr/lib/python3.9/idlelib/replace.py
+file path=usr/lib/python3.9/idlelib/rpc.py
+file path=usr/lib/python3.9/idlelib/run.py
+file path=usr/lib/python3.9/idlelib/runscript.py
+file path=usr/lib/python3.9/idlelib/scrolledlist.py
+file path=usr/lib/python3.9/idlelib/search.py
+file path=usr/lib/python3.9/idlelib/searchbase.py
+file path=usr/lib/python3.9/idlelib/searchengine.py
+file path=usr/lib/python3.9/idlelib/sidebar.py
+file path=usr/lib/python3.9/idlelib/squeezer.py
+file path=usr/lib/python3.9/idlelib/stackviewer.py
+file path=usr/lib/python3.9/idlelib/statusbar.py
+file path=usr/lib/python3.9/idlelib/textview.py
+file path=usr/lib/python3.9/idlelib/tooltip.py
+file path=usr/lib/python3.9/idlelib/tree.py
+file path=usr/lib/python3.9/idlelib/undo.py
+file path=usr/lib/python3.9/idlelib/window.py
+file path=usr/lib/python3.9/idlelib/zoomheight.py
+file path=usr/lib/python3.9/idlelib/zzdummy.py
+file path=usr/lib/python3.9/test/test_idle.py
diff --git a/components/python/python39/manifests/sample-manifest.p5m b/components/python/python39/manifests/sample-manifest.p5m
new file mode 100644
index 0000000..25961ed
--- /dev/null
+++ b/components/python/python39/manifests/sample-manifest.p5m
@@ -0,0 +1,2469 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2020 <contributor>
+#
+
+set name=pkg.fmri value=pkg:/$(COMPONENT_FMRI)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="$(COMPONENT_SUMMARY)"
+set name=info.classification value="$(COMPONENT_CLASSIFICATION)"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+
+license $(COMPONENT_LICENSE_FILE) license='$(COMPONENT_LICENSE)'
+
+link path=usr/bin/2to3 target=2to3-3.9
+file path=usr/bin/2to3-3.9
+link path=usr/bin/idle3 target=idle3.9
+file path=usr/bin/idle3.9
+link path=usr/bin/pydoc3 target=pydoc3.9
+file path=usr/bin/pydoc3.9
+link path=usr/bin/python3 target=python3.9
+link path=usr/bin/python3-config target=python3.9-config
+file path=usr/bin/python3.9
+file path=usr/bin/python3.9-config
+file path=usr/include/python3.9/Python-ast.h
+file path=usr/include/python3.9/Python.h
+file path=usr/include/python3.9/abstract.h
+file path=usr/include/python3.9/asdl.h
+file path=usr/include/python3.9/ast.h
+file path=usr/include/python3.9/bitset.h
+file path=usr/include/python3.9/bltinmodule.h
+file path=usr/include/python3.9/boolobject.h
+file path=usr/include/python3.9/bytearrayobject.h
+file path=usr/include/python3.9/bytesobject.h
+file path=usr/include/python3.9/cellobject.h
+file path=usr/include/python3.9/ceval.h
+file path=usr/include/python3.9/classobject.h
+file path=usr/include/python3.9/code.h
+file path=usr/include/python3.9/codecs.h
+file path=usr/include/python3.9/compile.h
+file path=usr/include/python3.9/complexobject.h
+file path=usr/include/python3.9/context.h
+file path=usr/include/python3.9/cpython/abstract.h
+file path=usr/include/python3.9/cpython/bytearrayobject.h
+file path=usr/include/python3.9/cpython/bytesobject.h
+file path=usr/include/python3.9/cpython/ceval.h
+file path=usr/include/python3.9/cpython/code.h
+file path=usr/include/python3.9/cpython/dictobject.h
+file path=usr/include/python3.9/cpython/fileobject.h
+file path=usr/include/python3.9/cpython/fileutils.h
+file path=usr/include/python3.9/cpython/frameobject.h
+file path=usr/include/python3.9/cpython/import.h
+file path=usr/include/python3.9/cpython/initconfig.h
+file path=usr/include/python3.9/cpython/interpreteridobject.h
+file path=usr/include/python3.9/cpython/listobject.h
+file path=usr/include/python3.9/cpython/methodobject.h
+file path=usr/include/python3.9/cpython/object.h
+file path=usr/include/python3.9/cpython/objimpl.h
+file path=usr/include/python3.9/cpython/pyerrors.h
+file path=usr/include/python3.9/cpython/pylifecycle.h
+file path=usr/include/python3.9/cpython/pymem.h
+file path=usr/include/python3.9/cpython/pystate.h
+file path=usr/include/python3.9/cpython/sysmodule.h
+file path=usr/include/python3.9/cpython/traceback.h
+file path=usr/include/python3.9/cpython/tupleobject.h
+file path=usr/include/python3.9/cpython/unicodeobject.h
+file path=usr/include/python3.9/datetime.h
+file path=usr/include/python3.9/descrobject.h
+file path=usr/include/python3.9/dictobject.h
+file path=usr/include/python3.9/dynamic_annotations.h
+file path=usr/include/python3.9/enumobject.h
+file path=usr/include/python3.9/errcode.h
+file path=usr/include/python3.9/eval.h
+file path=usr/include/python3.9/exports.h
+file path=usr/include/python3.9/fileobject.h
+file path=usr/include/python3.9/fileutils.h
+file path=usr/include/python3.9/floatobject.h
+file path=usr/include/python3.9/frameobject.h
+file path=usr/include/python3.9/funcobject.h
+file path=usr/include/python3.9/genericaliasobject.h
+file path=usr/include/python3.9/genobject.h
+file path=usr/include/python3.9/graminit.h
+file path=usr/include/python3.9/grammar.h
+file path=usr/include/python3.9/import.h
+file path=usr/include/python3.9/internal/pegen_interface.h
+file path=usr/include/python3.9/internal/pycore_abstract.h
+file path=usr/include/python3.9/internal/pycore_accu.h
+file path=usr/include/python3.9/internal/pycore_atomic.h
+file path=usr/include/python3.9/internal/pycore_bytes_methods.h
+file path=usr/include/python3.9/internal/pycore_byteswap.h
+file path=usr/include/python3.9/internal/pycore_call.h
+file path=usr/include/python3.9/internal/pycore_ceval.h
+file path=usr/include/python3.9/internal/pycore_code.h
+file path=usr/include/python3.9/internal/pycore_condvar.h
+file path=usr/include/python3.9/internal/pycore_context.h
+file path=usr/include/python3.9/internal/pycore_dtoa.h
+file path=usr/include/python3.9/internal/pycore_fileutils.h
+file path=usr/include/python3.9/internal/pycore_gc.h
+file path=usr/include/python3.9/internal/pycore_getopt.h
+file path=usr/include/python3.9/internal/pycore_gil.h
+file path=usr/include/python3.9/internal/pycore_hamt.h
+file path=usr/include/python3.9/internal/pycore_hashtable.h
+file path=usr/include/python3.9/internal/pycore_import.h
+file path=usr/include/python3.9/internal/pycore_initconfig.h
+file path=usr/include/python3.9/internal/pycore_interp.h
+file path=usr/include/python3.9/internal/pycore_object.h
+file path=usr/include/python3.9/internal/pycore_pathconfig.h
+file path=usr/include/python3.9/internal/pycore_pyerrors.h
+file path=usr/include/python3.9/internal/pycore_pyhash.h
+file path=usr/include/python3.9/internal/pycore_pylifecycle.h
+file path=usr/include/python3.9/internal/pycore_pymem.h
+file path=usr/include/python3.9/internal/pycore_pystate.h
+file path=usr/include/python3.9/internal/pycore_runtime.h
+file path=usr/include/python3.9/internal/pycore_sysmodule.h
+file path=usr/include/python3.9/internal/pycore_traceback.h
+file path=usr/include/python3.9/internal/pycore_tupleobject.h
+file path=usr/include/python3.9/internal/pycore_warnings.h
+file path=usr/include/python3.9/interpreteridobject.h
+file path=usr/include/python3.9/intrcheck.h
+file path=usr/include/python3.9/iterobject.h
+file path=usr/include/python3.9/listobject.h
+file path=usr/include/python3.9/longintrepr.h
+file path=usr/include/python3.9/longobject.h
+file path=usr/include/python3.9/marshal.h
+file path=usr/include/python3.9/memoryobject.h
+file path=usr/include/python3.9/methodobject.h
+file path=usr/include/python3.9/modsupport.h
+file path=usr/include/python3.9/moduleobject.h
+file path=usr/include/python3.9/namespaceobject.h
+file path=usr/include/python3.9/node.h
+file path=usr/include/python3.9/object.h
+file path=usr/include/python3.9/objimpl.h
+file path=usr/include/python3.9/odictobject.h
+file path=usr/include/python3.9/opcode.h
+file path=usr/include/python3.9/osdefs.h
+file path=usr/include/python3.9/osmodule.h
+file path=usr/include/python3.9/parsetok.h
+file path=usr/include/python3.9/patchlevel.h
+file path=usr/include/python3.9/picklebufobject.h
+file path=usr/include/python3.9/py_curses.h
+file path=usr/include/python3.9/pyarena.h
+file path=usr/include/python3.9/pycapsule.h
+file path=usr/include/python3.9/pyconfig.h
+file path=usr/include/python3.9/pyctype.h
+file path=usr/include/python3.9/pydebug.h
+file path=usr/include/python3.9/pydtrace.h
+file path=usr/include/python3.9/pyerrors.h
+file path=usr/include/python3.9/pyexpat.h
+file path=usr/include/python3.9/pyfpe.h
+file path=usr/include/python3.9/pyframe.h
+file path=usr/include/python3.9/pyhash.h
+file path=usr/include/python3.9/pylifecycle.h
+file path=usr/include/python3.9/pymacconfig.h
+file path=usr/include/python3.9/pymacro.h
+file path=usr/include/python3.9/pymath.h
+file path=usr/include/python3.9/pymem.h
+file path=usr/include/python3.9/pyport.h
+file path=usr/include/python3.9/pystate.h
+file path=usr/include/python3.9/pystrcmp.h
+file path=usr/include/python3.9/pystrhex.h
+file path=usr/include/python3.9/pystrtod.h
+file path=usr/include/python3.9/pythonrun.h
+file path=usr/include/python3.9/pythread.h
+file path=usr/include/python3.9/pytime.h
+file path=usr/include/python3.9/rangeobject.h
+file path=usr/include/python3.9/setobject.h
+file path=usr/include/python3.9/sliceobject.h
+file path=usr/include/python3.9/structmember.h
+file path=usr/include/python3.9/structseq.h
+file path=usr/include/python3.9/symtable.h
+file path=usr/include/python3.9/sysmodule.h
+file path=usr/include/python3.9/token.h
+file path=usr/include/python3.9/traceback.h
+file path=usr/include/python3.9/tracemalloc.h
+file path=usr/include/python3.9/tupleobject.h
+file path=usr/include/python3.9/typeslots.h
+file path=usr/include/python3.9/ucnhash.h
+file path=usr/include/python3.9/unicodeobject.h
+file path=usr/include/python3.9/warnings.h
+file path=usr/include/python3.9/weakrefobject.h
+link path=usr/lib/$(MACH64)/libpython3.9.so target=libpython3.9.so.1.0
+file path=usr/lib/$(MACH64)/libpython3.9.so.1.0
+file path=usr/lib/$(MACH64)/libpython3.9_db.so.1.0
+file path=usr/lib/$(MACH64)/libpython3.so
+file path=usr/lib/$(MACH64)/pkgconfig/python-3.9-embed.pc
+file path=usr/lib/$(MACH64)/pkgconfig/python-3.9.pc
+link path=usr/lib/$(MACH64)/pkgconfig/python3-embed.pc \
+    target=python-3.9-embed.pc
+link path=usr/lib/$(MACH64)/pkgconfig/python3.pc target=python-3.9.pc
+file path=usr/lib/python3.9/LICENSE.txt
+file path=usr/lib/python3.9/__future__.py
+file path=usr/lib/python3.9/__phello__.foo.py
+file path=usr/lib/python3.9/_aix_support.py
+file path=usr/lib/python3.9/_bootlocale.py
+file path=usr/lib/python3.9/_bootsubprocess.py
+file path=usr/lib/python3.9/_collections_abc.py
+file path=usr/lib/python3.9/_compat_pickle.py
+file path=usr/lib/python3.9/_compression.py
+file path=usr/lib/python3.9/_markupbase.py
+file path=usr/lib/python3.9/_osx_support.py
+file path=usr/lib/python3.9/_py_abc.py
+file path=usr/lib/python3.9/_pydecimal.py
+file path=usr/lib/python3.9/_pyio.py
+file path=usr/lib/python3.9/_sitebuiltins.py
+file path=usr/lib/python3.9/_strptime.py
+file path=usr/lib/python3.9/_sysconfigdata__sunos5_.py
+file path=usr/lib/python3.9/_threading_local.py
+file path=usr/lib/python3.9/_weakrefset.py
+file path=usr/lib/python3.9/abc.py
+file path=usr/lib/python3.9/aifc.py
+file path=usr/lib/python3.9/antigravity.py
+file path=usr/lib/python3.9/argparse.py
+file path=usr/lib/python3.9/ast.py
+file path=usr/lib/python3.9/asynchat.py
+file path=usr/lib/python3.9/asyncio/__init__.py
+file path=usr/lib/python3.9/asyncio/__main__.py
+file path=usr/lib/python3.9/asyncio/base_events.py
+file path=usr/lib/python3.9/asyncio/base_futures.py
+file path=usr/lib/python3.9/asyncio/base_subprocess.py
+file path=usr/lib/python3.9/asyncio/base_tasks.py
+file path=usr/lib/python3.9/asyncio/constants.py
+file path=usr/lib/python3.9/asyncio/coroutines.py
+file path=usr/lib/python3.9/asyncio/events.py
+file path=usr/lib/python3.9/asyncio/exceptions.py
+file path=usr/lib/python3.9/asyncio/format_helpers.py
+file path=usr/lib/python3.9/asyncio/futures.py
+file path=usr/lib/python3.9/asyncio/locks.py
+file path=usr/lib/python3.9/asyncio/log.py
+file path=usr/lib/python3.9/asyncio/proactor_events.py
+file path=usr/lib/python3.9/asyncio/protocols.py
+file path=usr/lib/python3.9/asyncio/queues.py
+file path=usr/lib/python3.9/asyncio/runners.py
+file path=usr/lib/python3.9/asyncio/selector_events.py
+file path=usr/lib/python3.9/asyncio/sslproto.py
+file path=usr/lib/python3.9/asyncio/staggered.py
+file path=usr/lib/python3.9/asyncio/streams.py
+file path=usr/lib/python3.9/asyncio/subprocess.py
+file path=usr/lib/python3.9/asyncio/tasks.py
+file path=usr/lib/python3.9/asyncio/threads.py
+file path=usr/lib/python3.9/asyncio/transports.py
+file path=usr/lib/python3.9/asyncio/trsock.py
+file path=usr/lib/python3.9/asyncio/unix_events.py
+file path=usr/lib/python3.9/asyncio/windows_events.py
+file path=usr/lib/python3.9/asyncio/windows_utils.py
+file path=usr/lib/python3.9/asyncore.py
+file path=usr/lib/python3.9/base64.py
+file path=usr/lib/python3.9/bdb.py
+file path=usr/lib/python3.9/binhex.py
+file path=usr/lib/python3.9/bisect.py
+file path=usr/lib/python3.9/bz2.py
+file path=usr/lib/python3.9/cProfile.py
+file path=usr/lib/python3.9/calendar.py
+file path=usr/lib/python3.9/cgi.py
+file path=usr/lib/python3.9/cgitb.py
+file path=usr/lib/python3.9/chunk.py
+file path=usr/lib/python3.9/cmd.py
+file path=usr/lib/python3.9/code.py
+file path=usr/lib/python3.9/codecs.py
+file path=usr/lib/python3.9/codeop.py
+file path=usr/lib/python3.9/collections/__init__.py
+file path=usr/lib/python3.9/collections/abc.py
+file path=usr/lib/python3.9/colorsys.py
+file path=usr/lib/python3.9/compileall.py
+file path=usr/lib/python3.9/concurrent/__init__.py
+file path=usr/lib/python3.9/concurrent/futures/__init__.py
+file path=usr/lib/python3.9/concurrent/futures/_base.py
+file path=usr/lib/python3.9/concurrent/futures/process.py
+file path=usr/lib/python3.9/concurrent/futures/thread.py
+file path=usr/lib/python3.9/config-3.9/Makefile
+file path=usr/lib/python3.9/config-3.9/Setup
+file path=usr/lib/python3.9/config-3.9/Setup.local
+file path=usr/lib/python3.9/config-3.9/config.c
+file path=usr/lib/python3.9/config-3.9/config.c.in
+file path=usr/lib/python3.9/config-3.9/install-sh
+file path=usr/lib/python3.9/config-3.9/libpython3.9.a
+file path=usr/lib/python3.9/config-3.9/makesetup
+file path=usr/lib/python3.9/config-3.9/python-config.py
+file path=usr/lib/python3.9/config-3.9/python.o
+file path=usr/lib/python3.9/configparser.py
+file path=usr/lib/python3.9/contextlib.py
+file path=usr/lib/python3.9/contextvars.py
+file path=usr/lib/python3.9/copy.py
+file path=usr/lib/python3.9/copyreg.py
+file path=usr/lib/python3.9/crypt.py
+file path=usr/lib/python3.9/csv.py
+file path=usr/lib/python3.9/ctypes/__init__.py
+file path=usr/lib/python3.9/ctypes/_aix.py
+file path=usr/lib/python3.9/ctypes/_endian.py
+file path=usr/lib/python3.9/ctypes/macholib/README.ctypes
+file path=usr/lib/python3.9/ctypes/macholib/__init__.py
+file path=usr/lib/python3.9/ctypes/macholib/dyld.py
+file path=usr/lib/python3.9/ctypes/macholib/dylib.py
+file path=usr/lib/python3.9/ctypes/macholib/fetch_macholib
+file path=usr/lib/python3.9/ctypes/macholib/fetch_macholib.bat
+file path=usr/lib/python3.9/ctypes/macholib/framework.py
+file path=usr/lib/python3.9/ctypes/test/__init__.py
+file path=usr/lib/python3.9/ctypes/test/__main__.py
+file path=usr/lib/python3.9/ctypes/test/test_anon.py
+file path=usr/lib/python3.9/ctypes/test/test_array_in_pointer.py
+file path=usr/lib/python3.9/ctypes/test/test_arrays.py
+file path=usr/lib/python3.9/ctypes/test/test_as_parameter.py
+file path=usr/lib/python3.9/ctypes/test/test_bitfields.py
+file path=usr/lib/python3.9/ctypes/test/test_buffers.py
+file path=usr/lib/python3.9/ctypes/test/test_bytes.py
+file path=usr/lib/python3.9/ctypes/test/test_byteswap.py
+file path=usr/lib/python3.9/ctypes/test/test_callbacks.py
+file path=usr/lib/python3.9/ctypes/test/test_cast.py
+file path=usr/lib/python3.9/ctypes/test/test_cfuncs.py
+file path=usr/lib/python3.9/ctypes/test/test_checkretval.py
+file path=usr/lib/python3.9/ctypes/test/test_delattr.py
+file path=usr/lib/python3.9/ctypes/test/test_errno.py
+file path=usr/lib/python3.9/ctypes/test/test_find.py
+file path=usr/lib/python3.9/ctypes/test/test_frombuffer.py
+file path=usr/lib/python3.9/ctypes/test/test_funcptr.py
+file path=usr/lib/python3.9/ctypes/test/test_functions.py
+file path=usr/lib/python3.9/ctypes/test/test_incomplete.py
+file path=usr/lib/python3.9/ctypes/test/test_init.py
+file path=usr/lib/python3.9/ctypes/test/test_internals.py
+file path=usr/lib/python3.9/ctypes/test/test_keeprefs.py
+file path=usr/lib/python3.9/ctypes/test/test_libc.py
+file path=usr/lib/python3.9/ctypes/test/test_loading.py
+file path=usr/lib/python3.9/ctypes/test/test_macholib.py
+file path=usr/lib/python3.9/ctypes/test/test_memfunctions.py
+file path=usr/lib/python3.9/ctypes/test/test_numbers.py
+file path=usr/lib/python3.9/ctypes/test/test_objects.py
+file path=usr/lib/python3.9/ctypes/test/test_parameters.py
+file path=usr/lib/python3.9/ctypes/test/test_pep3118.py
+file path=usr/lib/python3.9/ctypes/test/test_pickling.py
+file path=usr/lib/python3.9/ctypes/test/test_pointers.py
+file path=usr/lib/python3.9/ctypes/test/test_prototypes.py
+file path=usr/lib/python3.9/ctypes/test/test_python_api.py
+file path=usr/lib/python3.9/ctypes/test/test_random_things.py
+file path=usr/lib/python3.9/ctypes/test/test_refcounts.py
+file path=usr/lib/python3.9/ctypes/test/test_repr.py
+file path=usr/lib/python3.9/ctypes/test/test_returnfuncptrs.py
+file path=usr/lib/python3.9/ctypes/test/test_simplesubclasses.py
+file path=usr/lib/python3.9/ctypes/test/test_sizes.py
+file path=usr/lib/python3.9/ctypes/test/test_slicing.py
+file path=usr/lib/python3.9/ctypes/test/test_stringptr.py
+file path=usr/lib/python3.9/ctypes/test/test_strings.py
+file path=usr/lib/python3.9/ctypes/test/test_struct_fields.py
+file path=usr/lib/python3.9/ctypes/test/test_structures.py
+file path=usr/lib/python3.9/ctypes/test/test_unaligned_structures.py
+file path=usr/lib/python3.9/ctypes/test/test_unicode.py
+file path=usr/lib/python3.9/ctypes/test/test_values.py
+file path=usr/lib/python3.9/ctypes/test/test_varsize_struct.py
+file path=usr/lib/python3.9/ctypes/test/test_win32.py
+file path=usr/lib/python3.9/ctypes/test/test_wintypes.py
+file path=usr/lib/python3.9/ctypes/util.py
+file path=usr/lib/python3.9/ctypes/wintypes.py
+file path=usr/lib/python3.9/curses/__init__.py
+file path=usr/lib/python3.9/curses/ascii.py
+file path=usr/lib/python3.9/curses/has_key.py
+file path=usr/lib/python3.9/curses/panel.py
+file path=usr/lib/python3.9/curses/textpad.py
+file path=usr/lib/python3.9/dataclasses.py
+file path=usr/lib/python3.9/datetime.py
+file path=usr/lib/python3.9/dbm/__init__.py
+file path=usr/lib/python3.9/dbm/dumb.py
+file path=usr/lib/python3.9/dbm/gnu.py
+file path=usr/lib/python3.9/dbm/ndbm.py
+file path=usr/lib/python3.9/decimal.py
+file path=usr/lib/python3.9/difflib.py
+file path=usr/lib/python3.9/dis.py
+file path=usr/lib/python3.9/distutils/README
+file path=usr/lib/python3.9/distutils/__init__.py
+file path=usr/lib/python3.9/distutils/_msvccompiler.py
+file path=usr/lib/python3.9/distutils/archive_util.py
+file path=usr/lib/python3.9/distutils/bcppcompiler.py
+file path=usr/lib/python3.9/distutils/ccompiler.py
+file path=usr/lib/python3.9/distutils/cmd.py
+file path=usr/lib/python3.9/distutils/command/__init__.py
+file path=usr/lib/python3.9/distutils/command/bdist.py
+file path=usr/lib/python3.9/distutils/command/bdist_dumb.py
+file path=usr/lib/python3.9/distutils/command/bdist_msi.py
+file path=usr/lib/python3.9/distutils/command/bdist_rpm.py
+file path=usr/lib/python3.9/distutils/command/bdist_wininst.py
+file path=usr/lib/python3.9/distutils/command/build.py
+file path=usr/lib/python3.9/distutils/command/build_clib.py
+file path=usr/lib/python3.9/distutils/command/build_ext.py
+file path=usr/lib/python3.9/distutils/command/build_py.py
+file path=usr/lib/python3.9/distutils/command/build_scripts.py
+file path=usr/lib/python3.9/distutils/command/check.py
+file path=usr/lib/python3.9/distutils/command/clean.py
+file path=usr/lib/python3.9/distutils/command/command_template
+file path=usr/lib/python3.9/distutils/command/config.py
+file path=usr/lib/python3.9/distutils/command/install.py
+file path=usr/lib/python3.9/distutils/command/install_data.py
+file path=usr/lib/python3.9/distutils/command/install_egg_info.py
+file path=usr/lib/python3.9/distutils/command/install_headers.py
+file path=usr/lib/python3.9/distutils/command/install_lib.py
+file path=usr/lib/python3.9/distutils/command/install_scripts.py
+file path=usr/lib/python3.9/distutils/command/register.py
+file path=usr/lib/python3.9/distutils/command/sdist.py
+file path=usr/lib/python3.9/distutils/command/upload.py
+file path=usr/lib/python3.9/distutils/config.py
+file path=usr/lib/python3.9/distutils/core.py
+file path=usr/lib/python3.9/distutils/cygwinccompiler.py
+file path=usr/lib/python3.9/distutils/debug.py
+file path=usr/lib/python3.9/distutils/dep_util.py
+file path=usr/lib/python3.9/distutils/dir_util.py
+file path=usr/lib/python3.9/distutils/dist.py
+file path=usr/lib/python3.9/distutils/errors.py
+file path=usr/lib/python3.9/distutils/extension.py
+file path=usr/lib/python3.9/distutils/fancy_getopt.py
+file path=usr/lib/python3.9/distutils/file_util.py
+file path=usr/lib/python3.9/distutils/filelist.py
+file path=usr/lib/python3.9/distutils/log.py
+file path=usr/lib/python3.9/distutils/msvc9compiler.py
+file path=usr/lib/python3.9/distutils/msvccompiler.py
+file path=usr/lib/python3.9/distutils/spawn.py
+file path=usr/lib/python3.9/distutils/sysconfig.py
+file path=usr/lib/python3.9/distutils/tests/Setup.sample
+file path=usr/lib/python3.9/distutils/tests/__init__.py
+file path=usr/lib/python3.9/distutils/tests/includetest.rst
+file path=usr/lib/python3.9/distutils/tests/support.py
+file path=usr/lib/python3.9/distutils/tests/test_archive_util.py
+file path=usr/lib/python3.9/distutils/tests/test_bdist.py
+file path=usr/lib/python3.9/distutils/tests/test_bdist_dumb.py
+file path=usr/lib/python3.9/distutils/tests/test_bdist_msi.py
+file path=usr/lib/python3.9/distutils/tests/test_bdist_rpm.py
+file path=usr/lib/python3.9/distutils/tests/test_bdist_wininst.py
+file path=usr/lib/python3.9/distutils/tests/test_build.py
+file path=usr/lib/python3.9/distutils/tests/test_build_clib.py
+file path=usr/lib/python3.9/distutils/tests/test_build_ext.py
+file path=usr/lib/python3.9/distutils/tests/test_build_py.py
+file path=usr/lib/python3.9/distutils/tests/test_build_scripts.py
+file path=usr/lib/python3.9/distutils/tests/test_check.py
+file path=usr/lib/python3.9/distutils/tests/test_clean.py
+file path=usr/lib/python3.9/distutils/tests/test_cmd.py
+file path=usr/lib/python3.9/distutils/tests/test_config.py
+file path=usr/lib/python3.9/distutils/tests/test_config_cmd.py
+file path=usr/lib/python3.9/distutils/tests/test_core.py
+file path=usr/lib/python3.9/distutils/tests/test_cygwinccompiler.py
+file path=usr/lib/python3.9/distutils/tests/test_dep_util.py
+file path=usr/lib/python3.9/distutils/tests/test_dir_util.py
+file path=usr/lib/python3.9/distutils/tests/test_dist.py
+file path=usr/lib/python3.9/distutils/tests/test_extension.py
+file path=usr/lib/python3.9/distutils/tests/test_file_util.py
+file path=usr/lib/python3.9/distutils/tests/test_filelist.py
+file path=usr/lib/python3.9/distutils/tests/test_install.py
+file path=usr/lib/python3.9/distutils/tests/test_install_data.py
+file path=usr/lib/python3.9/distutils/tests/test_install_headers.py
+file path=usr/lib/python3.9/distutils/tests/test_install_lib.py
+file path=usr/lib/python3.9/distutils/tests/test_install_scripts.py
+file path=usr/lib/python3.9/distutils/tests/test_log.py
+file path=usr/lib/python3.9/distutils/tests/test_msvc9compiler.py
+file path=usr/lib/python3.9/distutils/tests/test_msvccompiler.py
+file path=usr/lib/python3.9/distutils/tests/test_register.py
+file path=usr/lib/python3.9/distutils/tests/test_sdist.py
+file path=usr/lib/python3.9/distutils/tests/test_spawn.py
+file path=usr/lib/python3.9/distutils/tests/test_sysconfig.py
+file path=usr/lib/python3.9/distutils/tests/test_text_file.py
+file path=usr/lib/python3.9/distutils/tests/test_unixccompiler.py
+file path=usr/lib/python3.9/distutils/tests/test_upload.py
+file path=usr/lib/python3.9/distutils/tests/test_util.py
+file path=usr/lib/python3.9/distutils/tests/test_version.py
+file path=usr/lib/python3.9/distutils/tests/test_versionpredicate.py
+file path=usr/lib/python3.9/distutils/tests/xxmodule.c
+file path=usr/lib/python3.9/distutils/text_file.py
+file path=usr/lib/python3.9/distutils/unixccompiler.py
+file path=usr/lib/python3.9/distutils/util.py
+file path=usr/lib/python3.9/distutils/version.py
+file path=usr/lib/python3.9/distutils/versionpredicate.py
+file path=usr/lib/python3.9/doctest.py
+file path=usr/lib/python3.9/email/__init__.py
+file path=usr/lib/python3.9/email/_encoded_words.py
+file path=usr/lib/python3.9/email/_header_value_parser.py
+file path=usr/lib/python3.9/email/_parseaddr.py
+file path=usr/lib/python3.9/email/_policybase.py
+file path=usr/lib/python3.9/email/architecture.rst
+file path=usr/lib/python3.9/email/base64mime.py
+file path=usr/lib/python3.9/email/charset.py
+file path=usr/lib/python3.9/email/contentmanager.py
+file path=usr/lib/python3.9/email/encoders.py
+file path=usr/lib/python3.9/email/errors.py
+file path=usr/lib/python3.9/email/feedparser.py
+file path=usr/lib/python3.9/email/generator.py
+file path=usr/lib/python3.9/email/header.py
+file path=usr/lib/python3.9/email/headerregistry.py
+file path=usr/lib/python3.9/email/iterators.py
+file path=usr/lib/python3.9/email/message.py
+file path=usr/lib/python3.9/email/mime/__init__.py
+file path=usr/lib/python3.9/email/mime/application.py
+file path=usr/lib/python3.9/email/mime/audio.py
+file path=usr/lib/python3.9/email/mime/base.py
+file path=usr/lib/python3.9/email/mime/image.py
+file path=usr/lib/python3.9/email/mime/message.py
+file path=usr/lib/python3.9/email/mime/multipart.py
+file path=usr/lib/python3.9/email/mime/nonmultipart.py
+file path=usr/lib/python3.9/email/mime/text.py
+file path=usr/lib/python3.9/email/parser.py
+file path=usr/lib/python3.9/email/policy.py
+file path=usr/lib/python3.9/email/quoprimime.py
+file path=usr/lib/python3.9/email/utils.py
+file path=usr/lib/python3.9/encodings/__init__.py
+file path=usr/lib/python3.9/encodings/aliases.py
+file path=usr/lib/python3.9/encodings/ascii.py
+file path=usr/lib/python3.9/encodings/base64_codec.py
+file path=usr/lib/python3.9/encodings/big5.py
+file path=usr/lib/python3.9/encodings/big5hkscs.py
+file path=usr/lib/python3.9/encodings/bz2_codec.py
+file path=usr/lib/python3.9/encodings/charmap.py
+file path=usr/lib/python3.9/encodings/cp037.py
+file path=usr/lib/python3.9/encodings/cp1006.py
+file path=usr/lib/python3.9/encodings/cp1026.py
+file path=usr/lib/python3.9/encodings/cp1125.py
+file path=usr/lib/python3.9/encodings/cp1140.py
+file path=usr/lib/python3.9/encodings/cp1250.py
+file path=usr/lib/python3.9/encodings/cp1251.py
+file path=usr/lib/python3.9/encodings/cp1252.py
+file path=usr/lib/python3.9/encodings/cp1253.py
+file path=usr/lib/python3.9/encodings/cp1254.py
+file path=usr/lib/python3.9/encodings/cp1255.py
+file path=usr/lib/python3.9/encodings/cp1256.py
+file path=usr/lib/python3.9/encodings/cp1257.py
+file path=usr/lib/python3.9/encodings/cp1258.py
+file path=usr/lib/python3.9/encodings/cp273.py
+file path=usr/lib/python3.9/encodings/cp424.py
+file path=usr/lib/python3.9/encodings/cp437.py
+file path=usr/lib/python3.9/encodings/cp500.py
+file path=usr/lib/python3.9/encodings/cp720.py
+file path=usr/lib/python3.9/encodings/cp737.py
+file path=usr/lib/python3.9/encodings/cp775.py
+file path=usr/lib/python3.9/encodings/cp850.py
+file path=usr/lib/python3.9/encodings/cp852.py
+file path=usr/lib/python3.9/encodings/cp855.py
+file path=usr/lib/python3.9/encodings/cp856.py
+file path=usr/lib/python3.9/encodings/cp857.py
+file path=usr/lib/python3.9/encodings/cp858.py
+file path=usr/lib/python3.9/encodings/cp860.py
+file path=usr/lib/python3.9/encodings/cp861.py
+file path=usr/lib/python3.9/encodings/cp862.py
+file path=usr/lib/python3.9/encodings/cp863.py
+file path=usr/lib/python3.9/encodings/cp864.py
+file path=usr/lib/python3.9/encodings/cp865.py
+file path=usr/lib/python3.9/encodings/cp866.py
+file path=usr/lib/python3.9/encodings/cp869.py
+file path=usr/lib/python3.9/encodings/cp874.py
+file path=usr/lib/python3.9/encodings/cp875.py
+file path=usr/lib/python3.9/encodings/cp932.py
+file path=usr/lib/python3.9/encodings/cp949.py
+file path=usr/lib/python3.9/encodings/cp950.py
+file path=usr/lib/python3.9/encodings/euc_jis_2004.py
+file path=usr/lib/python3.9/encodings/euc_jisx0213.py
+file path=usr/lib/python3.9/encodings/euc_jp.py
+file path=usr/lib/python3.9/encodings/euc_kr.py
+file path=usr/lib/python3.9/encodings/gb18030.py
+file path=usr/lib/python3.9/encodings/gb2312.py
+file path=usr/lib/python3.9/encodings/gbk.py
+file path=usr/lib/python3.9/encodings/hex_codec.py
+file path=usr/lib/python3.9/encodings/hp_roman8.py
+file path=usr/lib/python3.9/encodings/hz.py
+file path=usr/lib/python3.9/encodings/idna.py
+file path=usr/lib/python3.9/encodings/iso2022_jp.py
+file path=usr/lib/python3.9/encodings/iso2022_jp_1.py
+file path=usr/lib/python3.9/encodings/iso2022_jp_2.py
+file path=usr/lib/python3.9/encodings/iso2022_jp_2004.py
+file path=usr/lib/python3.9/encodings/iso2022_jp_3.py
+file path=usr/lib/python3.9/encodings/iso2022_jp_ext.py
+file path=usr/lib/python3.9/encodings/iso2022_kr.py
+file path=usr/lib/python3.9/encodings/iso8859_1.py
+file path=usr/lib/python3.9/encodings/iso8859_10.py
+file path=usr/lib/python3.9/encodings/iso8859_11.py
+file path=usr/lib/python3.9/encodings/iso8859_13.py
+file path=usr/lib/python3.9/encodings/iso8859_14.py
+file path=usr/lib/python3.9/encodings/iso8859_15.py
+file path=usr/lib/python3.9/encodings/iso8859_16.py
+file path=usr/lib/python3.9/encodings/iso8859_2.py
+file path=usr/lib/python3.9/encodings/iso8859_3.py
+file path=usr/lib/python3.9/encodings/iso8859_4.py
+file path=usr/lib/python3.9/encodings/iso8859_5.py
+file path=usr/lib/python3.9/encodings/iso8859_6.py
+file path=usr/lib/python3.9/encodings/iso8859_7.py
+file path=usr/lib/python3.9/encodings/iso8859_8.py
+file path=usr/lib/python3.9/encodings/iso8859_9.py
+file path=usr/lib/python3.9/encodings/johab.py
+file path=usr/lib/python3.9/encodings/koi8_r.py
+file path=usr/lib/python3.9/encodings/koi8_t.py
+file path=usr/lib/python3.9/encodings/koi8_u.py
+file path=usr/lib/python3.9/encodings/kz1048.py
+file path=usr/lib/python3.9/encodings/latin_1.py
+file path=usr/lib/python3.9/encodings/mac_arabic.py
+file path=usr/lib/python3.9/encodings/mac_croatian.py
+file path=usr/lib/python3.9/encodings/mac_cyrillic.py
+file path=usr/lib/python3.9/encodings/mac_farsi.py
+file path=usr/lib/python3.9/encodings/mac_greek.py
+file path=usr/lib/python3.9/encodings/mac_iceland.py
+file path=usr/lib/python3.9/encodings/mac_latin2.py
+file path=usr/lib/python3.9/encodings/mac_roman.py
+file path=usr/lib/python3.9/encodings/mac_romanian.py
+file path=usr/lib/python3.9/encodings/mac_turkish.py
+file path=usr/lib/python3.9/encodings/mbcs.py
+file path=usr/lib/python3.9/encodings/oem.py
+file path=usr/lib/python3.9/encodings/palmos.py
+file path=usr/lib/python3.9/encodings/ptcp154.py
+file path=usr/lib/python3.9/encodings/punycode.py
+file path=usr/lib/python3.9/encodings/quopri_codec.py
+file path=usr/lib/python3.9/encodings/raw_unicode_escape.py
+file path=usr/lib/python3.9/encodings/rot_13.py
+file path=usr/lib/python3.9/encodings/shift_jis.py
+file path=usr/lib/python3.9/encodings/shift_jis_2004.py
+file path=usr/lib/python3.9/encodings/shift_jisx0213.py
+file path=usr/lib/python3.9/encodings/tis_620.py
+file path=usr/lib/python3.9/encodings/undefined.py
+file path=usr/lib/python3.9/encodings/unicode_escape.py
+file path=usr/lib/python3.9/encodings/utf_16.py
+file path=usr/lib/python3.9/encodings/utf_16_be.py
+file path=usr/lib/python3.9/encodings/utf_16_le.py
+file path=usr/lib/python3.9/encodings/utf_32.py
+file path=usr/lib/python3.9/encodings/utf_32_be.py
+file path=usr/lib/python3.9/encodings/utf_32_le.py
+file path=usr/lib/python3.9/encodings/utf_7.py
+file path=usr/lib/python3.9/encodings/utf_8.py
+file path=usr/lib/python3.9/encodings/utf_8_sig.py
+file path=usr/lib/python3.9/encodings/uu_codec.py
+file path=usr/lib/python3.9/encodings/zlib_codec.py
+file path=usr/lib/python3.9/ensurepip/__init__.py
+file path=usr/lib/python3.9/ensurepip/__main__.py
+file path=usr/lib/python3.9/ensurepip/_bundled/__init__.py
+file path=usr/lib/python3.9/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl
+file path=usr/lib/python3.9/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl
+file path=usr/lib/python3.9/ensurepip/_uninstall.py
+file path=usr/lib/python3.9/enum.py
+file path=usr/lib/python3.9/filecmp.py
+file path=usr/lib/python3.9/fileinput.py
+file path=usr/lib/python3.9/fnmatch.py
+file path=usr/lib/python3.9/formatter.py
+file path=usr/lib/python3.9/fractions.py
+file path=usr/lib/python3.9/ftplib.py
+file path=usr/lib/python3.9/functools.py
+file path=usr/lib/python3.9/genericpath.py
+file path=usr/lib/python3.9/getopt.py
+file path=usr/lib/python3.9/getpass.py
+file path=usr/lib/python3.9/gettext.py
+file path=usr/lib/python3.9/glob.py
+file path=usr/lib/python3.9/graphlib.py
+file path=usr/lib/python3.9/gzip.py
+file path=usr/lib/python3.9/hashlib.py
+file path=usr/lib/python3.9/heapq.py
+file path=usr/lib/python3.9/hmac.py
+file path=usr/lib/python3.9/html/__init__.py
+file path=usr/lib/python3.9/html/entities.py
+file path=usr/lib/python3.9/html/parser.py
+file path=usr/lib/python3.9/http/__init__.py
+file path=usr/lib/python3.9/http/client.py
+file path=usr/lib/python3.9/http/cookiejar.py
+file path=usr/lib/python3.9/http/cookies.py
+file path=usr/lib/python3.9/http/server.py
+file path=usr/lib/python3.9/idlelib/CREDITS.txt
+file path=usr/lib/python3.9/idlelib/ChangeLog
+file path=usr/lib/python3.9/idlelib/HISTORY.txt
+file path=usr/lib/python3.9/idlelib/Icons/README.txt
+file path=usr/lib/python3.9/idlelib/Icons/folder.gif
+file path=usr/lib/python3.9/idlelib/Icons/idle.ico
+file path=usr/lib/python3.9/idlelib/Icons/idle_16.gif
+file path=usr/lib/python3.9/idlelib/Icons/idle_16.png
+file path=usr/lib/python3.9/idlelib/Icons/idle_256.png
+file path=usr/lib/python3.9/idlelib/Icons/idle_32.gif
+file path=usr/lib/python3.9/idlelib/Icons/idle_32.png
+file path=usr/lib/python3.9/idlelib/Icons/idle_48.gif
+file path=usr/lib/python3.9/idlelib/Icons/idle_48.png
+file path=usr/lib/python3.9/idlelib/Icons/minusnode.gif
+file path=usr/lib/python3.9/idlelib/Icons/openfolder.gif
+file path=usr/lib/python3.9/idlelib/Icons/plusnode.gif
+file path=usr/lib/python3.9/idlelib/Icons/python.gif
+file path=usr/lib/python3.9/idlelib/Icons/tk.gif
+file path=usr/lib/python3.9/idlelib/NEWS.txt
+file path=usr/lib/python3.9/idlelib/NEWS2x.txt
+file path=usr/lib/python3.9/idlelib/README.txt
+file path=usr/lib/python3.9/idlelib/TODO.txt
+file path=usr/lib/python3.9/idlelib/__init__.py
+file path=usr/lib/python3.9/idlelib/__main__.py
+file path=usr/lib/python3.9/idlelib/autocomplete.py
+file path=usr/lib/python3.9/idlelib/autocomplete_w.py
+file path=usr/lib/python3.9/idlelib/autoexpand.py
+file path=usr/lib/python3.9/idlelib/browser.py
+file path=usr/lib/python3.9/idlelib/calltip.py
+file path=usr/lib/python3.9/idlelib/calltip_w.py
+file path=usr/lib/python3.9/idlelib/codecontext.py
+file path=usr/lib/python3.9/idlelib/colorizer.py
+file path=usr/lib/python3.9/idlelib/config-extensions.def
+file path=usr/lib/python3.9/idlelib/config-highlight.def
+file path=usr/lib/python3.9/idlelib/config-keys.def
+file path=usr/lib/python3.9/idlelib/config-main.def
+file path=usr/lib/python3.9/idlelib/config.py
+file path=usr/lib/python3.9/idlelib/config_key.py
+file path=usr/lib/python3.9/idlelib/configdialog.py
+file path=usr/lib/python3.9/idlelib/debugger.py
+file path=usr/lib/python3.9/idlelib/debugger_r.py
+file path=usr/lib/python3.9/idlelib/debugobj.py
+file path=usr/lib/python3.9/idlelib/debugobj_r.py
+file path=usr/lib/python3.9/idlelib/delegator.py
+file path=usr/lib/python3.9/idlelib/dynoption.py
+file path=usr/lib/python3.9/idlelib/editor.py
+file path=usr/lib/python3.9/idlelib/extend.txt
+file path=usr/lib/python3.9/idlelib/filelist.py
+file path=usr/lib/python3.9/idlelib/format.py
+file path=usr/lib/python3.9/idlelib/grep.py
+file path=usr/lib/python3.9/idlelib/help.html
+file path=usr/lib/python3.9/idlelib/help.py
+file path=usr/lib/python3.9/idlelib/help_about.py
+file path=usr/lib/python3.9/idlelib/history.py
+file path=usr/lib/python3.9/idlelib/hyperparser.py
+file path=usr/lib/python3.9/idlelib/idle.bat
+file path=usr/lib/python3.9/idlelib/idle.py
+file path=usr/lib/python3.9/idlelib/idle.pyw
+file path=usr/lib/python3.9/idlelib/idle_test/README.txt
+file path=usr/lib/python3.9/idlelib/idle_test/__init__.py
+file path=usr/lib/python3.9/idlelib/idle_test/htest.py
+file path=usr/lib/python3.9/idlelib/idle_test/mock_idle.py
+file path=usr/lib/python3.9/idlelib/idle_test/mock_tk.py
+file path=usr/lib/python3.9/idlelib/idle_test/template.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_autocomplete.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_autocomplete_w.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_autoexpand.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_browser.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_calltip.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_calltip_w.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_codecontext.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_colorizer.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_config.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_config_key.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_configdialog.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_debugger.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_debugger_r.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_debugobj.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_debugobj_r.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_delegator.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_editmenu.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_editor.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_filelist.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_format.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_grep.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_help.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_help_about.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_history.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_hyperparser.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_iomenu.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_macosx.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_mainmenu.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_multicall.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_outwin.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_parenmatch.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_pathbrowser.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_percolator.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_pyparse.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_pyshell.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_query.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_redirector.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_replace.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_rpc.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_run.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_runscript.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_scrolledlist.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_search.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_searchbase.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_searchengine.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_sidebar.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_squeezer.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_stackviewer.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_statusbar.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_text.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_textview.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_tooltip.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_tree.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_undo.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_warning.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_window.py
+file path=usr/lib/python3.9/idlelib/idle_test/test_zoomheight.py
+file path=usr/lib/python3.9/idlelib/iomenu.py
+file path=usr/lib/python3.9/idlelib/macosx.py
+file path=usr/lib/python3.9/idlelib/mainmenu.py
+file path=usr/lib/python3.9/idlelib/multicall.py
+file path=usr/lib/python3.9/idlelib/outwin.py
+file path=usr/lib/python3.9/idlelib/parenmatch.py
+file path=usr/lib/python3.9/idlelib/pathbrowser.py
+file path=usr/lib/python3.9/idlelib/percolator.py
+file path=usr/lib/python3.9/idlelib/pyparse.py
+file path=usr/lib/python3.9/idlelib/pyshell.py
+file path=usr/lib/python3.9/idlelib/query.py
+file path=usr/lib/python3.9/idlelib/redirector.py
+file path=usr/lib/python3.9/idlelib/replace.py
+file path=usr/lib/python3.9/idlelib/rpc.py
+file path=usr/lib/python3.9/idlelib/run.py
+file path=usr/lib/python3.9/idlelib/runscript.py
+file path=usr/lib/python3.9/idlelib/scrolledlist.py
+file path=usr/lib/python3.9/idlelib/search.py
+file path=usr/lib/python3.9/idlelib/searchbase.py
+file path=usr/lib/python3.9/idlelib/searchengine.py
+file path=usr/lib/python3.9/idlelib/sidebar.py
+file path=usr/lib/python3.9/idlelib/squeezer.py
+file path=usr/lib/python3.9/idlelib/stackviewer.py
+file path=usr/lib/python3.9/idlelib/statusbar.py
+file path=usr/lib/python3.9/idlelib/textview.py
+file path=usr/lib/python3.9/idlelib/tooltip.py
+file path=usr/lib/python3.9/idlelib/tree.py
+file path=usr/lib/python3.9/idlelib/undo.py
+file path=usr/lib/python3.9/idlelib/window.py
+file path=usr/lib/python3.9/idlelib/zoomheight.py
+file path=usr/lib/python3.9/idlelib/zzdummy.py
+file path=usr/lib/python3.9/imaplib.py
+file path=usr/lib/python3.9/imghdr.py
+file path=usr/lib/python3.9/imp.py
+file path=usr/lib/python3.9/importlib/__init__.py
+file path=usr/lib/python3.9/importlib/_bootstrap.py
+file path=usr/lib/python3.9/importlib/_bootstrap_external.py
+file path=usr/lib/python3.9/importlib/_common.py
+file path=usr/lib/python3.9/importlib/abc.py
+file path=usr/lib/python3.9/importlib/machinery.py
+file path=usr/lib/python3.9/importlib/metadata.py
+file path=usr/lib/python3.9/importlib/resources.py
+file path=usr/lib/python3.9/importlib/util.py
+file path=usr/lib/python3.9/inspect.py
+file path=usr/lib/python3.9/io.py
+file path=usr/lib/python3.9/ipaddress.py
+file path=usr/lib/python3.9/json/__init__.py
+file path=usr/lib/python3.9/json/decoder.py
+file path=usr/lib/python3.9/json/encoder.py
+file path=usr/lib/python3.9/json/scanner.py
+file path=usr/lib/python3.9/json/tool.py
+file path=usr/lib/python3.9/keyword.py
+file path=usr/lib/python3.9/lib-dynload/_asyncio.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_bisect.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_blake2.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_bz2.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_cn.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_hk.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_iso2022.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_jp.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_kr.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_tw.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_contextvars.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_crypt.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_csv.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_ctypes.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_ctypes_test.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_curses_panel.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_datetime.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_dbm.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_decimal.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_elementtree.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_gdbm.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_hashlib.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_heapq.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_json.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_lsprof.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_lzma.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_md5.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_multibytecodec.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_multiprocessing.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_opcode.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_pickle.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_posixshmem.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_posixsubprocess.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_queue.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_random.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_sha1.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_sha256.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_sha3.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_sha512.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_socket.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_sqlite3.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_ssl.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_statistics.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_struct.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_testbuffer.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_testcapi.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_testimportmultiple.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_testinternalcapi.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_testmultiphase.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_tkinter.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_uuid.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_xxsubinterpreters.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_xxtestfuzz.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_zoneinfo.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/array.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/audioop.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/binascii.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/cmath.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/dlpi.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/fcntl.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/grp.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/math.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/mmap.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/nis.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/ossaudiodev.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/parser.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/privileges.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/pyexpat.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/rbac.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/readline.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/resource.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/select.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/spwd.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/syslog.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/termios.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/ucred.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/unicodedata.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/xxlimited.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/zlib.cpython-39.so
+file path=usr/lib/python3.9/lib2to3/Grammar$(COMPONENT_VERSION).final.0.pickle
+file path=usr/lib/python3.9/lib2to3/Grammar.txt
+file path=usr/lib/python3.9/lib2to3/PatternGrammar$(COMPONENT_VERSION).final.0.pickle
+file path=usr/lib/python3.9/lib2to3/PatternGrammar.txt
+file path=usr/lib/python3.9/lib2to3/__init__.py
+file path=usr/lib/python3.9/lib2to3/__main__.py
+file path=usr/lib/python3.9/lib2to3/btm_matcher.py
+file path=usr/lib/python3.9/lib2to3/btm_utils.py
+file path=usr/lib/python3.9/lib2to3/fixer_base.py
+file path=usr/lib/python3.9/lib2to3/fixer_util.py
+file path=usr/lib/python3.9/lib2to3/fixes/__init__.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_apply.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_asserts.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_basestring.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_buffer.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_dict.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_except.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_exec.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_execfile.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_exitfunc.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_filter.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_funcattrs.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_future.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_getcwdu.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_has_key.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_idioms.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_import.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_imports.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_imports2.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_input.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_intern.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_isinstance.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_itertools.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_itertools_imports.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_long.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_map.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_metaclass.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_methodattrs.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_ne.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_next.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_nonzero.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_numliterals.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_operator.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_paren.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_print.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_raise.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_raw_input.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_reduce.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_reload.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_renames.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_repr.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_set_literal.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_standarderror.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_sys_exc.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_throw.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_tuple_params.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_types.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_unicode.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_urllib.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_ws_comma.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_xrange.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_xreadlines.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_zip.py
+file path=usr/lib/python3.9/lib2to3/main.py
+file path=usr/lib/python3.9/lib2to3/patcomp.py
+file path=usr/lib/python3.9/lib2to3/pgen2/__init__.py
+file path=usr/lib/python3.9/lib2to3/pgen2/conv.py
+file path=usr/lib/python3.9/lib2to3/pgen2/driver.py
+file path=usr/lib/python3.9/lib2to3/pgen2/grammar.py
+file path=usr/lib/python3.9/lib2to3/pgen2/literals.py
+file path=usr/lib/python3.9/lib2to3/pgen2/parse.py
+file path=usr/lib/python3.9/lib2to3/pgen2/pgen.py
+file path=usr/lib/python3.9/lib2to3/pgen2/token.py
+file path=usr/lib/python3.9/lib2to3/pgen2/tokenize.py
+file path=usr/lib/python3.9/lib2to3/pygram.py
+file path=usr/lib/python3.9/lib2to3/pytree.py
+file path=usr/lib/python3.9/lib2to3/refactor.py
+file path=usr/lib/python3.9/lib2to3/tests/__init__.py
+file path=usr/lib/python3.9/lib2to3/tests/__main__.py
+file path=usr/lib/python3.9/lib2to3/tests/data/README
+file path=usr/lib/python3.9/lib2to3/tests/data/bom.py
+file path=usr/lib/python3.9/lib2to3/tests/data/crlf.py
+file path=usr/lib/python3.9/lib2to3/tests/data/different_encoding.py
+file path=usr/lib/python3.9/lib2to3/tests/data/false_encoding.py
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/bad_order.py
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/__init__.py
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/fix_explicit.py
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/fix_first.py
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/fix_last.py
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/fix_parrot.py
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/fix_preorder.py
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/no_fixer_cls.py
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/parrot_example.py
+file path=usr/lib/python3.9/lib2to3/tests/data/infinite_recursion.py
+file path=usr/lib/python3.9/lib2to3/tests/data/py2_test_grammar.py
+file path=usr/lib/python3.9/lib2to3/tests/data/py3_test_grammar.py
+file path=usr/lib/python3.9/lib2to3/tests/pytree_idempotency.py
+file path=usr/lib/python3.9/lib2to3/tests/support.py
+file path=usr/lib/python3.9/lib2to3/tests/test_all_fixers.py
+file path=usr/lib/python3.9/lib2to3/tests/test_fixers.py
+file path=usr/lib/python3.9/lib2to3/tests/test_main.py
+file path=usr/lib/python3.9/lib2to3/tests/test_parser.py
+file path=usr/lib/python3.9/lib2to3/tests/test_pytree.py
+file path=usr/lib/python3.9/lib2to3/tests/test_refactor.py
+file path=usr/lib/python3.9/lib2to3/tests/test_util.py
+file path=usr/lib/python3.9/linecache.py
+file path=usr/lib/python3.9/locale.py
+file path=usr/lib/python3.9/logging/__init__.py
+file path=usr/lib/python3.9/logging/config.py
+file path=usr/lib/python3.9/logging/handlers.py
+file path=usr/lib/python3.9/lzma.py
+file path=usr/lib/python3.9/mailbox.py
+file path=usr/lib/python3.9/mailcap.py
+file path=usr/lib/python3.9/mimetypes.py
+file path=usr/lib/python3.9/modulefinder.py
+file path=usr/lib/python3.9/multiprocessing/__init__.py
+file path=usr/lib/python3.9/multiprocessing/connection.py
+file path=usr/lib/python3.9/multiprocessing/context.py
+file path=usr/lib/python3.9/multiprocessing/dummy/__init__.py
+file path=usr/lib/python3.9/multiprocessing/dummy/connection.py
+file path=usr/lib/python3.9/multiprocessing/forkserver.py
+file path=usr/lib/python3.9/multiprocessing/heap.py
+file path=usr/lib/python3.9/multiprocessing/managers.py
+file path=usr/lib/python3.9/multiprocessing/pool.py
+file path=usr/lib/python3.9/multiprocessing/popen_fork.py
+file path=usr/lib/python3.9/multiprocessing/popen_forkserver.py
+file path=usr/lib/python3.9/multiprocessing/popen_spawn_posix.py
+file path=usr/lib/python3.9/multiprocessing/popen_spawn_win32.py
+file path=usr/lib/python3.9/multiprocessing/process.py
+file path=usr/lib/python3.9/multiprocessing/queues.py
+file path=usr/lib/python3.9/multiprocessing/reduction.py
+file path=usr/lib/python3.9/multiprocessing/resource_sharer.py
+file path=usr/lib/python3.9/multiprocessing/resource_tracker.py
+file path=usr/lib/python3.9/multiprocessing/shared_memory.py
+file path=usr/lib/python3.9/multiprocessing/sharedctypes.py
+file path=usr/lib/python3.9/multiprocessing/spawn.py
+file path=usr/lib/python3.9/multiprocessing/synchronize.py
+file path=usr/lib/python3.9/multiprocessing/util.py
+file path=usr/lib/python3.9/netrc.py
+file path=usr/lib/python3.9/nntplib.py
+file path=usr/lib/python3.9/ntpath.py
+file path=usr/lib/python3.9/nturl2path.py
+file path=usr/lib/python3.9/numbers.py
+file path=usr/lib/python3.9/opcode.py
+file path=usr/lib/python3.9/operator.py
+file path=usr/lib/python3.9/optparse.py
+file path=usr/lib/python3.9/os.py
+file path=usr/lib/python3.9/pathlib.py
+file path=usr/lib/python3.9/pdb.py
+file path=usr/lib/python3.9/pickle.py
+file path=usr/lib/python3.9/pickletools.py
+file path=usr/lib/python3.9/pipes.py
+file path=usr/lib/python3.9/pkgutil.py
+file path=usr/lib/python3.9/platform.py
+file path=usr/lib/python3.9/plistlib.py
+file path=usr/lib/python3.9/poplib.py
+file path=usr/lib/python3.9/posixpath.py
+file path=usr/lib/python3.9/pprint.py
+file path=usr/lib/python3.9/profile.py
+file path=usr/lib/python3.9/pstats.py
+file path=usr/lib/python3.9/pty.py
+file path=usr/lib/python3.9/py_compile.py
+file path=usr/lib/python3.9/pyclbr.py
+file path=usr/lib/python3.9/pydoc.py
+file path=usr/lib/python3.9/pydoc_data/__init__.py
+file path=usr/lib/python3.9/pydoc_data/_pydoc.css
+file path=usr/lib/python3.9/pydoc_data/topics.py
+file path=usr/lib/python3.9/queue.py
+file path=usr/lib/python3.9/quopri.py
+file path=usr/lib/python3.9/random.py
+file path=usr/lib/python3.9/re.py
+file path=usr/lib/python3.9/reprlib.py
+file path=usr/lib/python3.9/rlcompleter.py
+file path=usr/lib/python3.9/runpy.py
+file path=usr/lib/python3.9/sched.py
+file path=usr/lib/python3.9/secrets.py
+file path=usr/lib/python3.9/selectors.py
+file path=usr/lib/python3.9/shelve.py
+file path=usr/lib/python3.9/shlex.py
+file path=usr/lib/python3.9/shutil.py
+file path=usr/lib/python3.9/signal.py
+file path=usr/lib/python3.9/site-packages/README.txt
+file path=usr/lib/python3.9/site-packages/vendor-packages.pth
+file path=usr/lib/python3.9/site.py
+file path=usr/lib/python3.9/smtpd.py
+file path=usr/lib/python3.9/smtplib.py
+file path=usr/lib/python3.9/sndhdr.py
+file path=usr/lib/python3.9/socket.py
+file path=usr/lib/python3.9/socketserver.py
+file path=usr/lib/python3.9/sqlite3/__init__.py
+file path=usr/lib/python3.9/sqlite3/dbapi2.py
+file path=usr/lib/python3.9/sqlite3/dump.py
+file path=usr/lib/python3.9/sqlite3/test/__init__.py
+file path=usr/lib/python3.9/sqlite3/test/backup.py
+file path=usr/lib/python3.9/sqlite3/test/dbapi.py
+file path=usr/lib/python3.9/sqlite3/test/dump.py
+file path=usr/lib/python3.9/sqlite3/test/factory.py
+file path=usr/lib/python3.9/sqlite3/test/hooks.py
+file path=usr/lib/python3.9/sqlite3/test/regression.py
+file path=usr/lib/python3.9/sqlite3/test/transactions.py
+file path=usr/lib/python3.9/sqlite3/test/types.py
+file path=usr/lib/python3.9/sqlite3/test/userfunctions.py
+file path=usr/lib/python3.9/sre_compile.py
+file path=usr/lib/python3.9/sre_constants.py
+file path=usr/lib/python3.9/sre_parse.py
+file path=usr/lib/python3.9/ssl.py
+file path=usr/lib/python3.9/stat.py
+file path=usr/lib/python3.9/statistics.py
+file path=usr/lib/python3.9/string.py
+file path=usr/lib/python3.9/stringprep.py
+file path=usr/lib/python3.9/struct.py
+file path=usr/lib/python3.9/subprocess.py
+file path=usr/lib/python3.9/sunau.py
+file path=usr/lib/python3.9/symbol.py
+file path=usr/lib/python3.9/symtable.py
+file path=usr/lib/python3.9/sysconfig.py
+file path=usr/lib/python3.9/tabnanny.py
+file path=usr/lib/python3.9/tarfile.py
+file path=usr/lib/python3.9/telnetlib.py
+file path=usr/lib/python3.9/tempfile.py
+file path=usr/lib/python3.9/test/Sine-1000Hz-300ms.aif
+file path=usr/lib/python3.9/test/__init__.py
+file path=usr/lib/python3.9/test/__main__.py
+file path=usr/lib/python3.9/test/_test_multiprocessing.py
+file path=usr/lib/python3.9/test/allsans.pem
+file path=usr/lib/python3.9/test/ann_module.py
+file path=usr/lib/python3.9/test/ann_module2.py
+file path=usr/lib/python3.9/test/ann_module3.py
+file path=usr/lib/python3.9/test/audiodata/pluck-alaw.aifc
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm16.aiff
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm16.au
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm16.wav
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm24.aiff
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm24.au
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm24.wav
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm32.aiff
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm32.au
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm32.wav
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm8.aiff
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm8.au
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm8.wav
+file path=usr/lib/python3.9/test/audiodata/pluck-ulaw.aifc
+file path=usr/lib/python3.9/test/audiodata/pluck-ulaw.au
+file path=usr/lib/python3.9/test/audiotest.au
+file path=usr/lib/python3.9/test/audiotests.py
+file path=usr/lib/python3.9/test/audit-tests.py
+file path=usr/lib/python3.9/test/autotest.py
+file path=usr/lib/python3.9/test/bad_coding.py
+file path=usr/lib/python3.9/test/bad_coding2.py
+file path=usr/lib/python3.9/test/bad_getattr.py
+file path=usr/lib/python3.9/test/bad_getattr2.py
+file path=usr/lib/python3.9/test/bad_getattr3.py
+file path=usr/lib/python3.9/test/badcert.pem
+file path=usr/lib/python3.9/test/badkey.pem
+file path=usr/lib/python3.9/test/badsyntax_3131.py
+file path=usr/lib/python3.9/test/badsyntax_future10.py
+file path=usr/lib/python3.9/test/badsyntax_future3.py
+file path=usr/lib/python3.9/test/badsyntax_future4.py
+file path=usr/lib/python3.9/test/badsyntax_future5.py
+file path=usr/lib/python3.9/test/badsyntax_future6.py
+file path=usr/lib/python3.9/test/badsyntax_future7.py
+file path=usr/lib/python3.9/test/badsyntax_future8.py
+file path=usr/lib/python3.9/test/badsyntax_future9.py
+file path=usr/lib/python3.9/test/badsyntax_pep3120.py
+file path=usr/lib/python3.9/test/bisect_cmd.py
+file path=usr/lib/python3.9/test/capath/4e1295a3.0
+file path=usr/lib/python3.9/test/capath/5ed36f99.0
+file path=usr/lib/python3.9/test/capath/6e88d7b8.0
+file path=usr/lib/python3.9/test/capath/99d0fa06.0
+file path=usr/lib/python3.9/test/capath/b1930218.0
+file path=usr/lib/python3.9/test/capath/ceff1710.0
+file path=usr/lib/python3.9/test/cfgparser.1
+file path=usr/lib/python3.9/test/cfgparser.2
+file path=usr/lib/python3.9/test/cfgparser.3
+file path=usr/lib/python3.9/test/cjkencodings/big5-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/big5.txt
+file path=usr/lib/python3.9/test/cjkencodings/big5hkscs-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/big5hkscs.txt
+file path=usr/lib/python3.9/test/cjkencodings/cp949-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/cp949.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_jisx0213-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_jisx0213.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_jp-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_jp.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_kr-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_kr.txt
+file path=usr/lib/python3.9/test/cjkencodings/gb18030-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/gb18030.txt
+file path=usr/lib/python3.9/test/cjkencodings/gb2312-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/gb2312.txt
+file path=usr/lib/python3.9/test/cjkencodings/gbk-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/gbk.txt
+file path=usr/lib/python3.9/test/cjkencodings/hz-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/hz.txt
+file path=usr/lib/python3.9/test/cjkencodings/iso2022_jp-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/iso2022_jp.txt
+file path=usr/lib/python3.9/test/cjkencodings/iso2022_kr-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/iso2022_kr.txt
+file path=usr/lib/python3.9/test/cjkencodings/johab-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/johab.txt
+file path=usr/lib/python3.9/test/cjkencodings/shift_jis-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/shift_jis.txt
+file path=usr/lib/python3.9/test/cjkencodings/shift_jisx0213-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/shift_jisx0213.txt
+file path=usr/lib/python3.9/test/clinic.test
+file path=usr/lib/python3.9/test/cmath_testcases.txt
+file path=usr/lib/python3.9/test/coding20731.py
+file path=usr/lib/python3.9/test/curses_tests.py
+file path=usr/lib/python3.9/test/data/BIG5.TXT
+file path=usr/lib/python3.9/test/data/BIG5HKSCS-2004.TXT
+file path=usr/lib/python3.9/test/data/CP932.TXT
+file path=usr/lib/python3.9/test/data/CP936.TXT
+file path=usr/lib/python3.9/test/data/CP949.TXT
+file path=usr/lib/python3.9/test/data/CP950.TXT
+file path=usr/lib/python3.9/test/data/EUC-CN.TXT
+file path=usr/lib/python3.9/test/data/EUC-JISX0213.TXT
+file path=usr/lib/python3.9/test/data/EUC-JP.TXT
+file path=usr/lib/python3.9/test/data/EUC-KR.TXT
+file path=usr/lib/python3.9/test/data/JOHAB.TXT
+file path=usr/lib/python3.9/test/data/NamedSequences.txt
+file path=usr/lib/python3.9/test/data/README
+file path=usr/lib/python3.9/test/data/SHIFTJIS.TXT
+file path=usr/lib/python3.9/test/data/SHIFT_JISX0213.TXT
+file path=usr/lib/python3.9/test/data/blake2b.txt
+file path=usr/lib/python3.9/test/data/blake2s.txt
+file path=usr/lib/python3.9/test/data/gb-18030-2000.xml
+file path=usr/lib/python3.9/test/data/sha3_224.txt
+file path=usr/lib/python3.9/test/data/sha3_256.txt
+file path=usr/lib/python3.9/test/data/sha3_384.txt
+file path=usr/lib/python3.9/test/data/sha3_512.txt
+file path=usr/lib/python3.9/test/data/shake_128.txt
+file path=usr/lib/python3.9/test/data/shake_256.txt
+file path=usr/lib/python3.9/test/dataclass_module_1.py
+file path=usr/lib/python3.9/test/dataclass_module_1_str.py
+file path=usr/lib/python3.9/test/dataclass_module_2.py
+file path=usr/lib/python3.9/test/dataclass_module_2_str.py
+file path=usr/lib/python3.9/test/dataclass_textanno.py
+file path=usr/lib/python3.9/test/datetimetester.py
+file path=usr/lib/python3.9/test/decimaltestdata/abs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/add.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/and.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/base.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/clamp.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/class.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/compare.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/comparetotal.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/comparetotmag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/copy.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/copyabs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/copynegate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/copysign.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddAbs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddAdd.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddAnd.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddBase.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCanonical.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddClass.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCompare.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCompareSig.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCompareTotal.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCompareTotalMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCopy.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCopyAbs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCopyNegate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCopySign.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddDivide.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddDivideInt.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddEncode.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddFMA.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddInvert.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddLogB.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMax.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMaxMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMin.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMinMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMinus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMultiply.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddNextMinus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddNextPlus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddNextToward.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddOr.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddPlus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddQuantize.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddReduce.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddRemainder.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddRemainderNear.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddRotate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddSameQuantum.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddScaleB.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddShift.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddSubtract.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddToIntegral.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddXor.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/decDouble.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/decQuad.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/decSingle.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/divide.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/divideint.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqAbs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqAdd.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqAnd.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqBase.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCanonical.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqClass.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCompare.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCompareSig.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCompareTotal.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCompareTotalMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCopy.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCopyAbs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCopyNegate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCopySign.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqDivide.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqDivideInt.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqEncode.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqFMA.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqInvert.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqLogB.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMax.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMaxMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMin.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMinMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMinus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMultiply.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqNextMinus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqNextPlus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqNextToward.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqOr.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqPlus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqQuantize.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqReduce.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqRemainder.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqRemainderNear.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqRotate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqSameQuantum.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqScaleB.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqShift.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqSubtract.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqToIntegral.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqXor.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dsBase.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dsEncode.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/exp.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/extra.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/fma.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/inexact.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/invert.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ln.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/log10.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/logb.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/max.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/maxmag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/min.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/minmag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/minus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/multiply.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/nextminus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/nextplus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/nexttoward.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/or.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/plus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/power.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/powersqrt.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/quantize.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/randomBound32.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/randoms.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/reduce.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/remainder.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/remainderNear.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/rescale.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/rotate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/rounding.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/samequantum.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/scaleb.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/shift.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/squareroot.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/subtract.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/testall.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/tointegral.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/tointegralx.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/xor.decTest
+file path=usr/lib/python3.9/test/dis_module.py
+file path=usr/lib/python3.9/test/dlpitest.py
+file path=usr/lib/python3.9/test/doctest_aliases.py
+file path=usr/lib/python3.9/test/double_const.py
+file path=usr/lib/python3.9/test/dtracedata/assert_usable.d
+file path=usr/lib/python3.9/test/dtracedata/assert_usable.stp
+file path=usr/lib/python3.9/test/dtracedata/call_stack.d
+file path=usr/lib/python3.9/test/dtracedata/call_stack.d.expected
+file path=usr/lib/python3.9/test/dtracedata/call_stack.py
+file path=usr/lib/python3.9/test/dtracedata/call_stack.stp
+file path=usr/lib/python3.9/test/dtracedata/call_stack.stp.expected
+file path=usr/lib/python3.9/test/dtracedata/gc.d
+file path=usr/lib/python3.9/test/dtracedata/gc.d.expected
+file path=usr/lib/python3.9/test/dtracedata/gc.py
+file path=usr/lib/python3.9/test/dtracedata/gc.stp
+file path=usr/lib/python3.9/test/dtracedata/gc.stp.expected
+file path=usr/lib/python3.9/test/dtracedata/instance.py
+file path=usr/lib/python3.9/test/dtracedata/line.d
+file path=usr/lib/python3.9/test/dtracedata/line.d.expected
+file path=usr/lib/python3.9/test/dtracedata/line.py
+file path=usr/lib/python3.9/test/eintrdata/eintr_tester.py
+file path=usr/lib/python3.9/test/empty.vbs
+file path=usr/lib/python3.9/test/encoded_modules/__init__.py
+file path=usr/lib/python3.9/test/encoded_modules/module_iso_8859_1.py
+file path=usr/lib/python3.9/test/encoded_modules/module_koi8_r.py
+file path=usr/lib/python3.9/test/exception_hierarchy.txt
+file path=usr/lib/python3.9/test/ffdh3072.pem
+file path=usr/lib/python3.9/test/final_a.py
+file path=usr/lib/python3.9/test/final_b.py
+file path=usr/lib/python3.9/test/floating_points.txt
+file path=usr/lib/python3.9/test/fork_wait.py
+file path=usr/lib/python3.9/test/formatfloat_testcases.txt
+file path=usr/lib/python3.9/test/future_test1.py
+file path=usr/lib/python3.9/test/future_test2.py
+file path=usr/lib/python3.9/test/gdb_sample.py
+file path=usr/lib/python3.9/test/good_getattr.py
+file path=usr/lib/python3.9/test/idnsans.pem
+file path=usr/lib/python3.9/test/ieee754.txt
+file path=usr/lib/python3.9/test/imghdrdata/python.bmp
+file path=usr/lib/python3.9/test/imghdrdata/python.exr
+file path=usr/lib/python3.9/test/imghdrdata/python.gif
+file path=usr/lib/python3.9/test/imghdrdata/python.jpg
+file path=usr/lib/python3.9/test/imghdrdata/python.pbm
+file path=usr/lib/python3.9/test/imghdrdata/python.pgm
+file path=usr/lib/python3.9/test/imghdrdata/python.png
+file path=usr/lib/python3.9/test/imghdrdata/python.ppm
+file path=usr/lib/python3.9/test/imghdrdata/python.ras
+file path=usr/lib/python3.9/test/imghdrdata/python.sgi
+file path=usr/lib/python3.9/test/imghdrdata/python.tiff
+file path=usr/lib/python3.9/test/imghdrdata/python.webp
+file path=usr/lib/python3.9/test/imghdrdata/python.xbm
+file path=usr/lib/python3.9/test/imp_dummy.py
+file path=usr/lib/python3.9/test/inspect_fodder.py
+file path=usr/lib/python3.9/test/inspect_fodder2.py
+file path=usr/lib/python3.9/test/keycert.passwd.pem
+file path=usr/lib/python3.9/test/keycert.pem
+file path=usr/lib/python3.9/test/keycert2.pem
+file path=usr/lib/python3.9/test/keycert3.pem
+file path=usr/lib/python3.9/test/keycert4.pem
+file path=usr/lib/python3.9/test/keycertecc.pem
+file path=usr/lib/python3.9/test/libregrtest/__init__.py
+file path=usr/lib/python3.9/test/libregrtest/cmdline.py
+file path=usr/lib/python3.9/test/libregrtest/main.py
+file path=usr/lib/python3.9/test/libregrtest/pgo.py
+file path=usr/lib/python3.9/test/libregrtest/refleak.py
+file path=usr/lib/python3.9/test/libregrtest/runtest.py
+file path=usr/lib/python3.9/test/libregrtest/runtest_mp.py
+file path=usr/lib/python3.9/test/libregrtest/save_env.py
+file path=usr/lib/python3.9/test/libregrtest/setup.py
+file path=usr/lib/python3.9/test/libregrtest/utils.py
+file path=usr/lib/python3.9/test/libregrtest/win_utils.py
+file path=usr/lib/python3.9/test/list_tests.py
+file path=usr/lib/python3.9/test/lock_tests.py
+file path=usr/lib/python3.9/test/mailcap.txt
+file path=usr/lib/python3.9/test/make_ssl_certs.py
+file path=usr/lib/python3.9/test/mapping_tests.py
+file path=usr/lib/python3.9/test/math_testcases.txt
+file path=usr/lib/python3.9/test/memory_watchdog.py
+file path=usr/lib/python3.9/test/mime.types
+file path=usr/lib/python3.9/test/mock_socket.py
+file path=usr/lib/python3.9/test/mod_generics_cache.py
+file path=usr/lib/python3.9/test/mp_fork_bomb.py
+file path=usr/lib/python3.9/test/mp_preload.py
+file path=usr/lib/python3.9/test/multibytecodec_support.py
+file path=usr/lib/python3.9/test/nokia.pem
+file path=usr/lib/python3.9/test/nullbytecert.pem
+file path=usr/lib/python3.9/test/nullcert.pem
+file path=usr/lib/python3.9/test/pickletester.py
+file path=usr/lib/python3.9/test/privrbactest.py
+file path=usr/lib/python3.9/test/profilee.py
+file path=usr/lib/python3.9/test/pstats.pck
+file path=usr/lib/python3.9/test/pycacert.pem
+file path=usr/lib/python3.9/test/pycakey.pem
+file path=usr/lib/python3.9/test/pyclbr_input.py
+file path=usr/lib/python3.9/test/pydoc_mod.py
+file path=usr/lib/python3.9/test/pydocfodder.py
+file path=usr/lib/python3.9/test/pythoninfo.py
+file path=usr/lib/python3.9/test/randv2_32.pck
+file path=usr/lib/python3.9/test/randv2_64.pck
+file path=usr/lib/python3.9/test/randv3.pck
+file path=usr/lib/python3.9/test/re_tests.py
+file path=usr/lib/python3.9/test/recursion.tar
+file path=usr/lib/python3.9/test/regrtest.py
+file path=usr/lib/python3.9/test/relimport.py
+file path=usr/lib/python3.9/test/reperf.py
+file path=usr/lib/python3.9/test/revocation.crl
+file path=usr/lib/python3.9/test/sample_doctest.py
+file path=usr/lib/python3.9/test/sample_doctest_no_docstrings.py
+file path=usr/lib/python3.9/test/sample_doctest_no_doctests.py
+file path=usr/lib/python3.9/test/secp384r1.pem
+file path=usr/lib/python3.9/test/selfsigned_pythontestdotnet.pem
+file path=usr/lib/python3.9/test/seq_tests.py
+file path=usr/lib/python3.9/test/sgml_input.html
+file path=usr/lib/python3.9/test/signalinterproctester.py
+file path=usr/lib/python3.9/test/sndhdrdata/README
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.8svx
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.aifc
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.aiff
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.au
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.hcom
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.sndt
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.voc
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.wav
+file path=usr/lib/python3.9/test/sortperf.py
+file path=usr/lib/python3.9/test/ssl_cert.pem
+file path=usr/lib/python3.9/test/ssl_key.passwd.pem
+file path=usr/lib/python3.9/test/ssl_key.pem
+file path=usr/lib/python3.9/test/ssl_servers.py
+file path=usr/lib/python3.9/test/ssltests.py
+file path=usr/lib/python3.9/test/string_tests.py
+file path=usr/lib/python3.9/test/subprocessdata/fd_status.py
+file path=usr/lib/python3.9/test/subprocessdata/input_reader.py
+file path=usr/lib/python3.9/test/subprocessdata/qcat.py
+file path=usr/lib/python3.9/test/subprocessdata/qgrep.py
+file path=usr/lib/python3.9/test/subprocessdata/sigchild_ignore.py
+file path=usr/lib/python3.9/test/support/__init__.py
+file path=usr/lib/python3.9/test/support/bytecode_helper.py
+file path=usr/lib/python3.9/test/support/hashlib_helper.py
+file path=usr/lib/python3.9/test/support/logging_helper.py
+file path=usr/lib/python3.9/test/support/script_helper.py
+file path=usr/lib/python3.9/test/support/socket_helper.py
+file path=usr/lib/python3.9/test/support/testresult.py
+file path=usr/lib/python3.9/test/talos-2019-0758.pem
+file path=usr/lib/python3.9/test/test___all__.py
+file path=usr/lib/python3.9/test/test___future__.py
+file path=usr/lib/python3.9/test/test__locale.py
+file path=usr/lib/python3.9/test/test__opcode.py
+file path=usr/lib/python3.9/test/test__osx_support.py
+file path=usr/lib/python3.9/test/test__xxsubinterpreters.py
+file path=usr/lib/python3.9/test/test_abc.py
+file path=usr/lib/python3.9/test/test_abstract_numbers.py
+file path=usr/lib/python3.9/test/test_aifc.py
+file path=usr/lib/python3.9/test/test_argparse.py
+file path=usr/lib/python3.9/test/test_array.py
+file path=usr/lib/python3.9/test/test_asdl_parser.py
+file path=usr/lib/python3.9/test/test_ast.py
+file path=usr/lib/python3.9/test/test_asyncgen.py
+file path=usr/lib/python3.9/test/test_asynchat.py
+file path=usr/lib/python3.9/test/test_asyncio/__init__.py
+file path=usr/lib/python3.9/test/test_asyncio/__main__.py
+file path=usr/lib/python3.9/test/test_asyncio/echo.py
+file path=usr/lib/python3.9/test/test_asyncio/echo2.py
+file path=usr/lib/python3.9/test/test_asyncio/echo3.py
+file path=usr/lib/python3.9/test/test_asyncio/functional.py
+file path=usr/lib/python3.9/test/test_asyncio/test_asyncio_waitfor.py
+file path=usr/lib/python3.9/test/test_asyncio/test_base_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_buffered_proto.py
+file path=usr/lib/python3.9/test/test_asyncio/test_context.py
+file path=usr/lib/python3.9/test/test_asyncio/test_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_futures.py
+file path=usr/lib/python3.9/test/test_asyncio/test_futures2.py
+file path=usr/lib/python3.9/test/test_asyncio/test_locks.py
+file path=usr/lib/python3.9/test/test_asyncio/test_pep492.py
+file path=usr/lib/python3.9/test/test_asyncio/test_proactor_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_protocols.py
+file path=usr/lib/python3.9/test/test_asyncio/test_queues.py
+file path=usr/lib/python3.9/test/test_asyncio/test_runners.py
+file path=usr/lib/python3.9/test/test_asyncio/test_selector_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_sendfile.py
+file path=usr/lib/python3.9/test/test_asyncio/test_server.py
+file path=usr/lib/python3.9/test/test_asyncio/test_sock_lowlevel.py
+file path=usr/lib/python3.9/test/test_asyncio/test_sslproto.py
+file path=usr/lib/python3.9/test/test_asyncio/test_streams.py
+file path=usr/lib/python3.9/test/test_asyncio/test_subprocess.py
+file path=usr/lib/python3.9/test/test_asyncio/test_tasks.py
+file path=usr/lib/python3.9/test/test_asyncio/test_threads.py
+file path=usr/lib/python3.9/test/test_asyncio/test_transports.py
+file path=usr/lib/python3.9/test/test_asyncio/test_unix_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_windows_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_windows_utils.py
+file path=usr/lib/python3.9/test/test_asyncio/utils.py
+file path=usr/lib/python3.9/test/test_asyncore.py
+file path=usr/lib/python3.9/test/test_atexit.py
+file path=usr/lib/python3.9/test/test_audioop.py
+file path=usr/lib/python3.9/test/test_audit.py
+file path=usr/lib/python3.9/test/test_augassign.py
+file path=usr/lib/python3.9/test/test_base64.py
+file path=usr/lib/python3.9/test/test_baseexception.py
+file path=usr/lib/python3.9/test/test_bdb.py
+file path=usr/lib/python3.9/test/test_bigaddrspace.py
+file path=usr/lib/python3.9/test/test_bigmem.py
+file path=usr/lib/python3.9/test/test_binascii.py
+file path=usr/lib/python3.9/test/test_binhex.py
+file path=usr/lib/python3.9/test/test_binop.py
+file path=usr/lib/python3.9/test/test_bisect.py
+file path=usr/lib/python3.9/test/test_bool.py
+file path=usr/lib/python3.9/test/test_buffer.py
+file path=usr/lib/python3.9/test/test_bufio.py
+file path=usr/lib/python3.9/test/test_builtin.py
+file path=usr/lib/python3.9/test/test_bytes.py
+file path=usr/lib/python3.9/test/test_bz2.py
+file path=usr/lib/python3.9/test/test_c_locale_coercion.py
+file path=usr/lib/python3.9/test/test_calendar.py
+file path=usr/lib/python3.9/test/test_call.py
+file path=usr/lib/python3.9/test/test_capi.py
+file path=usr/lib/python3.9/test/test_cgi.py
+file path=usr/lib/python3.9/test/test_cgitb.py
+file path=usr/lib/python3.9/test/test_charmapcodec.py
+file path=usr/lib/python3.9/test/test_check_c_globals.py
+file path=usr/lib/python3.9/test/test_class.py
+file path=usr/lib/python3.9/test/test_clinic.py
+file path=usr/lib/python3.9/test/test_cmath.py
+file path=usr/lib/python3.9/test/test_cmd.py
+file path=usr/lib/python3.9/test/test_cmd_line.py
+file path=usr/lib/python3.9/test/test_cmd_line_script.py
+file path=usr/lib/python3.9/test/test_code.py
+file path=usr/lib/python3.9/test/test_code_module.py
+file path=usr/lib/python3.9/test/test_codeccallbacks.py
+file path=usr/lib/python3.9/test/test_codecencodings_cn.py
+file path=usr/lib/python3.9/test/test_codecencodings_hk.py
+file path=usr/lib/python3.9/test/test_codecencodings_iso2022.py
+file path=usr/lib/python3.9/test/test_codecencodings_jp.py
+file path=usr/lib/python3.9/test/test_codecencodings_kr.py
+file path=usr/lib/python3.9/test/test_codecencodings_tw.py
+file path=usr/lib/python3.9/test/test_codecmaps_cn.py
+file path=usr/lib/python3.9/test/test_codecmaps_hk.py
+file path=usr/lib/python3.9/test/test_codecmaps_jp.py
+file path=usr/lib/python3.9/test/test_codecmaps_kr.py
+file path=usr/lib/python3.9/test/test_codecmaps_tw.py
+file path=usr/lib/python3.9/test/test_codecs.py
+file path=usr/lib/python3.9/test/test_codeop.py
+file path=usr/lib/python3.9/test/test_collections.py
+file path=usr/lib/python3.9/test/test_colorsys.py
+file path=usr/lib/python3.9/test/test_compare.py
+file path=usr/lib/python3.9/test/test_compile.py
+file path=usr/lib/python3.9/test/test_compileall.py
+file path=usr/lib/python3.9/test/test_complex.py
+file path=usr/lib/python3.9/test/test_concurrent_futures.py
+file path=usr/lib/python3.9/test/test_configparser.py
+file path=usr/lib/python3.9/test/test_contains.py
+file path=usr/lib/python3.9/test/test_context.py
+file path=usr/lib/python3.9/test/test_contextlib.py
+file path=usr/lib/python3.9/test/test_contextlib_async.py
+file path=usr/lib/python3.9/test/test_copy.py
+file path=usr/lib/python3.9/test/test_copyreg.py
+file path=usr/lib/python3.9/test/test_coroutines.py
+file path=usr/lib/python3.9/test/test_cprofile.py
+file path=usr/lib/python3.9/test/test_crashers.py
+file path=usr/lib/python3.9/test/test_crypt.py
+file path=usr/lib/python3.9/test/test_csv.py
+file path=usr/lib/python3.9/test/test_ctypes.py
+file path=usr/lib/python3.9/test/test_curses.py
+file path=usr/lib/python3.9/test/test_dataclasses.py
+file path=usr/lib/python3.9/test/test_datetime.py
+file path=usr/lib/python3.9/test/test_dbm.py
+file path=usr/lib/python3.9/test/test_dbm_dumb.py
+file path=usr/lib/python3.9/test/test_dbm_gnu.py
+file path=usr/lib/python3.9/test/test_dbm_ndbm.py
+file path=usr/lib/python3.9/test/test_decimal.py
+file path=usr/lib/python3.9/test/test_decorators.py
+file path=usr/lib/python3.9/test/test_defaultdict.py
+file path=usr/lib/python3.9/test/test_deque.py
+file path=usr/lib/python3.9/test/test_descr.py
+file path=usr/lib/python3.9/test/test_descrtut.py
+file path=usr/lib/python3.9/test/test_devpoll.py
+file path=usr/lib/python3.9/test/test_dict.py
+file path=usr/lib/python3.9/test/test_dict_version.py
+file path=usr/lib/python3.9/test/test_dictcomps.py
+file path=usr/lib/python3.9/test/test_dictviews.py
+file path=usr/lib/python3.9/test/test_difflib.py
+file path=usr/lib/python3.9/test/test_difflib_expect.html
+file path=usr/lib/python3.9/test/test_dis.py
+file path=usr/lib/python3.9/test/test_distutils.py
+file path=usr/lib/python3.9/test/test_doctest.py
+file path=usr/lib/python3.9/test/test_doctest.txt
+file path=usr/lib/python3.9/test/test_doctest2.py
+file path=usr/lib/python3.9/test/test_doctest2.txt
+file path=usr/lib/python3.9/test/test_doctest3.txt
+file path=usr/lib/python3.9/test/test_doctest4.txt
+file path=usr/lib/python3.9/test/test_docxmlrpc.py
+file path=usr/lib/python3.9/test/test_dtrace.py
+file path=usr/lib/python3.9/test/test_dynamic.py
+file path=usr/lib/python3.9/test/test_dynamicclassattribute.py
+file path=usr/lib/python3.9/test/test_eintr.py
+file path=usr/lib/python3.9/test/test_email/__init__.py
+file path=usr/lib/python3.9/test/test_email/__main__.py
+file path=usr/lib/python3.9/test/test_email/data/PyBanner048.gif
+file path=usr/lib/python3.9/test/test_email/data/audiotest.au
+file path=usr/lib/python3.9/test/test_email/data/msg_01.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_02.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_03.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_04.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_05.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_06.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_07.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_08.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_09.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_10.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_11.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_12.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_12a.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_13.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_14.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_15.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_16.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_17.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_18.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_19.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_20.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_21.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_22.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_23.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_24.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_25.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_26.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_27.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_28.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_29.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_30.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_31.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_32.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_33.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_34.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_35.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_36.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_37.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_38.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_39.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_40.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_41.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_42.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_43.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_44.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_45.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_46.txt
+file path=usr/lib/python3.9/test/test_email/test__encoded_words.py
+file path=usr/lib/python3.9/test/test_email/test__header_value_parser.py
+file path=usr/lib/python3.9/test/test_email/test_asian_codecs.py
+file path=usr/lib/python3.9/test/test_email/test_contentmanager.py
+file path=usr/lib/python3.9/test/test_email/test_defect_handling.py
+file path=usr/lib/python3.9/test/test_email/test_email.py
+file path=usr/lib/python3.9/test/test_email/test_generator.py
+file path=usr/lib/python3.9/test/test_email/test_headerregistry.py
+file path=usr/lib/python3.9/test/test_email/test_inversion.py
+file path=usr/lib/python3.9/test/test_email/test_message.py
+file path=usr/lib/python3.9/test/test_email/test_parser.py
+file path=usr/lib/python3.9/test/test_email/test_pickleable.py
+file path=usr/lib/python3.9/test/test_email/test_policy.py
+file path=usr/lib/python3.9/test/test_email/test_utils.py
+file path=usr/lib/python3.9/test/test_email/torture_test.py
+file path=usr/lib/python3.9/test/test_embed.py
+file path=usr/lib/python3.9/test/test_ensurepip.py
+file path=usr/lib/python3.9/test/test_enum.py
+file path=usr/lib/python3.9/test/test_enumerate.py
+file path=usr/lib/python3.9/test/test_eof.py
+file path=usr/lib/python3.9/test/test_epoll.py
+file path=usr/lib/python3.9/test/test_errno.py
+file path=usr/lib/python3.9/test/test_exception_hierarchy.py
+file path=usr/lib/python3.9/test/test_exception_variations.py
+file path=usr/lib/python3.9/test/test_exceptions.py
+file path=usr/lib/python3.9/test/test_extcall.py
+file path=usr/lib/python3.9/test/test_faulthandler.py
+file path=usr/lib/python3.9/test/test_fcntl.py
+file path=usr/lib/python3.9/test/test_file.py
+file path=usr/lib/python3.9/test/test_file_eintr.py
+file path=usr/lib/python3.9/test/test_filecmp.py
+file path=usr/lib/python3.9/test/test_fileinput.py
+file path=usr/lib/python3.9/test/test_fileio.py
+file path=usr/lib/python3.9/test/test_finalization.py
+file path=usr/lib/python3.9/test/test_float.py
+file path=usr/lib/python3.9/test/test_flufl.py
+file path=usr/lib/python3.9/test/test_fnmatch.py
+file path=usr/lib/python3.9/test/test_fork1.py
+file path=usr/lib/python3.9/test/test_format.py
+file path=usr/lib/python3.9/test/test_fractions.py
+file path=usr/lib/python3.9/test/test_frame.py
+file path=usr/lib/python3.9/test/test_frozen.py
+file path=usr/lib/python3.9/test/test_fstring.py
+file path=usr/lib/python3.9/test/test_ftplib.py
+file path=usr/lib/python3.9/test/test_funcattrs.py
+file path=usr/lib/python3.9/test/test_functools.py
+file path=usr/lib/python3.9/test/test_future.py
+file path=usr/lib/python3.9/test/test_future3.py
+file path=usr/lib/python3.9/test/test_future4.py
+file path=usr/lib/python3.9/test/test_future5.py
+file path=usr/lib/python3.9/test/test_gc.py
+file path=usr/lib/python3.9/test/test_gdb.py
+file path=usr/lib/python3.9/test/test_generator_stop.py
+file path=usr/lib/python3.9/test/test_generators.py
+file path=usr/lib/python3.9/test/test_genericalias.py
+file path=usr/lib/python3.9/test/test_genericclass.py
+file path=usr/lib/python3.9/test/test_genericpath.py
+file path=usr/lib/python3.9/test/test_genexps.py
+file path=usr/lib/python3.9/test/test_getargs2.py
+file path=usr/lib/python3.9/test/test_getopt.py
+file path=usr/lib/python3.9/test/test_getpass.py
+file path=usr/lib/python3.9/test/test_gettext.py
+file path=usr/lib/python3.9/test/test_glob.py
+file path=usr/lib/python3.9/test/test_global.py
+file path=usr/lib/python3.9/test/test_grammar.py
+file path=usr/lib/python3.9/test/test_graphlib.py
+file path=usr/lib/python3.9/test/test_grp.py
+file path=usr/lib/python3.9/test/test_gzip.py
+file path=usr/lib/python3.9/test/test_hash.py
+file path=usr/lib/python3.9/test/test_hashlib.py
+file path=usr/lib/python3.9/test/test_heapq.py
+file path=usr/lib/python3.9/test/test_hmac.py
+file path=usr/lib/python3.9/test/test_html.py
+file path=usr/lib/python3.9/test/test_htmlparser.py
+file path=usr/lib/python3.9/test/test_http_cookiejar.py
+file path=usr/lib/python3.9/test/test_http_cookies.py
+file path=usr/lib/python3.9/test/test_httplib.py
+file path=usr/lib/python3.9/test/test_httpservers.py
+file path=usr/lib/python3.9/test/test_idle.py
+file path=usr/lib/python3.9/test/test_imaplib.py
+file path=usr/lib/python3.9/test/test_imghdr.py
+file path=usr/lib/python3.9/test/test_imp.py
+file path=usr/lib/python3.9/test/test_import/__init__.py
+file path=usr/lib/python3.9/test/test_import/__main__.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/basic.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/basic2.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/binding.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/binding2.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/from_cycle1.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/from_cycle2.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/indirect.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/rebinding.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/rebinding2.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/source.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/subpackage.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/subpkg/subpackage2.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/subpkg/util.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/use.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/util.py
+file path=usr/lib/python3.9/test/test_import/data/package/__init__.py
+file path=usr/lib/python3.9/test/test_import/data/package/submodule.py
+file path=usr/lib/python3.9/test/test_import/data/package2/submodule1.py
+file path=usr/lib/python3.9/test/test_import/data/package2/submodule2.py
+file path=usr/lib/python3.9/test/test_import/data/unwritable/__init__.py
+file path=usr/lib/python3.9/test/test_import/data/unwritable/x.py
+file path=usr/lib/python3.9/test/test_importlib/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/abc.py
+file path=usr/lib/python3.9/test/test_importlib/builtin/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/builtin/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/builtin/test_finder.py
+file path=usr/lib/python3.9/test/test_importlib/builtin/test_loader.py
+file path=usr/lib/python3.9/test/test_importlib/data/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data/example-21.12-py3-none-any.whl
+file path=usr/lib/python3.9/test/test_importlib/data/example-21.12-py3.6.egg
+file path=usr/lib/python3.9/test/test_importlib/data01/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data01/binary.file
+file path=usr/lib/python3.9/test/test_importlib/data01/subdirectory/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data01/subdirectory/binary.file
+file path=usr/lib/python3.9/test/test_importlib/data01/utf-16.file
+file path=usr/lib/python3.9/test/test_importlib/data01/utf-8.file
+file path=usr/lib/python3.9/test/test_importlib/data02/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data02/one/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data02/one/resource1.txt
+file path=usr/lib/python3.9/test/test_importlib/data02/two/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data02/two/resource2.txt
+file path=usr/lib/python3.9/test/test_importlib/data03/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data03/namespace/portion1/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data03/namespace/portion2/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data03/namespace/resource1.txt
+file path=usr/lib/python3.9/test/test_importlib/extension/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/extension/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/extension/test_case_sensitivity.py
+file path=usr/lib/python3.9/test/test_importlib/extension/test_finder.py
+file path=usr/lib/python3.9/test/test_importlib/extension/test_loader.py
+file path=usr/lib/python3.9/test/test_importlib/extension/test_path_hook.py
+file path=usr/lib/python3.9/test/test_importlib/fixtures.py
+file path=usr/lib/python3.9/test/test_importlib/frozen/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/frozen/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/frozen/test_finder.py
+file path=usr/lib/python3.9/test/test_importlib/frozen/test_loader.py
+file path=usr/lib/python3.9/test/test_importlib/import_/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/import_/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test___loader__.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test___package__.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_api.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_caching.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_fromlist.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_meta_path.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_packages.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_path.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_relative_imports.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/both_portions/foo/one.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/both_portions/foo/two.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/missing_directory.zip
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/module_and_namespace_package/a_test.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/module_and_namespace_package/a_test/empty
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/nested_portion1.zip
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/not_a_namespace_pkg/foo/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/not_a_namespace_pkg/foo/one.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/portion1/foo/one.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/portion2/foo/two.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/project1/parent/child/one.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/project2/parent/child/two.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/project3/parent/child/three.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/top_level_portion1.zip
+file path=usr/lib/python3.9/test/test_importlib/source/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/source/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/source/test_case_sensitivity.py
+file path=usr/lib/python3.9/test/test_importlib/source/test_file_loader.py
+file path=usr/lib/python3.9/test/test_importlib/source/test_finder.py
+file path=usr/lib/python3.9/test/test_importlib/source/test_path_hook.py
+file path=usr/lib/python3.9/test/test_importlib/source/test_source_encoding.py
+file path=usr/lib/python3.9/test/test_importlib/stubs.py
+file path=usr/lib/python3.9/test/test_importlib/test_abc.py
+file path=usr/lib/python3.9/test/test_importlib/test_api.py
+file path=usr/lib/python3.9/test/test_importlib/test_files.py
+file path=usr/lib/python3.9/test/test_importlib/test_lazy.py
+file path=usr/lib/python3.9/test/test_importlib/test_locks.py
+file path=usr/lib/python3.9/test/test_importlib/test_main.py
+file path=usr/lib/python3.9/test/test_importlib/test_metadata_api.py
+file path=usr/lib/python3.9/test/test_importlib/test_namespace_pkgs.py
+file path=usr/lib/python3.9/test/test_importlib/test_open.py
+file path=usr/lib/python3.9/test/test_importlib/test_path.py
+file path=usr/lib/python3.9/test/test_importlib/test_pkg_import.py
+file path=usr/lib/python3.9/test/test_importlib/test_read.py
+file path=usr/lib/python3.9/test/test_importlib/test_resource.py
+file path=usr/lib/python3.9/test/test_importlib/test_spec.py
+file path=usr/lib/python3.9/test/test_importlib/test_threaded_import.py
+file path=usr/lib/python3.9/test/test_importlib/test_util.py
+file path=usr/lib/python3.9/test/test_importlib/test_windows.py
+file path=usr/lib/python3.9/test/test_importlib/test_zip.py
+file path=usr/lib/python3.9/test/test_importlib/threaded_import_hangers.py
+file path=usr/lib/python3.9/test/test_importlib/util.py
+file path=usr/lib/python3.9/test/test_importlib/zipdata01/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/zipdata01/ziptestdata.zip
+file path=usr/lib/python3.9/test/test_importlib/zipdata02/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/zipdata02/ziptestdata.zip
+file path=usr/lib/python3.9/test/test_index.py
+file path=usr/lib/python3.9/test/test_inspect.py
+file path=usr/lib/python3.9/test/test_int.py
+file path=usr/lib/python3.9/test/test_int_literal.py
+file path=usr/lib/python3.9/test/test_io.py
+file path=usr/lib/python3.9/test/test_ioctl.py
+file path=usr/lib/python3.9/test/test_ipaddress.py
+file path=usr/lib/python3.9/test/test_isinstance.py
+file path=usr/lib/python3.9/test/test_iter.py
+file path=usr/lib/python3.9/test/test_iterlen.py
+file path=usr/lib/python3.9/test/test_itertools.py
+file path=usr/lib/python3.9/test/test_json/__init__.py
+file path=usr/lib/python3.9/test/test_json/__main__.py
+file path=usr/lib/python3.9/test/test_json/test_decode.py
+file path=usr/lib/python3.9/test/test_json/test_default.py
+file path=usr/lib/python3.9/test/test_json/test_dump.py
+file path=usr/lib/python3.9/test/test_json/test_encode_basestring_ascii.py
+file path=usr/lib/python3.9/test/test_json/test_enum.py
+file path=usr/lib/python3.9/test/test_json/test_fail.py
+file path=usr/lib/python3.9/test/test_json/test_float.py
+file path=usr/lib/python3.9/test/test_json/test_indent.py
+file path=usr/lib/python3.9/test/test_json/test_pass1.py
+file path=usr/lib/python3.9/test/test_json/test_pass2.py
+file path=usr/lib/python3.9/test/test_json/test_pass3.py
+file path=usr/lib/python3.9/test/test_json/test_recursion.py
+file path=usr/lib/python3.9/test/test_json/test_scanstring.py
+file path=usr/lib/python3.9/test/test_json/test_separators.py
+file path=usr/lib/python3.9/test/test_json/test_speedups.py
+file path=usr/lib/python3.9/test/test_json/test_tool.py
+file path=usr/lib/python3.9/test/test_json/test_unicode.py
+file path=usr/lib/python3.9/test/test_keyword.py
+file path=usr/lib/python3.9/test/test_keywordonlyarg.py
+file path=usr/lib/python3.9/test/test_kqueue.py
+file path=usr/lib/python3.9/test/test_largefile.py
+file path=usr/lib/python3.9/test/test_lib2to3.py
+file path=usr/lib/python3.9/test/test_linecache.py
+file path=usr/lib/python3.9/test/test_list.py
+file path=usr/lib/python3.9/test/test_listcomps.py
+file path=usr/lib/python3.9/test/test_lltrace.py
+file path=usr/lib/python3.9/test/test_locale.py
+file path=usr/lib/python3.9/test/test_logging.py
+file path=usr/lib/python3.9/test/test_long.py
+file path=usr/lib/python3.9/test/test_longexp.py
+file path=usr/lib/python3.9/test/test_lzma.py
+file path=usr/lib/python3.9/test/test_mailbox.py
+file path=usr/lib/python3.9/test/test_mailcap.py
+file path=usr/lib/python3.9/test/test_marshal.py
+file path=usr/lib/python3.9/test/test_math.py
+file path=usr/lib/python3.9/test/test_memoryio.py
+file path=usr/lib/python3.9/test/test_memoryview.py
+file path=usr/lib/python3.9/test/test_metaclass.py
+file path=usr/lib/python3.9/test/test_mimetypes.py
+file path=usr/lib/python3.9/test/test_minidom.py
+file path=usr/lib/python3.9/test/test_mmap.py
+file path=usr/lib/python3.9/test/test_module.py
+file path=usr/lib/python3.9/test/test_modulefinder.py
+file path=usr/lib/python3.9/test/test_msilib.py
+file path=usr/lib/python3.9/test/test_multibytecodec.py
+file path=usr/lib/python3.9/test/test_multiprocessing_fork.py
+file path=usr/lib/python3.9/test/test_multiprocessing_forkserver.py
+file path=usr/lib/python3.9/test/test_multiprocessing_main_handling.py
+file path=usr/lib/python3.9/test/test_multiprocessing_spawn.py
+file path=usr/lib/python3.9/test/test_named_expressions.py
+file path=usr/lib/python3.9/test/test_netrc.py
+file path=usr/lib/python3.9/test/test_nis.py
+file path=usr/lib/python3.9/test/test_nntplib.py
+file path=usr/lib/python3.9/test/test_ntpath.py
+file path=usr/lib/python3.9/test/test_numeric_tower.py
+file path=usr/lib/python3.9/test/test_opcodes.py
+file path=usr/lib/python3.9/test/test_openpty.py
+file path=usr/lib/python3.9/test/test_operator.py
+file path=usr/lib/python3.9/test/test_optparse.py
+file path=usr/lib/python3.9/test/test_ordered_dict.py
+file path=usr/lib/python3.9/test/test_os.py
+file path=usr/lib/python3.9/test/test_ossaudiodev.py
+file path=usr/lib/python3.9/test/test_osx_env.py
+file path=usr/lib/python3.9/test/test_parser.py
+file path=usr/lib/python3.9/test/test_pathlib.py
+file path=usr/lib/python3.9/test/test_pdb.py
+file path=usr/lib/python3.9/test/test_peepholer.py
+file path=usr/lib/python3.9/test/test_peg_generator/__init__.py
+file path=usr/lib/python3.9/test/test_peg_generator/__main__.py
+file path=usr/lib/python3.9/test/test_peg_generator/test_c_parser.py
+file path=usr/lib/python3.9/test/test_peg_generator/test_first_sets.py
+file path=usr/lib/python3.9/test/test_peg_generator/test_pegen.py
+file path=usr/lib/python3.9/test/test_peg_parser.py
+file path=usr/lib/python3.9/test/test_pickle.py
+file path=usr/lib/python3.9/test/test_picklebuffer.py
+file path=usr/lib/python3.9/test/test_pickletools.py
+file path=usr/lib/python3.9/test/test_pipes.py
+file path=usr/lib/python3.9/test/test_pkg.py
+file path=usr/lib/python3.9/test/test_pkgutil.py
+file path=usr/lib/python3.9/test/test_platform.py
+file path=usr/lib/python3.9/test/test_plistlib.py
+file path=usr/lib/python3.9/test/test_poll.py
+file path=usr/lib/python3.9/test/test_popen.py
+file path=usr/lib/python3.9/test/test_poplib.py
+file path=usr/lib/python3.9/test/test_positional_only_arg.py
+file path=usr/lib/python3.9/test/test_posix.py
+file path=usr/lib/python3.9/test/test_posixpath.py
+file path=usr/lib/python3.9/test/test_pow.py
+file path=usr/lib/python3.9/test/test_pprint.py
+file path=usr/lib/python3.9/test/test_print.py
+file path=usr/lib/python3.9/test/test_profile.py
+file path=usr/lib/python3.9/test/test_property.py
+file path=usr/lib/python3.9/test/test_pstats.py
+file path=usr/lib/python3.9/test/test_pty.py
+file path=usr/lib/python3.9/test/test_pulldom.py
+file path=usr/lib/python3.9/test/test_pwd.py
+file path=usr/lib/python3.9/test/test_py_compile.py
+file path=usr/lib/python3.9/test/test_pyclbr.py
+file path=usr/lib/python3.9/test/test_pydoc.py
+file path=usr/lib/python3.9/test/test_pyexpat.py
+file path=usr/lib/python3.9/test/test_queue.py
+file path=usr/lib/python3.9/test/test_quopri.py
+file path=usr/lib/python3.9/test/test_raise.py
+file path=usr/lib/python3.9/test/test_random.py
+file path=usr/lib/python3.9/test/test_range.py
+file path=usr/lib/python3.9/test/test_re.py
+file path=usr/lib/python3.9/test/test_readline.py
+file path=usr/lib/python3.9/test/test_regrtest.py
+file path=usr/lib/python3.9/test/test_repl.py
+file path=usr/lib/python3.9/test/test_reprlib.py
+file path=usr/lib/python3.9/test/test_resource.py
+file path=usr/lib/python3.9/test/test_richcmp.py
+file path=usr/lib/python3.9/test/test_rlcompleter.py
+file path=usr/lib/python3.9/test/test_robotparser.py
+file path=usr/lib/python3.9/test/test_runpy.py
+file path=usr/lib/python3.9/test/test_sax.py
+file path=usr/lib/python3.9/test/test_sched.py
+file path=usr/lib/python3.9/test/test_scope.py
+file path=usr/lib/python3.9/test/test_script_helper.py
+file path=usr/lib/python3.9/test/test_secrets.py
+file path=usr/lib/python3.9/test/test_select.py
+file path=usr/lib/python3.9/test/test_selectors.py
+file path=usr/lib/python3.9/test/test_set.py
+file path=usr/lib/python3.9/test/test_setcomps.py
+file path=usr/lib/python3.9/test/test_shelve.py
+file path=usr/lib/python3.9/test/test_shlex.py
+file path=usr/lib/python3.9/test/test_shutil.py
+file path=usr/lib/python3.9/test/test_signal.py
+file path=usr/lib/python3.9/test/test_site.py
+file path=usr/lib/python3.9/test/test_slice.py
+file path=usr/lib/python3.9/test/test_smtpd.py
+file path=usr/lib/python3.9/test/test_smtplib.py
+file path=usr/lib/python3.9/test/test_smtpnet.py
+file path=usr/lib/python3.9/test/test_sndhdr.py
+file path=usr/lib/python3.9/test/test_socket.py
+file path=usr/lib/python3.9/test/test_socketserver.py
+file path=usr/lib/python3.9/test/test_sort.py
+file path=usr/lib/python3.9/test/test_source_encoding.py
+file path=usr/lib/python3.9/test/test_spwd.py
+file path=usr/lib/python3.9/test/test_sqlite.py
+file path=usr/lib/python3.9/test/test_ssl.py
+file path=usr/lib/python3.9/test/test_startfile.py
+file path=usr/lib/python3.9/test/test_stat.py
+file path=usr/lib/python3.9/test/test_statistics.py
+file path=usr/lib/python3.9/test/test_strftime.py
+file path=usr/lib/python3.9/test/test_string.py
+file path=usr/lib/python3.9/test/test_string_literals.py
+file path=usr/lib/python3.9/test/test_stringprep.py
+file path=usr/lib/python3.9/test/test_strptime.py
+file path=usr/lib/python3.9/test/test_strtod.py
+file path=usr/lib/python3.9/test/test_struct.py
+file path=usr/lib/python3.9/test/test_structmembers.py
+file path=usr/lib/python3.9/test/test_structseq.py
+file path=usr/lib/python3.9/test/test_subclassinit.py
+file path=usr/lib/python3.9/test/test_subprocess.py
+file path=usr/lib/python3.9/test/test_sunau.py
+file path=usr/lib/python3.9/test/test_sundry.py
+file path=usr/lib/python3.9/test/test_super.py
+file path=usr/lib/python3.9/test/test_support.py
+file path=usr/lib/python3.9/test/test_symbol.py
+file path=usr/lib/python3.9/test/test_symtable.py
+file path=usr/lib/python3.9/test/test_syntax.py
+file path=usr/lib/python3.9/test/test_sys.py
+file path=usr/lib/python3.9/test/test_sys_setprofile.py
+file path=usr/lib/python3.9/test/test_sys_settrace.py
+file path=usr/lib/python3.9/test/test_sysconfig.py
+file path=usr/lib/python3.9/test/test_syslog.py
+file path=usr/lib/python3.9/test/test_tabnanny.py
+file path=usr/lib/python3.9/test/test_tarfile.py
+file path=usr/lib/python3.9/test/test_tcl.py
+file path=usr/lib/python3.9/test/test_telnetlib.py
+file path=usr/lib/python3.9/test/test_tempfile.py
+file path=usr/lib/python3.9/test/test_textwrap.py
+file path=usr/lib/python3.9/test/test_thread.py
+file path=usr/lib/python3.9/test/test_threadedtempfile.py
+file path=usr/lib/python3.9/test/test_threading.py
+file path=usr/lib/python3.9/test/test_threading_local.py
+file path=usr/lib/python3.9/test/test_threadsignals.py
+file path=usr/lib/python3.9/test/test_time.py
+file path=usr/lib/python3.9/test/test_timeit.py
+file path=usr/lib/python3.9/test/test_timeout.py
+file path=usr/lib/python3.9/test/test_tix.py
+file path=usr/lib/python3.9/test/test_tk.py
+file path=usr/lib/python3.9/test/test_tokenize.py
+file path=usr/lib/python3.9/test/test_tools/__init__.py
+file path=usr/lib/python3.9/test/test_tools/__main__.py
+file path=usr/lib/python3.9/test/test_tools/test_fixcid.py
+file path=usr/lib/python3.9/test/test_tools/test_gprof2html.py
+file path=usr/lib/python3.9/test/test_tools/test_i18n.py
+file path=usr/lib/python3.9/test/test_tools/test_lll.py
+file path=usr/lib/python3.9/test/test_tools/test_md5sum.py
+file path=usr/lib/python3.9/test/test_tools/test_pathfix.py
+file path=usr/lib/python3.9/test/test_tools/test_pdeps.py
+file path=usr/lib/python3.9/test/test_tools/test_pindent.py
+file path=usr/lib/python3.9/test/test_tools/test_reindent.py
+file path=usr/lib/python3.9/test/test_tools/test_sundry.py
+file path=usr/lib/python3.9/test/test_trace.py
+file path=usr/lib/python3.9/test/test_traceback.py
+file path=usr/lib/python3.9/test/test_tracemalloc.py
+file path=usr/lib/python3.9/test/test_ttk_guionly.py
+file path=usr/lib/python3.9/test/test_ttk_textonly.py
+file path=usr/lib/python3.9/test/test_tuple.py
+file path=usr/lib/python3.9/test/test_turtle.py
+file path=usr/lib/python3.9/test/test_type_comments.py
+file path=usr/lib/python3.9/test/test_typechecks.py
+file path=usr/lib/python3.9/test/test_types.py
+file path=usr/lib/python3.9/test/test_typing.py
+file path=usr/lib/python3.9/test/test_ucn.py
+file path=usr/lib/python3.9/test/test_unary.py
+file path=usr/lib/python3.9/test/test_unicode.py
+file path=usr/lib/python3.9/test/test_unicode_file.py
+file path=usr/lib/python3.9/test/test_unicode_file_functions.py
+file path=usr/lib/python3.9/test/test_unicode_identifiers.py
+file path=usr/lib/python3.9/test/test_unicodedata.py
+file path=usr/lib/python3.9/test/test_unittest.py
+file path=usr/lib/python3.9/test/test_univnewlines.py
+file path=usr/lib/python3.9/test/test_unpack.py
+file path=usr/lib/python3.9/test/test_unpack_ex.py
+file path=usr/lib/python3.9/test/test_unparse.py
+file path=usr/lib/python3.9/test/test_urllib.py
+file path=usr/lib/python3.9/test/test_urllib2.py
+file path=usr/lib/python3.9/test/test_urllib2_localnet.py
+file path=usr/lib/python3.9/test/test_urllib2net.py
+file path=usr/lib/python3.9/test/test_urllib_response.py
+file path=usr/lib/python3.9/test/test_urllibnet.py
+file path=usr/lib/python3.9/test/test_urlparse.py
+file path=usr/lib/python3.9/test/test_userdict.py
+file path=usr/lib/python3.9/test/test_userlist.py
+file path=usr/lib/python3.9/test/test_userstring.py
+file path=usr/lib/python3.9/test/test_utf8_mode.py
+file path=usr/lib/python3.9/test/test_utf8source.py
+file path=usr/lib/python3.9/test/test_uu.py
+file path=usr/lib/python3.9/test/test_uuid.py
+file path=usr/lib/python3.9/test/test_venv.py
+file path=usr/lib/python3.9/test/test_wait3.py
+file path=usr/lib/python3.9/test/test_wait4.py
+file path=usr/lib/python3.9/test/test_warnings/__init__.py
+file path=usr/lib/python3.9/test/test_warnings/__main__.py
+file path=usr/lib/python3.9/test/test_warnings/data/import_warning.py
+file path=usr/lib/python3.9/test/test_warnings/data/stacklevel.py
+file path=usr/lib/python3.9/test/test_wave.py
+file path=usr/lib/python3.9/test/test_weakref.py
+file path=usr/lib/python3.9/test/test_weakset.py
+file path=usr/lib/python3.9/test/test_webbrowser.py
+file path=usr/lib/python3.9/test/test_winconsoleio.py
+file path=usr/lib/python3.9/test/test_winreg.py
+file path=usr/lib/python3.9/test/test_winsound.py
+file path=usr/lib/python3.9/test/test_with.py
+file path=usr/lib/python3.9/test/test_wsgiref.py
+file path=usr/lib/python3.9/test/test_xdrlib.py
+file path=usr/lib/python3.9/test/test_xml_dom_minicompat.py
+file path=usr/lib/python3.9/test/test_xml_etree.py
+file path=usr/lib/python3.9/test/test_xml_etree_c.py
+file path=usr/lib/python3.9/test/test_xmlrpc.py
+file path=usr/lib/python3.9/test/test_xmlrpc_net.py
+file path=usr/lib/python3.9/test/test_xxtestfuzz.py
+file path=usr/lib/python3.9/test/test_yield_from.py
+file path=usr/lib/python3.9/test/test_zipapp.py
+file path=usr/lib/python3.9/test/test_zipfile.py
+file path=usr/lib/python3.9/test/test_zipfile64.py
+file path=usr/lib/python3.9/test/test_zipimport.py
+file path=usr/lib/python3.9/test/test_zipimport_support.py
+file path=usr/lib/python3.9/test/test_zlib.py
+file path=usr/lib/python3.9/test/test_zoneinfo/__init__.py
+file path=usr/lib/python3.9/test/test_zoneinfo/__main__.py
+file path=usr/lib/python3.9/test/test_zoneinfo/_support.py
+file path=usr/lib/python3.9/test/test_zoneinfo/data/update_test_data.py
+file path=usr/lib/python3.9/test/test_zoneinfo/data/zoneinfo_data.json
+file path=usr/lib/python3.9/test/test_zoneinfo/test_zoneinfo.py
+file path=usr/lib/python3.9/test/testcodec.py
+file path=usr/lib/python3.9/test/testtar.tar
+file path=usr/lib/python3.9/test/tf_inherit_check.py
+file path=usr/lib/python3.9/test/time_hashlib.py
+file path=usr/lib/python3.9/test/tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt
+file path=usr/lib/python3.9/test/tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt
+file path=usr/lib/python3.9/test/tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt
+file path=usr/lib/python3.9/test/tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt
+file path=usr/lib/python3.9/test/tokenize_tests.txt
+file path=usr/lib/python3.9/test/tracedmodules/__init__.py
+file path=usr/lib/python3.9/test/tracedmodules/testmod.py
+file path=usr/lib/python3.9/test/ucredtest.py
+file path=usr/lib/python3.9/test/win_console_handler.py
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/README
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nComment.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nPrefixQname.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nPrefixQnameXpathElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nQname.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nQnameElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nQnameXpathElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nTrim.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/doc.dtd
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/doc.xsl
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N1.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N2.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N3.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N4.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N5.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N6.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsContent.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsPushdown.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsRedecl.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsSort.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsSuperfluous.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsXml.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N1_c14nComment.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N1_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N2_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N2_c14nTrim.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N3_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N3_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N3_c14nTrim.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N4_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N4_c14nTrim.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N5_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N5_c14nTrim.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N6_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsContent_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsContent_c14nPrefixQnameXpathElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsContent_c14nQnameElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsContent_c14nQnameXpathElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsDefault_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsDefault_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsPushdown_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsPushdown_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsRedecl_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsRedecl_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsSort_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsSort_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsSuperfluous_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsSuperfluous_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsXml_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsXml_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsXml_c14nPrefixQname.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsXml_c14nQname.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/world.txt
+file path=usr/lib/python3.9/test/xmltestdata/expat224_utf8_bug.xml
+file path=usr/lib/python3.9/test/xmltestdata/simple-ns.xml
+file path=usr/lib/python3.9/test/xmltestdata/simple.xml
+file path=usr/lib/python3.9/test/xmltestdata/test.xml
+file path=usr/lib/python3.9/test/xmltestdata/test.xml.out
+file path=usr/lib/python3.9/test/xmltests.py
+file path=usr/lib/python3.9/test/zip_cp437_header.zip
+file path=usr/lib/python3.9/test/zipdir.zip
+file path=usr/lib/python3.9/test/ziptestdata/README.md
+file path=usr/lib/python3.9/test/ziptestdata/exe_with_z64
+file path=usr/lib/python3.9/test/ziptestdata/exe_with_zip
+file path=usr/lib/python3.9/test/ziptestdata/header.sh
+file path=usr/lib/python3.9/test/ziptestdata/testdata_module_inside_zip.py
+file path=usr/lib/python3.9/textwrap.py
+file path=usr/lib/python3.9/this.py
+file path=usr/lib/python3.9/threading.py
+file path=usr/lib/python3.9/timeit.py
+file path=usr/lib/python3.9/tkinter/__init__.py
+file path=usr/lib/python3.9/tkinter/__main__.py
+file path=usr/lib/python3.9/tkinter/colorchooser.py
+file path=usr/lib/python3.9/tkinter/commondialog.py
+file path=usr/lib/python3.9/tkinter/constants.py
+file path=usr/lib/python3.9/tkinter/dialog.py
+file path=usr/lib/python3.9/tkinter/dnd.py
+file path=usr/lib/python3.9/tkinter/filedialog.py
+file path=usr/lib/python3.9/tkinter/font.py
+file path=usr/lib/python3.9/tkinter/messagebox.py
+file path=usr/lib/python3.9/tkinter/scrolledtext.py
+file path=usr/lib/python3.9/tkinter/simpledialog.py
+file path=usr/lib/python3.9/tkinter/test/README
+file path=usr/lib/python3.9/tkinter/test/__init__.py
+file path=usr/lib/python3.9/tkinter/test/runtktests.py
+file path=usr/lib/python3.9/tkinter/test/support.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/__init__.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_font.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_geometry_managers.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_images.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_loadtk.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_misc.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_text.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_variables.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_widgets.py
+file path=usr/lib/python3.9/tkinter/test/test_ttk/__init__.py
+file path=usr/lib/python3.9/tkinter/test/test_ttk/test_extensions.py
+file path=usr/lib/python3.9/tkinter/test/test_ttk/test_functions.py
+file path=usr/lib/python3.9/tkinter/test/test_ttk/test_style.py
+file path=usr/lib/python3.9/tkinter/test/test_ttk/test_widgets.py
+file path=usr/lib/python3.9/tkinter/test/widget_tests.py
+file path=usr/lib/python3.9/tkinter/tix.py
+file path=usr/lib/python3.9/tkinter/ttk.py
+file path=usr/lib/python3.9/token.py
+file path=usr/lib/python3.9/tokenize.py
+file path=usr/lib/python3.9/trace.py
+file path=usr/lib/python3.9/traceback.py
+file path=usr/lib/python3.9/tracemalloc.py
+file path=usr/lib/python3.9/tty.py
+file path=usr/lib/python3.9/turtle.py
+file path=usr/lib/python3.9/turtledemo/__init__.py
+file path=usr/lib/python3.9/turtledemo/__main__.py
+file path=usr/lib/python3.9/turtledemo/bytedesign.py
+file path=usr/lib/python3.9/turtledemo/chaos.py
+file path=usr/lib/python3.9/turtledemo/clock.py
+file path=usr/lib/python3.9/turtledemo/colormixer.py
+file path=usr/lib/python3.9/turtledemo/forest.py
+file path=usr/lib/python3.9/turtledemo/fractalcurves.py
+file path=usr/lib/python3.9/turtledemo/lindenmayer.py
+file path=usr/lib/python3.9/turtledemo/minimal_hanoi.py
+file path=usr/lib/python3.9/turtledemo/nim.py
+file path=usr/lib/python3.9/turtledemo/paint.py
+file path=usr/lib/python3.9/turtledemo/peace.py
+file path=usr/lib/python3.9/turtledemo/penrose.py
+file path=usr/lib/python3.9/turtledemo/planet_and_moon.py
+file path=usr/lib/python3.9/turtledemo/rosette.py
+file path=usr/lib/python3.9/turtledemo/round_dance.py
+file path=usr/lib/python3.9/turtledemo/sorting_animate.py
+file path=usr/lib/python3.9/turtledemo/tree.py
+file path=usr/lib/python3.9/turtledemo/turtle.cfg
+file path=usr/lib/python3.9/turtledemo/two_canvases.py
+file path=usr/lib/python3.9/turtledemo/yinyang.py
+file path=usr/lib/python3.9/types.py
+file path=usr/lib/python3.9/typing.py
+file path=usr/lib/python3.9/unittest/__init__.py
+file path=usr/lib/python3.9/unittest/__main__.py
+file path=usr/lib/python3.9/unittest/_log.py
+file path=usr/lib/python3.9/unittest/async_case.py
+file path=usr/lib/python3.9/unittest/case.py
+file path=usr/lib/python3.9/unittest/loader.py
+file path=usr/lib/python3.9/unittest/main.py
+file path=usr/lib/python3.9/unittest/mock.py
+file path=usr/lib/python3.9/unittest/result.py
+file path=usr/lib/python3.9/unittest/runner.py
+file path=usr/lib/python3.9/unittest/signals.py
+file path=usr/lib/python3.9/unittest/suite.py
+file path=usr/lib/python3.9/unittest/test/__init__.py
+file path=usr/lib/python3.9/unittest/test/__main__.py
+file path=usr/lib/python3.9/unittest/test/_test_warnings.py
+file path=usr/lib/python3.9/unittest/test/dummy.py
+file path=usr/lib/python3.9/unittest/test/support.py
+file path=usr/lib/python3.9/unittest/test/test_assertions.py
+file path=usr/lib/python3.9/unittest/test/test_async_case.py
+file path=usr/lib/python3.9/unittest/test/test_break.py
+file path=usr/lib/python3.9/unittest/test/test_case.py
+file path=usr/lib/python3.9/unittest/test/test_discovery.py
+file path=usr/lib/python3.9/unittest/test/test_functiontestcase.py
+file path=usr/lib/python3.9/unittest/test/test_loader.py
+file path=usr/lib/python3.9/unittest/test/test_program.py
+file path=usr/lib/python3.9/unittest/test/test_result.py
+file path=usr/lib/python3.9/unittest/test/test_runner.py
+file path=usr/lib/python3.9/unittest/test/test_setups.py
+file path=usr/lib/python3.9/unittest/test/test_skipping.py
+file path=usr/lib/python3.9/unittest/test/test_suite.py
+file path=usr/lib/python3.9/unittest/test/testmock/__init__.py
+file path=usr/lib/python3.9/unittest/test/testmock/__main__.py
+file path=usr/lib/python3.9/unittest/test/testmock/support.py
+file path=usr/lib/python3.9/unittest/test/testmock/testasync.py
+file path=usr/lib/python3.9/unittest/test/testmock/testcallable.py
+file path=usr/lib/python3.9/unittest/test/testmock/testhelpers.py
+file path=usr/lib/python3.9/unittest/test/testmock/testmagicmethods.py
+file path=usr/lib/python3.9/unittest/test/testmock/testmock.py
+file path=usr/lib/python3.9/unittest/test/testmock/testpatch.py
+file path=usr/lib/python3.9/unittest/test/testmock/testsealable.py
+file path=usr/lib/python3.9/unittest/test/testmock/testsentinel.py
+file path=usr/lib/python3.9/unittest/test/testmock/testwith.py
+file path=usr/lib/python3.9/unittest/util.py
+file path=usr/lib/python3.9/urllib/__init__.py
+file path=usr/lib/python3.9/urllib/error.py
+file path=usr/lib/python3.9/urllib/parse.py
+file path=usr/lib/python3.9/urllib/request.py
+file path=usr/lib/python3.9/urllib/response.py
+file path=usr/lib/python3.9/urllib/robotparser.py
+file path=usr/lib/python3.9/uu.py
+file path=usr/lib/python3.9/uuid.py
+file path=usr/lib/python3.9/venv/__init__.py
+file path=usr/lib/python3.9/venv/__main__.py
+file path=usr/lib/python3.9/venv/scripts/common/Activate.ps1
+file path=usr/lib/python3.9/venv/scripts/common/activate
+file path=usr/lib/python3.9/venv/scripts/posix/activate.csh
+file path=usr/lib/python3.9/venv/scripts/posix/activate.fish
+file path=usr/lib/python3.9/warnings.py
+file path=usr/lib/python3.9/wave.py
+file path=usr/lib/python3.9/weakref.py
+file path=usr/lib/python3.9/webbrowser.py
+file path=usr/lib/python3.9/wsgiref/__init__.py
+file path=usr/lib/python3.9/wsgiref/handlers.py
+file path=usr/lib/python3.9/wsgiref/headers.py
+file path=usr/lib/python3.9/wsgiref/simple_server.py
+file path=usr/lib/python3.9/wsgiref/util.py
+file path=usr/lib/python3.9/wsgiref/validate.py
+file path=usr/lib/python3.9/xdrlib.py
+file path=usr/lib/python3.9/xml/__init__.py
+file path=usr/lib/python3.9/xml/dom/NodeFilter.py
+file path=usr/lib/python3.9/xml/dom/__init__.py
+file path=usr/lib/python3.9/xml/dom/domreg.py
+file path=usr/lib/python3.9/xml/dom/expatbuilder.py
+file path=usr/lib/python3.9/xml/dom/minicompat.py
+file path=usr/lib/python3.9/xml/dom/minidom.py
+file path=usr/lib/python3.9/xml/dom/pulldom.py
+file path=usr/lib/python3.9/xml/dom/xmlbuilder.py
+file path=usr/lib/python3.9/xml/etree/ElementInclude.py
+file path=usr/lib/python3.9/xml/etree/ElementPath.py
+file path=usr/lib/python3.9/xml/etree/ElementTree.py
+file path=usr/lib/python3.9/xml/etree/__init__.py
+file path=usr/lib/python3.9/xml/etree/cElementTree.py
+file path=usr/lib/python3.9/xml/parsers/__init__.py
+file path=usr/lib/python3.9/xml/parsers/expat.py
+file path=usr/lib/python3.9/xml/sax/__init__.py
+file path=usr/lib/python3.9/xml/sax/_exceptions.py
+file path=usr/lib/python3.9/xml/sax/expatreader.py
+file path=usr/lib/python3.9/xml/sax/handler.py
+file path=usr/lib/python3.9/xml/sax/saxutils.py
+file path=usr/lib/python3.9/xml/sax/xmlreader.py
+file path=usr/lib/python3.9/xmlrpc/__init__.py
+file path=usr/lib/python3.9/xmlrpc/client.py
+file path=usr/lib/python3.9/xmlrpc/server.py
+file path=usr/lib/python3.9/zipapp.py
+file path=usr/lib/python3.9/zipfile.py
+file path=usr/lib/python3.9/zipimport.py
+file path=usr/lib/python3.9/zoneinfo/__init__.py
+file path=usr/lib/python3.9/zoneinfo/_common.py
+file path=usr/lib/python3.9/zoneinfo/_tzpath.py
+file path=usr/lib/python3.9/zoneinfo/_zoneinfo.py
+file path=usr/share/man/man1/python$(COMPONENT_VERSION)
+link path=usr/share/man/man1/python3.1 target=python$(COMPONENT_VERSION)
diff --git a/components/python/python39/patches/01-setup.patch b/components/python/python39/patches/01-setup.patch
new file mode 100644
index 0000000..ed1ac9f
--- /dev/null
+++ b/components/python/python39/patches/01-setup.patch
@@ -0,0 +1,103 @@
+This patch modifies the setup script to support Solaris.
+As it is Solaris-specific, it is not suitable for upstream.
+
+Bugs associated with following changes:
+
+Curses library fixes: Bug 22661864
+
+Changes to directory inclusion: Bug 20367692
+
+Libsocket tweaks: Bug 21959680
+
+--- Python-3.9.1/setup.py
++++ Python-3.9.1/setup.py
+@@ -725,12 +725,15 @@ class PyBuildExt(build_ext):
+                         add_dir_to_list(dir_list, directory)
+ 
+     def configure_compiler(self):
+-        # Ensure that /usr/local is always used, but the local build
+-        # directories (i.e. '.' and 'Include') must be first.  See issue
+-        # 10520.
+         if not CROSS_COMPILING:
+-            add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
+-            add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
++            if HOST_PLATFORM != 'sunos5':
++                # Upstream notes the following for source builds:
++                #    Ensure that /usr/local is always used, but the local build
++                #    directories (i.e. '.' and 'Include') must be first.  See
++                #    issue 10520.
++                # But we skip that for Solaris system builds.
++                add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
++                add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+         # only change this for cross builds for 3.3, issues on Mageia
+         if CROSS_COMPILING:
+             self.add_cross_compiling_paths()
+@@ -1042,6 +1045,13 @@ class PyBuildExt(build_ext):
+                                                      ['/usr/lib/termcap'],
+                                                      'termcap'):
+                 readline_libs.append('termcap')
++
++            if HOST_PLATFORM == 'sunos5':
++                # insert '-zrecord' before the readline libraries that we
++                # want to link with to avoid rl_insert() elimination
++                readline_extra_link_args = ('-Wl,-zrecord','-lreadline','-lncurses')
++                readline_libs = ()
++
+             self.add(Extension('readline', ['readline.c'],
+                                library_dirs=['/usr/lib/termcap'],
+                                extra_link_args=readline_extra_link_args,
+@@ -1076,6 +1086,10 @@ class PyBuildExt(build_ext):
+ 
+         curses_enabled = True
+         if curses_library.startswith('ncurses'):
++            if HOST_PLATFORM == 'sunos5':
++                curses_defines.append(('HAVE_NCURSESW', '1'))
++                curses_defines.append(('_XOPEN_SOURCE_EXTENDED', '1'))
++                curses_includes.append('/usr/include/ncurses')
+             curses_libs = [curses_library]
+             self.add(Extension('_curses', ['_cursesmodule.c'],
+                                include_dirs=curses_includes,
+@@ -1103,10 +1117,34 @@ class PyBuildExt(build_ext):
+         skip_curses_panel = True if AIX else False
+         if (curses_enabled and not skip_curses_panel and
+                 self.compiler.find_library_file(self.lib_dirs, panel_library)):
++
++            panel_lib_dirs = []
++            if HOST_PLATFORM == 'sunos5':
++                # Look for libpanel under /usr/gnu/lib on Solaris.
++                # os.uname() does not include the processor. platform.uname()
++                # does, but the platform module is not available in setup.
++                # Work around this by parsing os.system('uname -p') output.
++                tmpfile = os.path.join(self.build_temp, 'processor')
++                if not os.path.exists(self.build_temp):
++                    os.makedirs(self.build_temp)
++                os.system('/usr/bin/uname -p > %s 2> /dev/null' %tmpfile)
++                processor = ''
++                try:
++                    with open(tmpfile) as fp:
++                        processor = fp.readline().strip()
++                finally:
++                    os.unlink(tmpfile)
++                if processor == 'sparc':
++                    panel_lib_dirs.append('/usr/gnu/lib/sparcv9')
++                else:
++                    panel_lib_dirs.append('/usr/gnu/lib/amd64')
++
+             self.add(Extension('_curses_panel', ['_curses_panel.c'],
+                            include_dirs=curses_includes,
+                            define_macros=curses_defines,
+-                           libraries=[panel_library, *curses_libs]))
++                           libraries=[panel_library, *curses_libs],
++                           library_dirs=panel_lib_dirs,
++                           runtime_library_dirs=panel_lib_dirs) )
+         elif not skip_curses_panel:
+             self.missing.append('_curses_panel')
+ 
+@@ -1134,6 +1172,7 @@ class PyBuildExt(build_ext):
+                 # Issue #35569: Expose RFC 3542 socket options.
+                 kwargs['extra_compile_args'] = ['-D__APPLE_USE_RFC_3542']
+ 
++            kwargs['libraries'] = ['socket', 'nsl']
+             self.add(Extension('_socket', ['socketmodule.c'], **kwargs))
+         elif self.compiler.find_library_file(self.lib_dirs, 'net'):
+             libs = ['net']
diff --git a/components/python/python39/patches/02-vendor-packages.patch b/components/python/python39/patches/02-vendor-packages.patch
new file mode 100644
index 0000000..e0c7f16
--- /dev/null
+++ b/components/python/python39/patches/02-vendor-packages.patch
@@ -0,0 +1,8 @@
+This patch makes Python support the vendor-packages directory.
+As it is Solaris-specific, it is not suitable for upstream.
+
+--- /dev/null
++++ Python-3.9.0/Lib/site-packages/vendor-packages.pth
+@@ -0,0 +1,1 @@
++import site; site.addsitedir('/usr/lib/python3.9/vendor-packages')
+
diff --git a/components/python/python39/patches/03-ucred.patch b/components/python/python39/patches/03-ucred.patch
new file mode 100644
index 0000000..907ecc7
--- /dev/null
+++ b/components/python/python39/patches/03-ucred.patch
@@ -0,0 +1,484 @@
+This patch provides Python ucred support.  It may be contributed upstream at
+some point, but the suitability (or lack thereof) has not yet been determined.
+
+diff --git Python-2.6.4/Modules/ucred.c Python-2.6.4/Modules/ucred.c
+new file mode 100644
+--- Python-3.9.1/Modules/ucred.c
++++ Python-3.9.1/Modules/ucred.c
+@@ -0,0 +1,404 @@
++/*
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to
++ * deal in the Software without restriction, including without limitation the
++ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
++ */
++
++#include <Python.h>
++
++#include <stdio.h>
++#include <priv.h>
++#include <ucred.h>
++#include <ctype.h>
++#include <tsol/label.h>
++
++typedef struct {
++	PyObject_HEAD
++	ucred_t *ucred;
++} pyucred_t;
++
++#define pyucred_getlongid(name, type)				\
++	static PyObject *					\
++	pyucred_get##name(pyucred_t *uc)			\
++	{ 							\
++		type val;					\
++								\
++		if (uc->ucred == NULL) {			\
++			errno = EINVAL;				\
++			PyErr_SetFromErrno(PyExc_OSError);	\
++			return (NULL);				\
++		}						\
++								\
++		if ((val = ucred_get##name(uc->ucred)) == -1) {	\
++			PyErr_SetFromErrno(PyExc_OSError);	\
++			return (NULL);				\
++		}						\
++								\
++		return (Py_BuildValue("l", (long)val));		\
++	}
++
++pyucred_getlongid(euid, uid_t)
++pyucred_getlongid(ruid, uid_t)
++pyucred_getlongid(suid, uid_t)
++pyucred_getlongid(egid, gid_t)
++pyucred_getlongid(rgid, gid_t)
++pyucred_getlongid(sgid, gid_t)
++pyucred_getlongid(pid, pid_t)
++pyucred_getlongid(projid, projid_t)
++pyucred_getlongid(zoneid, zoneid_t)
++
++static PyObject *
++pyucred_getgroups(pyucred_t *uc)
++{
++	const gid_t *groups;
++	PyObject *list;
++	int len;
++	int i;
++
++	if (uc->ucred == NULL) {
++		errno = EINVAL;
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	if ((len = ucred_getgroups(uc->ucred, &groups)) == -1) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	if ((list = PyList_New(len)) == NULL)
++		return (NULL);
++
++	for (i = 0; i < len; i++) {
++		PyObject *gid = Py_BuildValue("l", (long)groups[i]);
++		if (PyList_SetItem(list, i, gid) == -1)
++			return (NULL);
++	}
++
++	return (list);
++}
++
++static PyObject *
++pyucred_getlabel(pyucred_t *uc)
++{
++	m_label_t *label;
++	PyObject *ret;
++	char *str;
++
++	if (uc->ucred == NULL) {
++		errno = EINVAL;
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	label = ucred_getlabel(uc->ucred);
++	if (label == NULL)
++		return (Py_BuildValue("s", ""));
++
++	if (label_to_str(label, &str, M_LABEL, DEF_NAMES) == -1) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	ret = Py_BuildValue("s", str);
++	free(str);
++	return (ret);
++}
++
++static PyObject *
++pyucred_getpflags(pyucred_t *uc, PyObject *args, PyObject *kwargs)
++{
++	static char *kwlist[] = { "flags", NULL };
++	uint_t flags;
++
++	if (uc->ucred == NULL) {
++		errno = EINVAL;
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist,
++	    &flags))
++		return (NULL);
++
++	if ((flags = ucred_getpflags(uc->ucred, flags)) == (uint_t)-1) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("i", flags));
++}
++
++static PyObject *
++pyucred_has_priv(pyucred_t *uc, PyObject *args, PyObject *kwargs)
++{
++	static char *kwlist[] = { "set", "priv", NULL };
++	const priv_set_t *privs;
++	const char *set;
++	const char *priv;
++
++	if (uc->ucred == NULL) {
++		errno = EINVAL;
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ss", kwlist,
++	    &set, &priv))
++		return (NULL);
++
++	if ((privs = ucred_getprivset(uc->ucred, set)) == NULL) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	if (priv_ismember(privs, priv)) {
++		Py_INCREF(Py_True);
++		return Py_True;
++	}
++
++	Py_INCREF(Py_False);
++	return Py_False;
++}
++
++PyDoc_STRVAR(pyucred_getlabel_doc,
++    "getlabel() -> string\n"
++    "\n"
++    "Return the Trusted Extensions label string, or an "
++    "empty string if not available. The label string is "
++    "converted using the default name and M_LABEL (human-readable). "
++    "Raises OSError. See label_to_str(3TSOL).");
++PyDoc_STRVAR(pyucred_getpflags_doc,
++    "getpflags(flags) -> int\n"
++    "\n"
++    "Return the values of the specified privilege flags.");
++PyDoc_STRVAR(pyucred_has_priv_doc,
++    "has_priv(set, priv) -> bool\n"
++    "\n"
++    "Return true if the given privilege is set in the "
++    "specified set. Raises OSError if the set or privilege is "
++    "invalid, or a problem occurs.\n"
++    "\n"
++    "Currently, the following privilege sets are defined, as "
++    "described in privileges(5):\n"
++    "\n"
++    "Effective\n"
++    "Permitted\n"
++    "Inheritable\n"
++    "Limit\n");
++
++static PyMethodDef pyucred_methods[] = {
++	{ "geteuid", (PyCFunction)pyucred_geteuid, METH_NOARGS,
++	    "Return the effective user ID." },
++	{ "getruid", (PyCFunction)pyucred_getruid, METH_NOARGS,
++	    "Return the real user ID." },
++	{ "getsuid", (PyCFunction)pyucred_getsuid, METH_NOARGS,
++	    "Return the saved user ID." },
++	{ "getegid", (PyCFunction)pyucred_getegid, METH_NOARGS,
++	    "Return the effective group ID." },
++	{ "getrgid", (PyCFunction)pyucred_getrgid, METH_NOARGS,
++	    "Return the real group ID." },
++	{ "getsgid", (PyCFunction)pyucred_getsgid, METH_NOARGS,
++	    "Return the saved group ID." },
++	{ "getpid", (PyCFunction)pyucred_getpid, METH_NOARGS,
++	    "Return the effective user ID." },
++	{ "getprojid", (PyCFunction)pyucred_getprojid, METH_NOARGS,
++	    "Return the project ID." },
++	{ "getzoneid", (PyCFunction)pyucred_getzoneid, METH_NOARGS,
++	    "Return the zone ID." },
++	{ "getgroups", (PyCFunction)pyucred_getgroups, METH_NOARGS,
++	    "Return a list of group IDs." },
++	{ "getlabel", (PyCFunction)pyucred_getlabel, METH_NOARGS,
++	    pyucred_getlabel_doc },
++	{ "getpflags", (PyCFunction)pyucred_getpflags,
++	    METH_VARARGS|METH_KEYWORDS, pyucred_getpflags_doc },
++	{ "has_priv", (PyCFunction)pyucred_has_priv,
++	    METH_VARARGS|METH_KEYWORDS, pyucred_has_priv_doc },
++	{ NULL, NULL }
++};
++
++static int
++pyucred_init(PyObject *self, PyObject *args, PyObject *kwargs)
++{
++	pyucred_t *uc = (pyucred_t *)self;
++	uc->ucred = NULL;
++	return (0);
++}
++
++static void
++pyucred_dealloc(PyObject *self)
++{
++	pyucred_t *uc = (pyucred_t *)self;
++	if (uc->ucred != NULL)
++		ucred_free(uc->ucred);
++	Py_TYPE(self)->tp_free(self);
++}
++
++static PyTypeObject pyucred_type = {
++	PyVarObject_HEAD_INIT(NULL, 0)
++	"ucred.ucred",             /*tp_name*/
++	sizeof (pyucred_t),        /*tp_basicsize*/
++	0,                         /*tp_itemsize*/
++	pyucred_dealloc,           /*tp_dealloc*/
++	0,                         /*tp_print*/
++	0,                         /*tp_getattr*/
++	0,                         /*tp_setattr*/
++	0,                         /*tp_reserved*/
++	0,                         /*tp_repr*/
++	0,                         /*tp_as_number*/
++	0,                         /*tp_as_sequence*/
++	0,                         /*tp_as_mapping*/
++	0,                         /*tp_hash */
++	0,                         /*tp_call*/
++	0,                         /*tp_str*/
++	0,                         /*tp_getattro*/
++	0,                         /*tp_setattro*/
++	0,                         /*tp_as_buffer*/
++	Py_TPFLAGS_DEFAULT,        /*tp_flags*/
++	"user credentials",        /*tp_doc */
++	0,		           /* tp_traverse */
++	0,		           /* tp_clear */
++	0,		           /* tp_richcompare */
++	0,		           /* tp_weaklistoffset */
++	0,		           /* tp_iter */
++	0,		           /* tp_iternext */
++	pyucred_methods,           /* tp_methods */
++	0,                         /* tp_members */
++	0,                         /* tp_getset */
++	0,                         /* tp_base */
++	0,                         /* tp_dict */
++	0,                         /* tp_descr_get */
++	0,                         /* tp_descr_set */
++	0,                         /* tp_dictoffset */
++	(initproc)pyucred_init,    /* tp_init */
++	0,                         /* tp_alloc */
++	0,                         /* tp_new */
++	0,                         /* tp_free */
++	0,                         /* tp_is_gc */
++};
++
++static PyObject *
++pyucred_new(const ucred_t *uc)
++{
++	pyucred_t *self;
++
++	self = (pyucred_t *)PyObject_CallObject((PyObject *)&pyucred_type, NULL);
++
++	if (self == NULL)
++		return (NULL);
++
++	self->ucred = (ucred_t *)uc;
++
++	return ((PyObject *)self);
++}
++
++static PyObject *
++pyucred_get(PyObject *o, PyObject *args, PyObject *kwargs)
++{
++	static char *kwlist[] = { "pid", NULL };
++	ucred_t *ucred = NULL;
++	int pid;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist,
++	    &pid))
++		return (NULL);
++
++	ucred = ucred_get(pid);
++
++	if (ucred == NULL) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	return (pyucred_new(ucred));
++}
++
++static PyObject *
++pyucred_getpeer(PyObject *o, PyObject *args, PyObject *kwargs)
++{
++	static char *kwlist[] = { "fd", NULL };
++	ucred_t *ucred = NULL;
++	int fd;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist,
++	    &fd))
++		return (NULL);
++
++	if (getpeerucred(fd, &ucred) == -1) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	return (pyucred_new(ucred));
++}
++
++PyDoc_STRVAR(pyucred_get_doc,
++    "get(pid) -> ucred\n"
++    "\n"
++    "Return the credentials of the specified process ID. "
++    "Raises OSError. See ucred_get(3C).");
++PyDoc_STRVAR(pyucred_getpeer_doc,
++    "getpeer(fd) -> ucred\n"
++    "\n"
++    "Return the credentials of the peer endpoint of a "
++    "connection-oriented socket (SOCK_STREAM) or STREAM fd "
++    "at the time the endpoint was created or the connection "
++    "was established. Raises OSError. See getpeerucred(3C).");
++
++static struct PyMethodDef pyucred_module_methods[] = {
++	{ "get", (PyCFunction) pyucred_get,
++	  METH_VARARGS|METH_KEYWORDS, pyucred_get_doc },
++	{ "getpeer", (PyCFunction) pyucred_getpeer,
++	  METH_VARARGS|METH_KEYWORDS, pyucred_getpeer_doc },
++	{ NULL, NULL, 0, NULL }
++};
++
++PyDoc_STRVAR(pyucred_module_doc,
++    "This module provides an interface to the user credential access "
++    "methods, obtainable either by process ID or file descriptor.");
++
++PyMODINIT_FUNC
++PyInit_ucred (void)
++{
++	PyObject *m;
++
++	static struct PyModuleDef moduledef = {
++	    PyModuleDef_HEAD_INIT,
++	    "ucred",
++	    pyucred_module_doc,
++	    -1,
++	    pyucred_module_methods,
++	    NULL,
++	    NULL,
++	    NULL,
++	    NULL,
++	};
++
++	m = PyModule_Create(&moduledef);
++
++	pyucred_type.tp_new = PyType_GenericNew;
++	if (PyType_Ready(&pyucred_type) < 0)
++		return NULL;
++
++	Py_INCREF(&pyucred_type);
++
++	PyModule_AddObject(m, "ucred", (PyObject *)&pyucred_type);
++
++	return m;
++}
+--- Python-3.9.1/setup.py
++++ Python-3.9.1/setup.py
+@@ -1814,6 +1814,13 @@ class PyBuildExt(build_ext):
+         else:
+             self.missing.append('_uuid')
+ 
++    def detect_ucred(self):
++        # ucred module (Solaris)
++        ucred_inc = find_file('ucred.h', [], self.inc_dirs)
++        tsol_inc = find_file('tsol/label.h', [], self.inc_dirs)
++        if ucred_inc is not None and tsol_inc is not None:
++            self.add(Extension('ucred', ['ucred.c'], libraries=['tsol']))
++
+     def detect_modules(self):
+         self.configure_compiler()
+         self.init_inc_lib_dirs()
+@@ -1834,6 +1841,7 @@ class PyBuildExt(build_ext):
+         self.detect_expat_elementtree()
+         self.detect_multibytecodecs()
+         self.detect_decimal()
++        self.detect_ucred()
+         self.detect_ctypes()
+         self.detect_multiprocessing()
+         if not self.detect_tkinter():
+--- Python-3.9.1/Lib/test/ucredtest.py
++++ Python-3.9.1/Lib/test/ucredtest.py
+@@ -0,0 +1,45 @@
++#!/usr/bin/python3.9
++
++import ucred
++import os
++
++uc = ucred.get(os.getpid())
++
++print("pid = %d" % uc.getpid())
++print("euid = %d" % uc.geteuid())
++print("ruid = %d" % uc.getruid())
++print("suid = %d" % uc.getsuid())
++print("egid = %d" % uc.getegid())
++print("rgid = %d" % uc.getrgid())
++print("sgid = %d" % uc.getsgid())
++print("zoneid = %d" % uc.getzoneid())
++print("projid = %d" % uc.getprojid())
++print("groups = %s" % uc.getgroups())
++print("label = %s" % uc.getlabel())
++
++print("getpflags(0x1) = %d" % uc.getpflags(0x1))
++print("getpflags(0x2) = %d" % uc.getpflags(0x2))
++print("has_priv(Effective, proc_fork) = %d" % uc.has_priv("Effective", "proc_fork"))
++print("has_priv(Permitted, proc_fork) = %d" % uc.has_priv("Permitted", "proc_fork"))
++print("has_priv(Inheritable, proc_fork) = %d" % uc.has_priv("Inheritable", "proc_fork"))
++print("has_priv(Limit, file_setid) = %d" % uc.has_priv("Limit", "file_setid"))
++print("has_priv(Effective, file_setid) = %d" % uc.has_priv("Effective", "file_setid"))
++try:
++    uc.has_priv("Effective", "proc_bork")
++except OSError as e:
++    print(e)
++try:
++    uc.has_priv("Defective", "proc_fork")
++except OSError as e:
++    print(e)
++try:
++    uc.has_priv("Defective", "proc_bork")
++except OSError as e:
++    print(e)
++
++del uc
++uc = ucred.ucred()
++try:
++    uc.getpid()
++except OSError as e:
++    print(e)
diff --git a/components/python/python39/patches/04-dlpi.patch b/components/python/python39/patches/04-dlpi.patch
new file mode 100644
index 0000000..ef8f8c7
--- /dev/null
+++ b/components/python/python39/patches/04-dlpi.patch
@@ -0,0 +1,1353 @@
+This patch provides Python dlpi support.  It may be contributed upstream at
+some point, but the suitability (or lack thereof) has not yet been determined.
+--- Python-3.9.1/Modules/dlpimodule.c
++++ Python-3.9.1/Modules/dlpimodule.c
+@@ -0,0 +1,1226 @@
++/*
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to
++ * deal in the Software without restriction, including without limitation the
++ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
++ */
++
++#include <Python.h>
++#include <stdio.h>
++#include <libdlpi.h>
++
++typedef struct {
++	PyObject_HEAD
++	dlpi_handle_t dlpihdl;
++} pylink_t;
++
++typedef struct {
++	PyObject *pyfunc;
++	PyObject *pyarg;
++} callback_data_t;
++
++/*
++ * dlpi_err: the only exception raised for libdlpi related error.
++ * The accompanying value is:
++ * (dlpi_error_number, string), when it's a dlpi specific error,
++ * or, (DL_SYSERR, errno, string), when it's coming from a system call.
++ */
++static PyObject *dlpi_err;
++
++static void
++dlpi_raise_exception(int err)
++{
++	PyObject *e = NULL;
++
++	if (err == DL_SYSERR) {
++		e = Py_BuildValue("(iis)", DL_SYSERR, errno, strerror(errno));
++	} else {
++		e = Py_BuildValue("(is)", err, dlpi_strerror(err));
++	}
++	if (e != NULL) {
++		PyErr_SetObject(dlpi_err, e);
++		Py_DECREF(e);
++	}
++}
++
++PyDoc_STRVAR(link_doc,
++    "link(linkname[, flags]) -> link object\n"
++    "\n"
++    "Open linkname with specified flags.\n"
++    "Three flags are supported: PASSIVE, RAW, NATIVE.\n"
++    "And these flags can be bitwise-OR'ed together(default flag is 0).\n"
++    "You need sys_net_rawaccess privilege to open a link.\n"
++    "See dlpi_open(3DLPI).\n"
++);
++static int
++link_init(PyObject *self, PyObject *args, PyObject *kwds)
++{
++	uint_t flags = 0;
++	dlpi_handle_t dh;
++	char *linkname;
++	int rval;
++	static char *keywords[] = {"linkname", "flags", NULL};
++	pylink_t *link = (pylink_t *)self;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|I", keywords,
++	    &linkname, &flags))
++		return (-1);
++
++	if ((rval = dlpi_open(linkname, &dh, flags)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (-1);
++	}
++
++	link->dlpihdl = dh;
++
++	return (0);
++}
++
++static void
++link_dealloc(pylink_t *link)
++{
++	if (link->dlpihdl != NULL)
++		dlpi_close(link->dlpihdl);
++	Py_TYPE(link)->tp_free((PyObject *)link);
++}
++
++PyDoc_STRVAR(bind_doc,
++    "bind(sap) -> unsigned int\n"
++    "\n"
++    "Attempts to bind the link to specified SAP, or ANY_SAP.\n"
++    "Returns the SAP that the function actually bound to, which\n"
++    "could be different from the SAP requested.\n"
++    "See dlpi_bind(3DLPI).\n"
++);
++static PyObject *
++link_bind(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	uint_t sap = 0, boundsap = 0;
++	static char *keywords[] = {"sap", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "I", keywords, &sap))
++		return (NULL);
++
++	if ((rval = dlpi_bind(link->dlpihdl, sap, &boundsap)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I", boundsap));
++}
++
++PyDoc_STRVAR(unbind_doc,
++    "unbind() -> None\n"
++    "\n"
++    "Attempts to unbind the link from previously bound sap.\n"
++    "See dlpi_unbind(3DLPI).\n"
++);
++static PyObject *
++link_unbind(pylink_t *link)
++{
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_unbind(link->dlpihdl)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(send_doc,
++    "send(destaddr, message[, sap, minpri, maxpri]) -> None\n"
++    "\n"
++    "Attempts to send message over this link to sap on destaddr.\n"
++    "If SAP is not specified, the bound SAP is used\n"
++    "You can also specify priority range (minpri, maxpri).\n"
++    "See dlpi_send(3DLPI).\n"
++);
++static PyObject *
++link_send(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	char *daddr = NULL, *msgbuf = NULL;
++	size_t daddrlen = 0, msglen = 0;
++	t_scalar_t minpri = DL_QOS_DONT_CARE, maxpri = DL_QOS_DONT_CARE;
++	uint_t sap = DLPI_ANY_SAP;
++	dlpi_sendinfo_t ds, *dsp = NULL;
++	static char *keywords[] =
++	    {"destaddr", "message", "sap", "minpri", "maxpri", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s#s#|Iii", keywords,
++	    &daddr, &daddrlen, &msgbuf, &msglen, &sap, &minpri, &maxpri))
++		return (NULL);
++
++	if ((sap != DLPI_ANY_SAP) || (minpri != DL_QOS_DONT_CARE) ||
++	    (maxpri != DL_QOS_DONT_CARE)) {
++		ds.dsi_sap = sap;
++		ds.dsi_prio.dl_min = minpri;
++		ds.dsi_prio.dl_max = maxpri;
++		dsp = &ds;
++	}
++
++	if ((rval = dlpi_send(link->dlpihdl, daddr, daddrlen,
++	    msgbuf, msglen, dsp)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(recv_doc,
++    "recv(msglen[, timeout]) -> (string, string), or (None, None)\n"
++    "\n"
++    "Attempts to receive message over this link.\n"
++    "You need to specify the message length for the received message.\n"
++    "And you can specify timeout value in milliseconds.\n"
++    "The default timeout value is -1 (wait forever).\n"
++    "Returns (source address, message data), or (None, None) when error occurs.\n"
++    "See dlpi_recv(3DLPI).\n"
++);
++static PyObject *
++link_recv(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	PyObject *obj;
++	char *saddr = NULL, *msgbuf = NULL;
++	size_t saddrlen = 0, msglen = 0, *saddrlenp = NULL, *msglenp = NULL;
++	int msec = -1; /* block until receive data */
++	static char *keywords[] = {"msglen", "timeout", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "k|i",
++	    keywords, &msglen, &msec))
++		return (NULL);
++
++	if (msglen > 0) {
++		msgbuf = malloc(msglen);
++		if (msgbuf == NULL) {
++			dlpi_raise_exception(DL_SYSERR);
++			return (NULL);
++		}
++		saddrlen = DLPI_PHYSADDR_MAX;
++		saddr = malloc(saddrlen);
++		if (saddr == NULL) {
++			dlpi_raise_exception(DL_SYSERR);
++			free(msgbuf);
++			return (NULL);
++		}
++		msglenp = &msglen;
++		saddrlenp = &saddrlen;
++	}
++
++	if ((rval = dlpi_recv(link->dlpihdl, saddr, saddrlenp, msgbuf,
++	    msglenp, msec, NULL)) != DLPI_SUCCESS) {
++		if (msgbuf != NULL)
++			free(msgbuf);
++		if (saddr != NULL)
++			free(saddr);
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	obj = Py_BuildValue("s#s#", saddr, saddrlen, msgbuf, msglen);
++	if (msgbuf != NULL)
++		free(msgbuf);
++	if (saddr != NULL)
++		free(saddr);
++	return (obj);
++}
++
++PyDoc_STRVAR(disabmulti_doc,
++    "disabmulti(address) -> None\n"
++    "\n"
++    "Disable a specified multicast address on this link.\n"
++    "See dlpi_disabmulti(3DLPI).\n"
++);
++static PyObject *
++link_disabmulti(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	char *addr = NULL;
++	size_t addrlen = 0;
++	static char *keywords[] = {"address", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s#", keywords,
++	    &addr, &addrlen))
++		return (NULL);
++
++	if ((addrlen == 0) || (addrlen > DLPI_PHYSADDR_MAX)) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_disabmulti(link->dlpihdl, addr, addrlen)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(enabmulti_doc,
++    "enabmulti(address) -> None\n"
++    "\n"
++    "Enable a specified multicast address on this link.\n"
++    "See dlpi_enabmulti(3DLPI).\n"
++);
++static PyObject *
++link_enabmulti(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	char *addr = NULL;
++	size_t addrlen = 0;
++	static char *keywords[] = {"address", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s#", keywords,
++	    &addr, &addrlen))
++		return (NULL);
++
++	if ((addrlen == 0) || (addrlen > DLPI_PHYSADDR_MAX)) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_enabmulti(link->dlpihdl, addr, addrlen)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++static void
++dlpi_callback(dlpi_handle_t hdl, dlpi_notifyinfo_t *ni, void *arg)
++{
++	callback_data_t *cd = (callback_data_t *)arg;
++	PyObject *arglist, *result;
++
++	switch (ni->dni_note) {
++	case DL_NOTE_SPEED:
++		arglist = Py_BuildValue("(OII)",
++		    cd->pyarg, ni->dni_note, ni->dni_speed);
++		break;
++	case DL_NOTE_SDU_SIZE:
++		arglist = Py_BuildValue("(OII)",
++		    cd->pyarg, ni->dni_note, ni->dni_size);
++		break;
++	case DL_NOTE_PHYS_ADDR:
++		arglist = Py_BuildValue("(OIs#)",
++		    cd->pyarg, ni->dni_note, ni->dni_physaddr,
++		    ni->dni_physaddrlen);
++		break;
++	default:
++		arglist = Py_BuildValue("(OIO)", cd->pyarg, ni->dni_note,
++		    Py_None);
++	}
++
++	result = PyEval_CallObject(cd->pyfunc, arglist);
++	Py_DECREF(arglist);
++	if (result == NULL) {
++		PyErr_Clear(); /* cannot raise error */
++	}
++	Py_DECREF(result);
++	Py_DECREF(cd->pyfunc);
++	Py_XDECREF(cd->pyarg);
++	free(cd);
++}
++
++PyDoc_STRVAR(enabnotify_doc,
++    "enabnotify(events, function[, arg]) -> unsigned long\n"
++    "\n"
++    "Enables a notification callback for the set of specified events,\n"
++    "which must be one or more (by a logical OR) events listed as below:\n"
++    "NOTE_LINK_DOWN         Notify when link has gone down\n"
++    "NOTE_LINK_UP           Notify when link has come up\n"
++    "NOTE_PHYS_ADDR         Notify when address changes\n"
++    "NOTE_SDU_SIZE          Notify when MTU changes\n"
++    "NOTE_SPEED             Notify when speed changes\n"
++    "NOTE_PROMISC_ON_PHYS   Notify when PROMISC_PHYS is set\n"
++    "NOTE_PROMISC_OFF_PHYS  Notify when PROMISC_PHYS is cleared\n"
++    "Returns a handle for this registration.\n"
++    "See dlpi_enabnotify(3DLPI).\n"
++);
++static PyObject *
++link_enabnotify(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	PyObject *func = NULL, *arg = NULL;
++	callback_data_t *cd;
++	uint_t notes = 0;
++	static char *keywords[] = {"events", "function", "arg", NULL};
++	dlpi_notifyid_t id;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "IO|O",
++	    keywords, &notes, &func, &arg))
++		return (NULL);
++
++	if (!PyCallable_Check(func)) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	cd = malloc(sizeof(callback_data_t));
++	if (cd == NULL) {
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++	Py_INCREF(func);
++	Py_XINCREF(arg);
++	cd->pyfunc = func;
++	cd->pyarg = arg;
++
++	if ((rval = dlpi_enabnotify(link->dlpihdl, notes, dlpi_callback,
++	    cd, &id)) != DLPI_SUCCESS) {
++		free(cd);
++		Py_DECREF(func);
++		Py_XDECREF(arg);
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("k", id));
++}
++
++PyDoc_STRVAR(disabnotify_doc,
++    "disabnotify(handle) -> argument object, or None\n"
++    "\n"
++    "Disables the notification registration associated with handle.\n"
++    "You should get this handle by calling enabnotify().\n"
++    "Returns the argument passed in when registering the callback, or None.\n"
++    "See dlpi_disabnotify(3DLPI).\n"
++);
++static PyObject *
++link_disabnotify(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	dlpi_notifyid_t id;
++	callback_data_t *arg;
++	PyObject *pyargsaved;
++	static char *keywords[] = {"handle", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "k", keywords, &id))
++		return (NULL);
++
++	if ((rval = dlpi_disabnotify(link->dlpihdl, id, (void **)&arg)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	/* clean up */
++	pyargsaved = arg->pyarg;
++	Py_XINCREF(pyargsaved);
++	Py_XDECREF(arg->pyarg);
++	Py_DECREF(arg->pyfunc);
++	free(arg);
++
++	if (pyargsaved != NULL)
++		return (pyargsaved);
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(get_sap_doc,
++    "get_sap() -> unsigned int\n"
++    "\n"
++    "Returns the sap bound to this link.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_sap(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I", info.di_sap));
++}
++
++PyDoc_STRVAR(get_fd_doc,
++    "get_fd() -> int\n"
++    "\n"
++    "Returns the integer file descriptor that can be used to directly\n"
++    "operate on the link.\n"
++    "See dlpi_fd(3DLPI).\n"
++);
++static PyObject *
++link_get_fd(pylink_t *link)
++{
++	int fd;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((fd = dlpi_fd(link->dlpihdl)) == -1) {
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("i", fd));
++}
++
++PyDoc_STRVAR(get_linkname_doc,
++    "get_linkname() -> string\n"
++    "\n"
++    "Returns the name of the link.\n"
++    "See dlpi_linkname(3DLPI).\n"
++);
++static PyObject *
++link_get_linkname(pylink_t *link)
++{
++	const char *name = NULL;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((name = dlpi_linkname(link->dlpihdl)) == NULL) {
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("s", name));
++}
++
++PyDoc_STRVAR(get_bcastaddr_doc,
++    "get_bcastaddr() -> string, or None\n"
++    "\n"
++    "Returns the broadcast address of the link.\n"
++    "Returns None if the broadcast address is empty.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_bcastaddr(pylink_t *link)
++{
++	char *addr[DLPI_PHYSADDR_MAX];
++	size_t addrlen = 0;
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	if (info.di_bcastaddrlen == 0) {
++		Py_INCREF(Py_None);
++		return (Py_None);
++	}
++
++	return (Py_BuildValue("s#", info.di_bcastaddr, info.di_bcastaddrlen));
++}
++
++PyDoc_STRVAR(get_physaddr_doc,
++    "get_physaddr(addrtype) -> string, or None\n"
++    "\n"
++    "Addrtype can be any one of the value listed below:\n"
++    "FACT_PHYS_ADDR    Factory physical address\n"
++    "CURR_PHYS_ADDR    Current physical address\n"
++    "Returns the corresponding physical address of the link.\n"
++    "See dlpi_get_physaddr(3DLPI).\n"
++);
++static PyObject *
++link_get_physaddr(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	char *addr[DLPI_PHYSADDR_MAX];
++	size_t addrlen = DLPI_PHYSADDR_MAX;
++	static char *keywords[] = {"addrtype", NULL};
++	uint_t type;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "I", keywords, &type))
++		return (NULL);
++
++	if ((rval = dlpi_get_physaddr(link->dlpihdl, type, addr, &addrlen)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("s#", addr, addrlen));
++}
++
++PyDoc_STRVAR(set_physaddr_doc,
++    "set_physaddr(address) -> None\n"
++    "\n"
++    "Sets the physical address of the link.\n"
++    "See dlpi_set_physaddr(3DLPI).\n"
++);
++static PyObject *
++link_set_physaddr(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	char *addr = NULL;
++	size_t addrlen = 0;
++	static char *keywords[] = {"address", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s#", keywords,
++	    &addr, &addrlen))
++		return (NULL);
++
++	if ((rval = dlpi_set_physaddr(link->dlpihdl, DL_CURR_PHYS_ADDR,
++	    addr, addrlen)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(promiscon_doc,
++    "promiscon([level]) -> None\n"
++    "\n"
++    "Enables promiscuous mode for the link at levels:\n"
++    "PROMISC_PHYS     Promiscuous mode at the physical level(default)\n"
++    "PROMISC_SAP      Promiscuous mode at the SAP level\n"
++    "PROMISC_MULTI    Promiscuous mode for all multicast addresses\n"
++    "\n"
++    "The level modifier (OR'd with level) is:\n"
++    "PROMISC_NOLOOP   Do not loopback messages to the client (Solaris only)\n"
++    "See dlpi_promiscon(3DLPI).\n"
++);
++static PyObject *
++link_promiscon(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	uint_t level = DL_PROMISC_PHYS;
++	static char *keywords[] = {"level", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|I", keywords, &level))
++		return (NULL);
++
++	if ((rval = dlpi_promiscon(link->dlpihdl, level)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(promiscoff_doc,
++    "promiscoff([level]) -> None\n"
++    "\n"
++    "Disables promiscuous mode for the link at levels:\n"
++    "PROMISC_PHYS     Promiscuous mode at the physical level(default)\n"
++    "PROMISC_SAP      Promiscuous mode at the SAP level\n"
++    "PROMISC_MULTI    Promiscuous mode for all multicast addresses\n"
++    "\n"
++    "The level modifier (OR'd with level) is:\n"
++    "PROMISC_NOLOOP   Do not loopback messages to the client (Solaris only)\n"
++    "See dlpi_promiscoff(3DLPI).\n"
++);
++static PyObject *
++link_promiscoff(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	uint_t level = DL_PROMISC_PHYS;
++	static char *keywords[] = {"level", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|I", keywords, &level))
++		return (NULL);
++
++	if ((rval = dlpi_promiscoff(link->dlpihdl, level)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(get_timeout_doc,
++    "get_timeout() -> int\n"
++    "\n"
++    "Returns current time out value of the link.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_timeout(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("i", info.di_timeout));
++}
++
++PyDoc_STRVAR(get_mactype_doc,
++    "get_mactype() -> unsigned char\n"
++    "\n"
++    "Returns MAC type of the link.\n"
++    "See <sys/dlpi.h> for the list of possible MAC types.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_mactype(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("B", info.di_mactype));
++}
++
++PyDoc_STRVAR(set_timeout_doc,
++    "set_timeout(timeout) -> None\n"
++    "\n"
++    "Sets time out value of the link (default value: DEF_TIMEOUT).\n"
++    "See dlpi_set_timeout(3DLPI).\n"
++);
++static PyObject *
++link_set_timeout(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	int timeout = DLPI_DEF_TIMEOUT;
++	static char *keywords[] = {"timeout", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", keywords, &timeout))
++		return (NULL);
++
++	if ((rval = dlpi_set_timeout(link->dlpihdl, timeout)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(get_sdu_doc,
++    "get_sdu() -> (unsigned int, unsigned int)\n"
++    "\n"
++    "Returns (min sdu, max sdu).\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_sdu(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("II", info.di_min_sdu, info.di_max_sdu));
++}
++
++PyDoc_STRVAR(get_state_doc,
++    "get_state() -> unsigned int\n"
++    "\n"
++    "Returns current state of the link (either UNBOUND or IDLE).\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_state(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I", info.di_state));
++}
++
++PyDoc_STRVAR(get_qos_select_doc,
++    "get_qos_select() -> (unsigned int, int, int, int)\n"
++    "\n"
++    "Returns (qos type, trans delay, priority, residul err).\n"
++    "Unsupported QOS parameters are set to UNKNOWN.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_qos_select(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("Iiiii",
++	    info.di_qos_sel.dl_qos_type,
++	    info.di_qos_sel.dl_trans_delay,
++	    info.di_qos_sel.dl_priority,
++	    info.di_qos_sel.dl_residual_error));
++}
++
++PyDoc_STRVAR(get_qos_range_doc,
++    "get_qos_range() -> \n"
++    "	(unsigned int, (int, int), (int, int), (int, int), int)\n"
++    "\n"
++    "Returns (qos type, (trans delay target, trans delay accept),\n"
++    "(min priority, max priority), (min protection, max protection),\n"
++    "residual err).\n"
++    "Unsupported QOS range values are set to UNKNOWN.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_qos_range(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I(ii)(ii)(ii)i",
++	    info.di_qos_range.dl_qos_type,
++	    info.di_qos_range.dl_trans_delay.dl_target_value,
++	    info.di_qos_range.dl_trans_delay.dl_accept_value,
++	    info.di_qos_range.dl_priority.dl_min,
++	    info.di_qos_range.dl_priority.dl_max,
++	    info.di_qos_range.dl_protection.dl_min,
++	    info.di_qos_range.dl_protection.dl_max,
++	    info.di_qos_range.dl_residual_error));
++}
++
++static PyMethodDef pylink_methods[] = {
++	{"bind", (PyCFunction)link_bind, METH_VARARGS|METH_KEYWORDS, bind_doc},
++	{"unbind", (PyCFunction)link_unbind, METH_NOARGS, unbind_doc},
++	{"send", (PyCFunction)link_send, METH_VARARGS|METH_KEYWORDS,
++	    send_doc},
++	{"recv", (PyCFunction)link_recv, METH_VARARGS|METH_KEYWORDS,
++	    recv_doc},
++	{"disabmulti", (PyCFunction)link_disabmulti, METH_VARARGS|METH_KEYWORDS,
++	    disabmulti_doc},
++	{"enabmulti", (PyCFunction)link_enabmulti, METH_VARARGS|METH_KEYWORDS,
++	    enabmulti_doc},
++	{"enabnotify", (PyCFunction)link_enabnotify,
++	    METH_VARARGS|METH_KEYWORDS, enabnotify_doc},
++	{"disabnotify", (PyCFunction)link_disabnotify,
++	    METH_VARARGS|METH_KEYWORDS, disabnotify_doc},
++	{"get_fd", (PyCFunction)link_get_fd, METH_NOARGS, get_fd_doc},
++	{"get_sap", (PyCFunction)link_get_sap, METH_NOARGS, get_sap_doc},
++	{"get_mactype", (PyCFunction)link_get_mactype, METH_NOARGS,
++	    get_mactype_doc},
++	{"get_linkname", (PyCFunction)link_get_linkname, METH_NOARGS,
++	    get_linkname_doc},
++	{"get_bcastaddr", (PyCFunction)link_get_bcastaddr, METH_NOARGS,
++	    get_bcastaddr_doc},
++	{"get_physaddr", (PyCFunction)link_get_physaddr,
++	    METH_VARARGS|METH_KEYWORDS, get_physaddr_doc},
++	{"set_physaddr", (PyCFunction)link_set_physaddr,
++	    METH_VARARGS|METH_KEYWORDS, set_physaddr_doc},
++	{"promiscon", (PyCFunction)link_promiscon, METH_VARARGS|METH_KEYWORDS,
++	    promiscon_doc},
++	{"promiscoff", (PyCFunction)link_promiscoff, METH_VARARGS|METH_KEYWORDS,
++	    promiscoff_doc},
++	{"get_timeout", (PyCFunction)link_get_timeout, METH_NOARGS,
++	    get_timeout_doc},
++	{"set_timeout", (PyCFunction)link_set_timeout,
++	    METH_VARARGS|METH_KEYWORDS, set_timeout_doc},
++	{"get_sdu", (PyCFunction)link_get_sdu, METH_NOARGS, get_sdu_doc},
++	{"get_state", (PyCFunction)link_get_state, METH_NOARGS,
++	    get_state_doc},
++	{"get_qos_select", (PyCFunction)link_get_qos_select, METH_NOARGS,
++	    get_qos_select_doc},
++	{"get_qos_range", (PyCFunction)link_get_qos_range, METH_NOARGS,
++	    get_qos_range_doc},
++	{NULL, NULL}
++};
++
++static PyTypeObject pylink_type = {
++	PyVarObject_HEAD_INIT(NULL, 0)	/* Must fill in type value later */
++	"dlpi.link",				/* tp_name */
++	sizeof(pylink_t),			/* tp_basicsize */
++	0,					/* tp_itemsize */
++	(destructor)link_dealloc,		/* tp_dealloc */
++	0,					/* tp_print */
++	0,					/* tp_getattr */
++	0,					/* tp_setattr */
++	0,					/* tp_reserved */
++	0,					/* tp_repr */
++	0,					/* tp_as_number */
++	0,					/* tp_as_sequence */
++	0,					/* tp_as_mapping */
++	0,					/* tp_hash */
++	0,					/* tp_call */
++	0,					/* tp_str */
++	0,					/* tp_getattro */
++	0,					/* tp_setattro */
++	0,					/* tp_as_buffer */
++	Py_TPFLAGS_DEFAULT,			/* tp_flags */
++	link_doc,				/* tp_doc */
++	0,					/* tp_traverse */
++	0,					/* tp_clear */
++	0,					/* tp_richcompare */
++	0,					/* tp_weaklistoffset */
++	0,					/* tp_iter */
++	0,					/* tp_iternext */
++	pylink_methods,				/* tp_methods */
++	0,					/* tp_members */
++	0,					/* tp_getset */
++	0,					/* tp_base */
++	0,					/* tp_dict */
++	0,					/* tp_descr_get */
++	0,					/* tp_descr_set */
++	0,					/* tp_dictoffset */
++	(initproc)link_init,			/* tp_init */
++	0,					/* tp_alloc */
++	PyType_GenericNew,			/* tp_new */
++	0,					/* tp_free */
++	0,					/* tp_is_gc */
++};
++
++PyDoc_STRVAR(arptype_doc,
++    "arptype(arptype) -> unsigned int\n"
++    "\n"
++    "Converts a DLPI MAC type to an ARP hardware type defined\n"
++    " in <netinet/arp.h>\n"
++    "See dlpi_arptype(3DLPI)\n"
++);
++static PyObject *
++arptype(PyObject *dlpi, PyObject *args, PyObject *kwds)
++{
++	static char *keywords[] = {"arptype", NULL};
++	uint_t dlpityp, arptyp;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "I", keywords, &dlpityp))
++		return (NULL);
++
++	if ((arptyp = dlpi_arptype(dlpityp)) == 0) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I", arptyp));
++}
++
++PyDoc_STRVAR(iftype_doc,
++    "iftype(iftype) -> unsigned int\n"
++    "\n"
++    "Converts a DLPI MAC type to a BSD socket interface type\n"
++    "defined in <net/if_types.h>\n"
++    "See dlpi_iftype(3DLPI)\n"
++);
++static PyObject *
++iftype(PyObject *dlpi, PyObject *args, PyObject *kwds)
++{
++	static char *keywords[] = {"iftype", NULL};
++	uint_t dlpityp, iftyp;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "I", keywords, &dlpityp))
++		return (NULL);
++
++	if ((iftyp = dlpi_iftype(dlpityp)) == 0) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I", iftyp));
++}
++
++PyDoc_STRVAR(mactype_doc,
++    "mactype(mactype) -> string\n"
++    "\n"
++    "Returns a string that describes the specified mactype.\n"
++    "Valid mac types are defined in <sys/dlpi.h>.\n"
++    "See dlpi_mactype(3DLPI)\n"
++);
++static PyObject *
++mactype(PyObject *dlpi, PyObject *args, PyObject *kwds)
++{
++	static char *keywords[] = {"mactype", NULL};
++	uint_t mactyp;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "I", keywords, &mactyp))
++		return (NULL);
++
++	return (Py_BuildValue("s", dlpi_mactype(mactyp)));
++}
++
++static boolean_t
++link_walker(const char *name, void *arg)
++{
++	PyObject *linkname;
++	PyObject *list = (PyObject *)arg;
++
++	if ((list == NULL) || !PyList_Check(list))
++		return (_B_FALSE);
++
++	linkname = Py_BuildValue("s", name);
++	if (PyList_Append(list, linkname) == -1)
++		return (_B_TRUE);
++
++	Py_DECREF(linkname);
++	return (_B_FALSE);
++}
++
++PyDoc_STRVAR(listlink_doc,
++    "listlink() -> list\n"
++    "\n"
++    "Returns a list containing link names of all links on the system.\n"
++);
++static PyObject *
++listlink(PyObject *dlpi)
++{
++	PyObject *list;
++
++	if ((list = PyList_New(0)) == NULL)
++		return (NULL);
++
++	dlpi_walk(link_walker, list, 0);
++	return (list);
++}
++
++static PyMethodDef dlpi_methods[] = {
++	{"arptype", (PyCFunction)arptype, METH_VARARGS|METH_KEYWORDS,
++	    arptype_doc},
++	{"iftype", (PyCFunction)iftype, METH_VARARGS|METH_KEYWORDS,
++	    iftype_doc},
++	{"mactype", (PyCFunction)mactype, METH_VARARGS|METH_KEYWORDS,
++	    mactype_doc},
++	{"listlink", (PyCFunction)listlink, METH_NOARGS, listlink_doc},
++	{NULL}
++};
++
++PyMODINIT_FUNC
++PyInit_dlpi (void)
++{
++	PyObject *mod;
++
++	if (PyType_Ready(&pylink_type) < 0)
++		return NULL;
++
++	static struct PyModuleDef moduledef = {
++	    PyModuleDef_HEAD_INIT,
++	    "dlpi",
++	    NULL,
++	    -1,
++	    dlpi_methods,
++	    NULL,
++	    NULL,
++	    NULL,
++	    NULL,
++	};
++
++	mod = PyModule_Create(&moduledef);
++	if (mod == NULL)
++		return NULL;
++
++	dlpi_err = PyErr_NewException("dlpi.error", NULL, NULL);
++	if (dlpi_err == NULL)
++		return NULL;
++	PyModule_AddObject(mod, "error", dlpi_err);
++
++	Py_INCREF(&pylink_type);
++	PyModule_AddObject(mod, "link", (PyObject *)&pylink_type);
++	PyModule_AddIntConstant(mod, "PASSIVE", DLPI_PASSIVE);
++	PyModule_AddIntConstant(mod, "RAW", DLPI_RAW);
++	PyModule_AddIntConstant(mod, "NATIVE", DLPI_NATIVE);
++	PyModule_AddIntConstant(mod, "ANY_SAP", DLPI_ANY_SAP);
++	PyModule_AddIntConstant(mod, "DEF_TIMEOUT", DLPI_DEF_TIMEOUT);
++	PyModule_AddIntConstant(mod, "NOTE_LINK_DOWN", DL_NOTE_LINK_DOWN);
++	PyModule_AddIntConstant(mod, "NOTE_LINK_UP", DL_NOTE_LINK_UP);
++	PyModule_AddIntConstant(mod, "NOTE_PHYS_ADDR", DL_NOTE_PHYS_ADDR);
++	PyModule_AddIntConstant(mod, "NOTE_SDU_SIZE", DL_NOTE_SDU_SIZE);
++	PyModule_AddIntConstant(mod, "NOTE_SPEED", DL_NOTE_SPEED);
++	PyModule_AddIntConstant(mod, "NOTE_PROMISC_ON_PHYS",
++	    DL_NOTE_PROMISC_ON_PHYS);
++	PyModule_AddIntConstant(mod, "NOTE_PROMISC_OFF_PHYS",
++	    DL_NOTE_PROMISC_OFF_PHYS);
++	PyModule_AddIntConstant(mod, "FACT_PHYS_ADDR", DL_FACT_PHYS_ADDR);
++	PyModule_AddIntConstant(mod, "CURR_PHYS_ADDR", DL_CURR_PHYS_ADDR);
++	PyModule_AddIntConstant(mod, "PROMISC_PHYS", DL_PROMISC_PHYS);
++	PyModule_AddIntConstant(mod, "PROMISC_SAP", DL_PROMISC_SAP);
++	PyModule_AddIntConstant(mod, "PROMISC_MULTI", DL_PROMISC_MULTI);
++	/* Not in illumos: PyModule_AddIntConstant(mod, "PROMISC_NOLOOP", DL_PROMISC_NOLOOP); */
++	PyModule_AddIntConstant(mod, "UNKNOWN", DL_UNKNOWN);
++	PyModule_AddIntConstant(mod, "UNBOUND", DL_UNBOUND);
++	PyModule_AddIntConstant(mod, "IDLE", DL_IDLE);
++	PyModule_AddIntConstant(mod, "SYSERR", DL_SYSERR);
++
++	return mod;
++}
+--- Python-3.9.1/setup.py
++++ Python-3.9.1/setup.py
+@@ -1821,6 +1821,12 @@ class PyBuildExt(build_ext):
+         if ucred_inc is not None and tsol_inc is not None:
+             self.add(Extension('ucred', ['ucred.c'], libraries=['tsol']))
+ 
++    def detect_dlpi(self):
++        # dlpi module (Solaris)
++        dlpi_inc = find_file('libdlpi.h', [], self.inc_dirs)
++        if dlpi_inc is not None:
++            self.add(Extension('dlpi', ['dlpimodule.c'], libraries=['dlpi']))
++
+     def detect_modules(self):
+         self.configure_compiler()
+         self.init_inc_lib_dirs()
+@@ -1842,6 +1848,7 @@ class PyBuildExt(build_ext):
+         self.detect_multibytecodecs()
+         self.detect_decimal()
+         self.detect_ucred()
++        self.detect_dlpi()
+         self.detect_ctypes()
+         self.detect_multiprocessing()
+         if not self.detect_tkinter():
+--- Python-3.9.1/Lib/test/dlpitest.py
++++ Python-3.9.1/Lib/test/dlpitest.py
+@@ -0,0 +1,96 @@
++#!/usr/bin/python3.7
++
++import dlpi
++import sys
++import time
++import struct
++
++#test listlink
++linklist = dlpi.listlink()
++print("Found %d links:" % len(linklist))
++print(linklist)
++
++#pick up the first data link for below testing
++linkname = linklist[0]
++
++#open link
++print("opening link: " + linkname + "...")
++testlink = dlpi.link(linkname)
++
++#read some info of testlink
++print("linkname is %s" % testlink.get_linkname())
++print("link fd is %d" % testlink.get_fd())
++mactype = testlink.get_mactype()
++print("dlpi mactype is %d" % mactype)
++print("after convert:")
++print("\tmactype is %s" % dlpi.mactype(mactype))
++print("\tiftype is %d" % dlpi.iftype(mactype))
++print("\tarptype is %d" % dlpi.arptype(mactype))
++bcastaddr = testlink.get_bcastaddr()
++print("broadcast addr is: ", end=' ')
++print(struct.unpack("BBBBBB",bcastaddr))
++physaddr = testlink.get_physaddr(dlpi.FACT_PHYS_ADDR)
++print("factory physical address is: ", end=' ')
++print(struct.unpack("BBBBBB",physaddr))
++print("current timeout value is %d" % testlink.get_timeout())
++print("sdu is:", end=' ')
++print(testlink.get_sdu())
++print("qos select is:", end=' ')
++print(testlink.get_qos_select())
++print("qos range is:", end=' ')
++print(testlink.get_qos_range())
++
++#set some config value of testlink and read them again
++print("setting current physiacal addr to aa:0:10:13:27:5")
++testlink.set_physaddr('\xaa\0\x10\x13\x27\5')
++physaddr = testlink.get_physaddr(dlpi.CURR_PHYS_ADDR)
++print("current physical addr is: ", end=' ')
++print(struct.unpack("BBBBBB",physaddr))
++print("set timeout value to 6...")
++testlink.set_timeout(6)
++print("timeout value is %d" % testlink.get_timeout())
++
++#test enable/disable multicast
++print("enable/disable multicast address 1:0:5e:0:0:5")
++testlink.enabmulti('\1\0\x5e\0\0\5')
++testlink.disabmulti('\1\0\x5e\0\0\5')
++
++#test bind
++print("binding to SAP 0x9000...")
++testlink.bind(0x9000)
++print("sap is %x" % testlink.get_sap())
++print("state is: %d"  % testlink.get_state())
++
++#test send
++print("sending broadcast loopback packet...")
++testlink.send(bcastaddr, '\0\1\2\3\4\5')
++
++#test notify functionality
++arg = "notification callback arg"
++def notify(arg, notes, value):
++	print("NOTE_PROMISC_ON_PHYS notification received with arg: '%s'" % arg)
++print("enabled notification on NOTE_PROMISC_ON_PHYS")
++id = testlink.enabnotify(dlpi.NOTE_PROMISC_ON_PHYS, notify, arg) #enable notification
++testlink.promiscon() #trigger the event (will be seen while receiving pkt below)
++
++#test receive
++print("testing receiving...")
++try:
++	testlink.recv(0, 0) #should see NOTE_PROMISC_ON_PHYS event here
++except dlpi.error as err:
++	errnum, errinfo = err
++	if errnum == 10006:
++		pass #timeout error is expected here
++	else: #test fails if reach here
++		print("test failed", end=' ')
++		print(errnum, end=' ')
++		print(err)
++
++testlink.promiscoff()
++testlink.disabnotify(id) #disable notification
++
++#test unbind
++print("unbinding...")
++testlink.unbind()
++print("sap is %x" % testlink.get_sap())
++print("state is: %d"  % testlink.get_state())
diff --git a/components/python/python39/patches/05-encoding-alias.patch b/components/python/python39/patches/05-encoding-alias.patch
new file mode 100644
index 0000000..3b803b3d
--- /dev/null
+++ b/components/python/python39/patches/05-encoding-alias.patch
@@ -0,0 +1,37 @@
+Add missing encoding aliases.  It may be contributed upstream at some point,
+but the suitability (or lack thereof) has not yet been determined.
+
+--- Python-3.9.0/Lib/encodings/aliases.py
++++ Python-3.9.0/Lib/encodings/aliases.py
+@@ -79,6 +79,7 @@ aliases = {
+ 
+     # cp1251 codec
+     '1251'               : 'cp1251',
++    'ansi_1251'          : 'cp1251',
+     'windows_1251'       : 'cp1251',
+ 
+     # cp1252 codec
+@@ -233,6 +234,7 @@ aliases = {
+     'u_jis'              : 'euc_jp',
+ 
+     # euc_kr codec
++    '5601'               : 'euc_kr',
+     'euckr'              : 'euc_kr',
+     'korean'             : 'euc_kr',
+     'ksc5601'            : 'euc_kr',
+@@ -483,6 +485,7 @@ aliases = {
+     'shiftjis'           : 'shift_jis',
+     'sjis'               : 'shift_jis',
+     's_jis'              : 'shift_jis',
++    'pck'                : 'shift_jis',
+ 
+     # shift_jis_2004 codec
+     'shiftjis2004'       : 'shift_jis_2004',
+@@ -499,6 +502,7 @@ aliases = {
+     'tis_620_0'          : 'tis_620',
+     'tis_620_2529_0'     : 'tis_620',
+     'tis_620_2529_1'     : 'tis_620',
++    'tis620.2533'        : 'tis_620',
+     'iso_ir_166'         : 'tis_620',
+ 
+     # utf_16 codec
diff --git a/components/python/python39/patches/06-rbac.patch b/components/python/python39/patches/06-rbac.patch
new file mode 100644
index 0000000..90ba0f0
--- /dev/null
+++ b/components/python/python39/patches/06-rbac.patch
@@ -0,0 +1,1574 @@
+This patch provides Python RBAC support.  It may be contributed upstream at
+some point, but the suitability (or lack thereof) has not yet been determined.
+
+diff --git Python-2.6.4/Modules/authattr.c Python-2.6.4/Modules/authattr.c
+new file mode 100644
+--- Python-3.9.1/Modules/authattr.c
++++ Python-3.9.1/Modules/authattr.c
+@@ -0,0 +1,254 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
++ */
++
++/*
++ * RBAC Bindings for Python - auth_attr functions
++ */
++
++#include <auth_attr.h>
++#include "Python.h"
++#include "pyrbac.h"
++
++static PyObject*
++pyrbac_setauthattr(PyObject* self, PyObject* args) {
++	setauthattr();
++	return Py_None;
++}
++
++static PyObject*
++pyrbac_endauthattr(PyObject* self, PyObject* args) {
++	endauthattr();
++	return Py_None;
++}
++
++PyObject*
++pyrbac_getauthnamattr(PyObject* self, char* authname, int mode) {
++	
++
++	
++	authattr_t * ret_authattr = (mode == PYRBAC_NAM_MODE) ? getauthnam(authname) : getauthattr();
++	if (ret_authattr == NULL)
++		return Py_None;
++		
++	PyObject* kv_data = PyDict_New();
++	if (kv_data == NULL) {
++		free_authattr(ret_authattr);
++		return NULL;
++	}
++
++	if(ret_authattr->attr != NULL) {
++		int len;
++		for(len = 0; len < ret_authattr->attr->length; len++) {
++			kv_t current = ret_authattr->attr->data[len];
++
++			PyObject* set = PyList_New(NULL);
++			char* saveptr;
++			char* item = strtok_r(current.value, ",", &saveptr);
++			PyList_Append(set, PyBytes_FromString(item));
++
++			while((item = strtok_r(NULL, ",", &saveptr)) != NULL) {
++				if(PyList_Append(set, PyBytes_FromString(item)) != 0) {
++					Py_XDECREF(set);
++					Py_XDECREF(kv_data);
++					free_authattr(ret_authattr);
++					return NULL;
++				}
++			}
++			if(PyDict_SetItemString(kv_data, current.key, set)) {
++					free_authattr(ret_authattr);
++					return NULL;
++			}
++		}
++	}
++	PyObject * retval = Py_BuildValue("{s:s,s:s,s:s,s:s,s:s,s:O}",
++		"name",ret_authattr->name,
++		"res1",ret_authattr->res1,
++		"res2",ret_authattr->res2,
++		"short",ret_authattr->short_desc,
++		"long",ret_authattr->long_desc,
++		"attributes",kv_data);
++
++	free_authattr(ret_authattr);
++	return retval;
++
++}
++
++static PyObject*
++pyrbac_getauthattr(PyObject* self, PyObject* args) {
++	return(pyrbac_getauthnamattr(self, NULL, PYRBAC_ATTR_MODE));
++}
++
++static PyObject*
++pyrbac_getauthnam(PyObject* self, PyObject* args) {
++	char* name = NULL;
++	if(!PyArg_ParseTuple(args, "s:getauthnam", &name))
++		return NULL;
++	return(pyrbac_getauthnamattr(self, name, PYRBAC_NAM_MODE));
++}
++
++static PyObject *
++pyrbac_chkauthattr(PyObject* self, PyObject* args) {
++	char* authstring = NULL;
++	char* username = NULL;
++	if(!PyArg_ParseTuple(args, "ss:chkauthattr", &authstring, &username))
++		return NULL;
++	return PyBool_FromLong((long)chkauthattr(authstring, username));
++}
++
++static PyObject*
++pyrbac_authattr_next(PyObject* self, PyObject* args) {
++	PyObject* retval = pyrbac_getauthattr(self, args);
++	if( retval == Py_None ) {
++		setauthattr();
++		return NULL;
++	}
++	return retval;
++}
++static PyObject*
++pyrbac_authattr__iter__(PyObject* self, PyObject* args) {
++	return self;
++}
++
++typedef struct {
++	PyObject_HEAD
++} Authattr;
++
++static void
++Authattr_dealloc(Authattr* self) {
++	endauthattr();
++	Py_TYPE(self)->tp_free((PyObject*) self);
++}
++
++static PyObject*
++Authattr_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
++	Authattr *self;
++	self = (Authattr*)type->tp_alloc(type, 0);
++
++	return ((PyObject *) self);
++}
++
++static int
++Authattr_init(Authattr* self, PyObject *args, PyObject *kwargs) {
++	setauthattr();
++	return 0;
++}
++
++PyDoc_STRVAR(pyrbac_authattr__doc__, """provides interfaces to the auth_attr \
++database. may be iterated over to return all auth_attr entries\n\n\
++Methods provided:\n\
++setauthattr\n\
++endauthattr\n\
++getauthattr\n\
++chkauthattr\n\
++getauthnam""");
++
++PyDoc_STRVAR(pyrbac_setauthattr__doc__, 
++"\"rewinds\" the auth_attr functions to the first entry in the db. Called \
++automatically by the constructor\n\tArguments: None\n\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_endauthattr__doc__, 
++"closes the auth_attr database, cleans up storage. called automatically by \
++the destructor\n\tArguments: None\n\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_chkauthattr__doc__, "verifies if a user has a given \
++authorization.\n\tArguments: 2 Python strings, 'authname' and 'username'\n\
++\tReturns: True if the user is authorized, False otherwise");
++
++PyDoc_STRVAR(pyrbac_getauthattr__doc__, 
++"return one entry from the auth_attr database\n\
++\tArguments: None\n\
++\tReturns: a dict representing the authattr_t struct:\n\
++\t\t\"name\": Authorization Name\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"short\": Short Description\n\
++\t\t\"long\": Long Description\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value");
++
++PyDoc_STRVAR(pyrbac_getauthnam__doc__, 
++"searches the auth_attr database for a given authorization name\n\
++\tArguments: a Python string containing the auth name\n\
++\tReturns: a dict representing the authattr_t struct:\n\
++\t\t\"name\": Authorization Name\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"short\": Short Description\n\
++\t\t\"long\": Long Description\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value");
++
++static PyMethodDef Authattr_methods[] = {
++	{"setauthattr", pyrbac_setauthattr, METH_NOARGS, pyrbac_setauthattr__doc__},
++	{"endauthattr", pyrbac_endauthattr, METH_NOARGS, pyrbac_endauthattr__doc__},
++	{"chkauthattr", pyrbac_chkauthattr, METH_VARARGS, pyrbac_chkauthattr__doc__},
++	{"getauthattr", pyrbac_getauthattr, METH_NOARGS, pyrbac_getauthattr__doc__},
++	{"getauthnam", pyrbac_getauthnam, METH_VARARGS, pyrbac_getauthnam__doc__},
++	{NULL, NULL}
++};
++
++PyTypeObject AuthattrType = {
++	PyVarObject_HEAD_INIT(NULL, 0)
++	"rbac.authattr",              /*tp_name*/
++	sizeof(Authattr),             /*tp_basicsize*/
++	0,                            /*tp_itemsize*/
++	(destructor)Authattr_dealloc, /*tp_dealloc*/
++	0,                            /*tp_print*/
++	0,                            /*tp_getattr*/
++	0,                            /*tp_setattr*/
++	0,                            /*tp_reserved*/
++	0,                            /*tp_repr*/
++	0,                            /*tp_as_number*/
++	0,                            /*tp_as_sequence*/
++	0,                            /*tp_as_mapping*/
++	0,                            /*tp_hash */
++	0,                            /*tp_call*/
++	0,                            /*tp_str*/
++	0,                            /*tp_getattro*/
++	0,                            /*tp_setattro*/
++	0,                            /*tp_as_buffer*/
++	Py_TPFLAGS_DEFAULT |
++	Py_TPFLAGS_BASETYPE,          /*tp_flags*/
++	pyrbac_authattr__doc__,       /* tp_doc */
++	0,		              /* tp_traverse */
++	0,		              /* tp_clear */
++	0,		              /* tp_richcompare */
++	0,		              /* tp_weaklistoffset */
++	pyrbac_authattr__iter__,      /* tp_iter */
++	pyrbac_authattr_next,         /* tp_iternext */
++	Authattr_methods,             /* tp_methods */
++	0,                            /* tp_members */
++	0,                            /* tp_getset */
++	0,                            /* tp_base */
++	0,                            /* tp_dict */
++	0,                            /* tp_descr_get */
++	0,                            /* tp_descr_set */
++	0,                            /* tp_dictoffset */
++	(initproc)Authattr_init,      /* tp_init */
++	0,                            /* tp_alloc */
++	Authattr_new,                 /* tp_new */
++	0,                            /* tp_free */
++	0,                            /* tp_is_gc */
++};
+--- Python-3.9.1/Modules/execattr.c
++++ Python-3.9.1/Modules/execattr.c
+@@ -0,0 +1,305 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
++ */
++
++/*
++ * RBAC Bindings for Python - exec_attr functions
++ */
++
++#include <exec_attr.h>
++#include "Python.h"
++#include "pyrbac.h"
++
++static PyObject *
++pyrbac_setexecattr(PyObject* self, PyObject* args) {
++	setexecattr();
++	return Py_None;
++}
++
++static PyObject *
++pyrbac_endexecattr(PyObject* self, PyObject* args) {
++	endexecattr();
++	return Py_None;
++}
++
++PyObject *
++pyrbac_getexecuserprofattr(PyObject* self, char* userprofname, char* type, char* id, int mode) {
++
++	PyObject* ep_data = (mode == PYRBAC_ATTR_MODE) ? NULL : PyList_New(0);
++	
++	if (ep_data == NULL && mode != PYRBAC_ATTR_MODE )
++		return NULL;
++	
++	execattr_t *execprof;
++	if (mode == PYRBAC_USER_MODE)
++		execprof = getexecuser(userprofname, type, id, GET_ALL);
++	else if (mode == PYRBAC_PROF_MODE)
++		execprof = getexecprof(userprofname, type, id, GET_ALL);
++	else if (mode == PYRBAC_ATTR_MODE)
++		execprof = getexecattr();
++	else
++		return NULL;
++
++	if (execprof == NULL)
++		return Py_None;
++	
++	execattr_t *execprof_head = execprof;
++
++	while(execprof != NULL) {
++		
++		PyObject* kv_data = PyDict_New();
++
++		if(execprof->attr != NULL) {
++			int len;
++			for(len = 0; len < execprof->attr->length; len++) {
++				kv_t current = execprof->attr->data[len];
++
++				PyObject* set = PyList_New(NULL);
++				char* saveptr;
++				char* item = strtok_r(current.value, ",", &saveptr);
++				PyList_Append(set, PyBytes_FromString(item));
++
++				while((item = strtok_r(NULL, ",", &saveptr)) != NULL) {
++					if(PyList_Append(set, PyBytes_FromString(item)) != 0) {
++						Py_XDECREF(set);
++						Py_XDECREF(kv_data);
++						free_execattr(execprof_head);
++						return NULL;
++					}
++				}
++				if(PyDict_SetItemString(kv_data, current.key, set)) {
++						free_execattr(execprof_head);
++						return NULL;
++				}
++			}
++		}
++		PyObject* entry = Py_BuildValue("{s:s,s:s,s:s,s:s,s:s,s:s,s:O}",
++			"name", execprof->name,
++			"type", execprof->type,
++			"policy", execprof->policy,
++			"res1", execprof->res1,
++			"res2", execprof->res2,
++			"id", execprof->id,
++			"attributes", kv_data);
++		
++		if (entry == NULL) {
++			Py_XDECREF(kv_data);
++			free_execattr(execprof_head);
++			return NULL;
++		}
++		
++		if (mode == PYRBAC_ATTR_MODE) {
++			free_execattr(execprof_head);
++			return(entry);
++		}
++		PyList_Append(ep_data, entry);
++		execprof = execprof->next;
++	}
++
++	free_execattr(execprof_head);
++	return(ep_data);
++ 
++}
++
++static PyObject *
++pyrbac_getexecuser(PyObject* self, PyObject* args) {
++	char* username = NULL;
++	char* type = NULL;
++	char* id = NULL;
++	
++	if(!PyArg_ParseTuple(args, "sss:getexecuser", &username, &type, &id))
++		return NULL;
++
++	return (pyrbac_getexecuserprofattr(self, username, type, id, PYRBAC_USER_MODE));
++}
++
++static PyObject *
++pyrbac_getexecprof(PyObject* self, PyObject* args) {
++
++	char* profname = NULL;
++	char* type = NULL;
++	char* id = NULL;
++	
++	if(!PyArg_ParseTuple(args, "sss:getexecprof", &profname, &type, &id))
++		return NULL;
++
++	return (pyrbac_getexecuserprofattr(self, profname, type, id, PYRBAC_PROF_MODE));
++}
++
++static PyObject*
++pyrbac_getexecattr(PyObject* self, PyObject* args) {
++	return pyrbac_getexecuserprofattr(self, NULL, NULL, NULL, PYRBAC_ATTR_MODE);
++}
++
++static PyObject*
++pyrbac_execattr_next(PyObject* self, PyObject* args) {
++	PyObject* retval = pyrbac_getexecattr(self, args);
++	if( retval == Py_None ) {
++		setexecattr();
++		return NULL;
++	}
++	return retval;
++}
++static PyObject*
++pyrbac_execattr__iter__(PyObject* self, PyObject* args) {
++	return self;
++}
++
++typedef struct {
++	PyObject_HEAD
++} Execattr;
++
++static void
++Execattr_dealloc(Execattr* self) {
++	endexecattr();
++	Py_TYPE(self)->tp_free((PyObject*) self);
++}
++
++static PyObject*
++Execattr_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
++	Execattr *self;
++	self = (Execattr*)type->tp_alloc(type, 0);
++
++	return ((PyObject *) self);
++}
++
++static int
++Execattr_init(Execattr* self, PyObject *args, PyObject *kwargs) {
++	setexecattr();
++	return 0;
++}
++
++PyDoc_STRVAR(pyrbac_execattr__doc__, "provides functions for \
++interacting with the execution profiles database. May be iterated over to \
++enumerate exec_attr(4) entries\n\n\
++Methods provided:\n\
++setexecattr\n\
++endexecattr\n\
++getexecattr\n\
++getexecprof\n\
++getexecuser");
++
++
++PyDoc_STRVAR(pyrbac_setexecattr__doc__,
++"\"rewinds\" the exec_attr functions to the first entry in the db. Called \
++automatically by the constructor.\n\
++\tArguments: None\
++\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_endexecattr__doc__, 
++"closes the exec_attr database, cleans up storage. called automatically by \
++the destructor.\n\
++\tArguments: None\
++\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_getexecuser__doc__, "corresponds with getexecuser(3SECDB)\
++\nTakes: \'username\', \'type\', \'id\'\n\
++Return: a single exec_attr entry\n\
++\tArguments: None\n\
++\tReturns: a dict representation of an execattr_t struct:\n\
++\t\t\"name\": Authorization Name\n\
++\t\t\"type\": Profile Type\n\
++\t\t\"policy\": Policy attributes are relevant in\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"id\": unique identifier\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as\
++either a list or a string depending on value");
++
++PyDoc_STRVAR(pyrbac_getexecprof__doc__, "corresponds with getexecprof(3SECDB)\
++\nTakes: \'profile name\', \'type\', \'id\'\n\
++\tReturns: a dict representation of an execattr_t struct:\n\
++\t\t\"name\": Authorization Name\n\
++\t\t\"type\": Profile Type\n\
++\t\t\"policy\": Policy attributes are relevant in\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"id\": unique identifier\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as\
++either a list or a string depending on value");
++
++PyDoc_STRVAR(pyrbac_getexecattr__doc__, "corresponds with getexecattr(3SECDB)\
++\nTakes 0 arguments\n\
++\tReturns: a dict representation of an execattr_t struct:\n\
++\t\t\"name\": Authorization Name\n\
++\t\t\"type\": Profile Type\n\
++\t\t\"policy\": Policy attributes are relevant in\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"id\": unique identifier\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as\
++either a list or a string depending on value");
++
++static PyMethodDef Execattr_methods[] = {
++	{"setexecattr", pyrbac_setexecattr, METH_NOARGS, pyrbac_setexecattr__doc__},
++	{"endexecattr", pyrbac_endexecattr, METH_NOARGS, pyrbac_endexecattr__doc__},
++	{"getexecprof", pyrbac_getexecprof, METH_VARARGS, pyrbac_getexecprof__doc__},	
++	{"getexecuser", pyrbac_getexecuser, METH_VARARGS, pyrbac_getexecuser__doc__},
++	{"getexecattr", pyrbac_getexecattr, METH_NOARGS, pyrbac_getexecattr__doc__},
++	{NULL, NULL}
++};
++
++PyTypeObject ExecattrType = {
++	PyVarObject_HEAD_INIT(NULL, 0)
++	"rbac.execattr",              /*tp_name*/
++	sizeof(Execattr),             /*tp_basicsize*/
++	0,                            /*tp_itemsize*/
++	(destructor)Execattr_dealloc, /*tp_dealloc*/
++	0,                            /*tp_print*/
++	0,                            /*tp_getattr*/
++	0,                            /*tp_setattr*/
++	0,                            /*tp_reserved*/
++	0,                            /*tp_repr*/
++	0,                            /*tp_as_number*/
++	0,                            /*tp_as_sequence*/
++	0,                            /*tp_as_mapping*/
++	0,                            /*tp_hash */
++	0,                            /*tp_call*/
++	0,                            /*tp_str*/
++	0,                            /*tp_getattro*/
++	0,                            /*tp_setattro*/
++	0,                            /*tp_as_buffer*/
++	Py_TPFLAGS_DEFAULT |
++	Py_TPFLAGS_BASETYPE,          /*tp_flags*/
++	pyrbac_execattr__doc__,       /* tp_doc */
++	0,		              /* tp_traverse */
++	0,		              /* tp_clear */
++	0,		              /* tp_richcompare */
++	0,		              /* tp_weaklistoffset */
++	pyrbac_execattr__iter__,      /* tp_iter */
++	pyrbac_execattr_next,         /* tp_iternext */
++	Execattr_methods,             /* tp_methods */
++	0,                            /* tp_members */
++	0,                            /* tp_getset */
++	0,                            /* tp_base */
++	0,                            /* tp_dict */
++	0,                            /* tp_descr_get */
++	0,                            /* tp_descr_set */
++	0,                            /* tp_dictoffset */
++	(initproc)Execattr_init,      /* tp_init */
++	0,                            /* tp_alloc */
++	Execattr_new,                 /* tp_new */
++	0,                            /* tp_free */
++	0,                            /* tp_is_gc */
++};
+--- Python-3.9.1/Modules/privileges.c
++++ Python-3.9.1/Modules/privileges.c
+@@ -0,0 +1,237 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
++ */
++
++/*
++ * privileges(5) bindings for Python
++ */
++
++#include <priv.h>
++#include "Python.h"
++
++static PyObject *
++pyprivileges_setppriv( PyObject *self, PyObject *args) {
++	priv_op_t op = -1 ; 
++	priv_ptype_t which = NULL;
++
++	PyObject* set_list = NULL;
++
++	priv_set_t * set = NULL;
++
++	if(!PyArg_ParseTuple(args, "iiO:setppriv", &op, &which, &set_list))
++		return NULL;
++	
++	if((op != PRIV_ON && op != PRIV_OFF && op != PRIV_SET) ||
++		(which != PRIV_PERMITTED && which != PRIV_EFFECTIVE &&
++		which != PRIV_INHERITABLE && which != PRIV_LIMIT))
++		return NULL;
++	
++	PyObject* set_string = PyList_GetItem(set_list, 0);
++	int i;
++	for (i = 1; i < PyList_Size(set_list); ++i) {
++		PyBytes_Concat(&set_string, PyBytes_FromString(","));
++		PyBytes_Concat(&set_string, PyList_GetItem(set_list, i));
++	}
++
++	set = priv_str_to_set(PyBytes_AsString(set_string), ",", NULL );
++
++	if ( set == NULL )
++		return NULL;
++
++	long ret = (long) setppriv(op, which, set);
++	priv_freeset(set);	
++	// Python inverts true & false
++	if(ret)
++		Py_RETURN_FALSE;
++	
++	Py_RETURN_TRUE;
++}
++
++static PyObject *
++pyprivileges_getppriv( PyObject *self, PyObject *args) {
++
++	char* set_str = NULL;
++	priv_ptype_t which = NULL;
++	priv_set_t * set = priv_allocset();
++	if (set == NULL)
++		return NULL;
++
++	if(!PyArg_ParseTuple(args, "i:getppriv", &which))
++		return NULL;
++
++	if (which != PRIV_PERMITTED && which != PRIV_EFFECTIVE &&
++	which != PRIV_INHERITABLE && which != PRIV_LIMIT)
++		return NULL;
++
++	if (getppriv(which, set) != 0)
++		return NULL;
++	
++	set_str = priv_set_to_str(set, ',', PRIV_STR_LIT);
++	priv_freeset(set);
++	
++	PyObject* set_list = PyList_New(NULL);
++	char* saveptr;
++	char* item = strtok_r(set_str, ",", &saveptr);
++	PyList_Append(set_list, PyBytes_FromString(item));
++
++	while((item = strtok_r(NULL, ",", &saveptr)) != NULL) {
++		if(PyList_Append(set_list, PyBytes_FromString(item)) != 0) {
++			Py_XDECREF(set_list);
++			return NULL;
++		}
++	}
++
++	return(set_list);
++}
++
++static PyObject *
++pyprivileges_priv_inverse( PyObject *self, PyObject *args ) {
++
++	PyObject* set_list_in = NULL;
++	if(!PyArg_ParseTuple(args, "O:priv_inverse", &set_list_in))
++		return NULL;
++
++	PyObject* set_string = PyList_GetItem(set_list_in, 0);
++	int i;
++	for (i = 1; i < PyList_Size(set_list_in); ++i) {
++		PyBytes_Concat(set_string, PyBytes_FromString(","));
++		PyBytes_Concat(set_string, PyList_GetItem(set_list_in, i));
++	}
++
++	priv_set_t * set = priv_str_to_set(PyBytes_AsString(set_string), ",", NULL);
++	if (set == NULL)
++		return NULL;
++	priv_inverse(set);
++	char * ret_str = priv_set_to_str(set, ',', PRIV_STR_LIT);
++	priv_freeset(set);
++	
++	PyObject* set_list_out = PyList_New(NULL);
++	char* saveptr;
++	char* item = strtok_r(ret_str, ",", &saveptr);
++	PyList_Append(set_list_out, PyBytes_FromString(item));
++
++	while((item = strtok_r(NULL, ",", &saveptr)) != NULL) {
++		if(PyList_Append(set_list_out, PyBytes_FromString(item)) != 0) {
++			Py_XDECREF(set_list_out);
++			return NULL;
++		}
++	}
++	
++	Py_XDECREF(set_list_in);
++	
++	return(set_list_out);
++}
++
++/* priv_ineffect is a convienient wrapper to priv_get
++ * however priv_set is, in the context of python, not
++ * much of a convienience, so it's omitted
++ */
++static PyObject * 
++pyprivileges_priv_ineffect(PyObject* self, PyObject* args) {
++	char* privstring=NULL;
++	if (!PyArg_ParseTuple(args, "s:priv_ineffect", &privstring))
++		return NULL;
++	return PyBool_FromLong(priv_ineffect(privstring));
++}
++
++
++PyDoc_STRVAR(pyprivileges__doc__, 
++"Provides functions for interacting with the Solaris privileges(5) framework\n\
++Functions provided:\n\
++setppriv\n\
++getppriv\n\
++priv_ineffect\n\
++priv_inverse");
++
++PyDoc_STRVAR(pyprivileges_setppriv__doc__, 
++"Facilitates setting the permitted/inheritable/limit/effective privileges set\n\
++\tArguments:\n\
++\t\tone of (PRIV_ON|PRIV_OFF|PRIV_SET)\n\
++\t\tone of (PRIV_PERMITTED|PRIV_INHERITABLE|PRIV_LIMIT|PRIV_EFFECTIVE)\n\
++\t\tset of privileges: a list of strings\n\
++\tReturns: True on success, False on failure\
++");
++
++PyDoc_STRVAR(pyprivileges_getppriv__doc__, 
++"Return the process privilege set\n\
++\tArguments:\n\
++\t\tone of (PRIV_PERMITTED|PRIV_INHERITABLE|PRIV_LIMIT|PRIV_EFFECTIVE)\n\
++\tReturns: a Python list of strings");
++	
++PyDoc_STRVAR(pyprivileges_priv_ineffect__doc__, 
++"Checks for a privileges presence in the effective set\n\
++\tArguments: a String\n\
++\tReturns: True if the privilege is in effect, False otherwise");
++
++PyDoc_STRVAR(pyprivileges_priv_inverse__doc__, 
++"The complement of the set of privileges\n\
++\tArguments: a list of strings\n\tReturns: a list of strings");
++
++static PyMethodDef module_methods[] = {
++	{"setppriv", pyprivileges_setppriv, METH_VARARGS, pyprivileges_setppriv__doc__}, 
++	{"getppriv", pyprivileges_getppriv, METH_VARARGS, pyprivileges_getppriv__doc__}, 
++	{"priv_ineffect", pyprivileges_priv_ineffect, METH_VARARGS, pyprivileges_priv_ineffect__doc__},
++	{"priv_inverse", pyprivileges_priv_inverse, METH_VARARGS, pyprivileges_priv_inverse__doc__},
++	{NULL, NULL}
++};
++
++
++#ifndef PyMODINIT_FUNC	/* declarations for DLL import/export */
++#define PyMODINIT_FUNC void
++#endif
++PyMODINIT_FUNC
++PyInit_privileges (void) {
++	PyObject* m;
++
++	static struct PyModuleDef moduledef = {
++	    PyModuleDef_HEAD_INIT,
++	    "privileges",
++	    pyprivileges__doc__,
++	    -1,
++	    module_methods,
++	    NULL,
++	    NULL,
++	    NULL,
++	    NULL,
++	};
++
++	m = PyModule_Create(&moduledef);
++	if ( m == NULL )
++		return m;
++		
++	PyObject* d = PyModule_GetDict(m);
++	if (d == NULL)
++		return m;
++
++	PyDict_SetItemString(d, "PRIV_ON", PyLong_FromLong((long)PRIV_ON));
++	PyDict_SetItemString(d, "PRIV_OFF", PyLong_FromLong((long)PRIV_OFF));
++	PyDict_SetItemString(d, "PRIV_SET", PyLong_FromLong((long)PRIV_SET));
++
++	PyDict_SetItemString(d, "PRIV_PERMITTED", PyLong_FromLong((long)PRIV_PERMITTED));
++	PyDict_SetItemString(d, "PRIV_INHERITABLE", PyLong_FromLong((long)PRIV_INHERITABLE));
++	PyDict_SetItemString(d, "PRIV_LIMIT", PyLong_FromLong((long)PRIV_LIMIT));
++	PyDict_SetItemString(d, "PRIV_EFFECTIVE", PyLong_FromLong((long)PRIV_EFFECTIVE));
++
++       return m;
++}
+--- Python-3.9.1/Modules/pyrbac.c
++++ Python-3.9.1/Modules/pyrbac.c
+@@ -0,0 +1,81 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
++ */
++
++/*
++ * RBAC Bindings for Python
++ */
++
++#include <Python.h>
++#include "pyrbac.h"
++
++static PyMethodDef module_methods[] = {NULL};
++
++PyDoc_STRVAR(pyrbac__doc__, "provides access to some objects \
++for interaction with the Solaris Role-Based Access Control \
++framework.\n\nDynamic objects:\n\
++userattr -- for interacting with user_attr(4)\n\
++authattr -- for interacting with auth_attr(4)\n\
++execattr -- for interacting with exec_attr(4)\n");
++
++#ifndef PyMODINIT_FUNC	/* declarations for DLL import/export */
++#define PyMODINIT_FUNC void
++#endif
++PyMODINIT_FUNC
++PyInit_rbac (void) {
++	PyObject* m;
++
++	if (PyType_Ready(&AuthattrType) < 0 || 
++		PyType_Ready(&ExecattrType) < 0 ||
++		PyType_Ready(&UserattrType) < 0 )
++		return NULL;
++
++       static struct PyModuleDef moduledef = {
++           PyModuleDef_HEAD_INIT,
++           "rbac",
++           pyrbac__doc__,
++           -1,
++           module_methods,
++           NULL,
++           NULL,
++           NULL,
++           NULL,
++       };
++
++       m = PyModule_Create(&moduledef);
++	if ( m == NULL )
++		return NULL;
++	
++	Py_INCREF(&AuthattrType);
++	PyModule_AddObject(m, "authattr", (PyObject*)&AuthattrType);
++
++	Py_INCREF(&ExecattrType);
++	PyModule_AddObject(m, "execattr", (PyObject*)&ExecattrType);
++
++	Py_INCREF(&UserattrType);
++	PyModule_AddObject(m, "userattr", (PyObject*)&UserattrType);
++
++	return m;
++
++}
+--- Python-3.9.1/Modules/pyrbac.h
++++ Python-3.9.1/Modules/pyrbac.h
+@@ -0,0 +1,45 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
++ */
++
++/* 
++ * RBAC bindings for python
++ */
++#ifndef PYRBAC_H
++#define PYRBAC_H
++
++#include <secdb.h>
++
++
++#define PYRBAC_USER_MODE 1
++#define PYRBAC_PROF_MODE 2
++#define PYRBAC_ATTR_MODE 3
++#define PYRBAC_NAM_MODE 4
++#define PYRBAC_UID_MODE 5
++
++extern PyTypeObject AuthattrType;
++extern PyTypeObject ExecattrType;
++extern PyTypeObject UserattrType;
++
++#endif
+--- Python-3.9.1/Modules/userattr.c
++++ Python-3.9.1/Modules/userattr.c
+@@ -0,0 +1,301 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
++ */
++
++/*
++ * RBAC Bindings for Python - user_attr functions
++ */
++
++#include <stdio.h>
++#include <user_attr.h>
++#include "Python.h"
++#include "pyrbac.h"
++
++static PyObject*
++pyrbac_setuserattr(PyObject* self, PyObject* args) {
++	setuserattr();
++	return Py_None;
++}
++
++static PyObject*
++pyrbac_enduserattr(PyObject* self, PyObject* args) {
++	enduserattr();
++	return Py_None;
++}
++
++PyObject*
++pyrbac_getuseruidnamattr(PyObject* self, void* arg, int mode, char* filename) {
++	
++	userattr_t *ret_userattr;
++
++	if (mode == PYRBAC_ATTR_MODE) {
++	    if (filename != NULL) {
++            FILE* file = fopen(filename, "r");
++            if (file == NULL)
++                return NULL;
++	        ret_userattr = fgetuserattr(file);
++	        if (fclose(file))
++                return NULL;
++	    }
++	    else
++	    	ret_userattr = getuserattr();
++	}
++	else if (mode == PYRBAC_NAM_MODE)
++		ret_userattr = getusernam((char*) arg);
++	else if (mode == PYRBAC_UID_MODE)
++		ret_userattr = getuseruid(*((uid_t*) arg));
++	
++	if (ret_userattr == NULL)
++		return Py_None;
++	
++	PyObject* entry = PyTuple_New(5);
++	if (entry == NULL) {
++		free_userattr(ret_userattr);
++		return NULL;
++	}
++	
++	PyObject* kv_data = PyDict_New();
++
++	if(ret_userattr->attr != NULL) {
++		int len;
++		for(len = 0; len < ret_userattr->attr->length; len++) {
++			kv_t current = ret_userattr->attr->data[len];
++
++			PyObject* set = PyList_New(NULL);
++			char* saveptr;
++			char* item = strtok_r(current.value, ",", &saveptr);
++			PyList_Append(set, PyBytes_FromString(item));
++
++			while((item = strtok_r(NULL, ",", &saveptr)) != NULL) {
++				if(PyList_Append(set, PyBytes_FromString(item)) != 0) {
++					Py_XDECREF(set);
++					Py_XDECREF(kv_data);
++					free_userattr(ret_userattr);
++					return NULL;
++				}
++			}
++			if(PyDict_SetItemString(kv_data, current.key, set)) {
++					free_userattr(ret_userattr);
++					return NULL;
++			}
++		}
++	}
++	entry = Py_BuildValue("{s:s,s:s,s:s,s:s,s:O}", 
++		"name", ret_userattr->name,
++		"qualifier", ret_userattr->qualifier,
++		"res1", ret_userattr->res1,
++		"res2", ret_userattr->res2,
++		"attributes", kv_data);
++
++	free_userattr(ret_userattr);
++	
++	return entry;
++}
++
++
++static PyObject*
++pyrbac_getuserattr(PyObject* self, PyObject* args) {
++	return(pyrbac_getuseruidnamattr(self, (void*) NULL, PYRBAC_ATTR_MODE, NULL));
++}
++
++static PyObject*
++pyrbac_fgetuserattr(PyObject* self, PyObject* args) {
++	char* filename = NULL;
++	if(!PyArg_ParseTuple(args, "s:fgetuserattr", &filename))
++		return NULL;
++	return(pyrbac_getuseruidnamattr(self, NULL, PYRBAC_ATTR_MODE, filename));
++}
++
++static PyObject*
++pyrbac_getusernam(PyObject* self, PyObject* args) {
++	char* name = NULL;
++	if(!PyArg_ParseTuple(args, "s:getusernam", &name))
++		return NULL;
++	return(pyrbac_getuseruidnamattr(self, (void*) name, PYRBAC_NAM_MODE, NULL));
++}
++
++static PyObject*
++pyrbac_getuseruid(PyObject* self, PyObject* args) {
++	uid_t uid;
++	if(!PyArg_ParseTuple(args, "i:getuseruid", &uid))
++		return NULL;
++	return(pyrbac_getuseruidnamattr(self, (void*) &uid, PYRBAC_UID_MODE, NULL));
++}
++
++static PyObject*
++pyrbac_userattr_next(PyObject* self, PyObject* args) {
++	PyObject* retval = pyrbac_getuserattr(self, args);
++	if( retval == Py_None ) {
++		setuserattr();
++		return NULL;
++	}
++	return retval;
++}
++static PyObject*
++pyrbac_userattr__iter__(PyObject* self, PyObject* args) {
++	return self;
++}
++
++typedef struct {
++	PyObject_HEAD
++} Userattr;
++
++static void
++Userattr_dealloc(Userattr* self) {
++	enduserattr();
++	Py_TYPE(self)->tp_free((PyObject*) self);
++}
++
++static PyObject*
++Userattr_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
++	Userattr *self;
++	self = (Userattr*)type->tp_alloc(type, 0);
++
++	return ((PyObject *) self);
++}
++
++static int
++Userattr_init(Userattr* self, PyObject *args, PyObject *kwargs) {
++	setuserattr();
++	return 0;
++}
++
++PyDoc_STRVAR(pyrbac_userattr__doc__, "provides functions for \
++interacting with the extended user attributes database. May be iterated over \
++to enumerate user_attr(4) entries\n\n\
++Methods provided:\n\
++setuserattr\n\
++enduserattr\n\
++getuserattr\n\
++fgetuserattr\n\
++getusernam\n\
++getuseruid");
++
++PyDoc_STRVAR(pyrbac_setuserattr__doc__, "\"rewinds\" the user_attr functions \
++to the first entry in the db. Called automatically by the constructor.\n\
++\tArguments: None\n\
++\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_enduserattr__doc__, "closes the user_attr database, \
++cleans up storage. called automatically by the destructor\n\
++\tArguments: None\n\
++\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_getuserattr__doc__, "Return a single user_attr entry\n \
++\tArguments: None\n\
++\tReturns: a dict representation of a userattr_t struct:\n\
++\t\t\"name\": username\n\
++\t\t\"qualifier\": reserved\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value"
++);
++
++PyDoc_STRVAR(pyrbac_fgetuserattr__doc__, "Return a single user_attr entry \
++from a file, bypassing nsswitch.conf\n\
++\tArguments: \'filename\'\n\
++\tReturns: a dict representation of a userattr_t struct:\n\
++\t\t\"name\": username\n\
++\t\t\"qualifier\": reserved\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value");
++
++PyDoc_STRVAR(pyrbac_getusernam__doc__, "Searches for a user_attr entry with a \
++given user name\n\
++\tArgument: \'username\'\n\
++\tReturns: a dict representation of a userattr_t struct:\n\
++\t\t\"name\": username\n\
++\t\t\"qualifier\": reserved\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value");
++
++PyDoc_STRVAR(pyrbac_getuseruid__doc__, "Searches for a user_attr entry with a \
++given uid\n\
++\tArgument: uid\n\
++\tReturns: a dict representation of a userattr_t struct:\n\
++\t\t\"name\": username\n\
++\t\t\"qualifier\": reserved\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value");
++
++static PyMethodDef Userattr_methods[] = {
++	{"setuserattr", pyrbac_setuserattr, METH_NOARGS, pyrbac_setuserattr__doc__},
++	{"enduserattr", pyrbac_enduserattr, METH_NOARGS, pyrbac_enduserattr__doc__},
++	{"getuserattr", pyrbac_getuserattr, METH_NOARGS, pyrbac_getuserattr__doc__},
++	{"fgetuserattr", pyrbac_fgetuserattr, METH_VARARGS, pyrbac_fgetuserattr__doc__},
++	{"getusernam", pyrbac_getusernam, METH_VARARGS, pyrbac_getusernam__doc__},
++	{"getuseruid", pyrbac_getuseruid, METH_VARARGS, pyrbac_getuseruid__doc__},
++	{NULL, NULL}
++};
++
++PyTypeObject UserattrType = {
++	PyVarObject_HEAD_INIT(NULL, 0)
++	"rbac.userattr",              /*tp_name*/
++	sizeof(Userattr),             /*tp_basicsize*/
++	0,                            /*tp_itemsize*/
++	(destructor)Userattr_dealloc, /*tp_dealloc*/
++	0,                            /*tp_print*/
++	0,                            /*tp_getattr*/
++	0,                            /*tp_setattr*/
++	0,                            /*tp_reserved*/
++	0,                            /*tp_repr*/
++	0,                            /*tp_as_number*/
++	0,                            /*tp_as_sequence*/
++	0,                            /*tp_as_mapping*/
++	0,                            /*tp_hash */
++	0,                            /*tp_call*/
++	0,                            /*tp_str*/
++	0,                            /*tp_getattro*/
++	0,                            /*tp_setattro*/
++	0,                            /*tp_as_buffer*/
++	Py_TPFLAGS_DEFAULT |
++	Py_TPFLAGS_BASETYPE,          /*tp_flags*/
++	pyrbac_userattr__doc__,       /* tp_doc */
++	0,		              /* tp_traverse */
++	0,		              /* tp_clear */
++	0,		              /* tp_richcompare */
++	0,		              /* tp_weaklistoffset */
++	pyrbac_userattr__iter__,      /* tp_iter */
++	pyrbac_userattr_next,         /* tp_iternext */
++	Userattr_methods,             /* tp_methods */
++	0,                            /* tp_members */
++	0,                            /* tp_getset */
++	0,                            /* tp_base */
++	0,                            /* tp_dict */
++	0,                            /* tp_descr_get */
++	0,                            /* tp_descr_set */
++	0,                            /* tp_dictoffset */
++	(initproc)Userattr_init,      /* tp_init */
++	0,                            /* tp_alloc */
++	Userattr_new,                 /* tp_new */
++	0,                            /* tp_free */
++	0,                            /* tp_is_gc */
++};
+--- Python-3.9.1/setup.py
++++ Python-3.9.1/setup.py
+@@ -1827,6 +1827,24 @@ class PyBuildExt(build_ext):
+         if dlpi_inc is not None:
+             self.add(Extension('dlpi', ['dlpimodule.c'], libraries=['dlpi']))
+ 
++    def detect_priv(self):
++        # privileges module (Solaris)
++        priv_inc = find_file('priv.h', [], self.inc_dirs)
++        if priv_inc is not None:
++            self.add(Extension('privileges', ['privileges.c']))
++
++    def detect_rbac(self):
++        # rbac module (Solaris)
++        secdb_inc = find_file('secdb.h', [], self.inc_dirs)
++        aa_inc = find_file('auth_attr.h', [], self.inc_dirs)
++        ea_inc = find_file('exec_attr.h', [], self.inc_dirs)
++        ua_inc = find_file('user_attr.h', [], self.inc_dirs)
++        if secdb_inc is not None and aa_inc is not None and \
++            ea_inc is not None and ua_inc is not None:
++            self.add(Extension('rbac', ['pyrbac.c', 'authattr.c', \
++                               'execattr.c', 'userattr.c'],
++                               libraries=['nsl', 'socket', 'secdb']))
++
+     def detect_modules(self):
+         self.configure_compiler()
+         self.init_inc_lib_dirs()
+@@ -1849,6 +1867,8 @@ class PyBuildExt(build_ext):
+         self.detect_decimal()
+         self.detect_ucred()
+         self.detect_dlpi()
++        self.detect_priv()
++        self.detect_rbac()
+         self.detect_ctypes()
+         self.detect_multiprocessing()
+         if not self.detect_tkinter():
+--- Python-3.9.1/Lib/test/privrbactest.py
++++ Python-3.9.1/Lib/test/privrbactest.py
+@@ -0,0 +1,289 @@
++#!/usr/bin/python3.9
++#
++# CDDL HEADER START
++#
++# The contents of this file are subject to the terms of the
++# Common Development and Distribution License (the "License").
++# You may not use this file except in compliance with the License.
++#
++# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++# or http://www.opensolaris.org/os/licensing.
++# See the License for the specific language governing permissions
++# and limitations under the License.
++#
++# When distributing Covered Code, include this CDDL HEADER in each
++# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++# If applicable, add the following below this CDDL HEADER, with the
++# fields enclosed by brackets "[]" replaced with your own identifying
++# information: Portions Copyright [yyyy] [name of copyright owner]
++#
++# CDDL HEADER END
++#
++
++# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
++
++import privileges
++import rbac
++import os
++import sys
++import tempfile
++
++# privileges tests
++
++def test_setppriv():
++    amchild = os.fork()
++    if amchild == 0:
++        if privileges.setppriv(privileges.PRIV_OFF, privileges.PRIV_EFFECTIVE, 
++            ['proc_fork']):
++            try:
++                os.fork()
++                sys.exit(1)
++            except OSError as e:
++                sys.exit(0)
++
++    child = os.wait()
++    if child[1] is not 0:
++        print("setppriv. Bad exit status from pid %i\n" % child[0])
++        return False
++    return True
++
++def test_getppriv():
++    if 'proc_fork' in privileges.getppriv(privileges.PRIV_LIMIT):
++        return True
++    print("getppriv or PRIV_PROC_FORK not in PRIV_LIMIT.\n")
++    return False
++
++def test_priv_ineffect():
++    if privileges.priv_ineffect('proc_fork'):
++        return True
++    print("priv_ineffect or PRIV_PROC_FORK not in effect\n")
++    return False
++
++# authattr tests
++
++def test_chkauthattr():
++    try:
++        a = rbac.authattr()
++    except Exception as e:
++        print("Could not instantiate authattr object: %s\n" % e)
++        return False
++    try:
++        res = a.chkauthattr('solaris.*', 'root')
++    except Exception as e:
++        print("chkauthattr failed: %s\n" % e)
++        return False
++    if not res:
++        print("chkauthattr failed or \'root\' lacks \'solaris.*\'\n")
++        return False
++    return True
++
++def test_getauthattr():
++    try:
++        a = rbac.authattr()
++    except Exception as e:
++        print("Could not instantiate authattr object: %s\n" % e)
++        return False
++    try:
++        res = a.getauthattr()
++    except Exception as e:
++        print("getauthattr failed: %s\n" % e)
++        return False
++    if not 'name' in list(res.keys()):
++        print("getauthattr failed\n")
++        return False
++    return True
++
++def test_getauthnam():
++    try:
++        a = rbac.authattr()
++    except Exception as e:
++        print("Could not instantiate authattr object: %s\n" % e)
++        return False
++    try:
++        res = a.getauthnam('solaris.')
++    except Exception as e:
++        print("getauthnam failed: %s\n" % e)
++        return False
++    if not res:
++        print("getauthnam failed or \'solaris.\' not in auth_attr(4)\n")
++        return False
++    return True
++
++def test_authattr_iter():
++    try:
++        a = rbac.authattr()
++    except Exception as e:
++        print("Could not instantiate authattr object: %s\n" % e)
++        return False
++    res = next(a)
++    if not 'name' in list(res.keys()) or type(a) != type(a.__iter__()):
++        print("authattr object is not an iterable\n")
++        return False
++    return True
++
++# execattr tests
++
++def test_getexecattr():
++    try:
++        a = rbac.execattr()
++    except Exception as e:
++        print("Could not instantiate execattr object: %s\n" % e)
++        return False
++    try:
++        res = a.getexecattr()
++    except Exception as e:
++        print("getexecattr failed: %s\n" % e)
++        return False
++    if not 'name' in list(res.keys()):
++        print("getexecattr failed\n")
++        return False
++    return True
++
++def test_getexecuser():
++    try:
++        a = rbac.execattr()
++    except Exception as e:
++        print("Could not instantiate execattr object: %s\n" % e)
++        return False
++    try:
++        res = a.getexecuser("root", "act", "*;*;*;*;*")
++    except Exception as e:
++        print("getexecuser failed: %s\n" % e)
++        return False
++    if not res:
++        print("getexecuser failed or \'root\' not assigned to \'act\', " \
++            "\'*;*;*;*;*\' \n")
++        return False
++    return True
++
++
++def test_getexecprof():
++    try:
++        a = rbac.execattr()
++    except Exception as e:
++        print("Could not instantiate execattr object: %s\n" % e)
++        return False
++    try:
++        res = a.getexecprof("All", "cmd", "*")
++    except Exception as e:
++        print("getexecprof failed: %s\n" % e)
++        return False
++    if not res:
++        print("getexecprof failed or \'All\' not granted \'cmd\' : \'*\'\n")
++        return False
++    return True
++
++def test_execattr_iter():
++    try:
++        a = rbac.execattr()
++    except Exception as e:
++        print("Could not instantiate execattr object: %s\n" % e)
++        return False
++    res = next(a)
++    if not 'name' in list(res.keys()) or type(a) != type(a.__iter__()):
++        print("execattr object is not an iterable\n")
++        return False
++    return True
++
++# userattr tests
++
++def test_getuserattr():
++    try:
++        a = rbac.userattr()
++    except Exception as e:
++        print("Could not instantiate userattr object: %s\n" % e)
++        return False
++    try:
++        res = a.getuserattr()
++    except Exception as e:
++        print("getuserattr failed: %s\n" % e)
++        return False
++    if not 'name' in list(res.keys()):
++        print("getuserattr failed\n")
++        return False
++    return True
++
++def test_fgetuserattr():
++    temp = tempfile.NamedTemporaryFile()
++    temp.write("user::::profiles=Software Installation;roles=foo;"\
++        "auths=solaris.foo.bar")
++    temp.seek(0)
++    try:
++        a = rbac.userattr()
++    except Exception as e:
++        print("Could not instantiate userattr object: %s\n" % e)
++        return False
++    try:
++        res = a.fgetuserattr(temp.name)
++        temp.close()    
++    except Exception as e:
++        print("fgetuserattr failed: %s\n" % e)
++        temp.close()
++        return False
++    if not 'name' in list(res.keys()):
++        print("fgetuserattr failed\n")
++        return False
++    return True
++
++def test_getuseruid():
++    try:
++        a = rbac.userattr()
++    except Exception as e:
++        print("Could not instantiate userattr object: %s\n" % e)
++        return False
++    try:
++        res = a.getuseruid(0)
++    except Exception as e:
++        print("getusernam failed: %s\n" % e)
++        return False
++    if not 'name' in res:
++        print("getusernam failed or no uid 0\n")
++        return False
++    return True
++
++def test_getusernam():
++    try:
++        a = rbac.userattr()
++    except Exception as e:
++        print("Could not instantiate userattr object: %s\n" % e)
++        return False
++    try:
++        res = a.getusernam('root')
++    except Exception as e:
++        print("getusernam failed: %s\n" % e)
++        return False
++    if not 'name' in res:
++        print("getusernam failed or no \'root\' user\n")
++        return False
++    return True
++
++def test_userattr_iter():
++    try:
++        a = rbac.userattr()
++    except Exception as e:
++        print("Could not instantiate userattr object: %s\n" % e)
++        return False
++    res = next(a)
++    if not 'name' in list(res.keys()) or type(a) != type(a.__iter__()):
++        print("userattr object is not an iterable\n")
++        return False
++    return True
++
++if not test_setppriv() or not test_getppriv() or not test_priv_ineffect():
++    print("*** Failures detected in privileges module\n")    
++    sys.exit(1)
++
++if not test_getauthattr() or not test_chkauthattr() or not test_getauthnam() \
++    or not test_authattr_iter:
++    print("*** Failures detected in rbac.authattr\n")
++    sys.exit(1)
++
++if not test_getexecattr() or not test_getexecuser() or not test_getexecprof() \
++    or not test_execattr_iter():
++    print("*** Failures detected in rbac.execattr\n")
++    sys.exit(1)
++
++if not test_getuserattr() or not test_fgetuserattr() or not test_getusernam()\
++    or not test_getuseruid() or not test_userattr_iter():
++    print("*** Failures detected in rbac.userattr\n")
++    sys.exit(1)
diff --git a/components/python/python39/patches/08-py_db.patch b/components/python/python39/patches/08-py_db.patch
new file mode 100644
index 0000000..6990c36
--- /dev/null
+++ b/components/python/python39/patches/08-py_db.patch
@@ -0,0 +1,756 @@
+This patch adds Python debugger support.  It may be contributed upstream at
+some point, but the suitability (or lack thereof) has not yet been determined.
+
+--- Python-3.9.1/Makefile.pre.in
++++ Python-3.9.1/Makefile.pre.in
+@@ -472,7 +472,7 @@ DTRACE_DEPS = \
+ # Default target
+ all:		@DEF_MAKE_ALL_RULE@
+ build_all:	check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks \
+-		Programs/_testembed python-config
++		Programs/_testembed python-config build-py_db
+ 
+ # Check that the source is clean when building out of source.
+ check-clean-src:
+@@ -720,6 +720,15 @@ Makefile Modules/config.c: Makefile.pre
+ 	@mv config.c Modules
+ 	@echo "The Makefile was updated, you may need to re-run make."
+ 
++SHLIB_FLAGS = -shared -fpic
++
++libpython$(LDVERSION)_db.so.1.0:        $(srcdir)/py_db/libpython39_db.c
++	$(CC) -o $@ $(CFLAGS) $(PY_CPPFLAGS) $(CPPFLAGS) $(SHLIB_FLAGS) $<
++
++build-py_db:   libpython$(LDVERSION)_db.so.1.0
++
++install-py_db: libpython$(LDVERSION)_db.so.1.0
++	$(INSTALL_SHARED) libpython$(LDVERSION)_db.so.1.0 $(DESTDIR)$(LIBDIR)
+ 
+ Programs/_testembed: Programs/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
+ 	$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
+@@ -1239,7 +1248,7 @@ multisslcompile: build_all
+ multissltest: build_all
+ 	$(RUNSHARED) ./$(BUILDPYTHON) Tools/ssl/multissltests.py
+ 
+-install: @FRAMEWORKINSTALLFIRST@ commoninstall bininstall maninstall @FRAMEWORKINSTALLLAST@
++install: @FRAMEWORKINSTALLFIRST@ commoninstall bininstall maninstall install-py_db @FRAMEWORKINSTALLLAST@
+ 	if test "x$(ENSUREPIP)" != "xno"  ; then \
+ 		case $(ENSUREPIP) in \
+ 			upgrade) ensurepip="--upgrade" ;; \
+--- Python-3.9.1/py_db/libpython39_db.c
++++ Python-3.9.1/py_db/libpython39_db.c
+@@ -0,0 +1,596 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++/*
++ * Copyright (c) 2012, 2020, Oracle and/or its affiliates.
++ */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <errno.h>
++#include <gelf.h>
++
++#define Py_BUILD_CORE
++
++#include <Python.h>
++#include <frameobject.h>
++#include "internal/pycore_runtime.h"
++#include "internal/pycore_interp.h"
++
++#include "libpython39_db.h"
++
++struct pydb_agent {
++	struct ps_prochandle *pdb_ph;
++	int pdb_vers;
++	int pdb_is_64bit;
++	int pdb_datamodel;
++};
++
++typedef uintptr_t (*pdi_next_cb_t)(pydb_iter_t *);
++
++struct pydb_iter {
++	struct ps_prochandle *pdi_ph;
++	uintptr_t pdi_current;
++	pdi_next_cb_t pdi_nextf;
++};
++
++#define	LIBPYTHON	"libpython3.9.so"
++
++#define	MIN(x, y)	(((x) < (y)) ? (x) : (y))
++
++/* Generic interface to helper functions */
++static ssize_t pydb_strobj_readdata(pydb_agent_t *py, uintptr_t addr,
++    unsigned char *buf, size_t buf_len);
++static int pydb_getlno(pydb_agent_t *py, uintptr_t lnotab_addr, int firstline,
++    int lastinst);
++static int pydb_frameinfo(pydb_agent_t *py, uintptr_t addr, char *funcnm,
++    size_t funcnm_sz, char *filenm, size_t filenm_sz, int *lineno);
++
++/* datamodel specific implementation of helper functions */
++static ssize_t pydb_strobj_readdata_native(pydb_agent_t *py, uintptr_t addr,
++    unsigned char *buf, size_t buf_len);
++static int pydb_frameinfo_native(pydb_agent_t *py, uintptr_t addr, char *funcnm,
++    size_t funcnm_sz, char *filenm, size_t filenm_sz, int *lineno);
++
++static ssize_t pydb_strobj_readstr(pydb_agent_t *py, uintptr_t addr, char *buf,
++    size_t len);
++
++/* Iterator function next routines.  Plugable, configured by iterator init */
++static uintptr_t pydb_frame_iter_next(pydb_iter_t *iter);
++static uintptr_t pydb_interp_iter_next(pydb_iter_t *iter);
++static uintptr_t pydb_thread_iter_next(pydb_iter_t *iter);
++
++static const char *strbasename(const char *s);
++
++static const char *
++strbasename(const char *s)
++{
++	const char *p = strrchr(s, '/');
++
++	if (p == NULL)
++		return (s);
++
++	return (++p);
++}
++
++/* Agent creation / destruction routines */
++
++pydb_agent_t *
++pydb_agent_create(struct ps_prochandle *P, int vers)
++{
++	pydb_agent_t *py;
++	int datamodel;
++
++	if (vers != PYDB_VERSION) {
++		errno = ENOTSUP;
++		return (NULL);
++	}
++
++	if (ps_pdmodel(P, &datamodel) != PS_OK) {
++		return (NULL);
++	}
++
++	py = (pydb_agent_t *)malloc(sizeof (pydb_agent_t));
++	if (py == NULL) {
++		return (NULL);
++	}
++
++	py->pdb_ph = P;
++	py->pdb_vers = vers;
++	py->pdb_datamodel = datamodel;
++	py->pdb_is_64bit = 0;
++
++	return (py);
++}
++
++void
++pydb_agent_destroy(pydb_agent_t *py)
++{
++	if (py == NULL) {
++		return;
++	}
++
++	free(py);
++}
++
++/* Helper functions */
++static int
++pydb_getlno(pydb_agent_t *py, uintptr_t lnotab_addr, int firstline,
++    int lastinst)
++{
++	unsigned char lnotab[4096];
++	ssize_t lnotab_len;
++	int addr, line;
++	int i;
++
++	lnotab_len = pydb_strobj_readdata(py, lnotab_addr, lnotab,
++	    sizeof (lnotab));
++	if (lnotab_len < 0) {
++		return (-1);
++	}
++
++	/*
++	 * Python's line number algorithm is arcane. See here for details:
++	 * http://svn.python.org/projects/python/trunk/Objects/lnotab_notes.txt
++	 */
++
++	line = firstline;
++	for (addr = i = 0; i < lnotab_len; i += 2) {
++		if (addr + lnotab[i] > lastinst) {
++			break;
++		}
++		addr += lnotab[i];
++		line += lnotab[i + 1];
++	}
++
++	return (line);
++}
++
++static ssize_t
++pydb_asciiobj_readdata(pydb_agent_t *py, uintptr_t addr,
++    unsigned char *buf, size_t buf_len)
++{
++	PyASCIIObject sobj;
++	ssize_t obj_sz;
++	ssize_t read_sz;
++	psaddr_t asciiaddr;
++
++	/*
++	 * PyASCIIObjects are a type of Unicode string.  They are identified
++	 * as follows:
++	 * - sobj.state.compact == 1
++	 * - sobj.state.ascii == 1
++	 * - sobj.state.ready == 1
++	 * The length of the string is stored in sobj.length.  The string
++	 * itself follows the PyASCIIObject.
++	 */
++
++	if (ps_pread(py->pdb_ph, addr, &sobj, sizeof (PyASCIIObject))
++	    != PS_OK) {
++		return (-1);
++	}
++
++	if (!sobj.state.compact || !sobj.state.ascii || !sobj.state.ready) {
++		return (-1);
++	}
++
++	obj_sz = (ssize_t)sobj.length;
++
++	read_sz = MIN(obj_sz, (ssize_t)buf_len);
++	asciiaddr = (psaddr_t)(addr + sizeof (PyASCIIObject));
++
++	if (ps_pread(py->pdb_ph, asciiaddr, buf, (size_t)read_sz) != PS_OK) {
++		return (-1);
++	}
++
++	return (read_sz);
++}
++
++static ssize_t
++pydb_asciiobj_readstr(pydb_agent_t *py, uintptr_t addr, char *buf,
++    size_t buf_len)
++{
++	ssize_t read_sz;
++
++	read_sz = pydb_asciiobj_readdata(py, addr, (unsigned char *)buf,
++	    buf_len);
++
++	if (read_sz >= 0) {
++		if (read_sz >= buf_len) {
++			read_sz = buf_len - 1;
++		}
++
++		buf[read_sz] = '\0';
++	}
++
++	return (read_sz);
++}
++
++static ssize_t
++pydb_strobj_readdata(pydb_agent_t *py, uintptr_t addr,
++    unsigned char *buf, size_t buf_len)
++{
++	PyBytesObject sobj;
++	ssize_t obj_sz;
++	ssize_t read_sz;
++	psaddr_t straddr;
++
++	/*
++	 * PyBytesObject are variable size.  The size of the PyBytesObject
++	 * struct is fixed, and known at compile time; however, the size of the
++	 * associated buffer is variable.  The char[1] element at the end of the
++	 * structure contains the string, and the ob_size of the PyBytesObject
++	 * indicates how much extra space was allocated to contain the string
++	 * buffer at the object's tail.  Read in the fixed size portion of the
++	 * object first, and then read the contents of the data buffer into the
++	 * buffer passed by the caller.
++	 */
++
++	if (ps_pread(py->pdb_ph, addr, &sobj, sizeof (PyBytesObject))
++	    != PS_OK) {
++		return (-1);
++	}
++
++	/*
++	 * If we want to emulate PyBytes_GET_SIZE() instead of just calling
++	 * Py_SIZE() directly, we need to do a ps_pread() of Py_TYPE(&sobj).
++	 * PyBytes_Check() will try to access the type structure, but the 
++	 * address is not in the debugger's address space.
++	 */
++	obj_sz = (ssize_t)Py_SIZE(&sobj);
++
++	read_sz = MIN(obj_sz, (ssize_t)buf_len);
++	straddr = (psaddr_t)(addr + offsetof(PyBytesObject, ob_sval));
++
++	if (ps_pread(py->pdb_ph, straddr, buf, (size_t)read_sz) != PS_OK) {
++		return (-1);
++	}
++
++	return (read_sz);
++}
++
++/*
++ * Most Python PyBytesObject contain strings, as one would expect.  However,
++ * due to some sleazy hackery in parts of the Python code, some string objects
++ * are used as buffers for binary data.  In the general case,
++ * pydb_strobj_readstr() should be used to read strings out of string objects.
++ * It wraps pydb_strobj_readdata(), which should be used by callers only when
++ * trying to retrieve binary data.  (This routine does some string cleanup).
++ */
++static ssize_t
++pydb_strobj_readstr(pydb_agent_t *py, uintptr_t addr, char *buf,
++    size_t buf_len)
++{
++	ssize_t read_sz;
++
++	read_sz = pydb_strobj_readdata(py, addr, (unsigned char *)buf, buf_len);
++
++	if (read_sz >= 0) {
++		if (read_sz >= buf_len) {
++			read_sz = buf_len - 1;
++		}
++
++		buf[read_sz] = '\0';
++	}
++
++	return (read_sz);
++}
++
++
++static int
++pydb_frameinfo(pydb_agent_t *py, uintptr_t addr, char *funcnm,
++    size_t funcnm_sz, char *filenm, size_t filenm_sz, int *lineno)
++{
++	PyFrameObject fo;
++	PyCodeObject co;
++	ssize_t rc;
++
++	if (ps_pread(py->pdb_ph, addr, &fo, sizeof (PyFrameObject))
++	    != PS_OK) {
++		return (-1);
++	}
++
++	if (ps_pread(py->pdb_ph, (uintptr_t)fo.f_code, &co,
++	    sizeof (PyCodeObject)) != PS_OK) {
++		return (-1);
++	}
++
++	rc = pydb_asciiobj_readstr(py, (uintptr_t)co.co_name, funcnm,
++	    funcnm_sz);
++	if (rc < 0) {
++		return (-1);
++	}
++
++	rc = pydb_asciiobj_readstr(py, (uintptr_t)co.co_filename, filenm,
++	    filenm_sz);
++	if (rc < 0) {
++		return (-1);
++	}
++
++	*lineno = pydb_getlno(py, (uintptr_t)co.co_lnotab, co.co_firstlineno,
++	    fo.f_lasti);
++	if (*lineno < 0) {
++		return (-1);
++	}
++
++	return (0);
++}
++
++/* Functions that are part of the library's interface */
++
++/*
++ * Given the address of a PyFrameObject, and a buffer of a known size,
++ * fill the buffer with a description of the frame.
++ */
++int
++pydb_get_frameinfo(pydb_agent_t *py, uintptr_t frame_addr, char *fbuf,
++    size_t bufsz, int verbose)
++{
++	char funcname[1024];
++	char filename[1024];
++	char *fn;
++	int lineno;
++	int length = (py->pdb_is_64bit ? 16 : 8);
++	int rc;
++
++	rc = pydb_frameinfo(py, frame_addr, funcname, sizeof (funcname),
++	    filename, sizeof (filename), &lineno);
++	if (rc < 0) {
++		return (-1);
++	}
++
++	if (!verbose) {
++		fn = (char *)strbasename(filename);
++	} else {
++		fn = filename;
++	}
++
++	(void) snprintf(fbuf, bufsz, "%0.*lx %s:%d %s()\n", length,
++	    frame_addr, fn, lineno, funcname);
++
++	return (0);
++}
++
++/*
++ * Return a description about a PyFrameObject, if the object is
++ * actually a PyFrameObject.  In this case, the pc argument is checked
++ * to make sure that it came from a function that takes a PyFrameObject
++ * as its first (argv[0]) argument.
++ */
++int
++pydb_pc_frameinfo(pydb_agent_t *py, uintptr_t pc, uintptr_t frame_addr,
++    char *fbuf, size_t bufsz)
++{
++	char funcname[1024];
++	char filename[1024];
++	int lineno;
++	int rc;
++	ps_sym_t psym;
++
++	/*
++	 * If PC doesn't match PyEval_EvalFrameEx in either libpython
++	 * or the executable, don't decode it.
++	 */
++	if (ps_pglobal_sym(py->pdb_ph, LIBPYTHON, "PyEval_EvalFrameEx", &psym)
++	    != PS_OK) {
++		return (-1);
++	}
++
++	/* If symbol found, ensure that PC falls within PyEval_EvalFrameEx. */
++	if (pc < psym.st_value || pc > psym.st_value + psym.st_size) {
++		return (-1);
++	}
++
++	rc = pydb_frameinfo(py, frame_addr, funcname, sizeof (funcname),
++	    filename, sizeof (filename), &lineno);
++	if (rc < 0) {
++		return (-1);
++	}
++
++	(void) snprintf(fbuf, bufsz, "[ %s:%d (%s) ]\n", filename, lineno,
++	    funcname);
++
++	return (0);
++}
++
++/*
++ * Walks the list of PyInterpreterState objects.  If caller doesn't
++ * supply address of list, this method will look it up.
++ */
++pydb_iter_t *
++pydb_interp_iter_init(pydb_agent_t *py, uintptr_t addr)
++{
++	pydb_iter_t *itr;
++	_PyRuntimeState st;
++	uintptr_t i_addr;
++	int rc;
++
++	if (addr == 0) {
++		rc = ps_pglobal_lookup(py->pdb_ph, LIBPYTHON, "_PyRuntime",
++		    (psaddr_t *)&addr);
++		if (rc != PS_OK) {
++			return (NULL);
++		}
++
++		if (ps_pread(py->pdb_ph, (uintptr_t)addr, &st, sizeof (_PyRuntimeState))
++		    != PS_OK) {
++			return (NULL);
++		}
++
++		i_addr = (uintptr_t)st.interpreters.head;
++
++	} else {
++		if (ps_pread(py->pdb_ph, (uintptr_t)addr, &i_addr, sizeof (uintptr_t))
++		    != PS_OK) {
++			return (NULL);
++		}
++	}
++
++	itr = malloc(sizeof (pydb_iter_t));
++	if (itr == NULL) {
++		return (NULL);
++	}
++
++	itr->pdi_ph = py->pdb_ph;
++	itr->pdi_current = i_addr;
++	itr->pdi_nextf = pydb_interp_iter_next;
++
++	return (itr);
++}
++
++static uintptr_t
++pydb_interp_iter_next(pydb_iter_t *iter)
++{
++	PyInterpreterState st;
++	uintptr_t cur;
++
++	cur = iter->pdi_current;
++
++	if (cur == 0) {
++		return (cur);
++	}
++
++	if (ps_pread(iter->pdi_ph, cur, &st, sizeof (PyInterpreterState))
++	    != PS_OK) {
++		iter->pdi_current = 0;
++		return (0);
++	}
++
++	iter->pdi_current = (uintptr_t)st.next;
++
++	return (cur);
++}
++
++/*
++ * Walk a list of Python PyFrameObjects.  The addr argument must be
++ * the address of a valid PyThreadState object.
++ */
++pydb_iter_t *
++pydb_frame_iter_init(pydb_agent_t *py, uintptr_t addr)
++{
++	pydb_iter_t *itr;
++	PyThreadState ts;
++
++	if (ps_pread(py->pdb_ph, (uintptr_t)addr, &ts, sizeof (PyThreadState))
++	    != PS_OK) {
++		return (NULL);
++	}
++
++	itr = malloc(sizeof (pydb_iter_t));
++	if (itr == NULL) {
++		return (NULL);
++	}
++
++	itr->pdi_ph = py->pdb_ph;
++	itr->pdi_current = (uintptr_t)ts.frame;
++	itr->pdi_nextf = pydb_frame_iter_next;
++
++	return (itr);
++}
++
++static uintptr_t
++pydb_frame_iter_next(pydb_iter_t *iter)
++{
++	PyFrameObject fo;
++	uintptr_t cur;
++
++	cur = iter->pdi_current;
++
++	if (cur == 0) {
++		return (cur);
++	}
++
++	if (ps_pread(iter->pdi_ph, cur, &fo, sizeof (PyFrameObject))
++	    != PS_OK) {
++		iter->pdi_current = 0;
++		return (0);
++	}
++
++	iter->pdi_current = (uintptr_t)fo.f_back;
++
++	return (cur);
++}
++
++/*
++ * Walk a list of Python PyThreadState objects.  The addr argument must be
++ * the address of a valid PyInterpreterState object.
++ */
++pydb_iter_t *
++pydb_thread_iter_init(pydb_agent_t *py, uintptr_t addr)
++{
++	pydb_iter_t *itr;
++	PyInterpreterState is;
++
++	if (ps_pread(py->pdb_ph, (uintptr_t)addr, &is,
++	    sizeof (PyInterpreterState)) != PS_OK) {
++		return (NULL);
++	}
++
++	itr = malloc(sizeof (pydb_iter_t));
++	if (itr == NULL) {
++		return (NULL);
++	}
++
++	itr->pdi_ph = py->pdb_ph;
++	itr->pdi_current = (uintptr_t)is.tstate_head;
++	itr->pdi_nextf = pydb_thread_iter_next;
++
++	return (itr);
++}
++
++static uintptr_t
++pydb_thread_iter_next(pydb_iter_t *iter)
++{
++	PyThreadState ts;
++	uintptr_t cur;
++
++	cur = iter->pdi_current;
++
++	if (cur == 0) {
++		return (cur);
++	}
++
++	if (ps_pread(iter->pdi_ph, cur, &ts, sizeof (PyThreadState)) != PS_OK) {
++		iter->pdi_current = 0;
++		return (0);
++	}
++
++	iter->pdi_current = (uintptr_t)ts.next;
++
++	return (cur);
++}
++
++
++uintptr_t
++pydb_iter_next(pydb_iter_t *iter)
++{
++	return (iter->pdi_nextf(iter));
++}
++
++void
++pydb_iter_fini(pydb_iter_t *iter)
++{
++	if (iter == NULL) {
++		return;
++	}
++
++	free(iter);
++}
+--- Python-3.9.1/py_db/libpython39_db.h
++++ Python-3.9.1/py_db/libpython39_db.h
+@@ -0,0 +1,73 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++/*
++ * Copyright (c) 2012, 2020, Oracle and/or its affiliates.
++ */
++
++#ifndef	_LIBPYTHON39_DB_H
++#define	_LIBPYTHON39_DB_H
++
++#include <proc_service.h>
++
++#ifdef	__cplusplus
++extern "C" {
++#endif
++
++/* Agent is opaque to library's consumers.  */
++typedef struct pydb_agent pydb_agent_t;
++
++/*
++ * Library's debug version is 1.  Changes to interface should increase this
++ * number.
++ */
++#define	PYDB_VERSION	1
++
++/* Agent creation/destruction routines */
++extern	pydb_agent_t	*pydb_agent_create(struct ps_prochandle *P, int vers);
++extern	void		pydb_agent_destroy(pydb_agent_t *py);
++
++/* Used by callers that know they are looking at a PyFrameObject */
++extern	int	pydb_get_frameinfo(pydb_agent_t *py, uintptr_t frame_addr,
++    char *fbuf, size_t bufsz, int verbose);
++
++/*
++ * Used by callers that don't know if they're looking at PyFrameObject.
++ * Checks PC for traceable functions.
++ */
++extern	int	pydb_pc_frameinfo(pydb_agent_t *py, uintptr_t pc,
++    uintptr_t frame_addr, char *fbuf, size_t bufsz);
++
++/* Iterator functions */
++typedef struct pydb_iter pydb_iter_t;
++
++extern	pydb_iter_t	*pydb_frame_iter_init(pydb_agent_t *py, uintptr_t addr);
++extern	pydb_iter_t	*pydb_interp_iter_init(pydb_agent_t *py,
++    uintptr_t addr);
++extern	pydb_iter_t	*pydb_thread_iter_init(pydb_agent_t *py,
++    uintptr_t addr);
++extern	void		pydb_iter_fini(pydb_iter_t *iter);
++extern	uintptr_t	pydb_iter_next(pydb_iter_t *iter);
++
++#ifdef	__cplusplus
++}
++#endif
++
++#endif	/* _LIBPYTHON39_DB_H */
+--- Python-3.9.1/py_db/mapfile-vers
++++ Python-3.9.1/py_db/mapfile-vers
+@@ -0,0 +1,39 @@
++#
++# CDDL HEADER START
++#
++# The contents of this file are subject to the terms of the
++# Common Development and Distribution License (the "License").
++# You may not use this file except in compliance with the License.
++#
++# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++# or http://www.opensolaris.org/os/licensing.
++# See the License for the specific language governing permissions
++# and limitations under the License.
++#
++# When distributing Covered Code, include this CDDL HEADER in each
++# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++# If applicable, add the following below this CDDL HEADER, with the
++# fields enclosed by brackets "[]" replaced with your own identifying
++# information: Portions Copyright [yyyy] [name of copyright owner]
++#
++# CDDL HEADER END
++#
++
++#
++# Copyright (c) 2012, 2020, Oracle and/or its affiliates.
++#
++
++SUNWprivate_1.1 {
++    global:
++	pydb_agent_create;
++	pydb_agent_destroy;
++	pydb_frame_iter_init;
++	pydb_get_frameinfo;
++	pydb_pc_frameinfo;
++	pydb_interp_iter_init;
++	pydb_thread_iter_init;
++	pydb_iter_fini;
++	pydb_iter_next;
++    local:
++	*;
++};
diff --git a/components/python/python39/patches/09-ossaudiodev.patch b/components/python/python39/patches/09-ossaudiodev.patch
new file mode 100644
index 0000000..8f962c8
--- /dev/null
+++ b/components/python/python39/patches/09-ossaudiodev.patch
@@ -0,0 +1,60 @@
+This patch is needed to make Python understand it can build the OSS plugin.  
+Some OSS ioctls are not supported on Solaris, so they are ifdef'd out.  As
+the patch is Solaris-specific, it is not suitable for upstream.
+--- Python-3.9.1/setup.py
++++ Python-3.9.1/setup.py
+@@ -1601,7 +1601,7 @@ class PyBuildExt(build_ext):
+             self.missing.extend(['resource', 'termios'])
+ 
+         # Platform-specific libraries
+-        if HOST_PLATFORM.startswith(('linux', 'freebsd', 'gnukfreebsd')):
++        if HOST_PLATFORM.startswith(('sunos5', 'linux', 'freebsd', 'gnukfreebsd')):
+             self.add(Extension('ossaudiodev', ['ossaudiodev.c']))
+         elif not AIX:
+             self.missing.append('ossaudiodev')
+--- Python-3.9.1/Modules/ossaudiodev.c
++++ Python-3.9.1/Modules/ossaudiodev.c
+@@ -1210,6 +1210,7 @@ PyInit_ossaudiodev(void)
+     _EXPORT_INT(m, SOUND_MIXER_MONITOR);
+ #endif
+ 
++#ifndef __sun
+     /* Expose all the ioctl numbers for masochists who like to do this
+        stuff directly. */
+     _EXPORT_INT(m, SNDCTL_COPR_HALT);
+@@ -1222,6 +1223,7 @@ PyInit_ossaudiodev(void)
+     _EXPORT_INT(m, SNDCTL_COPR_SENDMSG);
+     _EXPORT_INT(m, SNDCTL_COPR_WCODE);
+     _EXPORT_INT(m, SNDCTL_COPR_WDATA);
++#endif
+ #ifdef SNDCTL_DSP_BIND_CHANNEL
+     _EXPORT_INT(m, SNDCTL_DSP_BIND_CHANNEL);
+ #endif
+@@ -1243,8 +1245,12 @@ PyInit_ossaudiodev(void)
+     _EXPORT_INT(m, SNDCTL_DSP_GETSPDIF);
+ #endif
+     _EXPORT_INT(m, SNDCTL_DSP_GETTRIGGER);
++#ifdef SNDCTL_DSP_MAPINBUF
+     _EXPORT_INT(m, SNDCTL_DSP_MAPINBUF);
++#endif
++#ifdef SNDCTL_DSP_MAPOUTBUF
+     _EXPORT_INT(m, SNDCTL_DSP_MAPOUTBUF);
++#endif
+     _EXPORT_INT(m, SNDCTL_DSP_NONBLOCK);
+     _EXPORT_INT(m, SNDCTL_DSP_POST);
+ #ifdef SNDCTL_DSP_PROFILE
+@@ -1264,6 +1270,7 @@ PyInit_ossaudiodev(void)
+     _EXPORT_INT(m, SNDCTL_DSP_STEREO);
+     _EXPORT_INT(m, SNDCTL_DSP_SUBDIVIDE);
+     _EXPORT_INT(m, SNDCTL_DSP_SYNC);
++#ifndef __sun
+     _EXPORT_INT(m, SNDCTL_FM_4OP_ENABLE);
+     _EXPORT_INT(m, SNDCTL_FM_LOAD_INSTR);
+     _EXPORT_INT(m, SNDCTL_MIDI_INFO);
+@@ -1305,5 +1312,6 @@ PyInit_ossaudiodev(void)
+     _EXPORT_INT(m, SNDCTL_TMR_STOP);
+     _EXPORT_INT(m, SNDCTL_TMR_TEMPO);
+     _EXPORT_INT(m, SNDCTL_TMR_TIMEBASE);
++#endif
+     return m;
+ }
diff --git a/components/python/python39/patches/10-include.patch b/components/python/python39/patches/10-include.patch
new file mode 100644
index 0000000..ac74b2c
--- /dev/null
+++ b/components/python/python39/patches/10-include.patch
@@ -0,0 +1,14 @@
+On Solaris pyconfig.h is delivered in the normal python header directory.
+As this is Solaris-specific, it is not suitable for upstream.
+
+--- Python-3.9.0/Lib/distutils/sysconfig.py
++++ Python-3.9.0/Lib/distutils/sysconfig.py
+@@ -251,7 +251,7 @@ def get_config_h_filename():
+         else:
+             inc_dir = _sys_home or project_base
+     else:
+-        inc_dir = get_python_inc(plat_specific=1)
++        inc_dir = get_python_inc(plat_specific=0)
+ 
+     return os.path.join(inc_dir, 'pyconfig.h')
+ 
diff --git a/components/python/python39/patches/11-pic-compile.patch b/components/python/python39/patches/11-pic-compile.patch
new file mode 100644
index 0000000..efd1a7f
--- /dev/null
+++ b/components/python/python39/patches/11-pic-compile.patch
@@ -0,0 +1,56 @@
+Python should always build modules pic. Bug 15780280
+
+This patch is a Solaris-specific hack; it will not be submitted upstream.
+
+--- Python-3.9.0/Lib/distutils/sysconfig.py
++++ Python-3.9.0/Lib/distutils/sysconfig.py
+@@ -230,6 +230,22 @@ def customize_compiler(compiler):
+         else:
+             archiver = ar + ' ' + ar_flags
+ 
++        # Force PIC compilation. Determine if GNU compiler or otherwise
++        # and set the PIC flag(s) accordingly. Defaults to Studio compiler.
++        if re.search('-.PIC', cflags) == None:
++            try:
++                out = os.popen(cc + ' --version 2>/dev/null', 'r')
++                out_string = out.read()
++                out.close()
++                result = re.search(' (\d+\.\d+(\.\d+)*)', out_string)
++                kpic_flags = "-fPIC -DPIC" if result else "-KPIC -DPIC"
++            except ImportError:
++                # The only time the above should fail is during boot-strapping
++                # when time (os imports subprocess which imports time) is not
++                # yet available.  Assume Studio compiler for that case.
++                kpic_flags = "-KPIC -DPIC"
++            cflags += ' ' + kpic_flags
++
+         cc_cmd = cc + ' ' + cflags
+         compiler.set_executables(
+             preprocessor=cpp,
+--- Python-3.9.0/Lib/distutils/tests/test_sysconfig.py
++++ Python-3.9.0/Lib/distutils/tests/test_sysconfig.py
+@@ -127,10 +127,10 @@ class SysconfigTestCase(support.EnvironG
+         self.assertEqual(comp.exes['preprocessor'],
+                          'env_cpp --env-cppflags')
+         self.assertEqual(comp.exes['compiler'],
+-                         'env_cc --sc-cflags --env-cflags --env-cppflags')
++                         'env_cc --sc-cflags --env-cflags --env-cppflags -KPIC -DPIC')
+         self.assertEqual(comp.exes['compiler_so'],
+                          ('env_cc --sc-cflags '
+-                          '--env-cflags ''--env-cppflags --sc-ccshared'))
++                          '--env-cflags ''--env-cppflags -KPIC -DPIC --sc-ccshared'))
+         self.assertEqual(comp.exes['compiler_cxx'],
+                          'env_cxx --env-cxx-flags')
+         self.assertEqual(comp.exes['linker_exe'],
+@@ -156,9 +156,9 @@ class SysconfigTestCase(support.EnvironG
+         self.assertEqual(comp.exes['preprocessor'],
+                          'sc_cc -E')
+         self.assertEqual(comp.exes['compiler'],
+-                         'sc_cc --sc-cflags')
++                         'sc_cc --sc-cflags -KPIC -DPIC')
+         self.assertEqual(comp.exes['compiler_so'],
+-                         'sc_cc --sc-cflags --sc-ccshared')
++                         'sc_cc --sc-cflags -KPIC -DPIC --sc-ccshared')
+         self.assertEqual(comp.exes['compiler_cxx'],
+                          'sc_cxx')
+         self.assertEqual(comp.exes['linker_exe'],
diff --git a/components/python/python39/patches/13-SOABI.patch b/components/python/python39/patches/13-SOABI.patch
new file mode 100644
index 0000000..bc3f23f
--- /dev/null
+++ b/components/python/python39/patches/13-SOABI.patch
@@ -0,0 +1,14 @@
+This patch was developed in-house.  We have not yet decided whether to offer
+it upstream or not.
+
+--- Python-3.9.1/configure.ac
++++ Python-3.9.1/configure.ac
+@@ -4784,7 +4784,7 @@ fi
+ 
+ AC_SUBST(EXT_SUFFIX)
+ case $ac_sys_system in
+-    Linux*|GNU*|Darwin|VxWorks)
++    Linux*|GNU*|Darwin|VxWorks|SunOS)
+ 	EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX};;
+     *)
+ 	EXT_SUFFIX=${SHLIB_SUFFIX};;
diff --git a/components/python/python39/patches/14-default-lib-path.patch b/components/python/python39/patches/14-default-lib-path.patch
new file mode 100644
index 0000000..381bc38
--- /dev/null
+++ b/components/python/python39/patches/14-default-lib-path.patch
@@ -0,0 +1,52 @@
+This patch was developed in-house.  It has been submitted upstream:
+http://bugs.python.org/issue23287
+
+--- Python-3.9.1/Lib/ctypes/util.py
++++ Python-3.9.1/Lib/ctypes/util.py
+@@ -226,34 +226,15 @@ elif os.name == "posix":
+ 
+     elif sys.platform == "sunos5":
+ 
+-        def _findLib_crle(name, is64):
+-            if not os.path.exists('/usr/bin/crle'):
+-                return None
++        def _findLib_path(name, is64):
+ 
+             env = dict(os.environ)
+             env['LC_ALL'] = 'C'
+ 
+             if is64:
+-                args = ('/usr/bin/crle', '-64')
++                paths = "/lib/64:/usr/lib/64"
+             else:
+-                args = ('/usr/bin/crle',)
+-
+-            paths = None
+-            try:
+-                proc = subprocess.Popen(args,
+-                                        stdout=subprocess.PIPE,
+-                                        stderr=subprocess.DEVNULL,
+-                                        env=env)
+-            except OSError:  # E.g. bad executable
+-                return None
+-            with proc:
+-                for line in proc.stdout:
+-                    line = line.strip()
+-                    if line.startswith(b'Default Library Path (ELF):'):
+-                        paths = os.fsdecode(line).split()[4]
+-
+-            if not paths:
+-                return None
++                paths = "/lib:/usr/lib"
+ 
+             for dir in paths.split(":"):
+                 libfile = os.path.join(dir, "lib%s.so" % name)
+@@ -263,7 +244,7 @@ elif os.name == "posix":
+             return None
+ 
+         def find_library(name, is64 = False):
+-            return _get_soname(_findLib_crle(name, is64) or _findLib_gcc(name))
++            return _get_soname(_findLib_path(name, is64) or _findLib_gcc(name))
+ 
+     else:
+ 
diff --git a/components/python/python39/patches/15-gethostname.patch b/components/python/python39/patches/15-gethostname.patch
new file mode 100644
index 0000000..7bc600a
--- /dev/null
+++ b/components/python/python39/patches/15-gethostname.patch
@@ -0,0 +1,17 @@
+This patch was adapted from a 2.6 patch which came from upstream:
+http://bugs.python.org/issue19561
+
+--- Python-3.9.0/Include/pyport.h
++++ Python-3.9.0/Include/pyport.h
+@@ -579,11 +579,6 @@ Please be conservative with adding new o
+ in platform-specific #ifdefs.
+ **************************************************************************/
+ 
+-#ifdef SOLARIS
+-/* Unchecked */
+-extern int gethostname(char *, int);
+-#endif
+-
+ #ifdef HAVE__GETPTY
+ #include <sys/types.h>          /* we need to import mode_t */
+ extern char * _getpty(int *, int, mode_t, int);
diff --git a/components/python/python39/patches/16-test-vmlimit.patch b/components/python/python39/patches/16-test-vmlimit.patch
new file mode 100644
index 0000000..0cff7c1
--- /dev/null
+++ b/components/python/python39/patches/16-test-vmlimit.patch
@@ -0,0 +1,29 @@
+This patch for a Solaris-specific problem but is a good safety precaution,
+so although it is not suitable for upstream as-is, we might offer it in a
+slightly tweaked form at some point in the future.
+
+Note that this can also have wrong impact on other tests (e.g., imap which
+tries to allocate huge chunks of virtual memory).
+
+--- Python-3.9.0/Lib/test/libregrtest/setup.py
++++ Python-3.9.0/Lib/test/libregrtest/setup.py
+@@ -60,6 +60,19 @@ def setup_tests(ns):
+         if getattr(module, '__file__', None):
+             module.__file__ = os.path.abspath(module.__file__)
+ 
++    # The socket test goes crazy on Solaris, slurping up VM until the system
++    # dies or the test is killed.  So limit it to 8GB.  While we could do this
++    # in the socket test itself, it is more prudent to do it here in case any
++    # other tests ever go crazy in a similar fashion.
++    if sys.platform == 'sunos5':
++        try:
++            import resource
++        except ImportError:
++            pass
++        else:
++            vm_limit = 8589934592
++            resource.setrlimit(resource.RLIMIT_VMEM, (vm_limit, vm_limit))
++
+     if ns.huntrleaks:
+         unittest.BaseTestSuite._cleanup = False
+ 
diff --git a/components/python/python39/patches/17-setsockopt.patch b/components/python/python39/patches/17-setsockopt.patch
new file mode 100644
index 0000000..6b2b4ff
--- /dev/null
+++ b/components/python/python39/patches/17-setsockopt.patch
@@ -0,0 +1,42 @@
+Fixes bug 30503749.
+
+socket.setsockopt sometimes raise Invalid argument error, because of differences
+between Linux and Solaris in socket layer. The reason is that the third argument
+length is different for the following socket options:
+
+IP_MULTICAST_TTL
+IP_MULTICAST_LOOP
+
+An integer is expected on Linux, single byte on Solaris. While this should be
+handled in the application code (with pack), we decided to patch this in runtime
+rather than in our application code (because upstream is generally aware of this).
+
+See the bug for more information.
+
+--- Python-3.9.0/Modules/socketmodule.c
++++ Python-3.9.0/Modules/socketmodule.c
+@@ -2989,6 +2989,7 @@ sock_setsockopt(PySocketSockObject *s, P
+     int optname;
+     int res;
+     Py_buffer optval;
++    int buflen;
+     int flag;
+     unsigned int optlen;
+     PyObject *none;
+@@ -3011,8 +3012,15 @@ sock_setsockopt(PySocketSockObject *s, P
+     /* setsockopt(level, opt, flag) */
+     if (PyArg_ParseTuple(args, "iii:setsockopt",
+                          &level, &optname, &flag)) {
++
++        buflen = sizeof flag;
++        /* Multi cast options take shorter arguments */
++        if (optname == IP_MULTICAST_TTL
++            || optname == IP_MULTICAST_LOOP)
++                buflen = sizeof(u_char);
++
+         res = setsockopt(s->sock_fd, level, optname,
+-                         (char*)&flag, sizeof flag);
++                         (char*)&flag, buflen);
+         goto done;
+     }
+ 
diff --git a/components/python/python39/patches/18-obmalloc-adi.patch b/components/python/python39/patches/18-obmalloc-adi.patch
new file mode 100644
index 0000000..37a574a
--- /dev/null
+++ b/components/python/python39/patches/18-obmalloc-adi.patch
@@ -0,0 +1,58 @@
+This patch was developed in house for Bug 21658934. Python PyObject_Free()
+implementation relies on being able to read memory that might not belong to
+the current buffer. When ADIHEAP is enabled, this is detected as a violation.
+Use an explicit nonfaulting load to ignore the ADI tag.
+
+This patch should now work with both Studio and gcc compilers (and possibly
+many others). It might be pushed upstream.
+
+--- Python-3.9.0/Objects/obmalloc.c
++++ Python-3.9.0/Objects/obmalloc.c
+@@ -1407,6 +1407,38 @@ obmalloc controls.  Since this test is n
+ extremely desirable that it be this fast.
+ */
+ 
++#ifdef __sparcv9
++/*
++ * Py_ADDRESS_IN_RANGE needs to access memory that might be arbitrarily
++ * tagged by an ADI aware allocator. The use of a nonfaulting load
++ * guarantees that the read will succeed.
++ */
++#ifdef __SUNPRO_C
++
++/* Studio can use built-in nonfaulting load instruction for vis.h */ 
++#include <vis.h>
++#define POOL_INDEX(x)   __vis_ldswa_ASI_PNF((void*)x)
++
++#else  /* __SUNPRO_C */
++/* 
++ * GCC doesn't have similar instruction built-in, but it can use
++ * following assembly code to do the same.
++ */
++
++static inline int vis_ldswa_ASI_PNF(void *arg);
++
++int vis_ldswa_ASI_PNF(void *arg) {
++  int res;
++  __asm__ ("ldswa  [%1]0x82,%0" : "=r" (res) : "r" (arg));
++  return res;
++}
++#define POOL_INDEX(x)   vis_ldswa_ASI_PNF((void*)x)
++
++#endif  /* __SUNPRO_C */
++#else   /* __sparcv9 */
++#define POOL_INDEX(x)   (*(x))
++#endif  /* __sparcv9 */
++
+ static bool _Py_NO_SANITIZE_ADDRESS
+             _Py_NO_SANITIZE_THREAD
+             _Py_NO_SANITIZE_MEMORY
+@@ -1417,7 +1449,7 @@ address_in_range(void *p, poolp pool)
+     // another thread may be concurrently modifying the value without holding
+     // the GIL. The following dance forces the compiler to read pool->arenaindex
+     // only once.
+-    uint arenaindex = *((volatile uint *)&pool->arenaindex);
++    uint arenaindex = (uint)POOL_INDEX((volatile uint *)&pool->arenaindex);
+     return arenaindex < maxarenas &&
+         (uintptr_t)p - arenas[arenaindex].address < ARENA_SIZE &&
+         arenas[arenaindex].address != 0;
diff --git a/components/python/python39/patches/19-pty.patch b/components/python/python39/patches/19-pty.patch
new file mode 100644
index 0000000..6125e2c
--- /dev/null
+++ b/components/python/python39/patches/19-pty.patch
@@ -0,0 +1,63 @@
+This patch comes from upstream: http://bugs.python.org/issue26228
+It has not yet been committed, but seems on track to be, and we need
+it to fix a bug.
+--- Python-3.9.0/Lib/pty.py
++++ Python-3.9.0/Lib/pty.py
+@@ -138,7 +138,7 @@ def _copy(master_fd, master_read=_read,
+         if master_fd in rfds:
+             data = master_read(master_fd)
+             if not data:  # Reached EOF.
+-                fds.remove(master_fd)
++                return
+             else:
+                 os.write(STDOUT_FILENO, data)
+         if STDIN_FILENO in rfds:
+@@ -155,7 +155,15 @@ def spawn(argv, master_read=_read, stdin
+     sys.audit('pty.spawn', argv)
+     pid, master_fd = fork()
+     if pid == CHILD:
+-        os.execlp(argv[0], *argv)
++        try:
++            os.execlp(argv[0], *argv)
++        except:
++            # If we wanted to be really clever, we would use
++            # the same method as subprocess() to pass the error
++            # back to the parent.  For now just dump stack trace.
++            traceback.print_exc()
++        finally:
++            os._exit(1)
+     try:
+         mode = tty.tcgetattr(STDIN_FILENO)
+         tty.setraw(STDIN_FILENO)
+@@ -165,6 +173,10 @@ def spawn(argv, master_read=_read, stdin
+     try:
+         _copy(master_fd, master_read, stdin_read)
+     except OSError:
++        # Some OSes never return an EOF on pty, just raise
++        # an error instead.
++        pass
++    finally:
+         if restore:
+             tty.tcsetattr(STDIN_FILENO, tty.TCSAFLUSH, mode)
+ 
+--- Python-3.9.0/Lib/test/test_pty.py
++++ Python-3.9.0/Lib/test/test_pty.py
+@@ -306,7 +306,7 @@ class SmallPtyTests(unittest.TestCase):
+         socketpair[1].close()
+         os.close(write_to_stdin_fd)
+ 
+-        # Expect two select calls, the last one will cause IndexError
++        # Expect two select calls, then a normal return on master EOF
+         pty.select = self._mock_select
+         self.select_rfds_lengths.append(2)
+         self.select_rfds_results.append([mock_stdin_fd, masters[0]])
+@@ -314,8 +314,7 @@ class SmallPtyTests(unittest.TestCase):
+         # both encountered an EOF before the second select call.
+         self.select_rfds_lengths.append(0)
+ 
+-        with self.assertRaises(IndexError):
+-            pty._copy(masters[0])
++        pty._copy(masters[0])
+ 
+ 
+ def tearDownModule():
diff --git a/components/python/python39/patches/20-test_fixes.patch b/components/python/python39/patches/20-test_fixes.patch
new file mode 100644
index 0000000..f4e5332
--- /dev/null
+++ b/components/python/python39/patches/20-test_fixes.patch
@@ -0,0 +1,159 @@
+This patch disables several tests that doesn't work correctly on Solaris.
+
+test_gdb is not deterministic and sometimes fails for unimportant reasons (only
+when ran with gmake test from component root).
+
+test_unicodedata needs to download additional data.
+[Not for upstream]
+
+test_time changes skip reason string to reflect the actual platform.
+[Can be offered upstream]
+
+test_socket fixes problem with sparc specific behavior of CMSG_SPACE(). Needed
+values are not linear as the test expects and that might cause an exception for
+last byte. Other problems in this test are related to known issues also
+affecting other platforms. [Can be at least reported upstream]
+
+test_re those two test are probably also locale related but I have no idea what
+is the root cause of these... [Should be reported upstream]
+
+test_pyexpat exception output is slightly different most likely due to platform
+differences. We can safely comment it out. [Not for upstream]
+
+test_tcl should be investigated more [Should be reported upstream]
+
+--- Python-3.9.0/Lib/test/test_gdb.py
++++ Python-3.9.0/Lib/test/test_gdb.py
+@@ -57,6 +57,9 @@ if (gdb_major_version, gdb_minor_version
+     # * https://bugzilla.redhat.com/show_bug.cgi?id=1866884
+     raise unittest.SkipTest("https://bugzilla.redhat.com/show_bug.cgi?id=1866884")
+ 
++if sys.platform.startswith("sunos"):
++    raise unittest.SkipTest("test doesn't work well on Solaris")
++
+ if not sysconfig.is_python_build():
+     raise unittest.SkipTest("test_gdb only works on source builds at the moment.")
+ 
+--- Python-3.9.0/Lib/test/test_unicodedata.py
++++ Python-3.9.0/Lib/test/test_unicodedata.py
+@@ -324,6 +324,8 @@ class NormalizationTest(unittest.TestCas
+         TESTDATAFILE = "NormalizationTest.txt"
+         TESTDATAURL = f"http://www.pythontest.net/unicode/{unicodedata.unidata_version}/{TESTDATAFILE}"
+ 
++        if sys.platform.startswith("sunos"):
++            self.skipTest("test needs to download additional data")
+         # Hit the exception early
+         try:
+             testdata = open_urlresource(TESTDATAURL, encoding="utf-8",
+--- Python-3.9.0/Lib/test/test_re.py
++++ Python-3.9.0/Lib/test/test_re.py
+@@ -1,5 +1,6 @@
+ from test.support import (gc_collect, bigmemtest, _2G,
+                           cpython_only, captured_stdout)
++import sys
+ import locale
+ import re
+ import sre_compile
+@@ -1918,6 +1919,8 @@ ELSE
+         self.assertTrue(re.match(b'(?Li)\xc5', b'\xe5'))
+         self.assertTrue(re.match(b'(?Li)\xe5', b'\xc5'))
+ 
++    @unittest.skipIf(sys.platform.startswith("sunos"),
++                     "test doesn't work well on sparc Solaris")
+     def check_en_US_utf8(self):
+         locale.setlocale(locale.LC_CTYPE, 'en_US.utf8')
+         self.assertTrue(re.match(b'\xc5\xe5', b'\xc5\xe5', re.L|re.I))
+@@ -1927,6 +1930,8 @@ ELSE
+         self.assertIsNone(re.match(b'(?Li)\xc5', b'\xe5'))
+         self.assertIsNone(re.match(b'(?Li)\xe5', b'\xc5'))
+ 
++    @unittest.skipIf(sys.platform.startswith("sunos"),
++                     "test doesn't work well on sparc Solaris")
+     def test_locale_compiled(self):
+         oldlocale = locale.setlocale(locale.LC_CTYPE)
+         self.addCleanup(locale.setlocale, locale.LC_CTYPE, oldlocale)
+--- Python-3.9.0/Lib/test/test_time.py
++++ Python-3.9.0/Lib/test/test_time.py
+@@ -613,7 +613,7 @@ class _TestStrftimeYear:
+             self.test_year('%04d', func=year4d)
+ 
+     def skip_if_not_supported(y):
+-        msg = "strftime() is limited to [1; 9999] with Visual Studio"
++        msg = "strftime() is limited to [1; 9999] on %s" % sys.platform
+         # Check that it doesn't crash for year > 9999
+         try:
+             time.strftime('%Y', (y,) + (0,) * 8)
+--- Python-3.9.0/Lib/test/test_socket.py
++++ Python-3.9.0/Lib/test/test_socket.py
+@@ -3355,7 +3355,7 @@ class CmsgMacroTests(unittest.TestCase):
+         # Test CMSG_SPACE() with various valid and invalid values,
+         # checking the assumptions used by sendmsg().
+         toobig = self.socklen_t_limit - socket.CMSG_SPACE(1) + 1
+-        values = list(range(257)) + list(range(toobig - 257, toobig))
++        values = list(range(257)) + list(range(toobig - 257, toobig - 8))
+ 
+         last = socket.CMSG_SPACE(0)
+         # struct cmsghdr has at least three members, two of which are ints
+@@ -3501,6 +3501,7 @@ class SCMRightsTest(SendrecvmsgServerTim
+         self.createAndSendFDs(1)
+ 
+     @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958")
++    @unittest.skipIf(sys.platform.startswith("sunos"), "skipping, see issue #12958")
+     @unittest.skipIf(AIX, "skipping, see issue #22397")
+     @requireAttrs(socket, "CMSG_SPACE")
+     def testFDPassSeparate(self):
+@@ -3512,6 +3513,7 @@ class SCMRightsTest(SendrecvmsgServerTim
+ 
+     @testFDPassSeparate.client_skip
+     @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958")
++    @unittest.skipIf(sys.platform.startswith("sunos"), "skipping, see issue #12958")
+     @unittest.skipIf(AIX, "skipping, see issue #22397")
+     def _testFDPassSeparate(self):
+         fd0, fd1 = self.newFDs(2)
+@@ -3525,6 +3527,7 @@ class SCMRightsTest(SendrecvmsgServerTim
+             len(MSG))
+ 
+     @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958")
++    @unittest.skipIf(sys.platform.startswith("sunos"), "skipping, see issue #12958")
+     @unittest.skipIf(AIX, "skipping, see issue #22397")
+     @requireAttrs(socket, "CMSG_SPACE")
+     def testFDPassSeparateMinSpace(self):
+@@ -3539,6 +3542,7 @@ class SCMRightsTest(SendrecvmsgServerTim
+ 
+     @testFDPassSeparateMinSpace.client_skip
+     @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958")
++    @unittest.skipIf(sys.platform.startswith("sunos"), "skipping, see issue #12958")
+     @unittest.skipIf(AIX, "skipping, see issue #22397")
+     def _testFDPassSeparateMinSpace(self):
+         fd0, fd1 = self.newFDs(2)
+--- Python-3.9.0/Lib/test/test_pyexpat.py
++++ Python-3.9.0/Lib/test/test_pyexpat.py
+@@ -466,8 +466,8 @@ class HandlerExceptionTest(unittest.Test
+                                        "pyexpat.c", "StartElement")
+             self.check_traceback_entry(entries[2],
+                                        "test_pyexpat.py", "StartElementHandler")
+-            if sysconfig.is_python_build() and not (sys.platform == 'win32' and platform.machine() == 'ARM'):
+-                self.assertIn('call_with_frame("StartElement"', entries[1][3])
++            #if sysconfig.is_python_build() and not (sys.platform == 'win32' and platform.machine() == 'ARM'):
++            #    self.assertIn('call_with_frame("StartElement"', entries[1][3])
+ 
+ 
+ # Test Current* members:
+--- Python-3.9.0/Lib/test/test_tcl.py
++++ Python-3.9.0/Lib/test/test_tcl.py
+@@ -189,6 +189,7 @@ class TclTest(unittest.TestCase):
+         self.assertRaises((UnicodeEncodeError, ValueError, TclError),
+                           tcl.getboolean, 'on\ud800')
+ 
++    @unittest.skipIf(sys.platform.startswith("sunos"), "test doesn't work well on Solaris")
+     def testEvalFile(self):
+         tcl = self.interp
+         with open(support.TESTFN, 'w') as f:
+@@ -202,6 +203,7 @@ class TclTest(unittest.TestCase):
+         self.assertEqual(tcl.eval('set b'),'2')
+         self.assertEqual(tcl.eval('set c'),'3')
+ 
++    @unittest.skipIf(sys.platform.startswith("sunos"), "test doesn't work well on Solaris")
+     def test_evalfile_null_in_result(self):
+         tcl = self.interp
+         with open(support.TESTFN, 'w') as f:
diff --git a/components/python/python39/patches/21-sched_get_priority.patch b/components/python/python39/patches/21-sched_get_priority.patch
new file mode 100644
index 0000000..c36ff6e
--- /dev/null
+++ b/components/python/python39/patches/21-sched_get_priority.patch
@@ -0,0 +1,43 @@
+https://github.com/python/cpython/pull/22374
+
+From b415ba00a73229ad102d590226decea014be11cc Mon Sep 17 00:00:00 2001
+From: Jakub Kulik <kulikjak@gmail.com>
+Date: Fri, 6 Nov 2020 14:58:33 +0100
+Subject: [PATCH 4/4] Make the error checking more robust
+
+---
+ Modules/posixmodule.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
+index 82edeb39022b4..f8651d7f02bb4 100644
+--- a/Modules/posixmodule.c
++++ b/Modules/posixmodule.c
+@@ -6347,8 +6347,10 @@ os_sched_get_priority_max_impl(PyObject *module, int policy)
+ {
+     int max;
+ 
++    /* make sure that errno is cleared before the call */
++    errno = 0;
+     max = sched_get_priority_max(policy);
+-    if (max < 0)
++    if (max == -1 && errno == EINVAL)
+         return posix_error();
+     return PyLong_FromLong(max);
+ }
+@@ -6366,8 +6368,12 @@ static PyObject *
+ os_sched_get_priority_min_impl(PyObject *module, int policy)
+ /*[clinic end generated code: output=7595c1138cc47a6d input=21bc8fa0d70983bf]*/
+ {
+-    int min = sched_get_priority_min(policy);
+-    if (min < 0)
++    int min;
++
++    /* make sure that errno is cleared before the call */
++    errno = 0;
++    min = sched_get_priority_min(policy);
++    if (min == -1 && errno == EINVAL)
+         return posix_error();
+     return PyLong_FromLong(min);
+ }
+
diff --git a/components/python/python39/patches/22-asyncio-watcher.patch b/components/python/python39/patches/22-asyncio-watcher.patch
new file mode 100644
index 0000000..7f733c4
--- /dev/null
+++ b/components/python/python39/patches/22-asyncio-watcher.patch
@@ -0,0 +1,31 @@
+Asyncio watcher 'MultiLoopChildWatcher' currently doesn't work well
+on Solaris and can freeze the event loop indefinitely.
+
+This was reported upstream:
+https://bugs.python.org/issue37573
+
+--- Python-3.9.0/Lib/asyncio/unix_events.py
++++ Python-3.9.0/Lib/asyncio/unix_events.py
+@@ -30,7 +30,7 @@ __all__ = (
+     'SelectorEventLoop',
+     'AbstractChildWatcher', 'SafeChildWatcher',
+     'FastChildWatcher', 'PidfdChildWatcher',
+-    'MultiLoopChildWatcher', 'ThreadedChildWatcher',
++    'ThreadedChildWatcher',
+     'DefaultEventLoopPolicy',
+ )
+ 
+--- cpython-master/Lib/test/test_asyncio/test_subprocess.py
++++ cpython-master/Lib/test/test_asyncio/test_subprocess.py
+@@ -684,11 +684,6 @@ if sys.platform != 'win32':
+ 
+         Watcher = unix_events.ThreadedChildWatcher
+ 
+-    class SubprocessMultiLoopWatcherTests(SubprocessWatcherMixin,
+-                                          test_utils.TestCase):
+-
+-        Watcher = unix_events.MultiLoopChildWatcher
+-
+     class SubprocessSafeWatcherTests(SubprocessWatcherMixin,
+                                      test_utils.TestCase):
+ 
diff --git a/components/python/python39/patches/23-sendfile-reenable.patch b/components/python/python39/patches/23-sendfile-reenable.patch
new file mode 100644
index 0000000..89b8904
--- /dev/null
+++ b/components/python/python39/patches/23-sendfile-reenable.patch
@@ -0,0 +1,29 @@
+All sendfile differences between Linux and Solaris were hopefully taken care
+of, and hence we can reenable it within the shutil module.
+
+This was requested upstream as well:
+https://bugs.python.org/issue41843
+
+--- Python-3.9.1/Lib/shutil.py
++++ Python-3.9.1/Lib/shutil.py
+@@ -50,7 +50,7 @@ elif _WINDOWS:
+     import nt
+ 
+ COPY_BUFSIZE = 1024 * 1024 if _WINDOWS else 64 * 1024
+-_USE_CP_SENDFILE = hasattr(os, "sendfile") and sys.platform.startswith("linux")
++_USE_CP_SENDFILE = hasattr(os, "sendfile")
+ _HAS_FCOPYFILE = posix and hasattr(posix, "_fcopyfile")  # macOS
+ 
+ # CMD defaults in Windows 10
+--- Python-3.9.1/Doc/library/shutil.rst
++++ Python-3.9.1/Doc/library/shutil.rst
+@@ -452,7 +452,8 @@ the use of userspace buffers in Python a
+ 
+ On macOS `fcopyfile`_ is used to copy the file content (not metadata).
+ 
+-On Linux :func:`os.sendfile` is used.
++On Linux, Solaris and other POSIX platforms where :func:`os.sendfile` supports
++copies between 2 regular file descriptors :func:`os.sendfile` is used.
+ 
+ On Windows :func:`shutil.copyfile` uses a bigger default buffer size (1 MiB
+ instead of 64 KiB) and a :func:`memoryview`-based variant of
diff --git a/components/python/python39/patches/24-strxfrm-fix.patch b/components/python/python39/patches/24-strxfrm-fix.patch
new file mode 100644
index 0000000..052f7f9
--- /dev/null
+++ b/components/python/python39/patches/24-strxfrm-fix.patch
@@ -0,0 +1,47 @@
+This patch fixes limitation in python which expects strxfrm function to return
+string with characters with values lower than 10ffff. This is know issue:
+
+https://bugs.python.org/issue16258
+
+This is not for upstream as the idea is from the bug itself and was rejected
+for use on all platforms.
+
+--- Python-3.9.1/Modules/_localemodule.c
++++ Python-3.9.1/Modules/_localemodule.c
+@@ -363,9 +363,10 @@ Return a string that can be used as a ke
+ static PyObject*
+ PyLocale_strxfrm(PyObject* self, PyObject* args)
+ {
++    unsigned int i, j;
+     PyObject *str;
+     Py_ssize_t n1;
+-    wchar_t *s = NULL, *buf = NULL;
++    wchar_t *s = NULL, *buf = NULL, *solbuf = NULL;
+     size_t n2;
+     PyObject *result = NULL;
+ 
+@@ -409,8 +410,23 @@ PyLocale_strxfrm(PyObject* self, PyObjec
+             goto exit;
+         }
+     }
+-    result = PyUnicode_FromWideChar(buf, n2);
++
++    /* Split each character in resulting wide string in two
++       parts in order to prevent Python ValueErrors on Solaris. */
++    solbuf = PyMem_New(wchar_t, (n2*2) + 1);
++    if (!solbuf) {
++        PyErr_NoMemory();
++        goto exit;
++    }
++    for (i = 0, j = 0; i < n2; i ++, j+= 2) {
++        solbuf[j] = 0x10000 + (buf[i] >> 16);
++        solbuf[j+1] = buf[i] & 0xffff;
++    }
++    solbuf[j] = 0;
++
++    result = PyUnicode_FromWideChar(solbuf, n2*2);
+ exit:
++    PyMem_Free(solbuf);
+     PyMem_Free(buf);
+     PyMem_Free(s);
+     return result;
diff --git a/components/python/python39/patches/26-locale-encoding.patch b/components/python/python39/patches/26-locale-encoding.patch
new file mode 100644
index 0000000..9b225ff
--- /dev/null
+++ b/components/python/python39/patches/26-locale-encoding.patch
@@ -0,0 +1,102 @@
+Python on Solaris doesn't handle non UTF-8 locales because of the way they are
+encoded. The wchar_t encoding used for stored symbols is not standardized. While
+on Linux symbols from all encodings will be mapped to their UTF-8 values, this
+is not the case on Solaris, where only UTF-8 locales work like that; other
+encodings can use any arbitrary value. Since Python expects no value to be
+higher than the maximum valid code point in Unicode (which is U+10FFFF), it
+breaks on Solaris when non UTF-8 locale is used. See bug 31790476.
+
+To fix this, we have to convert given wchar_t to utf32 each time locale is not
+UTF-8 encoded (or ASCII, which can safely be ignored).
+
+--- Python-3.9.1/Include/unicodeobject.h
++++ Python-3.9.1/Include/unicodeobject.h
+@@ -97,6 +97,11 @@ Copyright (c) Corporation for National R
+ #  include <wchar.h>
+ #endif
+ 
++#if defined(__sun) && defined(__SVR4)
++#  include <uchar.h>
++#  include <langinfo.h>
++#endif
++
+ /* Py_UCS4 and Py_UCS2 are typedefs for the respective
+    unicode representations. */
+ typedef uint32_t Py_UCS4;
+--- Python-3.9.1/Objects/unicodeobject.c
++++ Python-3.9.1/Objects/unicodeobject.c
+@@ -2187,6 +2187,15 @@ PyUnicode_FromUnicode(const Py_UNICODE *
+     return PyUnicode_FromWideChar(u, size);
+ }
+ 
++#if defined(__sun) && defined(__SVR4)
++/* Detect whether currently used locale uses UTF compatible encoding. */
++int codeset_is_utf8_compatible()
++{
++    char* res = nl_langinfo(CODESET);
++    return !(strcmp(res, "UTF-8") && strcmp(res, "646"));
++}
++#endif
++
+ PyObject *
+ PyUnicode_FromWideChar(const wchar_t *u, Py_ssize_t size)
+ {
+@@ -2210,6 +2219,58 @@ PyUnicode_FromWideChar(const wchar_t *u,
+     if (size == 0)
+         _Py_RETURN_UNICODE_EMPTY();
+ 
++#if defined(__sun) && defined(__SVR4)
++    /* Check whether current locale uses UTF to encode symbols */
++    if (!codeset_is_utf8_compatible()) {
++
++        /* Given 'u' might not be NULL terminated (size smaller than its
++           length); copy and terminate part we are interested in. */
++        wchar_t* substr = PyMem_RawMalloc((size + 1) * sizeof(wchar_t));
++        memcpy(substr, u, size * sizeof(wchar_t));
++        substr[size] = 0;
++
++        /* Convert given wide-character string to a character string */
++        size_t buffsize = wcstombs(NULL, substr, 0) + 1;
++        if (buffsize == (size_t)-1) {
++            PyMem_RawFree(substr);
++            PyErr_Format(PyExc_ValueError, "wcstombs() conversion failed");
++            return NULL;
++        }
++
++        char* buffer = PyMem_RawMalloc(buffsize * sizeof(char));
++        size_t res = wcstombs(buffer, substr, buffsize);
++        assert(res == buffsize - 1);
++
++        /* Convert character string to UTF32 encoded char32_t string.
++           Since wchar_t and char32_t have the same size on Solaris and one
++           wchar_t symbol corresponds to one UTF32 value, we can safely
++           reuse this buffer and skip additional allocation. */
++        char32_t* c32 = (char32_t*) substr;
++        mbstate_t state = {0};
++
++        int i = 0;
++        char* ptr = buffer;
++        char* end = ptr + res + 1;
++        while (res = mbrtoc32(&(c32[i]), ptr, end - ptr, &state)) {
++            if (res == (size_t)-1 || res == (size_t)-2 || res == (size_t)-3) {
++                PyMem_RawFree(c32);
++                PyMem_RawFree(buffer);
++                PyErr_Format(PyExc_ValueError,
++                             "mbrtoc32() conversion failed with error code: %d",
++                             res);
++                return NULL;
++            }
++            ptr += res;
++            i ++;
++        }
++        PyMem_RawFree(buffer);
++
++        PyObject *unicode = _PyUnicode_FromUCS4(c32, size);
++        PyMem_RawFree(c32);
++        return unicode;
++    }
++#endif
++
+     /* Single character Unicode objects in the Latin-1 range are
+        shared when using this constructor */
+     if (size == 1 && (Py_UCS4)*u < 256)
diff --git a/components/python/python39/patches/27-cgiserver.patch b/components/python/python39/patches/27-cgiserver.patch
new file mode 100644
index 0000000..a46d061
--- /dev/null
+++ b/components/python/python39/patches/27-cgiserver.patch
@@ -0,0 +1,43 @@
+Fixes Python CGI being confused about binary files (bugs 31546357 & 31936635).
+
+Upstream issue:
+https://bugs.python.org/issue27777
+
+WIP patch taken from upstream is still buggy, so we use
+this in-house developed one.
+
+--- Python-3.9.0/Lib/cgi.py
++++ Python-3.9.0/Lib/cgi.py
+@@ -689,7 +689,10 @@
+                 if not data:
+                     self.done = -1
+                     break
+-                self.file.write(data)
++                if self._binary_file:
++                    self.file.write(data)
++                else:
++                    self.file.write(data.decode())
+                 todo = todo - len(data)
+ 
+     def read_lines(self):
+--- Python-3.9.0/Lib/test/test_cgi.py
++++ Python-3.9.0/Lib/test/test_cgi.py
+@@ -366,6 +366,18 @@ Larry
+         self.assertEqual(fs.list[0].name, 'submit-name')
+         self.assertEqual(fs.list[0].value, 'Larry')
+ 
++    def test_content_length_no_content_disposition(self):
++        body = b'{"test":123}'
++        env = {
++            'CONTENT_LENGTH': len(body),
++            'REQUEST_METHOD': 'POST',
++            'CONTENT_TYPE': 'application/json',
++            'wsgi.input': BytesIO(body),
++        }
++
++        form = cgi.FieldStorage(fp=env['wsgi.input'], environ=env)
++        self.assertEqual(form.file.read(), body.decode(form.encoding))
++
+     def test_field_storage_multipart_no_content_length(self):
+         fp = BytesIO(b"""--MyBoundary
+ Content-Disposition: form-data; name="my-arg"; filename="foo"
diff --git a/components/python/python39/patches/28-gid-convert.patch b/components/python/python39/patches/28-gid-convert.patch
new file mode 100644
index 0000000..ed38e87
--- /dev/null
+++ b/components/python/python39/patches/28-gid-convert.patch
@@ -0,0 +1,18 @@
+Since gid_t doesn't have its type standardized (it just has to be an integer
+of some kind), we should not assume the type to be 'unsigned long' (which it
+isn't on Solaris, and that causes issues).
+
+Was offered upstream:
+https://github.com/python/cpython/pull/23762
+
+--- Python-3.9.1/Modules/_posixsubprocess.c
++++ Python-3.9.1/Modules/_posixsubprocess.c
+@@ -753,7 +753,7 @@ subprocess_fork_exec(PyObject* self, PyO
+     if (groups_list != Py_None) {
+ #ifdef HAVE_SETGROUPS
+         Py_ssize_t i;
+-        unsigned long gid;
++        gid_t gid;
+ 
+         if (!PyList_Check(groups_list)) {
+             PyErr_SetString(PyExc_TypeError,
diff --git a/components/python/python39/patches/29-Setup.patch b/components/python/python39/patches/29-Setup.patch
new file mode 100644
index 0000000..f34d592
--- /dev/null
+++ b/components/python/python39/patches/29-Setup.patch
@@ -0,0 +1,11 @@
+--- Python-3.9.1/Modules/Setup.orig	2021-01-08 00:28:04.485148074 +0000
++++ Python-3.9.1/Modules/Setup	2021-01-08 00:35:24.857410689 +0000
+@@ -309,7 +309,7 @@
+ # provided by the ncurses library.  e.g. on Linux, link with -lncurses
+ # instead of -lcurses).
+ 
+-#_curses _cursesmodule.c -lcurses -ltermcap
++_curses _cursesmodule.c -lncurses -ltermcap
+ # Wrapper for the panel library that's part of ncurses and SYSV curses.
+ #_curses_panel _curses_panel.c -lpanel -lncurses
+ 
diff --git a/components/python/python39/patches/30-madvise.patch b/components/python/python39/patches/30-madvise.patch
new file mode 100644
index 0000000..c535268
--- /dev/null
+++ b/components/python/python39/patches/30-madvise.patch
@@ -0,0 +1,11 @@
+--- Python-3.9.1/Modules/mmapmodule.c.orig	2021-01-08 00:47:51.535788215 +0000
++++ Python-3.9.1/Modules/mmapmodule.c	2021-01-08 00:48:28.811370361 +0000
+@@ -784,7 +784,7 @@
+         length = self->size - start;
+     }
+ 
+-    if (madvise(self->data + start, length, option) != 0) {
++    if (posix_madvise(self->data + start, length, option) != 0) {
+         PyErr_SetFromErrno(PyExc_OSError);
+         return NULL;
+     }
diff --git a/components/python/python39/patches/31-regrtest-processgroup.patch b/components/python/python39/patches/31-regrtest-processgroup.patch
new file mode 100644
index 0000000..896d591
--- /dev/null
+++ b/components/python/python39/patches/31-regrtest-processgroup.patch
@@ -0,0 +1,19 @@
+https://raw.githubusercontent.com/omniosorg/omnios-build/master/build/python37/patches/regrtest-processgroup.patch
+
+Running some sub-tests in process groups causes tests to hang - the reason it
+not yet known.
+Disable the use of process groups for now.
+
+diff -wpruN '--exclude=*.orig' a~/Lib/test/libregrtest/runtest_mp.py a/Lib/test/libregrtest/runtest_mp.py
+--- a~/Lib/test/libregrtest/runtest_mp.py	1970-01-01 00:00:00
++++ a/Lib/test/libregrtest/runtest_mp.py	1970-01-01 00:00:00
+@@ -32,7 +32,8 @@ assert MAIN_PROCESS_TIMEOUT >= PROGRESS_
+ # Time to wait until a worker completes: should be immediate
+ JOIN_TIMEOUT = 30.0   # seconds
+ 
+-USE_PROCESS_GROUP = (hasattr(os, "setsid") and hasattr(os, "killpg"))
++USE_PROCESS_GROUP = (hasattr(os, "setsid") and hasattr(os, "killpg")
++	and not sys.platform.startswith("sunos"))
+ 
+ 
+ def must_stop(result, ns):
diff --git a/components/python/python39/patches/32-bpo-39101.patch b/components/python/python39/patches/32-bpo-39101.patch
new file mode 100644
index 0000000..a76e673
--- /dev/null
+++ b/components/python/python39/patches/32-bpo-39101.patch
@@ -0,0 +1,79 @@
+From 9d409d6b474c188feca6213b9601e06f97715b72 Mon Sep 17 00:00:00 2001
+From: "Miss Islington (bot)"
+ <31488909+miss-islington@users.noreply.github.com>
+Date: Wed, 16 Dec 2020 09:56:10 -0800
+Subject: [PATCH] bpo-39101: Fixes BaseException hang in
+ IsolatedAsyncioTestCase. (GH-22654)
+
+(cherry picked from commit 8374d2ee1589791be8892b00f4bbf8121dde24bd)
+
+Co-authored-by: Lisa Roach <lisaroach14@gmail.com>
+---
+ Lib/unittest/async_case.py                    |  4 +--
+ Lib/unittest/test/test_async_case.py          | 27 +++++++++++++++++++
+ .../2020-10-11-21-43-03.bpo-39101.-I49Pm.rst  |  1 +
+ 3 files changed, 30 insertions(+), 2 deletions(-)
+ create mode 100644 Misc/NEWS.d/next/Library/2020-10-11-21-43-03.bpo-39101.-I49Pm.rst
+
+diff --git a/Lib/unittest/async_case.py b/Lib/unittest/async_case.py
+index 1bc1312c8c2ee..520213c372755 100644
+--- a/Lib/unittest/async_case.py
++++ b/Lib/unittest/async_case.py
+@@ -102,9 +102,9 @@ async def _asyncioLoopRunner(self, fut):
+                 ret = await awaitable
+                 if not fut.cancelled():
+                     fut.set_result(ret)
+-            except asyncio.CancelledError:
++            except (SystemExit, KeyboardInterrupt):
+                 raise
+-            except Exception as ex:
++            except (BaseException, asyncio.CancelledError) as ex:
+                 if not fut.cancelled():
+                     fut.set_exception(ex)
+ 
+diff --git a/Lib/unittest/test/test_async_case.py b/Lib/unittest/test/test_async_case.py
+index 2db441da202a0..d01864b6936ca 100644
+--- a/Lib/unittest/test/test_async_case.py
++++ b/Lib/unittest/test/test_async_case.py
+@@ -190,6 +190,33 @@ async def on_async_cleanup(self, val):
+                                   'async_cleanup 2',
+                                   'sync_cleanup 1'])
+ 
++    def test_base_exception_from_async_method(self):
++        events = []
++        class Test(unittest.IsolatedAsyncioTestCase):
++            async def test_base(self):
++                events.append("test_base")
++                raise BaseException()
++                events.append("not it")
++
++            async def test_no_err(self):
++                events.append("test_no_err")
++
++            async def test_cancel(self):
++                raise asyncio.CancelledError()
++
++        test = Test("test_base")
++        output = test.run()
++        self.assertFalse(output.wasSuccessful())
++
++        test = Test("test_no_err")
++        test.run()
++        self.assertEqual(events, ['test_base', 'test_no_err'])
++
++        test = Test("test_cancel")
++        output = test.run()
++        self.assertFalse(output.wasSuccessful())
++
++
+ 
+ if __name__ == "__main__":
+     unittest.main()
+diff --git a/Misc/NEWS.d/next/Library/2020-10-11-21-43-03.bpo-39101.-I49Pm.rst b/Misc/NEWS.d/next/Library/2020-10-11-21-43-03.bpo-39101.-I49Pm.rst
+new file mode 100644
+index 0000000000000..a571e8343cde1
+--- /dev/null
++++ b/Misc/NEWS.d/next/Library/2020-10-11-21-43-03.bpo-39101.-I49Pm.rst
+@@ -0,0 +1 @@
++Fixed tests using IsolatedAsyncioTestCase from hanging on BaseExceptions.
+\ No newline at end of file
diff --git a/components/python/python39/patches/33-bpo-37961.patch b/components/python/python39/patches/33-bpo-37961.patch
new file mode 100644
index 0000000..3ebf609
--- /dev/null
+++ b/components/python/python39/patches/33-bpo-37961.patch
@@ -0,0 +1,77 @@
+From 78062e07bc7c3b47ffdcdec786b259dda376370c Mon Sep 17 00:00:00 2001
+From: "Miss Islington (bot)"
+ <31488909+miss-islington@users.noreply.github.com>
+Date: Wed, 16 Dec 2020 14:01:14 -0800
+Subject: [PATCH] bpo-37961: Fix regression in tracemalloc.Traceback.__repr__
+ (GH-23805)
+
+Regression in 8d59eb1b66c51b2b918da9881c57d07d08df43b7.
+(cherry picked from commit 051b9818671625d125dee8198e0d2af5ad4c85b8)
+
+Co-authored-by: Daniel Hahler <git@thequod.de>
+---
+ Lib/test/test_tracemalloc.py                  | 20 +++++++++++++++++++
+ Lib/tracemalloc.py                            |  2 +-
+ .../2020-12-16-16-16-33.bpo-37961.jrESEq.rst  |  1 +
+ 3 files changed, 22 insertions(+), 1 deletion(-)
+ create mode 100644 Misc/NEWS.d/next/Library/2020-12-16-16-16-33.bpo-37961.jrESEq.rst
+
+diff --git a/Lib/test/test_tracemalloc.py b/Lib/test/test_tracemalloc.py
+index c5ae4e6d653bf..b10d1798c2977 100644
+--- a/Lib/test/test_tracemalloc.py
++++ b/Lib/test/test_tracemalloc.py
+@@ -84,6 +84,25 @@ def traceback_filename(filename):
+     return traceback_lineno(filename, 0)
+ 
+ 
++class TestTraceback(unittest.TestCase):
++    def test_repr(self):
++        def get_repr(*args) -> str:
++            return repr(tracemalloc.Traceback(*args))
++
++        self.assertEqual(get_repr(()), "<Traceback ()>")
++        self.assertEqual(get_repr((), 0), "<Traceback () total_nframe=0>")
++
++        frames = (("f1", 1), ("f2", 2))
++        exp_repr_frames = (
++            "(<Frame filename='f2' lineno=2>,"
++            " <Frame filename='f1' lineno=1>)"
++        )
++        self.assertEqual(get_repr(frames),
++                         f"<Traceback {exp_repr_frames}>")
++        self.assertEqual(get_repr(frames, 2),
++                         f"<Traceback {exp_repr_frames} total_nframe=2>")
++
++
+ class TestTracemallocEnabled(unittest.TestCase):
+     def setUp(self):
+         if tracemalloc.is_tracing():
+@@ -1064,6 +1083,7 @@ def test_stop_untrack(self):
+ 
+ def test_main():
+     support.run_unittest(
++        TestTraceback,
+         TestTracemallocEnabled,
+         TestSnapshot,
+         TestFilters,
+diff --git a/Lib/tracemalloc.py b/Lib/tracemalloc.py
+index 69b4170ec8246..cec99c59700fe 100644
+--- a/Lib/tracemalloc.py
++++ b/Lib/tracemalloc.py
+@@ -226,7 +226,7 @@ def __str__(self):
+         return str(self[0])
+ 
+     def __repr__(self):
+-        s = "<Traceback %r" % tuple(self)
++        s = f"<Traceback {tuple(self)}"
+         if self._total_nframe is None:
+             s += ">"
+         else:
+diff --git a/Misc/NEWS.d/next/Library/2020-12-16-16-16-33.bpo-37961.jrESEq.rst b/Misc/NEWS.d/next/Library/2020-12-16-16-16-33.bpo-37961.jrESEq.rst
+new file mode 100644
+index 0000000000000..5b363ad22d6e3
+--- /dev/null
++++ b/Misc/NEWS.d/next/Library/2020-12-16-16-16-33.bpo-37961.jrESEq.rst
+@@ -0,0 +1 @@
++Fix crash in :func:`tracemalloc.Traceback.__repr__` (regressed in Python 3.9).
+\ No newline at end of file
diff --git a/components/python/python39/patches/34-bpo-41891.patch b/components/python/python39/patches/34-bpo-41891.patch
new file mode 100644
index 0000000..36cf18d
--- /dev/null
+++ b/components/python/python39/patches/34-bpo-41891.patch
@@ -0,0 +1,110 @@
+From 82dbfd5a04863d8b6363527e6a34a90c9aa5691b Mon Sep 17 00:00:00 2001
+From: "Miss Islington (bot)"
+ <31488909+miss-islington@users.noreply.github.com>
+Date: Fri, 18 Dec 2020 11:19:10 -0800
+Subject: [PATCH] bpo-41891: ensure asyncio.wait_for waits for task completion
+ (GH-22461) (#23840)
+
+(cherry picked from commit 17ef4319a34f5a2f95e7823dfb5f5b8cff11882d)
+
+Co-authored-by: Richard Kojedzinszky <rkojedzinszky@users.noreply.github.com>
+
+Co-authored-by: Richard Kojedzinszky <rkojedzinszky@users.noreply.github.com>
+---
+ Lib/asyncio/tasks.py                          |  5 +-
+ Lib/test/test_asyncio/test_asyncio_waitfor.py | 61 +++++++++++++++++++
+ .../2020-09-30-13-35-29.bpo-41891.pNAeYI.rst  |  1 +
+ 3 files changed, 66 insertions(+), 1 deletion(-)
+ create mode 100644 Lib/test/test_asyncio/test_asyncio_waitfor.py
+ create mode 100644 Misc/NEWS.d/next/Library/2020-09-30-13-35-29.bpo-41891.pNAeYI.rst
+
+diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
+index f486b67229411..d6262ae75e656 100644
+--- a/Lib/asyncio/tasks.py
++++ b/Lib/asyncio/tasks.py
+@@ -471,7 +471,10 @@ async def wait_for(fut, timeout, *, loop=None):
+                 return fut.result()
+             else:
+                 fut.remove_done_callback(cb)
+-                fut.cancel()
++                # We must ensure that the task is not running
++                # after wait_for() returns.
++                # See https://bugs.python.org/issue32751
++                await _cancel_and_wait(fut, loop=loop)
+                 raise
+ 
+         if fut.done():
+diff --git a/Lib/test/test_asyncio/test_asyncio_waitfor.py b/Lib/test/test_asyncio/test_asyncio_waitfor.py
+new file mode 100644
+index 0000000000000..2ca64abbeb527
+--- /dev/null
++++ b/Lib/test/test_asyncio/test_asyncio_waitfor.py
+@@ -0,0 +1,61 @@
++import asyncio
++import unittest
++import time
++
++def tearDownModule():
++    asyncio.set_event_loop_policy(None)
++
++
++class SlowTask:
++    """ Task will run for this defined time, ignoring cancel requests """
++    TASK_TIMEOUT = 0.2
++
++    def __init__(self):
++        self.exited = False
++
++    async def run(self):
++        exitat = time.monotonic() + self.TASK_TIMEOUT
++
++        while True:
++            tosleep = exitat - time.monotonic()
++            if tosleep <= 0:
++                break
++
++            try:
++                await asyncio.sleep(tosleep)
++            except asyncio.CancelledError:
++                pass
++
++        self.exited = True
++
++class AsyncioWaitForTest(unittest.TestCase):
++
++    async def atest_asyncio_wait_for_cancelled(self):
++        t  = SlowTask()
++
++        waitfortask = asyncio.create_task(asyncio.wait_for(t.run(), t.TASK_TIMEOUT * 2))
++        await asyncio.sleep(0)
++        waitfortask.cancel()
++        await asyncio.wait({waitfortask})
++
++        self.assertTrue(t.exited)
++
++    def test_asyncio_wait_for_cancelled(self):
++        asyncio.run(self.atest_asyncio_wait_for_cancelled())
++
++    async def atest_asyncio_wait_for_timeout(self):
++        t  = SlowTask()
++
++        try:
++            await asyncio.wait_for(t.run(), t.TASK_TIMEOUT / 2)
++        except asyncio.TimeoutError:
++            pass
++
++        self.assertTrue(t.exited)
++
++    def test_asyncio_wait_for_timeout(self):
++        asyncio.run(self.atest_asyncio_wait_for_timeout())
++
++
++if __name__ == '__main__':
++    unittest.main()
+diff --git a/Misc/NEWS.d/next/Library/2020-09-30-13-35-29.bpo-41891.pNAeYI.rst b/Misc/NEWS.d/next/Library/2020-09-30-13-35-29.bpo-41891.pNAeYI.rst
+new file mode 100644
+index 0000000000000..75c2512780315
+--- /dev/null
++++ b/Misc/NEWS.d/next/Library/2020-09-30-13-35-29.bpo-41891.pNAeYI.rst
+@@ -0,0 +1 @@
++Ensure asyncio.wait_for waits for task completion
diff --git a/components/python/python39/patches/35-20142.patch b/components/python/python39/patches/35-20142.patch
new file mode 100644
index 0000000..57c926f
--- /dev/null
+++ b/components/python/python39/patches/35-20142.patch
@@ -0,0 +1,194 @@
+From 5d1013256c133b61587b6a80a0f9d509ac11d123 Mon Sep 17 00:00:00 2001
+From: Chris Jerdonek <chris.jerdonek@gmail.com>
+Date: Sat, 16 May 2020 15:57:27 -0700
+Subject: [PATCH 1/5] bpo-38323: Fix rare MultiLoopChildWatcher hangs.
+
+This changes asyncio.MultiLoopChildWatcher's attach_loop() method
+to call loop.add_signal_handler() instead of calling only
+signal.signal().  This should eliminate some rare hangs since
+loop.add_signal_handler() calls signal.set_wakeup_fd().  Without
+this, the main thread sometimes wasn't getting awakened if a
+signal occurred during an await.
+---
+ Doc/library/asyncio-eventloop.rst             |  4 ++-
+ Doc/library/asyncio-policy.rst                | 13 ++++++-
+ Lib/asyncio/unix_events.py                    | 34 ++++++++++++++-----
+ Lib/test/test_asyncio/test_subprocess.py      |  3 +-
+ .../2020-05-16-17-50-10.bpo-38323.Ar35np.rst  |  2 ++
+ 5 files changed, 44 insertions(+), 12 deletions(-)
+ create mode 100644 Misc/NEWS.d/next/Library/2020-05-16-17-50-10.bpo-38323.Ar35np.rst
+
+diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py
+index 19d713545e4cd..d2a32cb879b6b 100644
+--- a/Lib/asyncio/unix_events.py
++++ b/Lib/asyncio/unix_events.py
+@@ -78,6 +78,8 @@ def _process_self_data(self, data):
+     def add_signal_handler(self, sig, callback, *args):
+         """Add a handler for a signal.  UNIX only.
+ 
++        This method can only be called from the main thread.
++
+         Raise ValueError if the signal number is invalid or uncatchable.
+         Raise RuntimeError if there is a problem setting up the handler.
+         """
+@@ -1232,10 +1234,15 @@ def close(self):
+         self._callbacks.clear()
+         if self._saved_sighandler is not None:
+             handler = signal.getsignal(signal.SIGCHLD)
+-            if handler != self._sig_chld:
++            # add_signal_handler() sets the handler to _sighandler_noop.
++            if handler != _sighandler_noop:
+                 logger.warning("SIGCHLD handler was changed by outside code")
+             else:
++                loop = self._loop
++                # This clears the wakeup file descriptor if necessary.
++                loop.remove_signal_handler(signal.SIGCHLD)
+                 signal.signal(signal.SIGCHLD, self._saved_sighandler)
++
+             self._saved_sighandler = None
+ 
+     def __enter__(self):
+@@ -1263,15 +1270,24 @@ def attach_loop(self, loop):
+         # The reason to do it here is that attach_loop() is called from
+         # unix policy only for the main thread.
+         # Main thread is required for subscription on SIGCHLD signal
++        if loop is None or self._saved_sighandler is not None:
++            return
++
++        self._loop = loop
++        self._saved_sighandler = signal.getsignal(signal.SIGCHLD)
+         if self._saved_sighandler is None:
+-            self._saved_sighandler = signal.signal(signal.SIGCHLD, self._sig_chld)
+-            if self._saved_sighandler is None:
+-                logger.warning("Previous SIGCHLD handler was set by non-Python code, "
+-                               "restore to default handler on watcher close.")
+-                self._saved_sighandler = signal.SIG_DFL
++            logger.warning("Previous SIGCHLD handler was set by non-Python code, "
++                           "restore to default handler on watcher close.")
++            self._saved_sighandler = signal.SIG_DFL
+ 
+-            # Set SA_RESTART to limit EINTR occurrences.
+-            signal.siginterrupt(signal.SIGCHLD, False)
++        if self._callbacks:
++            warnings.warn(
++                'A loop is being detached '
++                'from a child watcher with pending handlers',
++                RuntimeWarning)
++
++        # This also sets up the wakeup file descriptor.
++        loop.add_signal_handler(signal.SIGCHLD, self._sig_chld)
+ 
+     def _do_waitpid_all(self):
+         for pid in list(self._callbacks):
+@@ -1314,7 +1330,7 @@ def _do_waitpid(self, expected_pid):
+                                  expected_pid, returncode)
+                 loop.call_soon_threadsafe(callback, pid, returncode, *args)
+ 
+-    def _sig_chld(self, signum, frame):
++    def _sig_chld(self, *args):
+         try:
+             self._do_waitpid_all()
+         except (SystemExit, KeyboardInterrupt):
+diff --git a/Lib/test/test_asyncio/test_subprocess.py b/Lib/test/test_asyncio/test_subprocess.py
+index 6657a88e657c2..b11a31a34a2c6 100644
+--- a/Lib/test/test_asyncio/test_subprocess.py
++++ b/Lib/test/test_asyncio/test_subprocess.py
+@@ -672,12 +672,13 @@ def setUp(self):
+             policy.set_child_watcher(watcher)
+ 
+         def tearDown(self):
+-            super().tearDown()
+             policy = asyncio.get_event_loop_policy()
+             watcher = policy.get_child_watcher()
+             policy.set_child_watcher(None)
+             watcher.attach_loop(None)
+             watcher.close()
++            # Since setUp() does super().setUp() first, do tearDown() last.
++            super().tearDown()
+ 
+     class SubprocessThreadedWatcherTests(SubprocessWatcherMixin,
+                                          test_utils.TestCase):
+diff --git a/Misc/NEWS.d/next/Library/2020-05-16-17-50-10.bpo-38323.Ar35np.rst b/Misc/NEWS.d/next/Library/2020-05-16-17-50-10.bpo-38323.Ar35np.rst
+new file mode 100644
+index 0000000000000..556e08c69d7a5
+--- /dev/null
++++ b/Misc/NEWS.d/next/Library/2020-05-16-17-50-10.bpo-38323.Ar35np.rst
+@@ -0,0 +1,2 @@
++Fix rare cases with ``MultiLoopChildWatcher`` where the event loop can
++fail to awaken in response to a :py:data:`SIGCHLD` signal.
+
+From 9618884446dc4a72e401b0f05b2992e34e39d700 Mon Sep 17 00:00:00 2001
+From: Chris Jerdonek <chris.jerdonek@gmail.com>
+Date: Sat, 16 May 2020 18:49:59 -0700
+Subject: [PATCH 2/5] Add docstring.
+
+---
+ Lib/asyncio/unix_events.py | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py
+index d2a32cb879b6b..17614c23c984c 100644
+--- a/Lib/asyncio/unix_events.py
++++ b/Lib/asyncio/unix_events.py
+@@ -1266,6 +1266,11 @@ def remove_child_handler(self, pid):
+             return False
+ 
+     def attach_loop(self, loop):
++        """
++        This registers the SIGCHLD signal handler.
++
++        This method can only be called from the main thread.
++        """
+         # Don't save the loop but initialize itself if called first time
+         # The reason to do it here is that attach_loop() is called from
+         # unix policy only for the main thread.
+
+From 4d4c147b9bfe4ce7bb51aa4745ead8a422e98c14 Mon Sep 17 00:00:00 2001
+From: Chris Jerdonek <chris.jerdonek@gmail.com>
+Date: Fri, 16 Oct 2020 16:37:11 -0700
+Subject: [PATCH 3/5] Address a couple review comments.
+
+---
+ Doc/library/asyncio-policy.rst                                | 2 +-
+ .../next/Library/2020-05-16-17-50-10.bpo-38323.Ar35np.rst     | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/Misc/NEWS.d/next/Library/2020-05-16-17-50-10.bpo-38323.Ar35np.rst b/Misc/NEWS.d/next/Library/2020-05-16-17-50-10.bpo-38323.Ar35np.rst
+index 556e08c69d7a5..e9401d6a2e486 100644
+--- a/Misc/NEWS.d/next/Library/2020-05-16-17-50-10.bpo-38323.Ar35np.rst
++++ b/Misc/NEWS.d/next/Library/2020-05-16-17-50-10.bpo-38323.Ar35np.rst
+@@ -1,2 +1,2 @@
+-Fix rare cases with ``MultiLoopChildWatcher`` where the event loop can
+-fail to awaken in response to a :py:data:`SIGCHLD` signal.
++Fix rare cases with :class:`asyncio.MultiLoopChildWatcher` where the event
++loop can fail to awaken in response to a :py:data:`SIGCHLD` signal.
+
+From 14f6cfc20e77a349a22ced05352afd3ee200b403 Mon Sep 17 00:00:00 2001
+From: Chris Jerdonek <chris.jerdonek@gmail.com>
+Date: Fri, 16 Oct 2020 16:46:49 -0700
+Subject: [PATCH 4/5] Revert tearDown() change.
+
+---
+ Lib/test/test_asyncio/test_subprocess.py | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/Lib/test/test_asyncio/test_subprocess.py b/Lib/test/test_asyncio/test_subprocess.py
+index b11a31a34a2c6..6657a88e657c2 100644
+--- a/Lib/test/test_asyncio/test_subprocess.py
++++ b/Lib/test/test_asyncio/test_subprocess.py
+@@ -672,13 +672,12 @@ def setUp(self):
+             policy.set_child_watcher(watcher)
+ 
+         def tearDown(self):
++            super().tearDown()
+             policy = asyncio.get_event_loop_policy()
+             watcher = policy.get_child_watcher()
+             policy.set_child_watcher(None)
+             watcher.attach_loop(None)
+             watcher.close()
+-            # Since setUp() does super().setUp() first, do tearDown() last.
+-            super().tearDown()
+ 
+     class SubprocessThreadedWatcherTests(SubprocessWatcherMixin,
+                                          test_utils.TestCase):
+
diff --git a/components/python/python39/patches/36-test-opts.patch b/components/python/python39/patches/36-test-opts.patch
new file mode 100644
index 0000000..eca833f
--- /dev/null
+++ b/components/python/python39/patches/36-test-opts.patch
@@ -0,0 +1,18 @@
+From OmniOS
+
+When running the tests as part of the build, we want to run them in a
+consistent order and not automatically re-launch them in verbose mode
+when a failure occurs.
+
+diff -wpruN '--exclude=*.orig' a~/Tools/scripts/run_tests.py a/Tools/scripts/run_tests.py
+--- a~/Tools/scripts/run_tests.py	1970-01-01 00:00:00
++++ a/Tools/scripts/run_tests.py	1970-01-01 00:00:00
+@@ -33,8 +33,6 @@ def main(regrtest_args):
+     args.extend(test.support.args_from_interpreter_flags())
+ 
+     args.extend(['-m', 'test',    # Run the test suite
+-                 '-r',            # Randomize test order
+-                 '-w',            # Re-run failed tests in verbose mode
+                  ])
+     if sys.platform == 'win32':
+         args.append('-n')         # Silence alerts under Windows
diff --git a/components/python/python39/patches/37-test-zipfile.patch b/components/python/python39/patches/37-test-zipfile.patch
new file mode 100644
index 0000000..6e84899
--- /dev/null
+++ b/components/python/python39/patches/37-test-zipfile.patch
@@ -0,0 +1,18 @@
+From OmniOS
+
+This test tries to set a file date to 2108-12-30.
+On illumos, the os.utime() call raises:
+	OSError: [Errno 79] Value too large for defined data type
+
+diff -wpruN '--exclude=*.orig' a~/Lib/test/test_zipfile.py a/Lib/test/test_zipfile.py
+--- a~/Lib/test/test_zipfile.py	1970-01-01 00:00:00
++++ a/Lib/test/test_zipfile.py	1970-01-01 00:00:00
+@@ -616,7 +616,7 @@ class StoredTestsWithSourceFile(Abstract
+             self.skipTest(f'time.localtime({ts}) raises OverflowError')
+         try:
+             os.utime(TESTFN, (ts, ts))
+-        except OverflowError:
++        except (OverflowError, OSError):
+             self.skipTest('Host fs cannot set timestamp to required value.')
+ 
+         mtime_ns = os.stat(TESTFN).st_mtime_ns
diff --git a/components/python/python39/pkg5 b/components/python/python39/pkg5
new file mode 100644
index 0000000..797d54c
--- /dev/null
+++ b/components/python/python39/pkg5
@@ -0,0 +1,27 @@
+{
+    "dependencies": [
+        "SUNWcs",
+        "compress/bzip2",
+        "compress/xz",
+        "database/sqlite-3",
+        "developer/object-file",
+        "library/database/gdbm",
+        "library/expat",
+        "library/libffi",
+        "library/ncurses",
+        "library/readline",
+        "library/security/openssl",
+        "library/zlib",
+        "runtime/tcl-8",
+        "runtime/tk-8",
+        "system/header/header-audio",
+        "system/library",
+        "system/library/math"
+    ],
+    "fmris": [
+        "library/python/idle-39",
+        "library/python/tkinter-39",
+        "runtime/python-39"
+    ],
+    "name": "Python"
+}
\ No newline at end of file
diff --git a/components/python/python39/python-39.p5m b/components/python/python39/python-39.p5m
new file mode 100644
index 0000000..e73ff9a
--- /dev/null
+++ b/components/python/python39/python-39.p5m
@@ -0,0 +1,2484 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
+#
+# Dependency resolution works only if the version is already installed in the build zone
+<transform file path=.+\.py$ -> \
+    default pkg.depend.bypass-generate .* >
+<transform file path=.+\.pyc$ -> \
+    default pkg.depend.bypass-generate .* >
+<transform file path=usr/bin.*$ -> \
+    default pkg.depend.bypass-generate .* >
+
+# Fix a problem with false positive unresolved dependency error.
+<transform file path=usr/lib/python3.9/(cProfile|platform|profile|pdb|trace|smtpd).py -> \
+    set pkg.depend.bypass-generate .*>
+<transform file path=usr/lib/python3.9/lib-dynload/.*\.so -> \
+    add pkg.linted.userland.action001.2 true>
+<transform file path=usr.*/man/.+ -> default mangler.man.stability uncommitted>
+<transform file path=.*/(idle_)?tests?/.* -> default facet.optional.test true>
+
+set name=pkg.fmri value=pkg:/$(COMPONENT_FMRI)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="$(COMPONENT_SUMMARY)"
+set name=info.classification value="$(COMPONENT_CLASSIFICATION)"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+
+license $(COMPONENT_LICENSE_FILE) license='$(COMPONENT_LICENSE)'
+#
+link path=usr/bin/2to3 target=2to3-3.9 mediator=python mediator-version=3.9
+file path=usr/bin/2to3-3.9
+#link path=usr/bin/idle target=idle3.9 mediator=python mediator-version=3.9
+#link path=usr/bin/idle3 target=idle3.9 mediator=python mediator-version=3.9
+#file path=usr/bin/idle3.9
+link path=usr/bin/pydoc target=pydoc3.9 mediator=python mediator-version=3.9
+link path=usr/bin/pydoc3 target=pydoc3.9 mediator=python mediator-version=3.9
+file path=usr/bin/pydoc3.9
+link path=usr/bin/python target=python3.9 mediator=python mediator-version=3.9
+link path=usr/bin/python-config target=python3.9-config mediator=python \
+    mediator-version=3.9
+link path=usr/bin/python3 target=python3.9 mediator=python3 mediator-version=3.9
+link path=usr/bin/python3-config target=python3.9-config mediator=python \
+    mediator-version=3.9
+file path=usr/bin/python3.9
+file path=usr/bin/python3.9-config
+#
+file path=usr/include/python3.9/Python-ast.h
+file path=usr/include/python3.9/Python.h
+file path=usr/include/python3.9/abstract.h
+file path=usr/include/python3.9/asdl.h
+file path=usr/include/python3.9/ast.h
+file path=usr/include/python3.9/bitset.h
+file path=usr/include/python3.9/bltinmodule.h
+file path=usr/include/python3.9/boolobject.h
+file path=usr/include/python3.9/bytearrayobject.h
+file path=usr/include/python3.9/bytesobject.h
+file path=usr/include/python3.9/cellobject.h
+file path=usr/include/python3.9/ceval.h
+file path=usr/include/python3.9/classobject.h
+file path=usr/include/python3.9/code.h
+file path=usr/include/python3.9/codecs.h
+file path=usr/include/python3.9/compile.h
+file path=usr/include/python3.9/complexobject.h
+file path=usr/include/python3.9/context.h
+file path=usr/include/python3.9/cpython/abstract.h
+file path=usr/include/python3.9/cpython/bytearrayobject.h
+file path=usr/include/python3.9/cpython/bytesobject.h
+file path=usr/include/python3.9/cpython/ceval.h
+file path=usr/include/python3.9/cpython/code.h
+file path=usr/include/python3.9/cpython/dictobject.h
+file path=usr/include/python3.9/cpython/fileobject.h
+file path=usr/include/python3.9/cpython/fileutils.h
+file path=usr/include/python3.9/cpython/frameobject.h
+file path=usr/include/python3.9/cpython/import.h
+file path=usr/include/python3.9/cpython/initconfig.h
+file path=usr/include/python3.9/cpython/interpreteridobject.h
+file path=usr/include/python3.9/cpython/listobject.h
+file path=usr/include/python3.9/cpython/methodobject.h
+file path=usr/include/python3.9/cpython/object.h
+file path=usr/include/python3.9/cpython/objimpl.h
+file path=usr/include/python3.9/cpython/pyerrors.h
+file path=usr/include/python3.9/cpython/pylifecycle.h
+file path=usr/include/python3.9/cpython/pymem.h
+file path=usr/include/python3.9/cpython/pystate.h
+file path=usr/include/python3.9/cpython/sysmodule.h
+file path=usr/include/python3.9/cpython/traceback.h
+file path=usr/include/python3.9/cpython/tupleobject.h
+file path=usr/include/python3.9/cpython/unicodeobject.h
+file path=usr/include/python3.9/datetime.h
+file path=usr/include/python3.9/descrobject.h
+file path=usr/include/python3.9/dictobject.h
+file path=usr/include/python3.9/dynamic_annotations.h
+file path=usr/include/python3.9/enumobject.h
+file path=usr/include/python3.9/errcode.h
+file path=usr/include/python3.9/eval.h
+file path=usr/include/python3.9/exports.h
+file path=usr/include/python3.9/fileobject.h
+file path=usr/include/python3.9/fileutils.h
+file path=usr/include/python3.9/floatobject.h
+file path=usr/include/python3.9/frameobject.h
+file path=usr/include/python3.9/funcobject.h
+file path=usr/include/python3.9/genericaliasobject.h
+file path=usr/include/python3.9/genobject.h
+file path=usr/include/python3.9/graminit.h
+file path=usr/include/python3.9/grammar.h
+file path=usr/include/python3.9/import.h
+file path=usr/include/python3.9/internal/pegen_interface.h
+file path=usr/include/python3.9/internal/pycore_abstract.h
+file path=usr/include/python3.9/internal/pycore_accu.h
+file path=usr/include/python3.9/internal/pycore_atomic.h
+file path=usr/include/python3.9/internal/pycore_bytes_methods.h
+file path=usr/include/python3.9/internal/pycore_byteswap.h
+file path=usr/include/python3.9/internal/pycore_call.h
+file path=usr/include/python3.9/internal/pycore_ceval.h
+file path=usr/include/python3.9/internal/pycore_code.h
+file path=usr/include/python3.9/internal/pycore_condvar.h
+file path=usr/include/python3.9/internal/pycore_context.h
+file path=usr/include/python3.9/internal/pycore_dtoa.h
+file path=usr/include/python3.9/internal/pycore_fileutils.h
+file path=usr/include/python3.9/internal/pycore_gc.h
+file path=usr/include/python3.9/internal/pycore_getopt.h
+file path=usr/include/python3.9/internal/pycore_gil.h
+file path=usr/include/python3.9/internal/pycore_hamt.h
+file path=usr/include/python3.9/internal/pycore_hashtable.h
+file path=usr/include/python3.9/internal/pycore_import.h
+file path=usr/include/python3.9/internal/pycore_initconfig.h
+file path=usr/include/python3.9/internal/pycore_interp.h
+file path=usr/include/python3.9/internal/pycore_object.h
+file path=usr/include/python3.9/internal/pycore_pathconfig.h
+file path=usr/include/python3.9/internal/pycore_pyerrors.h
+file path=usr/include/python3.9/internal/pycore_pyhash.h
+file path=usr/include/python3.9/internal/pycore_pylifecycle.h
+file path=usr/include/python3.9/internal/pycore_pymem.h
+file path=usr/include/python3.9/internal/pycore_pystate.h
+file path=usr/include/python3.9/internal/pycore_runtime.h
+file path=usr/include/python3.9/internal/pycore_sysmodule.h
+file path=usr/include/python3.9/internal/pycore_traceback.h
+file path=usr/include/python3.9/internal/pycore_tupleobject.h
+file path=usr/include/python3.9/internal/pycore_warnings.h
+file path=usr/include/python3.9/interpreteridobject.h
+file path=usr/include/python3.9/intrcheck.h
+file path=usr/include/python3.9/iterobject.h
+file path=usr/include/python3.9/listobject.h
+file path=usr/include/python3.9/longintrepr.h
+file path=usr/include/python3.9/longobject.h
+file path=usr/include/python3.9/marshal.h
+file path=usr/include/python3.9/memoryobject.h
+file path=usr/include/python3.9/methodobject.h
+file path=usr/include/python3.9/modsupport.h
+file path=usr/include/python3.9/moduleobject.h
+file path=usr/include/python3.9/namespaceobject.h
+file path=usr/include/python3.9/node.h
+file path=usr/include/python3.9/object.h
+file path=usr/include/python3.9/objimpl.h
+file path=usr/include/python3.9/odictobject.h
+file path=usr/include/python3.9/opcode.h
+file path=usr/include/python3.9/osdefs.h
+file path=usr/include/python3.9/osmodule.h
+file path=usr/include/python3.9/parsetok.h
+file path=usr/include/python3.9/patchlevel.h
+file path=usr/include/python3.9/picklebufobject.h
+file path=usr/include/python3.9/py_curses.h
+file path=usr/include/python3.9/pyarena.h
+file path=usr/include/python3.9/pycapsule.h
+file path=usr/include/python3.9/pyconfig.h
+file path=usr/include/python3.9/pyctype.h
+file path=usr/include/python3.9/pydebug.h
+file path=usr/include/python3.9/pydtrace.h
+file path=usr/include/python3.9/pyerrors.h
+file path=usr/include/python3.9/pyexpat.h
+file path=usr/include/python3.9/pyfpe.h
+file path=usr/include/python3.9/pyframe.h
+file path=usr/include/python3.9/pyhash.h
+file path=usr/include/python3.9/pylifecycle.h
+file path=usr/include/python3.9/pymacconfig.h
+file path=usr/include/python3.9/pymacro.h
+file path=usr/include/python3.9/pymath.h
+file path=usr/include/python3.9/pymem.h
+file path=usr/include/python3.9/pyport.h
+file path=usr/include/python3.9/pystate.h
+file path=usr/include/python3.9/pystrcmp.h
+file path=usr/include/python3.9/pystrhex.h
+file path=usr/include/python3.9/pystrtod.h
+file path=usr/include/python3.9/pythonrun.h
+file path=usr/include/python3.9/pythread.h
+file path=usr/include/python3.9/pytime.h
+file path=usr/include/python3.9/rangeobject.h
+file path=usr/include/python3.9/setobject.h
+file path=usr/include/python3.9/sliceobject.h
+file path=usr/include/python3.9/structmember.h
+file path=usr/include/python3.9/structseq.h
+file path=usr/include/python3.9/symtable.h
+file path=usr/include/python3.9/sysmodule.h
+file path=usr/include/python3.9/token.h
+file path=usr/include/python3.9/traceback.h
+file path=usr/include/python3.9/tracemalloc.h
+file path=usr/include/python3.9/tupleobject.h
+file path=usr/include/python3.9/typeslots.h
+file path=usr/include/python3.9/ucnhash.h
+file path=usr/include/python3.9/unicodeobject.h
+file path=usr/include/python3.9/warnings.h
+file path=usr/include/python3.9/weakrefobject.h
+link path=usr/lib/$(MACH64)/libpython3.9.so target=libpython3.9.so.1.0
+file path=usr/lib/$(MACH64)/libpython3.9.so.1.0
+file path=usr/lib/$(MACH64)/libpython3.9_db.so.1.0
+# Mediate libpython3 stable ABI
+file usr/lib/$(MACH64)/libpython3.so path=usr/lib/$(MACH64)/libpython39.so
+link path=usr/lib/$(MACH64)/libpython3.so target=libpython39.so mediator=python mediator-version=3.9
+file path=usr/lib/$(MACH64)/pkgconfig/python-3.9-embed.pc
+file path=usr/lib/$(MACH64)/pkgconfig/python-3.9.pc
+link path=usr/lib/$(MACH64)/pkgconfig/python3-embed.pc \
+    target=python-3.9-embed.pc mediator=python mediator-version=3.9
+link path=usr/lib/$(MACH64)/pkgconfig/python3.pc target=python-3.9.pc mediator=python mediator-version=3.9
+file path=usr/lib/python3.9/LICENSE.txt
+file path=usr/lib/python3.9/__future__.py
+file path=usr/lib/python3.9/__phello__.foo.py
+file path=usr/lib/python3.9/_aix_support.py
+file path=usr/lib/python3.9/_bootlocale.py
+file path=usr/lib/python3.9/_bootsubprocess.py
+file path=usr/lib/python3.9/_collections_abc.py
+file path=usr/lib/python3.9/_compat_pickle.py
+file path=usr/lib/python3.9/_compression.py
+file path=usr/lib/python3.9/_markupbase.py
+file path=usr/lib/python3.9/_osx_support.py
+file path=usr/lib/python3.9/_py_abc.py
+file path=usr/lib/python3.9/_pydecimal.py
+file path=usr/lib/python3.9/_pyio.py
+file path=usr/lib/python3.9/_sitebuiltins.py
+file path=usr/lib/python3.9/_strptime.py
+file path=usr/lib/python3.9/_sysconfigdata__sunos5_.py
+file path=usr/lib/python3.9/_threading_local.py
+file path=usr/lib/python3.9/_weakrefset.py
+file path=usr/lib/python3.9/abc.py
+file path=usr/lib/python3.9/aifc.py
+file path=usr/lib/python3.9/antigravity.py
+file path=usr/lib/python3.9/argparse.py
+file path=usr/lib/python3.9/ast.py
+file path=usr/lib/python3.9/asynchat.py
+file path=usr/lib/python3.9/asyncio/__init__.py
+file path=usr/lib/python3.9/asyncio/__main__.py
+file path=usr/lib/python3.9/asyncio/base_events.py
+file path=usr/lib/python3.9/asyncio/base_futures.py
+file path=usr/lib/python3.9/asyncio/base_subprocess.py
+file path=usr/lib/python3.9/asyncio/base_tasks.py
+file path=usr/lib/python3.9/asyncio/constants.py
+file path=usr/lib/python3.9/asyncio/coroutines.py
+file path=usr/lib/python3.9/asyncio/events.py
+file path=usr/lib/python3.9/asyncio/exceptions.py
+file path=usr/lib/python3.9/asyncio/format_helpers.py
+file path=usr/lib/python3.9/asyncio/futures.py
+file path=usr/lib/python3.9/asyncio/locks.py
+file path=usr/lib/python3.9/asyncio/log.py
+file path=usr/lib/python3.9/asyncio/proactor_events.py
+file path=usr/lib/python3.9/asyncio/protocols.py
+file path=usr/lib/python3.9/asyncio/queues.py
+file path=usr/lib/python3.9/asyncio/runners.py
+file path=usr/lib/python3.9/asyncio/selector_events.py
+file path=usr/lib/python3.9/asyncio/sslproto.py
+file path=usr/lib/python3.9/asyncio/staggered.py
+file path=usr/lib/python3.9/asyncio/streams.py
+file path=usr/lib/python3.9/asyncio/subprocess.py
+file path=usr/lib/python3.9/asyncio/tasks.py
+file path=usr/lib/python3.9/asyncio/threads.py
+file path=usr/lib/python3.9/asyncio/transports.py
+file path=usr/lib/python3.9/asyncio/trsock.py
+file path=usr/lib/python3.9/asyncio/unix_events.py
+file path=usr/lib/python3.9/asyncio/windows_events.py
+file path=usr/lib/python3.9/asyncio/windows_utils.py
+file path=usr/lib/python3.9/asyncore.py
+file path=usr/lib/python3.9/base64.py
+file path=usr/lib/python3.9/bdb.py
+file path=usr/lib/python3.9/binhex.py
+file path=usr/lib/python3.9/bisect.py
+file path=usr/lib/python3.9/bz2.py
+file path=usr/lib/python3.9/cProfile.py
+file path=usr/lib/python3.9/calendar.py
+file path=usr/lib/python3.9/cgi.py
+file path=usr/lib/python3.9/cgitb.py
+file path=usr/lib/python3.9/chunk.py
+file path=usr/lib/python3.9/cmd.py
+file path=usr/lib/python3.9/code.py
+file path=usr/lib/python3.9/codecs.py
+file path=usr/lib/python3.9/codeop.py
+file path=usr/lib/python3.9/collections/__init__.py
+file path=usr/lib/python3.9/collections/abc.py
+file path=usr/lib/python3.9/colorsys.py
+file path=usr/lib/python3.9/compileall.py
+file path=usr/lib/python3.9/concurrent/__init__.py
+file path=usr/lib/python3.9/concurrent/futures/__init__.py
+file path=usr/lib/python3.9/concurrent/futures/_base.py
+file path=usr/lib/python3.9/concurrent/futures/process.py
+file path=usr/lib/python3.9/concurrent/futures/thread.py
+file path=usr/lib/python3.9/config-3.9/Makefile
+file path=usr/lib/python3.9/config-3.9/Setup
+file path=usr/lib/python3.9/config-3.9/Setup.local
+file path=usr/lib/python3.9/config-3.9/config.c
+file path=usr/lib/python3.9/config-3.9/config.c.in
+file path=usr/lib/python3.9/config-3.9/install-sh
+file path=usr/lib/python3.9/config-3.9/libpython3.9.a
+file path=usr/lib/python3.9/config-3.9/makesetup
+file path=usr/lib/python3.9/config-3.9/python-config.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/config-3.9/python.o \
+    pkg.linted.userland.action001.2=true
+file path=usr/lib/python3.9/configparser.py
+file path=usr/lib/python3.9/contextlib.py
+file path=usr/lib/python3.9/contextvars.py
+file path=usr/lib/python3.9/copy.py
+file path=usr/lib/python3.9/copyreg.py
+file path=usr/lib/python3.9/crypt.py
+file path=usr/lib/python3.9/csv.py
+file path=usr/lib/python3.9/ctypes/__init__.py
+file path=usr/lib/python3.9/ctypes/_aix.py
+file path=usr/lib/python3.9/ctypes/_endian.py
+file path=usr/lib/python3.9/ctypes/macholib/README.ctypes
+file path=usr/lib/python3.9/ctypes/macholib/__init__.py
+file path=usr/lib/python3.9/ctypes/macholib/dyld.py
+file path=usr/lib/python3.9/ctypes/macholib/dylib.py
+file path=usr/lib/python3.9/ctypes/macholib/fetch_macholib
+file path=usr/lib/python3.9/ctypes/macholib/fetch_macholib.bat
+file path=usr/lib/python3.9/ctypes/macholib/framework.py
+#
+file path=usr/lib/python3.9/ctypes/test/__init__.py
+file path=usr/lib/python3.9/ctypes/test/__main__.py
+file path=usr/lib/python3.9/ctypes/test/test_anon.py
+file path=usr/lib/python3.9/ctypes/test/test_array_in_pointer.py
+file path=usr/lib/python3.9/ctypes/test/test_arrays.py
+file path=usr/lib/python3.9/ctypes/test/test_as_parameter.py
+file path=usr/lib/python3.9/ctypes/test/test_bitfields.py
+file path=usr/lib/python3.9/ctypes/test/test_buffers.py
+file path=usr/lib/python3.9/ctypes/test/test_bytes.py
+file path=usr/lib/python3.9/ctypes/test/test_byteswap.py
+file path=usr/lib/python3.9/ctypes/test/test_callbacks.py
+file path=usr/lib/python3.9/ctypes/test/test_cast.py
+file path=usr/lib/python3.9/ctypes/test/test_cfuncs.py
+file path=usr/lib/python3.9/ctypes/test/test_checkretval.py
+file path=usr/lib/python3.9/ctypes/test/test_delattr.py
+file path=usr/lib/python3.9/ctypes/test/test_errno.py
+file path=usr/lib/python3.9/ctypes/test/test_find.py
+file path=usr/lib/python3.9/ctypes/test/test_frombuffer.py
+file path=usr/lib/python3.9/ctypes/test/test_funcptr.py
+file path=usr/lib/python3.9/ctypes/test/test_functions.py
+file path=usr/lib/python3.9/ctypes/test/test_incomplete.py
+file path=usr/lib/python3.9/ctypes/test/test_init.py
+file path=usr/lib/python3.9/ctypes/test/test_internals.py
+file path=usr/lib/python3.9/ctypes/test/test_keeprefs.py
+file path=usr/lib/python3.9/ctypes/test/test_libc.py
+file path=usr/lib/python3.9/ctypes/test/test_loading.py
+file path=usr/lib/python3.9/ctypes/test/test_macholib.py
+file path=usr/lib/python3.9/ctypes/test/test_memfunctions.py
+file path=usr/lib/python3.9/ctypes/test/test_numbers.py
+file path=usr/lib/python3.9/ctypes/test/test_objects.py
+file path=usr/lib/python3.9/ctypes/test/test_parameters.py
+file path=usr/lib/python3.9/ctypes/test/test_pep3118.py
+file path=usr/lib/python3.9/ctypes/test/test_pickling.py
+file path=usr/lib/python3.9/ctypes/test/test_pointers.py
+file path=usr/lib/python3.9/ctypes/test/test_prototypes.py
+file path=usr/lib/python3.9/ctypes/test/test_python_api.py
+file path=usr/lib/python3.9/ctypes/test/test_random_things.py
+file path=usr/lib/python3.9/ctypes/test/test_refcounts.py
+file path=usr/lib/python3.9/ctypes/test/test_repr.py
+file path=usr/lib/python3.9/ctypes/test/test_returnfuncptrs.py
+file path=usr/lib/python3.9/ctypes/test/test_simplesubclasses.py
+file path=usr/lib/python3.9/ctypes/test/test_sizes.py
+file path=usr/lib/python3.9/ctypes/test/test_slicing.py
+file path=usr/lib/python3.9/ctypes/test/test_stringptr.py
+file path=usr/lib/python3.9/ctypes/test/test_strings.py
+file path=usr/lib/python3.9/ctypes/test/test_struct_fields.py
+file path=usr/lib/python3.9/ctypes/test/test_structures.py
+file path=usr/lib/python3.9/ctypes/test/test_unaligned_structures.py
+file path=usr/lib/python3.9/ctypes/test/test_unicode.py
+file path=usr/lib/python3.9/ctypes/test/test_values.py
+file path=usr/lib/python3.9/ctypes/test/test_varsize_struct.py
+file path=usr/lib/python3.9/ctypes/test/test_win32.py
+file path=usr/lib/python3.9/ctypes/test/test_wintypes.py
+file path=usr/lib/python3.9/ctypes/util.py
+file path=usr/lib/python3.9/ctypes/wintypes.py
+file path=usr/lib/python3.9/curses/__init__.py
+file path=usr/lib/python3.9/curses/ascii.py
+file path=usr/lib/python3.9/curses/has_key.py
+file path=usr/lib/python3.9/curses/panel.py
+file path=usr/lib/python3.9/curses/textpad.py
+file path=usr/lib/python3.9/dataclasses.py
+file path=usr/lib/python3.9/datetime.py
+file path=usr/lib/python3.9/dbm/__init__.py
+file path=usr/lib/python3.9/dbm/dumb.py
+file path=usr/lib/python3.9/dbm/gnu.py
+file path=usr/lib/python3.9/dbm/ndbm.py
+file path=usr/lib/python3.9/decimal.py
+file path=usr/lib/python3.9/difflib.py
+file path=usr/lib/python3.9/dis.py
+file path=usr/lib/python3.9/distutils/README
+file path=usr/lib/python3.9/distutils/__init__.py
+file path=usr/lib/python3.9/distutils/_msvccompiler.py
+file path=usr/lib/python3.9/distutils/archive_util.py
+file path=usr/lib/python3.9/distutils/bcppcompiler.py
+file path=usr/lib/python3.9/distutils/ccompiler.py
+file path=usr/lib/python3.9/distutils/cmd.py
+file path=usr/lib/python3.9/distutils/command/__init__.py
+file path=usr/lib/python3.9/distutils/command/bdist.py
+file path=usr/lib/python3.9/distutils/command/bdist_dumb.py
+file path=usr/lib/python3.9/distutils/command/bdist_msi.py
+file path=usr/lib/python3.9/distutils/command/bdist_rpm.py
+file path=usr/lib/python3.9/distutils/command/bdist_wininst.py
+file path=usr/lib/python3.9/distutils/command/build.py
+file path=usr/lib/python3.9/distutils/command/build_clib.py
+file path=usr/lib/python3.9/distutils/command/build_ext.py
+file path=usr/lib/python3.9/distutils/command/build_py.py
+file path=usr/lib/python3.9/distutils/command/build_scripts.py
+file path=usr/lib/python3.9/distutils/command/check.py
+file path=usr/lib/python3.9/distutils/command/clean.py
+file path=usr/lib/python3.9/distutils/command/command_template
+file path=usr/lib/python3.9/distutils/command/config.py
+file path=usr/lib/python3.9/distutils/command/install.py
+file path=usr/lib/python3.9/distutils/command/install_data.py
+file path=usr/lib/python3.9/distutils/command/install_egg_info.py
+file path=usr/lib/python3.9/distutils/command/install_headers.py
+file path=usr/lib/python3.9/distutils/command/install_lib.py
+file path=usr/lib/python3.9/distutils/command/install_scripts.py
+file path=usr/lib/python3.9/distutils/command/register.py
+file path=usr/lib/python3.9/distutils/command/sdist.py
+file path=usr/lib/python3.9/distutils/command/upload.py
+file path=usr/lib/python3.9/distutils/config.py
+file path=usr/lib/python3.9/distutils/core.py
+file path=usr/lib/python3.9/distutils/cygwinccompiler.py
+file path=usr/lib/python3.9/distutils/debug.py
+file path=usr/lib/python3.9/distutils/dep_util.py
+file path=usr/lib/python3.9/distutils/dir_util.py
+file path=usr/lib/python3.9/distutils/dist.py
+file path=usr/lib/python3.9/distutils/errors.py
+file path=usr/lib/python3.9/distutils/extension.py
+file path=usr/lib/python3.9/distutils/fancy_getopt.py
+file path=usr/lib/python3.9/distutils/file_util.py
+file path=usr/lib/python3.9/distutils/filelist.py
+file path=usr/lib/python3.9/distutils/log.py
+file path=usr/lib/python3.9/distutils/msvc9compiler.py
+file path=usr/lib/python3.9/distutils/msvccompiler.py
+file path=usr/lib/python3.9/distutils/spawn.py
+file path=usr/lib/python3.9/distutils/sysconfig.py
+file path=usr/lib/python3.9/distutils/tests/Setup.sample
+file path=usr/lib/python3.9/distutils/tests/__init__.py
+file path=usr/lib/python3.9/distutils/tests/includetest.rst
+file path=usr/lib/python3.9/distutils/tests/support.py
+file path=usr/lib/python3.9/distutils/tests/test_archive_util.py
+file path=usr/lib/python3.9/distutils/tests/test_bdist.py
+file path=usr/lib/python3.9/distutils/tests/test_bdist_dumb.py
+file path=usr/lib/python3.9/distutils/tests/test_bdist_msi.py
+file path=usr/lib/python3.9/distutils/tests/test_bdist_rpm.py
+file path=usr/lib/python3.9/distutils/tests/test_bdist_wininst.py
+file path=usr/lib/python3.9/distutils/tests/test_build.py
+file path=usr/lib/python3.9/distutils/tests/test_build_clib.py
+file path=usr/lib/python3.9/distutils/tests/test_build_ext.py
+file path=usr/lib/python3.9/distutils/tests/test_build_py.py
+file path=usr/lib/python3.9/distutils/tests/test_build_scripts.py
+file path=usr/lib/python3.9/distutils/tests/test_check.py
+file path=usr/lib/python3.9/distutils/tests/test_clean.py
+file path=usr/lib/python3.9/distutils/tests/test_cmd.py
+file path=usr/lib/python3.9/distutils/tests/test_config.py
+file path=usr/lib/python3.9/distutils/tests/test_config_cmd.py
+file path=usr/lib/python3.9/distutils/tests/test_core.py
+file path=usr/lib/python3.9/distutils/tests/test_cygwinccompiler.py
+file path=usr/lib/python3.9/distutils/tests/test_dep_util.py
+file path=usr/lib/python3.9/distutils/tests/test_dir_util.py
+file path=usr/lib/python3.9/distutils/tests/test_dist.py
+file path=usr/lib/python3.9/distutils/tests/test_extension.py
+file path=usr/lib/python3.9/distutils/tests/test_file_util.py
+file path=usr/lib/python3.9/distutils/tests/test_filelist.py
+file path=usr/lib/python3.9/distutils/tests/test_install.py
+file path=usr/lib/python3.9/distutils/tests/test_install_data.py
+file path=usr/lib/python3.9/distutils/tests/test_install_headers.py
+file path=usr/lib/python3.9/distutils/tests/test_install_lib.py
+file path=usr/lib/python3.9/distutils/tests/test_install_scripts.py
+file path=usr/lib/python3.9/distutils/tests/test_log.py
+file path=usr/lib/python3.9/distutils/tests/test_msvc9compiler.py
+file path=usr/lib/python3.9/distutils/tests/test_msvccompiler.py
+file path=usr/lib/python3.9/distutils/tests/test_register.py
+file path=usr/lib/python3.9/distutils/tests/test_sdist.py
+file path=usr/lib/python3.9/distutils/tests/test_spawn.py
+file path=usr/lib/python3.9/distutils/tests/test_sysconfig.py
+file path=usr/lib/python3.9/distutils/tests/test_text_file.py
+file path=usr/lib/python3.9/distutils/tests/test_unixccompiler.py
+file path=usr/lib/python3.9/distutils/tests/test_upload.py
+file path=usr/lib/python3.9/distutils/tests/test_util.py
+file path=usr/lib/python3.9/distutils/tests/test_version.py
+file path=usr/lib/python3.9/distutils/tests/test_versionpredicate.py
+file path=usr/lib/python3.9/distutils/tests/xxmodule.c
+file path=usr/lib/python3.9/distutils/text_file.py
+file path=usr/lib/python3.9/distutils/unixccompiler.py
+file path=usr/lib/python3.9/distutils/util.py
+file path=usr/lib/python3.9/distutils/version.py
+file path=usr/lib/python3.9/distutils/versionpredicate.py
+file path=usr/lib/python3.9/doctest.py
+file path=usr/lib/python3.9/email/__init__.py
+file path=usr/lib/python3.9/email/_encoded_words.py
+file path=usr/lib/python3.9/email/_header_value_parser.py
+file path=usr/lib/python3.9/email/_parseaddr.py
+file path=usr/lib/python3.9/email/_policybase.py
+file path=usr/lib/python3.9/email/architecture.rst
+file path=usr/lib/python3.9/email/base64mime.py
+file path=usr/lib/python3.9/email/charset.py
+file path=usr/lib/python3.9/email/contentmanager.py
+file path=usr/lib/python3.9/email/encoders.py
+file path=usr/lib/python3.9/email/errors.py
+file path=usr/lib/python3.9/email/feedparser.py
+file path=usr/lib/python3.9/email/generator.py
+file path=usr/lib/python3.9/email/header.py
+file path=usr/lib/python3.9/email/headerregistry.py
+file path=usr/lib/python3.9/email/iterators.py
+file path=usr/lib/python3.9/email/message.py
+file path=usr/lib/python3.9/email/mime/__init__.py
+file path=usr/lib/python3.9/email/mime/application.py
+file path=usr/lib/python3.9/email/mime/audio.py
+file path=usr/lib/python3.9/email/mime/base.py
+file path=usr/lib/python3.9/email/mime/image.py
+file path=usr/lib/python3.9/email/mime/message.py
+file path=usr/lib/python3.9/email/mime/multipart.py
+file path=usr/lib/python3.9/email/mime/nonmultipart.py
+file path=usr/lib/python3.9/email/mime/text.py
+file path=usr/lib/python3.9/email/parser.py
+file path=usr/lib/python3.9/email/policy.py
+file path=usr/lib/python3.9/email/quoprimime.py
+file path=usr/lib/python3.9/email/utils.py
+file path=usr/lib/python3.9/encodings/__init__.py
+file path=usr/lib/python3.9/encodings/aliases.py
+file path=usr/lib/python3.9/encodings/ascii.py
+file path=usr/lib/python3.9/encodings/base64_codec.py
+file path=usr/lib/python3.9/encodings/big5.py
+file path=usr/lib/python3.9/encodings/big5hkscs.py
+file path=usr/lib/python3.9/encodings/bz2_codec.py
+file path=usr/lib/python3.9/encodings/charmap.py
+file path=usr/lib/python3.9/encodings/cp037.py
+file path=usr/lib/python3.9/encodings/cp1006.py
+file path=usr/lib/python3.9/encodings/cp1026.py
+file path=usr/lib/python3.9/encodings/cp1125.py
+file path=usr/lib/python3.9/encodings/cp1140.py
+file path=usr/lib/python3.9/encodings/cp1250.py
+file path=usr/lib/python3.9/encodings/cp1251.py
+file path=usr/lib/python3.9/encodings/cp1252.py
+file path=usr/lib/python3.9/encodings/cp1253.py
+file path=usr/lib/python3.9/encodings/cp1254.py
+file path=usr/lib/python3.9/encodings/cp1255.py
+file path=usr/lib/python3.9/encodings/cp1256.py
+file path=usr/lib/python3.9/encodings/cp1257.py
+file path=usr/lib/python3.9/encodings/cp1258.py
+file path=usr/lib/python3.9/encodings/cp273.py
+file path=usr/lib/python3.9/encodings/cp424.py
+file path=usr/lib/python3.9/encodings/cp437.py
+file path=usr/lib/python3.9/encodings/cp500.py
+file path=usr/lib/python3.9/encodings/cp720.py
+file path=usr/lib/python3.9/encodings/cp737.py
+file path=usr/lib/python3.9/encodings/cp775.py
+file path=usr/lib/python3.9/encodings/cp850.py
+file path=usr/lib/python3.9/encodings/cp852.py
+file path=usr/lib/python3.9/encodings/cp855.py
+file path=usr/lib/python3.9/encodings/cp856.py
+file path=usr/lib/python3.9/encodings/cp857.py
+file path=usr/lib/python3.9/encodings/cp858.py
+file path=usr/lib/python3.9/encodings/cp860.py
+file path=usr/lib/python3.9/encodings/cp861.py
+file path=usr/lib/python3.9/encodings/cp862.py
+file path=usr/lib/python3.9/encodings/cp863.py
+file path=usr/lib/python3.9/encodings/cp864.py
+file path=usr/lib/python3.9/encodings/cp865.py
+file path=usr/lib/python3.9/encodings/cp866.py
+file path=usr/lib/python3.9/encodings/cp869.py
+file path=usr/lib/python3.9/encodings/cp874.py
+file path=usr/lib/python3.9/encodings/cp875.py
+file path=usr/lib/python3.9/encodings/cp932.py
+file path=usr/lib/python3.9/encodings/cp949.py
+file path=usr/lib/python3.9/encodings/cp950.py
+file path=usr/lib/python3.9/encodings/euc_jis_2004.py
+file path=usr/lib/python3.9/encodings/euc_jisx0213.py
+file path=usr/lib/python3.9/encodings/euc_jp.py
+file path=usr/lib/python3.9/encodings/euc_kr.py
+file path=usr/lib/python3.9/encodings/gb18030.py
+file path=usr/lib/python3.9/encodings/gb2312.py
+file path=usr/lib/python3.9/encodings/gbk.py
+file path=usr/lib/python3.9/encodings/hex_codec.py
+file path=usr/lib/python3.9/encodings/hp_roman8.py
+file path=usr/lib/python3.9/encodings/hz.py
+file path=usr/lib/python3.9/encodings/idna.py
+file path=usr/lib/python3.9/encodings/iso2022_jp.py
+file path=usr/lib/python3.9/encodings/iso2022_jp_1.py
+file path=usr/lib/python3.9/encodings/iso2022_jp_2.py
+file path=usr/lib/python3.9/encodings/iso2022_jp_2004.py
+file path=usr/lib/python3.9/encodings/iso2022_jp_3.py
+file path=usr/lib/python3.9/encodings/iso2022_jp_ext.py
+file path=usr/lib/python3.9/encodings/iso2022_kr.py
+file path=usr/lib/python3.9/encodings/iso8859_1.py
+file path=usr/lib/python3.9/encodings/iso8859_10.py
+file path=usr/lib/python3.9/encodings/iso8859_11.py
+file path=usr/lib/python3.9/encodings/iso8859_13.py
+file path=usr/lib/python3.9/encodings/iso8859_14.py
+file path=usr/lib/python3.9/encodings/iso8859_15.py
+file path=usr/lib/python3.9/encodings/iso8859_16.py
+file path=usr/lib/python3.9/encodings/iso8859_2.py
+file path=usr/lib/python3.9/encodings/iso8859_3.py
+file path=usr/lib/python3.9/encodings/iso8859_4.py
+file path=usr/lib/python3.9/encodings/iso8859_5.py
+file path=usr/lib/python3.9/encodings/iso8859_6.py
+file path=usr/lib/python3.9/encodings/iso8859_7.py
+file path=usr/lib/python3.9/encodings/iso8859_8.py
+file path=usr/lib/python3.9/encodings/iso8859_9.py
+file path=usr/lib/python3.9/encodings/johab.py
+file path=usr/lib/python3.9/encodings/koi8_r.py
+file path=usr/lib/python3.9/encodings/koi8_t.py
+file path=usr/lib/python3.9/encodings/koi8_u.py
+file path=usr/lib/python3.9/encodings/kz1048.py
+file path=usr/lib/python3.9/encodings/latin_1.py
+file path=usr/lib/python3.9/encodings/mac_arabic.py
+file path=usr/lib/python3.9/encodings/mac_croatian.py
+file path=usr/lib/python3.9/encodings/mac_cyrillic.py
+file path=usr/lib/python3.9/encodings/mac_farsi.py
+file path=usr/lib/python3.9/encodings/mac_greek.py
+file path=usr/lib/python3.9/encodings/mac_iceland.py
+file path=usr/lib/python3.9/encodings/mac_latin2.py
+file path=usr/lib/python3.9/encodings/mac_roman.py
+file path=usr/lib/python3.9/encodings/mac_romanian.py
+file path=usr/lib/python3.9/encodings/mac_turkish.py
+file path=usr/lib/python3.9/encodings/mbcs.py
+file path=usr/lib/python3.9/encodings/oem.py
+file path=usr/lib/python3.9/encodings/palmos.py
+file path=usr/lib/python3.9/encodings/ptcp154.py
+file path=usr/lib/python3.9/encodings/punycode.py
+file path=usr/lib/python3.9/encodings/quopri_codec.py
+file path=usr/lib/python3.9/encodings/raw_unicode_escape.py
+file path=usr/lib/python3.9/encodings/rot_13.py
+file path=usr/lib/python3.9/encodings/shift_jis.py
+file path=usr/lib/python3.9/encodings/shift_jis_2004.py
+file path=usr/lib/python3.9/encodings/shift_jisx0213.py
+file path=usr/lib/python3.9/encodings/tis_620.py
+file path=usr/lib/python3.9/encodings/undefined.py
+file path=usr/lib/python3.9/encodings/unicode_escape.py
+file path=usr/lib/python3.9/encodings/utf_16.py
+file path=usr/lib/python3.9/encodings/utf_16_be.py
+file path=usr/lib/python3.9/encodings/utf_16_le.py
+file path=usr/lib/python3.9/encodings/utf_32.py
+file path=usr/lib/python3.9/encodings/utf_32_be.py
+file path=usr/lib/python3.9/encodings/utf_32_le.py
+file path=usr/lib/python3.9/encodings/utf_7.py
+file path=usr/lib/python3.9/encodings/utf_8.py
+file path=usr/lib/python3.9/encodings/utf_8_sig.py
+file path=usr/lib/python3.9/encodings/uu_codec.py
+file path=usr/lib/python3.9/encodings/zlib_codec.py
+file path=usr/lib/python3.9/ensurepip/__init__.py
+file path=usr/lib/python3.9/ensurepip/__main__.py
+file path=usr/lib/python3.9/ensurepip/_bundled/__init__.py
+file path=usr/lib/python3.9/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl
+file path=usr/lib/python3.9/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl
+file path=usr/lib/python3.9/ensurepip/_uninstall.py
+file path=usr/lib/python3.9/enum.py
+file path=usr/lib/python3.9/filecmp.py
+file path=usr/lib/python3.9/fileinput.py
+file path=usr/lib/python3.9/fnmatch.py
+file path=usr/lib/python3.9/formatter.py
+file path=usr/lib/python3.9/fractions.py
+file path=usr/lib/python3.9/ftplib.py
+file path=usr/lib/python3.9/functools.py
+file path=usr/lib/python3.9/genericpath.py
+file path=usr/lib/python3.9/getopt.py
+file path=usr/lib/python3.9/getpass.py
+file path=usr/lib/python3.9/gettext.py
+file path=usr/lib/python3.9/glob.py
+file path=usr/lib/python3.9/graphlib.py
+file path=usr/lib/python3.9/gzip.py
+file path=usr/lib/python3.9/hashlib.py
+file path=usr/lib/python3.9/heapq.py
+file path=usr/lib/python3.9/hmac.py
+file path=usr/lib/python3.9/html/__init__.py
+file path=usr/lib/python3.9/html/entities.py
+file path=usr/lib/python3.9/html/parser.py
+file path=usr/lib/python3.9/http/__init__.py
+file path=usr/lib/python3.9/http/client.py
+file path=usr/lib/python3.9/http/cookiejar.py
+file path=usr/lib/python3.9/http/cookies.py
+file path=usr/lib/python3.9/http/server.py
+#file path=usr/lib/python3.9/idlelib/CREDITS.txt
+#file path=usr/lib/python3.9/idlelib/ChangeLog
+#file path=usr/lib/python3.9/idlelib/HISTORY.txt
+#file path=usr/lib/python3.9/idlelib/Icons/README.txt
+#file path=usr/lib/python3.9/idlelib/Icons/folder.gif
+#file path=usr/lib/python3.9/idlelib/Icons/idle.ico
+#file path=usr/lib/python3.9/idlelib/Icons/idle_16.gif
+#file path=usr/lib/python3.9/idlelib/Icons/idle_16.png
+#file path=usr/lib/python3.9/idlelib/Icons/idle_256.png
+#file path=usr/lib/python3.9/idlelib/Icons/idle_32.gif
+#file path=usr/lib/python3.9/idlelib/Icons/idle_32.png
+#file path=usr/lib/python3.9/idlelib/Icons/idle_48.gif
+#file path=usr/lib/python3.9/idlelib/Icons/idle_48.png
+#file path=usr/lib/python3.9/idlelib/Icons/minusnode.gif
+#file path=usr/lib/python3.9/idlelib/Icons/openfolder.gif
+#file path=usr/lib/python3.9/idlelib/Icons/plusnode.gif
+#file path=usr/lib/python3.9/idlelib/Icons/python.gif
+#file path=usr/lib/python3.9/idlelib/Icons/tk.gif
+#file path=usr/lib/python3.9/idlelib/NEWS.txt
+#file path=usr/lib/python3.9/idlelib/NEWS2x.txt
+#file path=usr/lib/python3.9/idlelib/README.txt
+#file path=usr/lib/python3.9/idlelib/TODO.txt
+#file path=usr/lib/python3.9/idlelib/__init__.py
+#file path=usr/lib/python3.9/idlelib/__main__.py
+#file path=usr/lib/python3.9/idlelib/autocomplete.py
+#file path=usr/lib/python3.9/idlelib/autocomplete_w.py
+#file path=usr/lib/python3.9/idlelib/autoexpand.py
+#file path=usr/lib/python3.9/idlelib/browser.py
+#file path=usr/lib/python3.9/idlelib/calltip.py
+#file path=usr/lib/python3.9/idlelib/calltip_w.py
+#file path=usr/lib/python3.9/idlelib/codecontext.py
+#file path=usr/lib/python3.9/idlelib/colorizer.py
+#file path=usr/lib/python3.9/idlelib/config-extensions.def
+#file path=usr/lib/python3.9/idlelib/config-highlight.def
+#file path=usr/lib/python3.9/idlelib/config-keys.def
+#file path=usr/lib/python3.9/idlelib/config-main.def
+#file path=usr/lib/python3.9/idlelib/config.py
+#file path=usr/lib/python3.9/idlelib/config_key.py
+#file path=usr/lib/python3.9/idlelib/configdialog.py
+#file path=usr/lib/python3.9/idlelib/debugger.py
+#file path=usr/lib/python3.9/idlelib/debugger_r.py
+#file path=usr/lib/python3.9/idlelib/debugobj.py
+#file path=usr/lib/python3.9/idlelib/debugobj_r.py
+#file path=usr/lib/python3.9/idlelib/delegator.py
+#file path=usr/lib/python3.9/idlelib/dynoption.py
+#file path=usr/lib/python3.9/idlelib/editor.py
+#file path=usr/lib/python3.9/idlelib/extend.txt
+#file path=usr/lib/python3.9/idlelib/filelist.py
+#file path=usr/lib/python3.9/idlelib/format.py
+#file path=usr/lib/python3.9/idlelib/grep.py
+#file path=usr/lib/python3.9/idlelib/help.html
+#file path=usr/lib/python3.9/idlelib/help.py
+#file path=usr/lib/python3.9/idlelib/help_about.py
+#file path=usr/lib/python3.9/idlelib/history.py
+#file path=usr/lib/python3.9/idlelib/hyperparser.py
+#file path=usr/lib/python3.9/idlelib/idle.bat
+#file path=usr/lib/python3.9/idlelib/idle.py
+#file path=usr/lib/python3.9/idlelib/idle.pyw
+#file path=usr/lib/python3.9/idlelib/idle_test/README.txt
+#file path=usr/lib/python3.9/idlelib/idle_test/__init__.py
+#file path=usr/lib/python3.9/idlelib/idle_test/htest.py
+#file path=usr/lib/python3.9/idlelib/idle_test/mock_idle.py
+#file path=usr/lib/python3.9/idlelib/idle_test/mock_tk.py
+#file path=usr/lib/python3.9/idlelib/idle_test/template.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_autocomplete.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_autocomplete_w.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_autoexpand.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_browser.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_calltip.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_calltip_w.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_codecontext.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_colorizer.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_config.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_config_key.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_configdialog.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_debugger.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_debugger_r.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_debugobj.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_debugobj_r.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_delegator.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_editmenu.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_editor.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_filelist.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_format.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_grep.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_help.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_help_about.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_history.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_hyperparser.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_iomenu.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_macosx.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_mainmenu.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_multicall.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_outwin.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_parenmatch.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_pathbrowser.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_percolator.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_pyparse.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_pyshell.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_query.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_redirector.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_replace.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_rpc.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_run.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_runscript.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_scrolledlist.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_search.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_searchbase.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_searchengine.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_sidebar.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_squeezer.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_stackviewer.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_statusbar.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_text.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_textview.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_tooltip.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_tree.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_undo.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_warning.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_window.py
+#file path=usr/lib/python3.9/idlelib/idle_test/test_zoomheight.py
+#file path=usr/lib/python3.9/idlelib/iomenu.py
+#file path=usr/lib/python3.9/idlelib/macosx.py
+#file path=usr/lib/python3.9/idlelib/mainmenu.py
+#file path=usr/lib/python3.9/idlelib/multicall.py
+#file path=usr/lib/python3.9/idlelib/outwin.py
+#file path=usr/lib/python3.9/idlelib/parenmatch.py
+#file path=usr/lib/python3.9/idlelib/pathbrowser.py
+#file path=usr/lib/python3.9/idlelib/percolator.py
+#file path=usr/lib/python3.9/idlelib/pyparse.py
+#file path=usr/lib/python3.9/idlelib/pyshell.py
+#file path=usr/lib/python3.9/idlelib/query.py
+#file path=usr/lib/python3.9/idlelib/redirector.py
+#file path=usr/lib/python3.9/idlelib/replace.py
+#file path=usr/lib/python3.9/idlelib/rpc.py
+#file path=usr/lib/python3.9/idlelib/run.py
+#file path=usr/lib/python3.9/idlelib/runscript.py
+#file path=usr/lib/python3.9/idlelib/scrolledlist.py
+#file path=usr/lib/python3.9/idlelib/search.py
+#file path=usr/lib/python3.9/idlelib/searchbase.py
+#file path=usr/lib/python3.9/idlelib/searchengine.py
+#file path=usr/lib/python3.9/idlelib/sidebar.py
+#file path=usr/lib/python3.9/idlelib/squeezer.py
+#file path=usr/lib/python3.9/idlelib/stackviewer.py
+#file path=usr/lib/python3.9/idlelib/statusbar.py
+#file path=usr/lib/python3.9/idlelib/textview.py
+#file path=usr/lib/python3.9/idlelib/tooltip.py
+#file path=usr/lib/python3.9/idlelib/tree.py
+#file path=usr/lib/python3.9/idlelib/undo.py
+#file path=usr/lib/python3.9/idlelib/window.py
+#file path=usr/lib/python3.9/idlelib/zoomheight.py
+#file path=usr/lib/python3.9/idlelib/zzdummy.py
+file path=usr/lib/python3.9/imaplib.py
+file path=usr/lib/python3.9/imghdr.py
+file path=usr/lib/python3.9/imp.py
+file path=usr/lib/python3.9/importlib/__init__.py
+file path=usr/lib/python3.9/importlib/_bootstrap.py
+file path=usr/lib/python3.9/importlib/_bootstrap_external.py
+file path=usr/lib/python3.9/importlib/_common.py
+file path=usr/lib/python3.9/importlib/abc.py
+file path=usr/lib/python3.9/importlib/machinery.py
+file path=usr/lib/python3.9/importlib/metadata.py
+file path=usr/lib/python3.9/importlib/resources.py
+file path=usr/lib/python3.9/importlib/util.py
+file path=usr/lib/python3.9/inspect.py
+file path=usr/lib/python3.9/io.py
+file path=usr/lib/python3.9/ipaddress.py
+file path=usr/lib/python3.9/json/__init__.py
+file path=usr/lib/python3.9/json/decoder.py
+file path=usr/lib/python3.9/json/encoder.py
+file path=usr/lib/python3.9/json/scanner.py
+file path=usr/lib/python3.9/json/tool.py
+file path=usr/lib/python3.9/keyword.py
+file path=usr/lib/python3.9/lib-dynload/_asyncio.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_bisect.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_blake2.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_bz2.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_cn.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_hk.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_iso2022.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_jp.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_kr.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_codecs_tw.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_contextvars.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_crypt.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_csv.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_ctypes.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_ctypes_test.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_curses_panel.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_datetime.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_dbm.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_decimal.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_elementtree.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_gdbm.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_hashlib.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_heapq.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_json.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_lsprof.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_lzma.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_md5.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_multibytecodec.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_multiprocessing.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_opcode.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_pickle.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_posixshmem.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_posixsubprocess.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_queue.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_random.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_sha1.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_sha256.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_sha3.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_sha512.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_socket.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_sqlite3.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_ssl.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_statistics.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_struct.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_testbuffer.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_testcapi.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_testimportmultiple.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_testinternalcapi.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_testmultiphase.cpython-39.so
+#file path=usr/lib/python3.9/lib-dynload/_tkinter.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_uuid.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_xxsubinterpreters.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_xxtestfuzz.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/_zoneinfo.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/array.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/audioop.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/binascii.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/cmath.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/dlpi.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/fcntl.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/grp.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/math.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/mmap.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/nis.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/ossaudiodev.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/parser.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/privileges.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/pyexpat.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/rbac.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/readline.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/resource.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/select.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/spwd.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/syslog.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/termios.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/ucred.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/unicodedata.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/xxlimited.cpython-39.so
+file path=usr/lib/python3.9/lib-dynload/zlib.cpython-39.so
+file path=usr/lib/python3.9/lib2to3/Grammar$(COMPONENT_VERSION).final.0.pickle
+file path=usr/lib/python3.9/lib2to3/Grammar.txt
+file path=usr/lib/python3.9/lib2to3/PatternGrammar$(COMPONENT_VERSION).final.0.pickle
+file path=usr/lib/python3.9/lib2to3/PatternGrammar.txt
+file path=usr/lib/python3.9/lib2to3/__init__.py
+file path=usr/lib/python3.9/lib2to3/__main__.py
+file path=usr/lib/python3.9/lib2to3/btm_matcher.py
+file path=usr/lib/python3.9/lib2to3/btm_utils.py
+file path=usr/lib/python3.9/lib2to3/fixer_base.py
+file path=usr/lib/python3.9/lib2to3/fixer_util.py
+file path=usr/lib/python3.9/lib2to3/fixes/__init__.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_apply.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_asserts.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_basestring.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_buffer.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_dict.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_except.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_exec.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_execfile.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_exitfunc.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_filter.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_funcattrs.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_future.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_getcwdu.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_has_key.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_idioms.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_import.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_imports.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_imports2.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_input.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_intern.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_isinstance.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_itertools.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_itertools_imports.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_long.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_map.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_metaclass.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_methodattrs.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_ne.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_next.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_nonzero.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_numliterals.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_operator.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_paren.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_print.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_raise.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_raw_input.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_reduce.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_reload.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_renames.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_repr.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_set_literal.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_standarderror.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_sys_exc.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_throw.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_tuple_params.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_types.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_unicode.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_urllib.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_ws_comma.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_xrange.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_xreadlines.py
+file path=usr/lib/python3.9/lib2to3/fixes/fix_zip.py
+file path=usr/lib/python3.9/lib2to3/main.py
+file path=usr/lib/python3.9/lib2to3/patcomp.py
+file path=usr/lib/python3.9/lib2to3/pgen2/__init__.py
+file path=usr/lib/python3.9/lib2to3/pgen2/conv.py
+file path=usr/lib/python3.9/lib2to3/pgen2/driver.py
+file path=usr/lib/python3.9/lib2to3/pgen2/grammar.py
+file path=usr/lib/python3.9/lib2to3/pgen2/literals.py
+file path=usr/lib/python3.9/lib2to3/pgen2/parse.py
+file path=usr/lib/python3.9/lib2to3/pgen2/pgen.py
+file path=usr/lib/python3.9/lib2to3/pgen2/token.py
+file path=usr/lib/python3.9/lib2to3/pgen2/tokenize.py
+file path=usr/lib/python3.9/lib2to3/pygram.py
+file path=usr/lib/python3.9/lib2to3/pytree.py
+file path=usr/lib/python3.9/lib2to3/refactor.py
+file path=usr/lib/python3.9/lib2to3/tests/__init__.py
+file path=usr/lib/python3.9/lib2to3/tests/__main__.py
+file path=usr/lib/python3.9/lib2to3/tests/data/README
+file path=usr/lib/python3.9/lib2to3/tests/data/bom.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/crlf.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/different_encoding.py pkg.depend.bypass-generate=.* pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/false_encoding.py pkg.depend.bypass-generate=.* pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/bad_order.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/__init__.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/fix_explicit.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/fix_first.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/fix_last.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/fix_parrot.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/myfixes/fix_preorder.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/no_fixer_cls.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/fixers/parrot_example.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/infinite_recursion.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/py2_test_grammar.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/data/py3_test_grammar.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/lib2to3/tests/pytree_idempotency.py
+file path=usr/lib/python3.9/lib2to3/tests/support.py
+file path=usr/lib/python3.9/lib2to3/tests/test_all_fixers.py
+file path=usr/lib/python3.9/lib2to3/tests/test_fixers.py
+file path=usr/lib/python3.9/lib2to3/tests/test_main.py
+file path=usr/lib/python3.9/lib2to3/tests/test_parser.py
+file path=usr/lib/python3.9/lib2to3/tests/test_pytree.py
+file path=usr/lib/python3.9/lib2to3/tests/test_refactor.py
+file path=usr/lib/python3.9/lib2to3/tests/test_util.py
+file path=usr/lib/python3.9/linecache.py
+file path=usr/lib/python3.9/locale.py
+file path=usr/lib/python3.9/logging/__init__.py
+file path=usr/lib/python3.9/logging/config.py
+file path=usr/lib/python3.9/logging/handlers.py
+file path=usr/lib/python3.9/lzma.py
+file path=usr/lib/python3.9/mailbox.py
+file path=usr/lib/python3.9/mailcap.py
+file path=usr/lib/python3.9/mimetypes.py
+file path=usr/lib/python3.9/modulefinder.py
+file path=usr/lib/python3.9/multiprocessing/__init__.py
+file path=usr/lib/python3.9/multiprocessing/connection.py
+file path=usr/lib/python3.9/multiprocessing/context.py
+file path=usr/lib/python3.9/multiprocessing/dummy/__init__.py
+file path=usr/lib/python3.9/multiprocessing/dummy/connection.py
+file path=usr/lib/python3.9/multiprocessing/forkserver.py
+file path=usr/lib/python3.9/multiprocessing/heap.py
+file path=usr/lib/python3.9/multiprocessing/managers.py
+file path=usr/lib/python3.9/multiprocessing/pool.py
+file path=usr/lib/python3.9/multiprocessing/popen_fork.py
+file path=usr/lib/python3.9/multiprocessing/popen_forkserver.py
+file path=usr/lib/python3.9/multiprocessing/popen_spawn_posix.py
+file path=usr/lib/python3.9/multiprocessing/popen_spawn_win32.py
+file path=usr/lib/python3.9/multiprocessing/process.py
+file path=usr/lib/python3.9/multiprocessing/queues.py
+file path=usr/lib/python3.9/multiprocessing/reduction.py
+file path=usr/lib/python3.9/multiprocessing/resource_sharer.py
+file path=usr/lib/python3.9/multiprocessing/resource_tracker.py
+file path=usr/lib/python3.9/multiprocessing/shared_memory.py
+file path=usr/lib/python3.9/multiprocessing/sharedctypes.py
+file path=usr/lib/python3.9/multiprocessing/spawn.py
+file path=usr/lib/python3.9/multiprocessing/synchronize.py
+file path=usr/lib/python3.9/multiprocessing/util.py
+file path=usr/lib/python3.9/netrc.py
+file path=usr/lib/python3.9/nntplib.py
+file path=usr/lib/python3.9/ntpath.py
+file path=usr/lib/python3.9/nturl2path.py
+file path=usr/lib/python3.9/numbers.py
+file path=usr/lib/python3.9/opcode.py
+file path=usr/lib/python3.9/operator.py
+file path=usr/lib/python3.9/optparse.py
+file path=usr/lib/python3.9/os.py
+file path=usr/lib/python3.9/pathlib.py
+file path=usr/lib/python3.9/pdb.py
+file path=usr/lib/python3.9/pickle.py
+file path=usr/lib/python3.9/pickletools.py
+file path=usr/lib/python3.9/pipes.py
+file path=usr/lib/python3.9/pkgutil.py
+file path=usr/lib/python3.9/platform.py
+file path=usr/lib/python3.9/plistlib.py
+file path=usr/lib/python3.9/poplib.py
+file path=usr/lib/python3.9/posixpath.py
+file path=usr/lib/python3.9/pprint.py
+file path=usr/lib/python3.9/profile.py
+file path=usr/lib/python3.9/pstats.py
+file path=usr/lib/python3.9/pty.py
+file path=usr/lib/python3.9/py_compile.py
+file path=usr/lib/python3.9/pyclbr.py
+file path=usr/lib/python3.9/pydoc.py
+file path=usr/lib/python3.9/pydoc_data/__init__.py
+file path=usr/lib/python3.9/pydoc_data/_pydoc.css
+file path=usr/lib/python3.9/pydoc_data/topics.py
+file path=usr/lib/python3.9/queue.py
+file path=usr/lib/python3.9/quopri.py
+file path=usr/lib/python3.9/random.py
+file path=usr/lib/python3.9/re.py
+file path=usr/lib/python3.9/reprlib.py
+file path=usr/lib/python3.9/rlcompleter.py
+file path=usr/lib/python3.9/runpy.py
+file path=usr/lib/python3.9/sched.py
+file path=usr/lib/python3.9/secrets.py
+file path=usr/lib/python3.9/selectors.py
+file path=usr/lib/python3.9/shelve.py
+file path=usr/lib/python3.9/shlex.py
+file path=usr/lib/python3.9/shutil.py
+file path=usr/lib/python3.9/signal.py
+file path=usr/lib/python3.9/site-packages/README.txt
+file path=usr/lib/python3.9/site-packages/vendor-packages.pth
+file path=usr/lib/python3.9/site.py
+file path=usr/lib/python3.9/smtpd.py
+file path=usr/lib/python3.9/smtplib.py
+file path=usr/lib/python3.9/sndhdr.py
+file path=usr/lib/python3.9/socket.py
+file path=usr/lib/python3.9/socketserver.py
+file path=usr/lib/python3.9/sqlite3/__init__.py
+file path=usr/lib/python3.9/sqlite3/dbapi2.py
+file path=usr/lib/python3.9/sqlite3/dump.py
+file path=usr/lib/python3.9/sqlite3/test/__init__.py
+file path=usr/lib/python3.9/sqlite3/test/backup.py
+file path=usr/lib/python3.9/sqlite3/test/dbapi.py
+file path=usr/lib/python3.9/sqlite3/test/dump.py
+file path=usr/lib/python3.9/sqlite3/test/factory.py
+file path=usr/lib/python3.9/sqlite3/test/hooks.py
+file path=usr/lib/python3.9/sqlite3/test/regression.py
+file path=usr/lib/python3.9/sqlite3/test/transactions.py
+file path=usr/lib/python3.9/sqlite3/test/types.py
+file path=usr/lib/python3.9/sqlite3/test/userfunctions.py
+file path=usr/lib/python3.9/sre_compile.py
+file path=usr/lib/python3.9/sre_constants.py
+file path=usr/lib/python3.9/sre_parse.py
+file path=usr/lib/python3.9/ssl.py
+file path=usr/lib/python3.9/stat.py
+file path=usr/lib/python3.9/statistics.py
+file path=usr/lib/python3.9/string.py
+file path=usr/lib/python3.9/stringprep.py
+file path=usr/lib/python3.9/struct.py
+file path=usr/lib/python3.9/subprocess.py
+file path=usr/lib/python3.9/sunau.py
+file path=usr/lib/python3.9/symbol.py
+file path=usr/lib/python3.9/symtable.py
+file path=usr/lib/python3.9/sysconfig.py
+file path=usr/lib/python3.9/tabnanny.py
+file path=usr/lib/python3.9/tarfile.py
+file path=usr/lib/python3.9/telnetlib.py
+file path=usr/lib/python3.9/tempfile.py
+file path=usr/lib/python3.9/test/Sine-1000Hz-300ms.aif
+file path=usr/lib/python3.9/test/__init__.py
+file path=usr/lib/python3.9/test/__main__.py
+file path=usr/lib/python3.9/test/_test_multiprocessing.py
+file path=usr/lib/python3.9/test/allsans.pem
+file path=usr/lib/python3.9/test/ann_module.py
+file path=usr/lib/python3.9/test/ann_module2.py
+file path=usr/lib/python3.9/test/ann_module3.py
+file path=usr/lib/python3.9/test/audiodata/pluck-alaw.aifc
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm16.aiff
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm16.au
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm16.wav
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm24.aiff
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm24.au
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm24.wav
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm32.aiff
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm32.au
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm32.wav
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm8.aiff
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm8.au
+file path=usr/lib/python3.9/test/audiodata/pluck-pcm8.wav
+file path=usr/lib/python3.9/test/audiodata/pluck-ulaw.aifc
+file path=usr/lib/python3.9/test/audiodata/pluck-ulaw.au
+file path=usr/lib/python3.9/test/audiotest.au
+file path=usr/lib/python3.9/test/audiotests.py
+file path=usr/lib/python3.9/test/audit-tests.py
+file path=usr/lib/python3.9/test/autotest.py
+file path=usr/lib/python3.9/test/bad_coding.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/bad_coding2.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/bad_getattr.py
+file path=usr/lib/python3.9/test/bad_getattr2.py
+file path=usr/lib/python3.9/test/bad_getattr3.py
+file path=usr/lib/python3.9/test/badcert.pem
+file path=usr/lib/python3.9/test/badkey.pem
+file path=usr/lib/python3.9/test/badsyntax_3131.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/badsyntax_future10.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/badsyntax_future3.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/badsyntax_future4.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/badsyntax_future5.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/badsyntax_future6.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/badsyntax_future7.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/badsyntax_future8.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/badsyntax_future9.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/badsyntax_pep3120.py pkg.tmp.autopyc=false
+file path=usr/lib/python3.9/test/bisect_cmd.py
+file path=usr/lib/python3.9/test/capath/4e1295a3.0
+file path=usr/lib/python3.9/test/capath/5ed36f99.0
+file path=usr/lib/python3.9/test/capath/6e88d7b8.0
+file path=usr/lib/python3.9/test/capath/99d0fa06.0
+file path=usr/lib/python3.9/test/capath/b1930218.0
+file path=usr/lib/python3.9/test/capath/ceff1710.0
+file path=usr/lib/python3.9/test/cfgparser.1
+file path=usr/lib/python3.9/test/cfgparser.2
+file path=usr/lib/python3.9/test/cfgparser.3
+file path=usr/lib/python3.9/test/cjkencodings/big5-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/big5.txt
+file path=usr/lib/python3.9/test/cjkencodings/big5hkscs-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/big5hkscs.txt
+file path=usr/lib/python3.9/test/cjkencodings/cp949-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/cp949.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_jisx0213-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_jisx0213.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_jp-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_jp.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_kr-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/euc_kr.txt
+file path=usr/lib/python3.9/test/cjkencodings/gb18030-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/gb18030.txt
+file path=usr/lib/python3.9/test/cjkencodings/gb2312-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/gb2312.txt
+file path=usr/lib/python3.9/test/cjkencodings/gbk-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/gbk.txt
+file path=usr/lib/python3.9/test/cjkencodings/hz-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/hz.txt
+file path=usr/lib/python3.9/test/cjkencodings/iso2022_jp-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/iso2022_jp.txt
+file path=usr/lib/python3.9/test/cjkencodings/iso2022_kr-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/iso2022_kr.txt
+file path=usr/lib/python3.9/test/cjkencodings/johab-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/johab.txt
+file path=usr/lib/python3.9/test/cjkencodings/shift_jis-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/shift_jis.txt
+file path=usr/lib/python3.9/test/cjkencodings/shift_jisx0213-utf8.txt
+file path=usr/lib/python3.9/test/cjkencodings/shift_jisx0213.txt
+file path=usr/lib/python3.9/test/clinic.test
+file path=usr/lib/python3.9/test/cmath_testcases.txt
+file path=usr/lib/python3.9/test/coding20731.py
+file path=usr/lib/python3.9/test/curses_tests.py
+file path=usr/lib/python3.9/test/data/README
+file path=usr/lib/python3.9/test/dataclass_module_1.py
+file path=usr/lib/python3.9/test/dataclass_module_1_str.py
+file path=usr/lib/python3.9/test/dataclass_module_2.py
+file path=usr/lib/python3.9/test/dataclass_module_2_str.py
+file path=usr/lib/python3.9/test/dataclass_textanno.py
+file path=usr/lib/python3.9/test/datetimetester.py
+file path=usr/lib/python3.9/test/decimaltestdata/abs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/add.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/and.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/base.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/clamp.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/class.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/compare.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/comparetotal.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/comparetotmag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/copy.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/copyabs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/copynegate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/copysign.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddAbs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddAdd.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddAnd.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddBase.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCanonical.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddClass.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCompare.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCompareSig.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCompareTotal.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCompareTotalMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCopy.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCopyAbs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCopyNegate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddCopySign.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddDivide.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddDivideInt.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddEncode.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddFMA.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddInvert.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddLogB.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMax.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMaxMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMin.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMinMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMinus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddMultiply.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddNextMinus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddNextPlus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddNextToward.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddOr.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddPlus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddQuantize.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddReduce.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddRemainder.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddRemainderNear.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddRotate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddSameQuantum.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddScaleB.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddShift.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddSubtract.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddToIntegral.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ddXor.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/decDouble.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/decQuad.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/decSingle.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/divide.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/divideint.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqAbs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqAdd.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqAnd.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqBase.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCanonical.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqClass.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCompare.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCompareSig.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCompareTotal.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCompareTotalMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCopy.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCopyAbs.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCopyNegate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqCopySign.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqDivide.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqDivideInt.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqEncode.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqFMA.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqInvert.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqLogB.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMax.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMaxMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMin.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMinMag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMinus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqMultiply.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqNextMinus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqNextPlus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqNextToward.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqOr.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqPlus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqQuantize.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqReduce.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqRemainder.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqRemainderNear.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqRotate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqSameQuantum.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqScaleB.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqShift.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqSubtract.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqToIntegral.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dqXor.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dsBase.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/dsEncode.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/exp.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/extra.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/fma.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/inexact.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/invert.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/ln.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/log10.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/logb.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/max.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/maxmag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/min.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/minmag.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/minus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/multiply.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/nextminus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/nextplus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/nexttoward.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/or.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/plus.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/power.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/powersqrt.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/quantize.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/randomBound32.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/randoms.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/reduce.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/remainder.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/remainderNear.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/rescale.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/rotate.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/rounding.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/samequantum.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/scaleb.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/shift.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/squareroot.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/subtract.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/testall.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/tointegral.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/tointegralx.decTest
+file path=usr/lib/python3.9/test/decimaltestdata/xor.decTest
+file path=usr/lib/python3.9/test/dis_module.py
+file path=usr/lib/python3.9/test/dlpitest.py
+file path=usr/lib/python3.9/test/doctest_aliases.py
+file path=usr/lib/python3.9/test/double_const.py
+file path=usr/lib/python3.9/test/dtracedata/assert_usable.d
+file path=usr/lib/python3.9/test/dtracedata/assert_usable.stp
+file path=usr/lib/python3.9/test/dtracedata/call_stack.d
+file path=usr/lib/python3.9/test/dtracedata/call_stack.d.expected
+file path=usr/lib/python3.9/test/dtracedata/call_stack.py
+file path=usr/lib/python3.9/test/dtracedata/call_stack.stp
+file path=usr/lib/python3.9/test/dtracedata/call_stack.stp.expected
+file path=usr/lib/python3.9/test/dtracedata/gc.d
+file path=usr/lib/python3.9/test/dtracedata/gc.d.expected
+file path=usr/lib/python3.9/test/dtracedata/gc.py
+file path=usr/lib/python3.9/test/dtracedata/gc.stp
+file path=usr/lib/python3.9/test/dtracedata/gc.stp.expected
+file path=usr/lib/python3.9/test/dtracedata/instance.py
+file path=usr/lib/python3.9/test/dtracedata/line.d
+file path=usr/lib/python3.9/test/dtracedata/line.d.expected
+file path=usr/lib/python3.9/test/dtracedata/line.py
+file path=usr/lib/python3.9/test/eintrdata/eintr_tester.py
+file path=usr/lib/python3.9/test/empty.vbs
+file path=usr/lib/python3.9/test/encoded_modules/__init__.py
+file path=usr/lib/python3.9/test/encoded_modules/module_iso_8859_1.py
+file path=usr/lib/python3.9/test/encoded_modules/module_koi8_r.py
+file path=usr/lib/python3.9/test/exception_hierarchy.txt
+file path=usr/lib/python3.9/test/ffdh3072.pem
+file path=usr/lib/python3.9/test/final_a.py
+file path=usr/lib/python3.9/test/final_b.py
+file path=usr/lib/python3.9/test/floating_points.txt
+file path=usr/lib/python3.9/test/fork_wait.py
+file path=usr/lib/python3.9/test/formatfloat_testcases.txt
+file path=usr/lib/python3.9/test/future_test1.py
+file path=usr/lib/python3.9/test/future_test2.py
+file path=usr/lib/python3.9/test/gdb_sample.py
+file path=usr/lib/python3.9/test/good_getattr.py
+file path=usr/lib/python3.9/test/idnsans.pem
+file path=usr/lib/python3.9/test/ieee754.txt
+file path=usr/lib/python3.9/test/imghdrdata/python.bmp
+file path=usr/lib/python3.9/test/imghdrdata/python.exr
+file path=usr/lib/python3.9/test/imghdrdata/python.gif
+file path=usr/lib/python3.9/test/imghdrdata/python.jpg
+file path=usr/lib/python3.9/test/imghdrdata/python.pbm
+file path=usr/lib/python3.9/test/imghdrdata/python.pgm
+file path=usr/lib/python3.9/test/imghdrdata/python.png
+file path=usr/lib/python3.9/test/imghdrdata/python.ppm
+file path=usr/lib/python3.9/test/imghdrdata/python.ras
+file path=usr/lib/python3.9/test/imghdrdata/python.sgi
+file path=usr/lib/python3.9/test/imghdrdata/python.tiff
+file path=usr/lib/python3.9/test/imghdrdata/python.webp
+file path=usr/lib/python3.9/test/imghdrdata/python.xbm
+file path=usr/lib/python3.9/test/imp_dummy.py
+file path=usr/lib/python3.9/test/inspect_fodder.py
+file path=usr/lib/python3.9/test/inspect_fodder2.py
+file path=usr/lib/python3.9/test/keycert.passwd.pem
+file path=usr/lib/python3.9/test/keycert.pem
+file path=usr/lib/python3.9/test/keycert2.pem
+file path=usr/lib/python3.9/test/keycert3.pem
+file path=usr/lib/python3.9/test/keycert4.pem
+file path=usr/lib/python3.9/test/keycertecc.pem
+file path=usr/lib/python3.9/test/libregrtest/__init__.py
+file path=usr/lib/python3.9/test/libregrtest/cmdline.py
+file path=usr/lib/python3.9/test/libregrtest/main.py
+file path=usr/lib/python3.9/test/libregrtest/pgo.py
+file path=usr/lib/python3.9/test/libregrtest/refleak.py
+file path=usr/lib/python3.9/test/libregrtest/runtest.py
+file path=usr/lib/python3.9/test/libregrtest/runtest_mp.py
+file path=usr/lib/python3.9/test/libregrtest/save_env.py
+file path=usr/lib/python3.9/test/libregrtest/setup.py
+file path=usr/lib/python3.9/test/libregrtest/utils.py
+file path=usr/lib/python3.9/test/libregrtest/win_utils.py
+file path=usr/lib/python3.9/test/list_tests.py
+file path=usr/lib/python3.9/test/lock_tests.py
+file path=usr/lib/python3.9/test/mailcap.txt
+file path=usr/lib/python3.9/test/make_ssl_certs.py
+file path=usr/lib/python3.9/test/mapping_tests.py
+file path=usr/lib/python3.9/test/math_testcases.txt
+file path=usr/lib/python3.9/test/memory_watchdog.py
+file path=usr/lib/python3.9/test/mime.types
+file path=usr/lib/python3.9/test/mock_socket.py
+file path=usr/lib/python3.9/test/mod_generics_cache.py
+file path=usr/lib/python3.9/test/mp_fork_bomb.py
+file path=usr/lib/python3.9/test/mp_preload.py
+file path=usr/lib/python3.9/test/multibytecodec_support.py
+file path=usr/lib/python3.9/test/nokia.pem
+file path=usr/lib/python3.9/test/nullbytecert.pem
+file path=usr/lib/python3.9/test/nullcert.pem
+file path=usr/lib/python3.9/test/pickletester.py
+file path=usr/lib/python3.9/test/privrbactest.py
+file path=usr/lib/python3.9/test/profilee.py
+file path=usr/lib/python3.9/test/pstats.pck
+file path=usr/lib/python3.9/test/pycacert.pem
+file path=usr/lib/python3.9/test/pycakey.pem
+file path=usr/lib/python3.9/test/pyclbr_input.py
+file path=usr/lib/python3.9/test/pydoc_mod.py
+file path=usr/lib/python3.9/test/pydocfodder.py
+file path=usr/lib/python3.9/test/pythoninfo.py
+file path=usr/lib/python3.9/test/randv2_32.pck
+file path=usr/lib/python3.9/test/randv2_64.pck
+file path=usr/lib/python3.9/test/randv3.pck
+file path=usr/lib/python3.9/test/re_tests.py
+file path=usr/lib/python3.9/test/recursion.tar
+file path=usr/lib/python3.9/test/regrtest.py
+file path=usr/lib/python3.9/test/relimport.py
+file path=usr/lib/python3.9/test/reperf.py
+file path=usr/lib/python3.9/test/revocation.crl
+file path=usr/lib/python3.9/test/sample_doctest.py
+file path=usr/lib/python3.9/test/sample_doctest_no_docstrings.py
+file path=usr/lib/python3.9/test/sample_doctest_no_doctests.py
+file path=usr/lib/python3.9/test/secp384r1.pem
+file path=usr/lib/python3.9/test/selfsigned_pythontestdotnet.pem
+file path=usr/lib/python3.9/test/seq_tests.py
+file path=usr/lib/python3.9/test/sgml_input.html
+file path=usr/lib/python3.9/test/signalinterproctester.py
+file path=usr/lib/python3.9/test/sndhdrdata/README
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.8svx
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.aifc
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.aiff
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.au
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.hcom
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.sndt
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.voc
+file path=usr/lib/python3.9/test/sndhdrdata/sndhdr.wav
+file path=usr/lib/python3.9/test/sortperf.py
+file path=usr/lib/python3.9/test/ssl_cert.pem
+file path=usr/lib/python3.9/test/ssl_key.passwd.pem
+file path=usr/lib/python3.9/test/ssl_key.pem
+file path=usr/lib/python3.9/test/ssl_servers.py
+file path=usr/lib/python3.9/test/ssltests.py
+file path=usr/lib/python3.9/test/string_tests.py
+file path=usr/lib/python3.9/test/subprocessdata/fd_status.py
+file path=usr/lib/python3.9/test/subprocessdata/input_reader.py
+file path=usr/lib/python3.9/test/subprocessdata/qcat.py
+file path=usr/lib/python3.9/test/subprocessdata/qgrep.py
+file path=usr/lib/python3.9/test/subprocessdata/sigchild_ignore.py
+file path=usr/lib/python3.9/test/support/__init__.py
+file path=usr/lib/python3.9/test/support/bytecode_helper.py
+file path=usr/lib/python3.9/test/support/hashlib_helper.py
+file path=usr/lib/python3.9/test/support/logging_helper.py
+file path=usr/lib/python3.9/test/support/script_helper.py
+file path=usr/lib/python3.9/test/support/socket_helper.py
+file path=usr/lib/python3.9/test/support/testresult.py
+file path=usr/lib/python3.9/test/talos-2019-0758.pem
+file path=usr/lib/python3.9/test/test___all__.py
+file path=usr/lib/python3.9/test/test___future__.py
+file path=usr/lib/python3.9/test/test__locale.py
+file path=usr/lib/python3.9/test/test__opcode.py
+file path=usr/lib/python3.9/test/test__osx_support.py
+file path=usr/lib/python3.9/test/test__xxsubinterpreters.py
+file path=usr/lib/python3.9/test/test_abc.py
+file path=usr/lib/python3.9/test/test_abstract_numbers.py
+file path=usr/lib/python3.9/test/test_aifc.py
+file path=usr/lib/python3.9/test/test_argparse.py
+file path=usr/lib/python3.9/test/test_array.py
+file path=usr/lib/python3.9/test/test_asdl_parser.py
+file path=usr/lib/python3.9/test/test_ast.py
+file path=usr/lib/python3.9/test/test_asyncgen.py
+file path=usr/lib/python3.9/test/test_asynchat.py
+file path=usr/lib/python3.9/test/test_asyncio/__init__.py
+file path=usr/lib/python3.9/test/test_asyncio/__main__.py
+file path=usr/lib/python3.9/test/test_asyncio/echo.py
+file path=usr/lib/python3.9/test/test_asyncio/echo2.py
+file path=usr/lib/python3.9/test/test_asyncio/echo3.py
+file path=usr/lib/python3.9/test/test_asyncio/functional.py
+file path=usr/lib/python3.9/test/test_asyncio/test_asyncio_waitfor.py
+file path=usr/lib/python3.9/test/test_asyncio/test_base_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_buffered_proto.py
+file path=usr/lib/python3.9/test/test_asyncio/test_context.py
+file path=usr/lib/python3.9/test/test_asyncio/test_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_futures.py
+file path=usr/lib/python3.9/test/test_asyncio/test_futures2.py
+file path=usr/lib/python3.9/test/test_asyncio/test_locks.py
+file path=usr/lib/python3.9/test/test_asyncio/test_pep492.py
+file path=usr/lib/python3.9/test/test_asyncio/test_proactor_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_protocols.py
+file path=usr/lib/python3.9/test/test_asyncio/test_queues.py
+file path=usr/lib/python3.9/test/test_asyncio/test_runners.py
+file path=usr/lib/python3.9/test/test_asyncio/test_selector_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_sendfile.py
+file path=usr/lib/python3.9/test/test_asyncio/test_server.py
+file path=usr/lib/python3.9/test/test_asyncio/test_sock_lowlevel.py
+file path=usr/lib/python3.9/test/test_asyncio/test_sslproto.py
+file path=usr/lib/python3.9/test/test_asyncio/test_streams.py
+file path=usr/lib/python3.9/test/test_asyncio/test_subprocess.py
+file path=usr/lib/python3.9/test/test_asyncio/test_tasks.py
+file path=usr/lib/python3.9/test/test_asyncio/test_threads.py
+file path=usr/lib/python3.9/test/test_asyncio/test_transports.py
+file path=usr/lib/python3.9/test/test_asyncio/test_unix_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_windows_events.py
+file path=usr/lib/python3.9/test/test_asyncio/test_windows_utils.py
+file path=usr/lib/python3.9/test/test_asyncio/utils.py
+file path=usr/lib/python3.9/test/test_asyncore.py
+file path=usr/lib/python3.9/test/test_atexit.py
+file path=usr/lib/python3.9/test/test_audioop.py
+file path=usr/lib/python3.9/test/test_audit.py
+file path=usr/lib/python3.9/test/test_augassign.py
+file path=usr/lib/python3.9/test/test_base64.py
+file path=usr/lib/python3.9/test/test_baseexception.py
+file path=usr/lib/python3.9/test/test_bdb.py
+file path=usr/lib/python3.9/test/test_bigaddrspace.py
+file path=usr/lib/python3.9/test/test_bigmem.py
+file path=usr/lib/python3.9/test/test_binascii.py
+file path=usr/lib/python3.9/test/test_binhex.py
+file path=usr/lib/python3.9/test/test_binop.py
+file path=usr/lib/python3.9/test/test_bisect.py
+file path=usr/lib/python3.9/test/test_bool.py
+file path=usr/lib/python3.9/test/test_buffer.py
+file path=usr/lib/python3.9/test/test_bufio.py
+file path=usr/lib/python3.9/test/test_builtin.py
+file path=usr/lib/python3.9/test/test_bytes.py
+file path=usr/lib/python3.9/test/test_bz2.py
+file path=usr/lib/python3.9/test/test_c_locale_coercion.py
+file path=usr/lib/python3.9/test/test_calendar.py
+file path=usr/lib/python3.9/test/test_call.py
+file path=usr/lib/python3.9/test/test_capi.py
+file path=usr/lib/python3.9/test/test_cgi.py
+file path=usr/lib/python3.9/test/test_cgitb.py
+file path=usr/lib/python3.9/test/test_charmapcodec.py
+file path=usr/lib/python3.9/test/test_check_c_globals.py
+file path=usr/lib/python3.9/test/test_class.py
+file path=usr/lib/python3.9/test/test_clinic.py
+file path=usr/lib/python3.9/test/test_cmath.py
+file path=usr/lib/python3.9/test/test_cmd.py
+file path=usr/lib/python3.9/test/test_cmd_line.py
+file path=usr/lib/python3.9/test/test_cmd_line_script.py
+file path=usr/lib/python3.9/test/test_code.py
+file path=usr/lib/python3.9/test/test_code_module.py
+file path=usr/lib/python3.9/test/test_codeccallbacks.py
+file path=usr/lib/python3.9/test/test_codecencodings_cn.py
+file path=usr/lib/python3.9/test/test_codecencodings_hk.py
+file path=usr/lib/python3.9/test/test_codecencodings_iso2022.py
+file path=usr/lib/python3.9/test/test_codecencodings_jp.py
+file path=usr/lib/python3.9/test/test_codecencodings_kr.py
+file path=usr/lib/python3.9/test/test_codecencodings_tw.py
+file path=usr/lib/python3.9/test/test_codecmaps_cn.py
+file path=usr/lib/python3.9/test/test_codecmaps_hk.py
+file path=usr/lib/python3.9/test/test_codecmaps_jp.py
+file path=usr/lib/python3.9/test/test_codecmaps_kr.py
+file path=usr/lib/python3.9/test/test_codecmaps_tw.py
+file path=usr/lib/python3.9/test/test_codecs.py
+file path=usr/lib/python3.9/test/test_codeop.py
+file path=usr/lib/python3.9/test/test_collections.py
+file path=usr/lib/python3.9/test/test_colorsys.py
+file path=usr/lib/python3.9/test/test_compare.py
+file path=usr/lib/python3.9/test/test_compile.py
+file path=usr/lib/python3.9/test/test_compileall.py
+file path=usr/lib/python3.9/test/test_complex.py
+file path=usr/lib/python3.9/test/test_concurrent_futures.py
+file path=usr/lib/python3.9/test/test_configparser.py
+file path=usr/lib/python3.9/test/test_contains.py
+file path=usr/lib/python3.9/test/test_context.py
+file path=usr/lib/python3.9/test/test_contextlib.py
+file path=usr/lib/python3.9/test/test_contextlib_async.py
+file path=usr/lib/python3.9/test/test_copy.py
+file path=usr/lib/python3.9/test/test_copyreg.py
+file path=usr/lib/python3.9/test/test_coroutines.py
+file path=usr/lib/python3.9/test/test_cprofile.py
+file path=usr/lib/python3.9/test/test_crashers.py
+file path=usr/lib/python3.9/test/test_crypt.py
+file path=usr/lib/python3.9/test/test_csv.py
+file path=usr/lib/python3.9/test/test_ctypes.py
+file path=usr/lib/python3.9/test/test_curses.py
+file path=usr/lib/python3.9/test/test_dataclasses.py
+file path=usr/lib/python3.9/test/test_datetime.py
+file path=usr/lib/python3.9/test/test_dbm.py
+file path=usr/lib/python3.9/test/test_dbm_dumb.py
+file path=usr/lib/python3.9/test/test_dbm_gnu.py
+file path=usr/lib/python3.9/test/test_dbm_ndbm.py
+file path=usr/lib/python3.9/test/test_decimal.py
+file path=usr/lib/python3.9/test/test_decorators.py
+file path=usr/lib/python3.9/test/test_defaultdict.py
+file path=usr/lib/python3.9/test/test_deque.py
+file path=usr/lib/python3.9/test/test_descr.py
+file path=usr/lib/python3.9/test/test_descrtut.py
+file path=usr/lib/python3.9/test/test_devpoll.py
+file path=usr/lib/python3.9/test/test_dict.py
+file path=usr/lib/python3.9/test/test_dict_version.py
+file path=usr/lib/python3.9/test/test_dictcomps.py
+file path=usr/lib/python3.9/test/test_dictviews.py
+file path=usr/lib/python3.9/test/test_difflib.py
+file path=usr/lib/python3.9/test/test_difflib_expect.html
+file path=usr/lib/python3.9/test/test_dis.py
+file path=usr/lib/python3.9/test/test_distutils.py
+file path=usr/lib/python3.9/test/test_doctest.py
+file path=usr/lib/python3.9/test/test_doctest.txt
+file path=usr/lib/python3.9/test/test_doctest2.py
+file path=usr/lib/python3.9/test/test_doctest2.txt
+file path=usr/lib/python3.9/test/test_doctest3.txt
+file path=usr/lib/python3.9/test/test_doctest4.txt
+file path=usr/lib/python3.9/test/test_docxmlrpc.py
+file path=usr/lib/python3.9/test/test_dtrace.py
+file path=usr/lib/python3.9/test/test_dynamic.py
+file path=usr/lib/python3.9/test/test_dynamicclassattribute.py
+file path=usr/lib/python3.9/test/test_eintr.py
+file path=usr/lib/python3.9/test/test_email/__init__.py
+file path=usr/lib/python3.9/test/test_email/__main__.py
+file path=usr/lib/python3.9/test/test_email/data/PyBanner048.gif
+file path=usr/lib/python3.9/test/test_email/data/audiotest.au
+file path=usr/lib/python3.9/test/test_email/data/msg_01.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_02.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_03.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_04.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_05.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_06.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_07.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_08.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_09.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_10.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_11.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_12.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_12a.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_13.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_14.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_15.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_16.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_17.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_18.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_19.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_20.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_21.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_22.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_23.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_24.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_25.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_26.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_27.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_28.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_29.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_30.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_31.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_32.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_33.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_34.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_35.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_36.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_37.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_38.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_39.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_40.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_41.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_42.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_43.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_44.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_45.txt
+file path=usr/lib/python3.9/test/test_email/data/msg_46.txt
+file path=usr/lib/python3.9/test/test_email/test__encoded_words.py
+file path=usr/lib/python3.9/test/test_email/test__header_value_parser.py
+file path=usr/lib/python3.9/test/test_email/test_asian_codecs.py
+file path=usr/lib/python3.9/test/test_email/test_contentmanager.py
+file path=usr/lib/python3.9/test/test_email/test_defect_handling.py
+file path=usr/lib/python3.9/test/test_email/test_email.py
+file path=usr/lib/python3.9/test/test_email/test_generator.py
+file path=usr/lib/python3.9/test/test_email/test_headerregistry.py
+file path=usr/lib/python3.9/test/test_email/test_inversion.py
+file path=usr/lib/python3.9/test/test_email/test_message.py
+file path=usr/lib/python3.9/test/test_email/test_parser.py
+file path=usr/lib/python3.9/test/test_email/test_pickleable.py
+file path=usr/lib/python3.9/test/test_email/test_policy.py
+file path=usr/lib/python3.9/test/test_email/test_utils.py
+file path=usr/lib/python3.9/test/test_email/torture_test.py
+file path=usr/lib/python3.9/test/test_embed.py
+file path=usr/lib/python3.9/test/test_ensurepip.py
+file path=usr/lib/python3.9/test/test_enum.py
+file path=usr/lib/python3.9/test/test_enumerate.py
+file path=usr/lib/python3.9/test/test_eof.py
+file path=usr/lib/python3.9/test/test_epoll.py
+file path=usr/lib/python3.9/test/test_errno.py
+file path=usr/lib/python3.9/test/test_exception_hierarchy.py
+file path=usr/lib/python3.9/test/test_exception_variations.py
+file path=usr/lib/python3.9/test/test_exceptions.py
+file path=usr/lib/python3.9/test/test_extcall.py
+file path=usr/lib/python3.9/test/test_faulthandler.py
+file path=usr/lib/python3.9/test/test_fcntl.py
+file path=usr/lib/python3.9/test/test_file.py
+file path=usr/lib/python3.9/test/test_file_eintr.py
+file path=usr/lib/python3.9/test/test_filecmp.py
+file path=usr/lib/python3.9/test/test_fileinput.py
+file path=usr/lib/python3.9/test/test_fileio.py
+file path=usr/lib/python3.9/test/test_finalization.py
+file path=usr/lib/python3.9/test/test_float.py
+file path=usr/lib/python3.9/test/test_flufl.py
+file path=usr/lib/python3.9/test/test_fnmatch.py
+file path=usr/lib/python3.9/test/test_fork1.py
+file path=usr/lib/python3.9/test/test_format.py
+file path=usr/lib/python3.9/test/test_fractions.py
+file path=usr/lib/python3.9/test/test_frame.py
+file path=usr/lib/python3.9/test/test_frozen.py
+file path=usr/lib/python3.9/test/test_fstring.py
+file path=usr/lib/python3.9/test/test_ftplib.py
+file path=usr/lib/python3.9/test/test_funcattrs.py
+file path=usr/lib/python3.9/test/test_functools.py
+file path=usr/lib/python3.9/test/test_future.py
+file path=usr/lib/python3.9/test/test_future3.py
+file path=usr/lib/python3.9/test/test_future4.py
+file path=usr/lib/python3.9/test/test_future5.py
+file path=usr/lib/python3.9/test/test_gc.py
+file path=usr/lib/python3.9/test/test_gdb.py
+file path=usr/lib/python3.9/test/test_generator_stop.py
+file path=usr/lib/python3.9/test/test_generators.py
+file path=usr/lib/python3.9/test/test_genericalias.py
+file path=usr/lib/python3.9/test/test_genericclass.py
+file path=usr/lib/python3.9/test/test_genericpath.py
+file path=usr/lib/python3.9/test/test_genexps.py
+file path=usr/lib/python3.9/test/test_getargs2.py
+file path=usr/lib/python3.9/test/test_getopt.py
+file path=usr/lib/python3.9/test/test_getpass.py
+file path=usr/lib/python3.9/test/test_gettext.py
+file path=usr/lib/python3.9/test/test_glob.py
+file path=usr/lib/python3.9/test/test_global.py
+file path=usr/lib/python3.9/test/test_grammar.py
+file path=usr/lib/python3.9/test/test_graphlib.py
+file path=usr/lib/python3.9/test/test_grp.py
+file path=usr/lib/python3.9/test/test_gzip.py
+file path=usr/lib/python3.9/test/test_hash.py
+file path=usr/lib/python3.9/test/test_hashlib.py
+file path=usr/lib/python3.9/test/test_heapq.py
+file path=usr/lib/python3.9/test/test_hmac.py
+file path=usr/lib/python3.9/test/test_html.py
+file path=usr/lib/python3.9/test/test_htmlparser.py
+file path=usr/lib/python3.9/test/test_http_cookiejar.py
+file path=usr/lib/python3.9/test/test_http_cookies.py
+file path=usr/lib/python3.9/test/test_httplib.py
+file path=usr/lib/python3.9/test/test_httpservers.py
+#file path=usr/lib/python3.9/test/test_idle.py
+file path=usr/lib/python3.9/test/test_imaplib.py
+file path=usr/lib/python3.9/test/test_imghdr.py
+file path=usr/lib/python3.9/test/test_imp.py
+file path=usr/lib/python3.9/test/test_import/__init__.py
+file path=usr/lib/python3.9/test/test_import/__main__.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/basic.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/basic2.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/binding.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/binding2.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/from_cycle1.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/from_cycle2.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/indirect.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/rebinding.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/rebinding2.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/source.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/subpackage.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/subpkg/subpackage2.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/subpkg/util.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/use.py
+file path=usr/lib/python3.9/test/test_import/data/circular_imports/util.py
+file path=usr/lib/python3.9/test/test_import/data/package/__init__.py
+file path=usr/lib/python3.9/test/test_import/data/package/submodule.py
+file path=usr/lib/python3.9/test/test_import/data/package2/submodule1.py
+file path=usr/lib/python3.9/test/test_import/data/package2/submodule2.py
+file path=usr/lib/python3.9/test/test_import/data/unwritable/__init__.py
+file path=usr/lib/python3.9/test/test_import/data/unwritable/x.py
+file path=usr/lib/python3.9/test/test_importlib/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/abc.py
+file path=usr/lib/python3.9/test/test_importlib/builtin/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/builtin/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/builtin/test_finder.py
+file path=usr/lib/python3.9/test/test_importlib/builtin/test_loader.py
+file path=usr/lib/python3.9/test/test_importlib/data/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data/example-21.12-py3-none-any.whl
+file path=usr/lib/python3.9/test/test_importlib/data/example-21.12-py3.6.egg
+file path=usr/lib/python3.9/test/test_importlib/data01/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data01/binary.file
+file path=usr/lib/python3.9/test/test_importlib/data01/subdirectory/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data01/subdirectory/binary.file
+file path=usr/lib/python3.9/test/test_importlib/data01/utf-16.file
+file path=usr/lib/python3.9/test/test_importlib/data01/utf-8.file
+file path=usr/lib/python3.9/test/test_importlib/data02/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data02/one/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data02/one/resource1.txt
+file path=usr/lib/python3.9/test/test_importlib/data02/two/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data02/two/resource2.txt
+file path=usr/lib/python3.9/test/test_importlib/data03/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data03/namespace/portion1/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data03/namespace/portion2/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/data03/namespace/resource1.txt
+file path=usr/lib/python3.9/test/test_importlib/extension/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/extension/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/extension/test_case_sensitivity.py
+file path=usr/lib/python3.9/test/test_importlib/extension/test_finder.py
+file path=usr/lib/python3.9/test/test_importlib/extension/test_loader.py
+file path=usr/lib/python3.9/test/test_importlib/extension/test_path_hook.py
+file path=usr/lib/python3.9/test/test_importlib/fixtures.py
+file path=usr/lib/python3.9/test/test_importlib/frozen/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/frozen/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/frozen/test_finder.py
+file path=usr/lib/python3.9/test/test_importlib/frozen/test_loader.py
+file path=usr/lib/python3.9/test/test_importlib/import_/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/import_/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test___loader__.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test___package__.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_api.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_caching.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_fromlist.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_meta_path.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_packages.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_path.py
+file path=usr/lib/python3.9/test/test_importlib/import_/test_relative_imports.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/both_portions/foo/one.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/both_portions/foo/two.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/missing_directory.zip
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/module_and_namespace_package/a_test.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/module_and_namespace_package/a_test/empty
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/nested_portion1.zip
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/not_a_namespace_pkg/foo/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/not_a_namespace_pkg/foo/one.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/portion1/foo/one.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/portion2/foo/two.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/project1/parent/child/one.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/project2/parent/child/two.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/project3/parent/child/three.py
+file path=usr/lib/python3.9/test/test_importlib/namespace_pkgs/top_level_portion1.zip
+file path=usr/lib/python3.9/test/test_importlib/source/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/source/__main__.py
+file path=usr/lib/python3.9/test/test_importlib/source/test_case_sensitivity.py
+file path=usr/lib/python3.9/test/test_importlib/source/test_file_loader.py
+file path=usr/lib/python3.9/test/test_importlib/source/test_finder.py
+file path=usr/lib/python3.9/test/test_importlib/source/test_path_hook.py
+file path=usr/lib/python3.9/test/test_importlib/source/test_source_encoding.py
+file path=usr/lib/python3.9/test/test_importlib/stubs.py
+file path=usr/lib/python3.9/test/test_importlib/test_abc.py
+file path=usr/lib/python3.9/test/test_importlib/test_api.py
+file path=usr/lib/python3.9/test/test_importlib/test_files.py
+file path=usr/lib/python3.9/test/test_importlib/test_lazy.py
+file path=usr/lib/python3.9/test/test_importlib/test_locks.py
+file path=usr/lib/python3.9/test/test_importlib/test_main.py
+file path=usr/lib/python3.9/test/test_importlib/test_metadata_api.py
+file path=usr/lib/python3.9/test/test_importlib/test_namespace_pkgs.py
+file path=usr/lib/python3.9/test/test_importlib/test_open.py
+file path=usr/lib/python3.9/test/test_importlib/test_path.py
+file path=usr/lib/python3.9/test/test_importlib/test_pkg_import.py
+file path=usr/lib/python3.9/test/test_importlib/test_read.py
+file path=usr/lib/python3.9/test/test_importlib/test_resource.py
+file path=usr/lib/python3.9/test/test_importlib/test_spec.py
+file path=usr/lib/python3.9/test/test_importlib/test_threaded_import.py
+file path=usr/lib/python3.9/test/test_importlib/test_util.py
+file path=usr/lib/python3.9/test/test_importlib/test_windows.py
+file path=usr/lib/python3.9/test/test_importlib/test_zip.py
+file path=usr/lib/python3.9/test/test_importlib/threaded_import_hangers.py
+file path=usr/lib/python3.9/test/test_importlib/util.py
+file path=usr/lib/python3.9/test/test_importlib/zipdata01/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/zipdata01/ziptestdata.zip
+file path=usr/lib/python3.9/test/test_importlib/zipdata02/__init__.py
+file path=usr/lib/python3.9/test/test_importlib/zipdata02/ziptestdata.zip
+file path=usr/lib/python3.9/test/test_index.py
+file path=usr/lib/python3.9/test/test_inspect.py
+file path=usr/lib/python3.9/test/test_int.py
+file path=usr/lib/python3.9/test/test_int_literal.py
+file path=usr/lib/python3.9/test/test_io.py
+file path=usr/lib/python3.9/test/test_ioctl.py
+file path=usr/lib/python3.9/test/test_ipaddress.py
+file path=usr/lib/python3.9/test/test_isinstance.py
+file path=usr/lib/python3.9/test/test_iter.py
+file path=usr/lib/python3.9/test/test_iterlen.py
+file path=usr/lib/python3.9/test/test_itertools.py
+file path=usr/lib/python3.9/test/test_json/__init__.py
+file path=usr/lib/python3.9/test/test_json/__main__.py
+file path=usr/lib/python3.9/test/test_json/test_decode.py
+file path=usr/lib/python3.9/test/test_json/test_default.py
+file path=usr/lib/python3.9/test/test_json/test_dump.py
+file path=usr/lib/python3.9/test/test_json/test_encode_basestring_ascii.py
+file path=usr/lib/python3.9/test/test_json/test_enum.py
+file path=usr/lib/python3.9/test/test_json/test_fail.py
+file path=usr/lib/python3.9/test/test_json/test_float.py
+file path=usr/lib/python3.9/test/test_json/test_indent.py
+file path=usr/lib/python3.9/test/test_json/test_pass1.py
+file path=usr/lib/python3.9/test/test_json/test_pass2.py
+file path=usr/lib/python3.9/test/test_json/test_pass3.py
+file path=usr/lib/python3.9/test/test_json/test_recursion.py
+file path=usr/lib/python3.9/test/test_json/test_scanstring.py
+file path=usr/lib/python3.9/test/test_json/test_separators.py
+file path=usr/lib/python3.9/test/test_json/test_speedups.py
+file path=usr/lib/python3.9/test/test_json/test_tool.py
+file path=usr/lib/python3.9/test/test_json/test_unicode.py
+file path=usr/lib/python3.9/test/test_keyword.py
+file path=usr/lib/python3.9/test/test_keywordonlyarg.py
+file path=usr/lib/python3.9/test/test_kqueue.py
+file path=usr/lib/python3.9/test/test_largefile.py
+file path=usr/lib/python3.9/test/test_lib2to3.py
+file path=usr/lib/python3.9/test/test_linecache.py
+file path=usr/lib/python3.9/test/test_list.py
+file path=usr/lib/python3.9/test/test_listcomps.py
+file path=usr/lib/python3.9/test/test_lltrace.py
+file path=usr/lib/python3.9/test/test_locale.py
+file path=usr/lib/python3.9/test/test_logging.py
+file path=usr/lib/python3.9/test/test_long.py
+file path=usr/lib/python3.9/test/test_longexp.py
+file path=usr/lib/python3.9/test/test_lzma.py
+file path=usr/lib/python3.9/test/test_mailbox.py
+file path=usr/lib/python3.9/test/test_mailcap.py
+file path=usr/lib/python3.9/test/test_marshal.py
+file path=usr/lib/python3.9/test/test_math.py
+file path=usr/lib/python3.9/test/test_memoryio.py
+file path=usr/lib/python3.9/test/test_memoryview.py
+file path=usr/lib/python3.9/test/test_metaclass.py
+file path=usr/lib/python3.9/test/test_mimetypes.py
+file path=usr/lib/python3.9/test/test_minidom.py
+file path=usr/lib/python3.9/test/test_mmap.py
+file path=usr/lib/python3.9/test/test_module.py
+file path=usr/lib/python3.9/test/test_modulefinder.py
+file path=usr/lib/python3.9/test/test_msilib.py
+file path=usr/lib/python3.9/test/test_multibytecodec.py
+file path=usr/lib/python3.9/test/test_multiprocessing_fork.py
+file path=usr/lib/python3.9/test/test_multiprocessing_forkserver.py
+file path=usr/lib/python3.9/test/test_multiprocessing_main_handling.py
+file path=usr/lib/python3.9/test/test_multiprocessing_spawn.py
+file path=usr/lib/python3.9/test/test_named_expressions.py
+file path=usr/lib/python3.9/test/test_netrc.py
+file path=usr/lib/python3.9/test/test_nis.py
+file path=usr/lib/python3.9/test/test_nntplib.py
+file path=usr/lib/python3.9/test/test_ntpath.py
+file path=usr/lib/python3.9/test/test_numeric_tower.py
+file path=usr/lib/python3.9/test/test_opcodes.py
+file path=usr/lib/python3.9/test/test_openpty.py
+file path=usr/lib/python3.9/test/test_operator.py
+file path=usr/lib/python3.9/test/test_optparse.py
+file path=usr/lib/python3.9/test/test_ordered_dict.py
+file path=usr/lib/python3.9/test/test_os.py
+file path=usr/lib/python3.9/test/test_ossaudiodev.py
+file path=usr/lib/python3.9/test/test_osx_env.py
+file path=usr/lib/python3.9/test/test_parser.py
+file path=usr/lib/python3.9/test/test_pathlib.py
+file path=usr/lib/python3.9/test/test_pdb.py
+file path=usr/lib/python3.9/test/test_peepholer.py
+file path=usr/lib/python3.9/test/test_peg_generator/__init__.py
+file path=usr/lib/python3.9/test/test_peg_generator/__main__.py
+file path=usr/lib/python3.9/test/test_peg_generator/test_c_parser.py
+file path=usr/lib/python3.9/test/test_peg_generator/test_first_sets.py
+file path=usr/lib/python3.9/test/test_peg_generator/test_pegen.py
+file path=usr/lib/python3.9/test/test_peg_parser.py
+file path=usr/lib/python3.9/test/test_pickle.py
+file path=usr/lib/python3.9/test/test_picklebuffer.py
+file path=usr/lib/python3.9/test/test_pickletools.py
+file path=usr/lib/python3.9/test/test_pipes.py
+file path=usr/lib/python3.9/test/test_pkg.py
+file path=usr/lib/python3.9/test/test_pkgutil.py
+file path=usr/lib/python3.9/test/test_platform.py
+file path=usr/lib/python3.9/test/test_plistlib.py
+file path=usr/lib/python3.9/test/test_poll.py
+file path=usr/lib/python3.9/test/test_popen.py
+file path=usr/lib/python3.9/test/test_poplib.py
+file path=usr/lib/python3.9/test/test_positional_only_arg.py
+file path=usr/lib/python3.9/test/test_posix.py
+file path=usr/lib/python3.9/test/test_posixpath.py
+file path=usr/lib/python3.9/test/test_pow.py
+file path=usr/lib/python3.9/test/test_pprint.py
+file path=usr/lib/python3.9/test/test_print.py
+file path=usr/lib/python3.9/test/test_profile.py
+file path=usr/lib/python3.9/test/test_property.py
+file path=usr/lib/python3.9/test/test_pstats.py
+file path=usr/lib/python3.9/test/test_pty.py
+file path=usr/lib/python3.9/test/test_pulldom.py
+file path=usr/lib/python3.9/test/test_pwd.py
+file path=usr/lib/python3.9/test/test_py_compile.py
+file path=usr/lib/python3.9/test/test_pyclbr.py
+file path=usr/lib/python3.9/test/test_pydoc.py
+file path=usr/lib/python3.9/test/test_pyexpat.py
+file path=usr/lib/python3.9/test/test_queue.py
+file path=usr/lib/python3.9/test/test_quopri.py
+file path=usr/lib/python3.9/test/test_raise.py
+file path=usr/lib/python3.9/test/test_random.py
+file path=usr/lib/python3.9/test/test_range.py
+file path=usr/lib/python3.9/test/test_re.py
+file path=usr/lib/python3.9/test/test_readline.py
+file path=usr/lib/python3.9/test/test_regrtest.py
+file path=usr/lib/python3.9/test/test_repl.py
+file path=usr/lib/python3.9/test/test_reprlib.py
+file path=usr/lib/python3.9/test/test_resource.py
+file path=usr/lib/python3.9/test/test_richcmp.py
+file path=usr/lib/python3.9/test/test_rlcompleter.py
+file path=usr/lib/python3.9/test/test_robotparser.py
+file path=usr/lib/python3.9/test/test_runpy.py
+file path=usr/lib/python3.9/test/test_sax.py
+file path=usr/lib/python3.9/test/test_sched.py
+file path=usr/lib/python3.9/test/test_scope.py
+file path=usr/lib/python3.9/test/test_script_helper.py
+file path=usr/lib/python3.9/test/test_secrets.py
+file path=usr/lib/python3.9/test/test_select.py
+file path=usr/lib/python3.9/test/test_selectors.py
+file path=usr/lib/python3.9/test/test_set.py
+file path=usr/lib/python3.9/test/test_setcomps.py
+file path=usr/lib/python3.9/test/test_shelve.py
+file path=usr/lib/python3.9/test/test_shlex.py
+file path=usr/lib/python3.9/test/test_shutil.py
+file path=usr/lib/python3.9/test/test_signal.py
+file path=usr/lib/python3.9/test/test_site.py
+file path=usr/lib/python3.9/test/test_slice.py
+file path=usr/lib/python3.9/test/test_smtpd.py
+file path=usr/lib/python3.9/test/test_smtplib.py
+file path=usr/lib/python3.9/test/test_smtpnet.py
+file path=usr/lib/python3.9/test/test_sndhdr.py
+file path=usr/lib/python3.9/test/test_socket.py
+file path=usr/lib/python3.9/test/test_socketserver.py
+file path=usr/lib/python3.9/test/test_sort.py
+file path=usr/lib/python3.9/test/test_source_encoding.py
+file path=usr/lib/python3.9/test/test_spwd.py
+file path=usr/lib/python3.9/test/test_sqlite.py
+file path=usr/lib/python3.9/test/test_ssl.py
+file path=usr/lib/python3.9/test/test_startfile.py
+file path=usr/lib/python3.9/test/test_stat.py
+file path=usr/lib/python3.9/test/test_statistics.py
+file path=usr/lib/python3.9/test/test_strftime.py
+file path=usr/lib/python3.9/test/test_string.py
+file path=usr/lib/python3.9/test/test_string_literals.py
+file path=usr/lib/python3.9/test/test_stringprep.py
+file path=usr/lib/python3.9/test/test_strptime.py
+file path=usr/lib/python3.9/test/test_strtod.py
+file path=usr/lib/python3.9/test/test_struct.py
+file path=usr/lib/python3.9/test/test_structmembers.py
+file path=usr/lib/python3.9/test/test_structseq.py
+file path=usr/lib/python3.9/test/test_subclassinit.py
+file path=usr/lib/python3.9/test/test_subprocess.py
+file path=usr/lib/python3.9/test/test_sunau.py
+file path=usr/lib/python3.9/test/test_sundry.py
+file path=usr/lib/python3.9/test/test_super.py
+file path=usr/lib/python3.9/test/test_support.py
+file path=usr/lib/python3.9/test/test_symbol.py
+file path=usr/lib/python3.9/test/test_symtable.py
+file path=usr/lib/python3.9/test/test_syntax.py
+file path=usr/lib/python3.9/test/test_sys.py
+file path=usr/lib/python3.9/test/test_sys_setprofile.py
+file path=usr/lib/python3.9/test/test_sys_settrace.py
+file path=usr/lib/python3.9/test/test_sysconfig.py
+file path=usr/lib/python3.9/test/test_syslog.py
+file path=usr/lib/python3.9/test/test_tabnanny.py
+file path=usr/lib/python3.9/test/test_tarfile.py
+file path=usr/lib/python3.9/test/test_tcl.py
+file path=usr/lib/python3.9/test/test_telnetlib.py
+file path=usr/lib/python3.9/test/test_tempfile.py
+file path=usr/lib/python3.9/test/test_textwrap.py
+file path=usr/lib/python3.9/test/test_thread.py
+file path=usr/lib/python3.9/test/test_threadedtempfile.py
+file path=usr/lib/python3.9/test/test_threading.py
+file path=usr/lib/python3.9/test/test_threading_local.py
+file path=usr/lib/python3.9/test/test_threadsignals.py
+file path=usr/lib/python3.9/test/test_time.py
+file path=usr/lib/python3.9/test/test_timeit.py
+file path=usr/lib/python3.9/test/test_timeout.py
+file path=usr/lib/python3.9/test/test_tix.py
+file path=usr/lib/python3.9/test/test_tk.py
+file path=usr/lib/python3.9/test/test_tokenize.py
+file path=usr/lib/python3.9/test/test_tools/__init__.py
+file path=usr/lib/python3.9/test/test_tools/__main__.py
+file path=usr/lib/python3.9/test/test_tools/test_fixcid.py
+file path=usr/lib/python3.9/test/test_tools/test_gprof2html.py
+file path=usr/lib/python3.9/test/test_tools/test_i18n.py
+file path=usr/lib/python3.9/test/test_tools/test_lll.py
+file path=usr/lib/python3.9/test/test_tools/test_md5sum.py
+file path=usr/lib/python3.9/test/test_tools/test_pathfix.py
+file path=usr/lib/python3.9/test/test_tools/test_pdeps.py
+file path=usr/lib/python3.9/test/test_tools/test_pindent.py
+file path=usr/lib/python3.9/test/test_tools/test_reindent.py
+file path=usr/lib/python3.9/test/test_tools/test_sundry.py
+file path=usr/lib/python3.9/test/test_trace.py
+file path=usr/lib/python3.9/test/test_traceback.py
+file path=usr/lib/python3.9/test/test_tracemalloc.py
+file path=usr/lib/python3.9/test/test_ttk_guionly.py
+file path=usr/lib/python3.9/test/test_ttk_textonly.py
+file path=usr/lib/python3.9/test/test_tuple.py
+file path=usr/lib/python3.9/test/test_turtle.py
+file path=usr/lib/python3.9/test/test_type_comments.py
+file path=usr/lib/python3.9/test/test_typechecks.py
+file path=usr/lib/python3.9/test/test_types.py
+file path=usr/lib/python3.9/test/test_typing.py
+file path=usr/lib/python3.9/test/test_ucn.py
+file path=usr/lib/python3.9/test/test_unary.py
+file path=usr/lib/python3.9/test/test_unicode.py
+file path=usr/lib/python3.9/test/test_unicode_file.py
+file path=usr/lib/python3.9/test/test_unicode_file_functions.py
+file path=usr/lib/python3.9/test/test_unicode_identifiers.py
+file path=usr/lib/python3.9/test/test_unicodedata.py
+file path=usr/lib/python3.9/test/test_unittest.py
+file path=usr/lib/python3.9/test/test_univnewlines.py
+file path=usr/lib/python3.9/test/test_unpack.py
+file path=usr/lib/python3.9/test/test_unpack_ex.py
+file path=usr/lib/python3.9/test/test_unparse.py
+file path=usr/lib/python3.9/test/test_urllib.py
+file path=usr/lib/python3.9/test/test_urllib2.py
+file path=usr/lib/python3.9/test/test_urllib2_localnet.py
+file path=usr/lib/python3.9/test/test_urllib2net.py
+file path=usr/lib/python3.9/test/test_urllib_response.py
+file path=usr/lib/python3.9/test/test_urllibnet.py
+file path=usr/lib/python3.9/test/test_urlparse.py
+file path=usr/lib/python3.9/test/test_userdict.py
+file path=usr/lib/python3.9/test/test_userlist.py
+file path=usr/lib/python3.9/test/test_userstring.py
+file path=usr/lib/python3.9/test/test_utf8_mode.py
+file path=usr/lib/python3.9/test/test_utf8source.py
+file path=usr/lib/python3.9/test/test_uu.py
+file path=usr/lib/python3.9/test/test_uuid.py
+file path=usr/lib/python3.9/test/test_venv.py
+file path=usr/lib/python3.9/test/test_wait3.py
+file path=usr/lib/python3.9/test/test_wait4.py
+file path=usr/lib/python3.9/test/test_warnings/__init__.py
+file path=usr/lib/python3.9/test/test_warnings/__main__.py
+file path=usr/lib/python3.9/test/test_warnings/data/import_warning.py
+file path=usr/lib/python3.9/test/test_warnings/data/stacklevel.py
+file path=usr/lib/python3.9/test/test_wave.py
+file path=usr/lib/python3.9/test/test_weakref.py
+file path=usr/lib/python3.9/test/test_weakset.py
+file path=usr/lib/python3.9/test/test_webbrowser.py
+file path=usr/lib/python3.9/test/test_winconsoleio.py
+file path=usr/lib/python3.9/test/test_winreg.py
+file path=usr/lib/python3.9/test/test_winsound.py
+file path=usr/lib/python3.9/test/test_with.py
+file path=usr/lib/python3.9/test/test_wsgiref.py
+file path=usr/lib/python3.9/test/test_xdrlib.py
+file path=usr/lib/python3.9/test/test_xml_dom_minicompat.py
+file path=usr/lib/python3.9/test/test_xml_etree.py
+file path=usr/lib/python3.9/test/test_xml_etree_c.py
+file path=usr/lib/python3.9/test/test_xmlrpc.py
+file path=usr/lib/python3.9/test/test_xmlrpc_net.py
+file path=usr/lib/python3.9/test/test_xxtestfuzz.py
+file path=usr/lib/python3.9/test/test_yield_from.py
+file path=usr/lib/python3.9/test/test_zipapp.py
+file path=usr/lib/python3.9/test/test_zipfile.py
+file path=usr/lib/python3.9/test/test_zipfile64.py
+file path=usr/lib/python3.9/test/test_zipimport.py
+file path=usr/lib/python3.9/test/test_zipimport_support.py
+file path=usr/lib/python3.9/test/test_zlib.py
+file path=usr/lib/python3.9/test/test_zoneinfo/__init__.py
+file path=usr/lib/python3.9/test/test_zoneinfo/__main__.py
+file path=usr/lib/python3.9/test/test_zoneinfo/_support.py
+file path=usr/lib/python3.9/test/test_zoneinfo/data/update_test_data.py
+file path=usr/lib/python3.9/test/test_zoneinfo/data/zoneinfo_data.json
+file path=usr/lib/python3.9/test/test_zoneinfo/test_zoneinfo.py
+file path=usr/lib/python3.9/test/testcodec.py
+file path=usr/lib/python3.9/test/testtar.tar
+file path=usr/lib/python3.9/test/tf_inherit_check.py
+file path=usr/lib/python3.9/test/time_hashlib.py
+file path=usr/lib/python3.9/test/tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt
+file path=usr/lib/python3.9/test/tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt
+file path=usr/lib/python3.9/test/tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt
+file path=usr/lib/python3.9/test/tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt
+file path=usr/lib/python3.9/test/tokenize_tests.txt
+file path=usr/lib/python3.9/test/tracedmodules/__init__.py
+file path=usr/lib/python3.9/test/tracedmodules/testmod.py
+file path=usr/lib/python3.9/test/ucredtest.py
+file path=usr/lib/python3.9/test/win_console_handler.py
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/README
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nComment.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nPrefixQname.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nPrefixQnameXpathElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nQname.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nQnameElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nQnameXpathElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/c14nTrim.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/doc.dtd
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/doc.xsl
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N1.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N2.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N3.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N4.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N5.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inC14N6.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsContent.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsPushdown.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsRedecl.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsSort.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsSuperfluous.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/inNsXml.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N1_c14nComment.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N1_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N2_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N2_c14nTrim.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N3_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N3_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N3_c14nTrim.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N4_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N4_c14nTrim.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N5_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N5_c14nTrim.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inC14N6_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsContent_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsContent_c14nPrefixQnameXpathElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsContent_c14nQnameElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsContent_c14nQnameXpathElem.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsDefault_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsDefault_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsPushdown_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsPushdown_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsRedecl_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsRedecl_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsSort_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsSort_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsSuperfluous_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsSuperfluous_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsXml_c14nDefault.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsXml_c14nPrefix.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsXml_c14nPrefixQname.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/out_inNsXml_c14nQname.xml
+file path=usr/lib/python3.9/test/xmltestdata/c14n-20/world.txt
+file path=usr/lib/python3.9/test/xmltestdata/expat224_utf8_bug.xml
+file path=usr/lib/python3.9/test/xmltestdata/simple-ns.xml
+file path=usr/lib/python3.9/test/xmltestdata/simple.xml
+file path=usr/lib/python3.9/test/xmltestdata/test.xml
+file path=usr/lib/python3.9/test/xmltestdata/test.xml.out
+file path=usr/lib/python3.9/test/xmltests.py
+file path=usr/lib/python3.9/test/zip_cp437_header.zip
+file path=usr/lib/python3.9/test/zipdir.zip
+file path=usr/lib/python3.9/test/ziptestdata/README.md
+file path=usr/lib/python3.9/test/ziptestdata/exe_with_z64
+file path=usr/lib/python3.9/test/ziptestdata/exe_with_zip
+file path=usr/lib/python3.9/test/ziptestdata/header.sh
+file path=usr/lib/python3.9/test/ziptestdata/testdata_module_inside_zip.py
+file path=usr/lib/python3.9/textwrap.py
+file path=usr/lib/python3.9/this.py
+file path=usr/lib/python3.9/threading.py
+file path=usr/lib/python3.9/timeit.py
+#file path=usr/lib/python3.9/tkinter/__init__.py
+#file path=usr/lib/python3.9/tkinter/__main__.py
+#file path=usr/lib/python3.9/tkinter/colorchooser.py
+#file path=usr/lib/python3.9/tkinter/commondialog.py
+#file path=usr/lib/python3.9/tkinter/constants.py
+#file path=usr/lib/python3.9/tkinter/dialog.py
+#file path=usr/lib/python3.9/tkinter/dnd.py
+#file path=usr/lib/python3.9/tkinter/filedialog.py
+#file path=usr/lib/python3.9/tkinter/font.py
+#file path=usr/lib/python3.9/tkinter/messagebox.py
+#file path=usr/lib/python3.9/tkinter/scrolledtext.py
+#file path=usr/lib/python3.9/tkinter/simpledialog.py
+#file path=usr/lib/python3.9/tkinter/test/README
+#file path=usr/lib/python3.9/tkinter/test/__init__.py
+#file path=usr/lib/python3.9/tkinter/test/runtktests.py
+#file path=usr/lib/python3.9/tkinter/test/support.py
+#file path=usr/lib/python3.9/tkinter/test/test_tkinter/__init__.py
+#file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_font.py
+#file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_geometry_managers.py
+#file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_images.py
+#file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_loadtk.py
+#file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_misc.py
+#file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_text.py
+#file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_variables.py
+#file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_widgets.py
+#file path=usr/lib/python3.9/tkinter/test/test_ttk/__init__.py
+#file path=usr/lib/python3.9/tkinter/test/test_ttk/test_extensions.py
+#file path=usr/lib/python3.9/tkinter/test/test_ttk/test_functions.py
+#file path=usr/lib/python3.9/tkinter/test/test_ttk/test_style.py
+#file path=usr/lib/python3.9/tkinter/test/test_ttk/test_widgets.py
+#file path=usr/lib/python3.9/tkinter/test/widget_tests.py
+#file path=usr/lib/python3.9/tkinter/tix.py
+#file path=usr/lib/python3.9/tkinter/ttk.py
+file path=usr/lib/python3.9/token.py
+file path=usr/lib/python3.9/tokenize.py
+file path=usr/lib/python3.9/trace.py
+file path=usr/lib/python3.9/traceback.py
+file path=usr/lib/python3.9/tracemalloc.py
+file path=usr/lib/python3.9/tty.py
+file path=usr/lib/python3.9/turtle.py
+file path=usr/lib/python3.9/turtledemo/__init__.py
+# pkgdepend would (incorrectly) turn our conditional dependency on tkinter
+# into a require dependency.
+file path=usr/lib/python3.9/turtledemo/__main__.py pkg.depend.bypass-generate=.*
+file path=usr/lib/python3.9/turtledemo/bytedesign.py
+file path=usr/lib/python3.9/turtledemo/chaos.py
+file path=usr/lib/python3.9/turtledemo/clock.py
+file path=usr/lib/python3.9/turtledemo/colormixer.py
+file path=usr/lib/python3.9/turtledemo/forest.py
+file path=usr/lib/python3.9/turtledemo/fractalcurves.py
+file path=usr/lib/python3.9/turtledemo/lindenmayer.py
+file path=usr/lib/python3.9/turtledemo/minimal_hanoi.py
+file path=usr/lib/python3.9/turtledemo/nim.py
+file path=usr/lib/python3.9/turtledemo/paint.py
+file path=usr/lib/python3.9/turtledemo/peace.py
+file path=usr/lib/python3.9/turtledemo/penrose.py
+file path=usr/lib/python3.9/turtledemo/planet_and_moon.py
+file path=usr/lib/python3.9/turtledemo/rosette.py
+file path=usr/lib/python3.9/turtledemo/round_dance.py
+file path=usr/lib/python3.9/turtledemo/sorting_animate.py
+file path=usr/lib/python3.9/turtledemo/tree.py
+file path=usr/lib/python3.9/turtledemo/turtle.cfg
+file path=usr/lib/python3.9/turtledemo/two_canvases.py
+file path=usr/lib/python3.9/turtledemo/yinyang.py
+file path=usr/lib/python3.9/types.py
+file path=usr/lib/python3.9/typing.py
+file path=usr/lib/python3.9/unittest/__init__.py
+file path=usr/lib/python3.9/unittest/__main__.py
+file path=usr/lib/python3.9/unittest/_log.py
+file path=usr/lib/python3.9/unittest/async_case.py
+file path=usr/lib/python3.9/unittest/case.py
+file path=usr/lib/python3.9/unittest/loader.py
+file path=usr/lib/python3.9/unittest/main.py
+file path=usr/lib/python3.9/unittest/mock.py
+file path=usr/lib/python3.9/unittest/result.py
+file path=usr/lib/python3.9/unittest/runner.py
+file path=usr/lib/python3.9/unittest/signals.py
+file path=usr/lib/python3.9/unittest/suite.py
+file path=usr/lib/python3.9/unittest/test/__init__.py
+file path=usr/lib/python3.9/unittest/test/__main__.py
+file path=usr/lib/python3.9/unittest/test/_test_warnings.py
+file path=usr/lib/python3.9/unittest/test/dummy.py
+file path=usr/lib/python3.9/unittest/test/support.py
+file path=usr/lib/python3.9/unittest/test/test_assertions.py
+file path=usr/lib/python3.9/unittest/test/test_async_case.py
+file path=usr/lib/python3.9/unittest/test/test_break.py
+file path=usr/lib/python3.9/unittest/test/test_case.py
+file path=usr/lib/python3.9/unittest/test/test_discovery.py
+file path=usr/lib/python3.9/unittest/test/test_functiontestcase.py
+file path=usr/lib/python3.9/unittest/test/test_loader.py
+file path=usr/lib/python3.9/unittest/test/test_program.py
+file path=usr/lib/python3.9/unittest/test/test_result.py
+file path=usr/lib/python3.9/unittest/test/test_runner.py
+file path=usr/lib/python3.9/unittest/test/test_setups.py
+file path=usr/lib/python3.9/unittest/test/test_skipping.py
+file path=usr/lib/python3.9/unittest/test/test_suite.py
+file path=usr/lib/python3.9/unittest/test/testmock/__init__.py
+file path=usr/lib/python3.9/unittest/test/testmock/__main__.py
+file path=usr/lib/python3.9/unittest/test/testmock/support.py
+file path=usr/lib/python3.9/unittest/test/testmock/testasync.py
+file path=usr/lib/python3.9/unittest/test/testmock/testcallable.py
+file path=usr/lib/python3.9/unittest/test/testmock/testhelpers.py
+file path=usr/lib/python3.9/unittest/test/testmock/testmagicmethods.py
+file path=usr/lib/python3.9/unittest/test/testmock/testmock.py
+file path=usr/lib/python3.9/unittest/test/testmock/testpatch.py
+file path=usr/lib/python3.9/unittest/test/testmock/testsealable.py
+file path=usr/lib/python3.9/unittest/test/testmock/testsentinel.py
+file path=usr/lib/python3.9/unittest/test/testmock/testwith.py
+file path=usr/lib/python3.9/unittest/util.py
+file path=usr/lib/python3.9/urllib/__init__.py
+file path=usr/lib/python3.9/urllib/error.py
+file path=usr/lib/python3.9/urllib/parse.py
+file path=usr/lib/python3.9/urllib/request.py
+file path=usr/lib/python3.9/urllib/response.py
+file path=usr/lib/python3.9/urllib/robotparser.py
+file path=usr/lib/python3.9/uu.py
+file path=usr/lib/python3.9/uuid.py
+file path=usr/lib/python3.9/venv/__init__.py
+file path=usr/lib/python3.9/venv/__main__.py
+file path=usr/lib/python3.9/venv/scripts/common/Activate.ps1
+file path=usr/lib/python3.9/venv/scripts/common/activate
+file path=usr/lib/python3.9/venv/scripts/posix/activate.csh
+file path=usr/lib/python3.9/venv/scripts/posix/activate.fish
+file path=usr/lib/python3.9/warnings.py
+file path=usr/lib/python3.9/wave.py
+file path=usr/lib/python3.9/weakref.py
+file path=usr/lib/python3.9/webbrowser.py
+file path=usr/lib/python3.9/wsgiref/__init__.py
+file path=usr/lib/python3.9/wsgiref/handlers.py
+file path=usr/lib/python3.9/wsgiref/headers.py
+file path=usr/lib/python3.9/wsgiref/simple_server.py
+file path=usr/lib/python3.9/wsgiref/util.py
+file path=usr/lib/python3.9/wsgiref/validate.py
+file path=usr/lib/python3.9/xdrlib.py
+file path=usr/lib/python3.9/xml/__init__.py
+file path=usr/lib/python3.9/xml/dom/NodeFilter.py
+file path=usr/lib/python3.9/xml/dom/__init__.py
+file path=usr/lib/python3.9/xml/dom/domreg.py
+file path=usr/lib/python3.9/xml/dom/expatbuilder.py
+file path=usr/lib/python3.9/xml/dom/minicompat.py
+file path=usr/lib/python3.9/xml/dom/minidom.py
+file path=usr/lib/python3.9/xml/dom/pulldom.py
+file path=usr/lib/python3.9/xml/dom/xmlbuilder.py
+file path=usr/lib/python3.9/xml/etree/ElementInclude.py
+file path=usr/lib/python3.9/xml/etree/ElementPath.py
+file path=usr/lib/python3.9/xml/etree/ElementTree.py
+file path=usr/lib/python3.9/xml/etree/__init__.py
+file path=usr/lib/python3.9/xml/etree/cElementTree.py
+file path=usr/lib/python3.9/xml/parsers/__init__.py
+file path=usr/lib/python3.9/xml/parsers/expat.py
+file path=usr/lib/python3.9/xml/sax/__init__.py
+file path=usr/lib/python3.9/xml/sax/_exceptions.py
+file path=usr/lib/python3.9/xml/sax/expatreader.py
+file path=usr/lib/python3.9/xml/sax/handler.py
+file path=usr/lib/python3.9/xml/sax/saxutils.py
+file path=usr/lib/python3.9/xml/sax/xmlreader.py
+file path=usr/lib/python3.9/xmlrpc/__init__.py
+file path=usr/lib/python3.9/xmlrpc/client.py
+file path=usr/lib/python3.9/xmlrpc/server.py
+file path=usr/lib/python3.9/zipapp.py
+file path=usr/lib/python3.9/zipfile.py
+file path=usr/lib/python3.9/zipimport.py
+file path=usr/lib/python3.9/zoneinfo/__init__.py
+file path=usr/lib/python3.9/zoneinfo/_common.py
+file path=usr/lib/python3.9/zoneinfo/_tzpath.py
+file path=usr/lib/python3.9/zoneinfo/_zoneinfo.py
+file path=usr/share/man/man1/python$(COMPONENT_VERSION)
+link path=usr/share/man/man1/python3.9 target=python$(COMPONENT_VERSION)
diff --git a/components/python/python39/python39.license b/components/python/python39/python39.license
new file mode 100644
index 0000000..f42f8ad
--- /dev/null
+++ b/components/python/python39/python39.license
@@ -0,0 +1,279 @@
+A. HISTORY OF THE SOFTWARE
+==========================
+
+Python was created in the early 1990s by Guido van Rossum at Stichting
+Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
+as a successor of a language called ABC.  Guido remains Python's
+principal author, although it includes many contributions from others.
+
+In 1995, Guido continued his work on Python at the Corporation for
+National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
+in Reston, Virginia where he released several versions of the
+software.
+
+In May 2000, Guido and the Python core development team moved to
+BeOpen.com to form the BeOpen PythonLabs team.  In October of the same
+year, the PythonLabs team moved to Digital Creations, which became
+Zope Corporation.  In 2001, the Python Software Foundation (PSF, see
+https://www.python.org/psf/) was formed, a non-profit organization
+created specifically to own Python-related Intellectual Property.
+Zope Corporation was a sponsoring member of the PSF.
+
+All Python releases are Open Source (see http://www.opensource.org for
+the Open Source Definition).  Historically, most, but not all, Python
+releases have also been GPL-compatible; the table below summarizes
+the various releases.
+
+    Release         Derived     Year        Owner       GPL-
+                    from                                compatible? (1)
+
+    0.9.0 thru 1.2              1991-1995   CWI         yes
+    1.3 thru 1.5.2  1.2         1995-1999   CNRI        yes
+    1.6             1.5.2       2000        CNRI        no
+    2.0             1.6         2000        BeOpen.com  no
+    1.6.1           1.6         2001        CNRI        yes (2)
+    2.1             2.0+1.6.1   2001        PSF         no
+    2.0.1           2.0+1.6.1   2001        PSF         yes
+    2.1.1           2.1+2.0.1   2001        PSF         yes
+    2.1.2           2.1.1       2002        PSF         yes
+    2.1.3           2.1.2       2002        PSF         yes
+    2.2 and above   2.1.1       2001-now    PSF         yes
+
+Footnotes:
+
+(1) GPL-compatible doesn't mean that we're distributing Python under
+    the GPL.  All Python licenses, unlike the GPL, let you distribute
+    a modified version without making your changes open source.  The
+    GPL-compatible licenses make it possible to combine Python with
+    other software that is released under the GPL; the others don't.
+
+(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
+    because its license has a choice of law clause.  According to
+    CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
+    is "not incompatible" with the GPL.
+
+Thanks to the many outside volunteers who have worked under Guido's
+direction to make these releases possible.
+
+
+B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
+===============================================================
+
+Python software and documentation are licensed under the
+Python Software Foundation License Version 2.
+
+Starting with Python 3.8.6, examples, recipes, and other code in
+the documentation are dual licensed under the PSF License Version 2
+and the Zero-Clause BSD license.
+
+Some software incorporated into Python is under different licenses.
+The licenses are listed with code falling under that license.
+
+
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+--------------------------------------------
+
+1. This LICENSE AGREEMENT is between the Python Software Foundation
+("PSF"), and the Individual or Organization ("Licensee") accessing and
+otherwise using this software ("Python") in source or binary form and
+its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, PSF hereby
+grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
+analyze, test, perform and/or display publicly, prepare derivative works,
+distribute, and otherwise use Python alone or in any derivative version,
+provided, however, that PSF's License Agreement and PSF's notice of copyright,
+i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Python Software Foundation;
+All Rights Reserved" are retained in Python alone or in any derivative version
+prepared by Licensee.
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python.
+
+4. PSF is making Python available to Licensee on an "AS IS"
+basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. Nothing in this License Agreement shall be deemed to create any
+relationship of agency, partnership, or joint venture between PSF and
+Licensee.  This License Agreement does not grant permission to use PSF
+trademarks or trade name in a trademark sense to endorse or promote
+products or services of Licensee, or any third party.
+
+8. By copying, installing or otherwise using Python, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
+-------------------------------------------
+
+BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
+
+1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
+office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
+Individual or Organization ("Licensee") accessing and otherwise using
+this software in source or binary form and its associated
+documentation ("the Software").
+
+2. Subject to the terms and conditions of this BeOpen Python License
+Agreement, BeOpen hereby grants Licensee a non-exclusive,
+royalty-free, world-wide license to reproduce, analyze, test, perform
+and/or display publicly, prepare derivative works, distribute, and
+otherwise use the Software alone or in any derivative version,
+provided, however, that the BeOpen Python License is retained in the
+Software, alone or in any derivative version prepared by Licensee.
+
+3. BeOpen is making the Software available to Licensee on an "AS IS"
+basis.  BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
+SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
+AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
+DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+5. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+6. This License Agreement shall be governed by and interpreted in all
+respects by the law of the State of California, excluding conflict of
+law provisions.  Nothing in this License Agreement shall be deemed to
+create any relationship of agency, partnership, or joint venture
+between BeOpen and Licensee.  This License Agreement does not grant
+permission to use BeOpen trademarks or trade names in a trademark
+sense to endorse or promote products or services of Licensee, or any
+third party.  As an exception, the "BeOpen Python" logos available at
+http://www.pythonlabs.com/logos.html may be used according to the
+permissions granted on that web page.
+
+7. By copying, installing or otherwise using the software, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
+---------------------------------------
+
+1. This LICENSE AGREEMENT is between the Corporation for National
+Research Initiatives, having an office at 1895 Preston White Drive,
+Reston, VA 20191 ("CNRI"), and the Individual or Organization
+("Licensee") accessing and otherwise using Python 1.6.1 software in
+source or binary form and its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, CNRI
+hereby grants Licensee a nonexclusive, royalty-free, world-wide
+license to reproduce, analyze, test, perform and/or display publicly,
+prepare derivative works, distribute, and otherwise use Python 1.6.1
+alone or in any derivative version, provided, however, that CNRI's
+License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
+1995-2001 Corporation for National Research Initiatives; All Rights
+Reserved" are retained in Python 1.6.1 alone or in any derivative
+version prepared by Licensee.  Alternately, in lieu of CNRI's License
+Agreement, Licensee may substitute the following text (omitting the
+quotes): "Python 1.6.1 is made available subject to the terms and
+conditions in CNRI's License Agreement.  This Agreement together with
+Python 1.6.1 may be located on the Internet using the following
+unique, persistent identifier (known as a handle): 1895.22/1013.  This
+Agreement may also be obtained from a proxy server on the Internet
+using the following URL: http://hdl.handle.net/1895.22/1013".
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python 1.6.1 or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python 1.6.1.
+
+4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
+basis.  CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. This License Agreement shall be governed by the federal
+intellectual property law of the United States, including without
+limitation the federal copyright law, and, to the extent such
+U.S. federal law does not apply, by the law of the Commonwealth of
+Virginia, excluding Virginia's conflict of law provisions.
+Notwithstanding the foregoing, with regard to derivative works based
+on Python 1.6.1 that incorporate non-separable material that was
+previously distributed under the GNU General Public License (GPL), the
+law of the Commonwealth of Virginia shall govern this License
+Agreement only as to issues arising under or with respect to
+Paragraphs 4, 5, and 7 of this License Agreement.  Nothing in this
+License Agreement shall be deemed to create any relationship of
+agency, partnership, or joint venture between CNRI and Licensee.  This
+License Agreement does not grant permission to use CNRI trademarks or
+trade name in a trademark sense to endorse or promote products or
+services of Licensee, or any third party.
+
+8. By clicking on the "ACCEPT" button where indicated, or by copying,
+installing or otherwise using Python 1.6.1, Licensee agrees to be
+bound by the terms and conditions of this License Agreement.
+
+        ACCEPT
+
+
+CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
+--------------------------------------------------
+
+Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
+The Netherlands.  All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Stichting Mathematisch
+Centrum or CWI not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
+FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION
+----------------------------------------------------------------------
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/components/python/python39/test/results-64.master b/components/python/python39/test/results-64.master
new file mode 100644
index 0000000..d9b0bd4
--- /dev/null
+++ b/components/python/python39/test/results-64.master
@@ -0,0 +1,11 @@
+405 tests OK.
+
+2 tests failed:
+    test_epoll test_ssl
+
+18 tests skipped:
+    test_gdb test_kqueue test_msilib test_ossaudiodev test_smtpnet
+    test_socketserver test_startfile test_timeout test_tix test_tk
+    test_ttk_guionly test_urllib2net test_urllibnet test_winconsoleio
+    test_winreg test_winsound test_xmlrpc_net test_zipfile64
+
diff --git a/components/python/python39/tkinter-39.p5m b/components/python/python39/tkinter-39.p5m
new file mode 100644
index 0000000..18d0138
--- /dev/null
+++ b/components/python/python39/tkinter-39.p5m
@@ -0,0 +1,68 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
+#
+<transform file path=usr/lib/python3.9/lib-dynload/.*\.so -> \
+    add pkg.linted.userland.action001.2 true>
+
+set name=pkg.fmri value=pkg:/library/python/tkinter-39@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Python 3.9 bindings to tcl/tk"
+set name=info.classification value="$(COMPONENT_CLASSIFICATION)"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+
+license $(COMPONENT_LICENSE_FILE) license='$(COMPONENT_LICENSE)'
+#
+file path=usr/lib/python3.9/lib-dynload/_tkinter.cpython-39.so
+file path=usr/lib/python3.9/tkinter/__init__.py
+file path=usr/lib/python3.9/tkinter/__main__.py
+file path=usr/lib/python3.9/tkinter/colorchooser.py
+file path=usr/lib/python3.9/tkinter/commondialog.py
+file path=usr/lib/python3.9/tkinter/constants.py
+file path=usr/lib/python3.9/tkinter/dialog.py
+file path=usr/lib/python3.9/tkinter/dnd.py
+file path=usr/lib/python3.9/tkinter/filedialog.py
+file path=usr/lib/python3.9/tkinter/font.py
+file path=usr/lib/python3.9/tkinter/messagebox.py
+file path=usr/lib/python3.9/tkinter/scrolledtext.py
+file path=usr/lib/python3.9/tkinter/simpledialog.py
+file path=usr/lib/python3.9/tkinter/test/README
+file path=usr/lib/python3.9/tkinter/test/__init__.py
+file path=usr/lib/python3.9/tkinter/test/runtktests.py
+file path=usr/lib/python3.9/tkinter/test/support.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/__init__.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_font.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_geometry_managers.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_images.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_loadtk.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_misc.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_text.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_variables.py
+file path=usr/lib/python3.9/tkinter/test/test_tkinter/test_widgets.py
+file path=usr/lib/python3.9/tkinter/test/test_ttk/__init__.py
+file path=usr/lib/python3.9/tkinter/test/test_ttk/test_extensions.py
+file path=usr/lib/python3.9/tkinter/test/test_ttk/test_functions.py
+file path=usr/lib/python3.9/tkinter/test/test_ttk/test_style.py
+file path=usr/lib/python3.9/tkinter/test/test_ttk/test_widgets.py
+file path=usr/lib/python3.9/tkinter/test/widget_tests.py
+file path=usr/lib/python3.9/tkinter/tix.py
+file path=usr/lib/python3.9/tkinter/ttk.py

--
Gitblit v1.9.3