PHP 7.4.33
Preview: distro_info.py Size: 12.23 KB
//usr/lib/python3/dist-packages/distro_info.py
# Copyright (C) 2009-2012, Benjamin Drung <bdrung@debian.org>
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# 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.

"""provides information about Ubuntu's and Debian's distributions"""

import csv
import datetime
import os


def convert_date(string):
    """Convert a date string in ISO 8601 into a datetime object."""
    if not string:
        date = None
    else:
        parts = [int(x) for x in string.split("-")]
        if len(parts) == 3:
            (year, month, day) = parts
            date = datetime.date(year, month, day)
        elif len(parts) == 2:
            (year, month) = parts
            if month == 12:
                date = datetime.date(year, month, 31)
            else:
                date = datetime.date(year, month + 1, 1) - datetime.timedelta(1)
        else:
            raise ValueError("Date not in ISO 8601 format.")
    return date


def _get_data_dir():
    """Get the data directory based on the module location."""
    return "/usr/share/distro-info"


class DistroDataOutdated(Exception):
    """Distribution data outdated."""

    def __init__(self):
        super().__init__(
            "Distribution data outdated. Please check for an update for distro-info-data. "
            "See /usr/share/doc/distro-info-data/README.Debian for details."
        )


class DistroRelease:
    """Represents a distributions release"""

    # pylint: disable=too-few-public-methods
    # pylint: disable=too-many-instance-attributes

    def __init__(
        self,
        version,
        codename,
        series,
        created=None,
        release=None,
        eol=None,
        eol_esm=None,
        eol_lts=None,
        eol_elts=None,
        eol_server=None,
    ):
        # pylint: disable=too-many-arguments
        self.version = version
        self.codename = codename
        self.series = series
        self.created = created
        self.release = release
        self.eol = eol
        self.eol_lts = eol_lts
        self.eol_elts = eol_elts
        self.eol_esm = eol_esm
        self.eol_server = eol_server

    def is_supported(self, date):
        """Check whether this release is supported on the given date."""
        return date >= self.created and (
            self.eol is None
            or date <= self.eol
            or (self.eol_server is not None and date <= self.eol_server)
        )


def _get_date(row, column):
    return convert_date(row[column]) if column in row else None


class DistroInfo:
    """Base class for distribution information.
    Use DebianDistroInfo or UbuntuDistroInfo instead of using this directly.
    """

    def __init__(self, distro):
        self._distro = distro
        filename = os.path.join(_get_data_dir(), distro.lower() + ".csv")
        with open(filename, encoding="utf-8") as csvfile:
            csv_reader = csv.DictReader(csvfile)
            self._releases = []
            for row in csv_reader:
                release = DistroRelease(
                    row["version"],
                    row["codename"],
                    row["series"],
                    _get_date(row, "created"),
                    _get_date(row, "release"),
                    _get_date(row, "eol"),
                    _get_date(row, "eol-esm"),
                    _get_date(row, "eol-lts"),
                    _get_date(row, "eol-elts"),
                    _get_date(row, "eol-server"),
                )
                self._releases.append(release)
        self._date = datetime.date.today()

    @property
    def all(self):
        """List codenames of all known distributions."""
        return [x.series for x in self._releases]

    def get_all(self, result="codename"):
        """List all known distributions."""
        return [self._format(result, x) for x in self._releases]

    def _avail(self, date):
        """Return all distributions that were available on the given date."""
        return [x for x in self._releases if date >= x.created]

    def codename(self, release, date=None, default=None):
        """Map codename aliases to the codename they describe."""
        # pylint: disable=no-self-use,unused-argument
        return release

    def version(self, name, default=None):
        """Map codename or series to version"""
        for release in self._releases:
            if name in (release.codename, release.series):
                return release.version
        return default

    def devel(self, date=None, result="codename"):
        """Get latest development distribution based on the given date."""
        if date is None:
            date = self._date
        distros = [
            x
            for x in self._avail(date)
            if x.release is None or (date < x.release and (x.eol is None or date <= x.eol))
        ]
        if not distros:
            raise DistroDataOutdated()
        return self._format(result, distros[-1])

    def _format(self, format_string, release):
        """Format a given distribution entry."""
        if format_string == "object":
            return release
        if format_string == "codename":
            return release.series
        if format_string == "fullname":
            return self._distro + " " + release.version + ' "' + release.codename + '"'
        if format_string == "release":
            return release.version

        raise ValueError(
            "Only codename, fullname, object, and release are allowed "
            "result values, but not '" + format_string + "'."
        )

    def stable(self, date=None, result="codename"):
        """Get latest stable distribution based on the given date."""
        if date is None:
            date = self._date
        distros = [
            x
            for x in self._avail(date)
            if x.release is not None and date >= x.release and (x.eol is None or date <= x.eol)
        ]
        if not distros:
            raise DistroDataOutdated()
        return self._format(result, distros[-1])

    def supported(self, date=None, result=None):
        """Get list of all supported distributions based on the given date."""
        raise NotImplementedError()

    def valid(self, codename):
        """Check if the given codename is known."""
        return codename in self.all

    def unsupported(self, date=None, result="codename"):
        """Get list of all unsupported distributions based on the given date."""
        if date is None:
            date = self._date
        supported = self.supported(date)
        distros = [self._format(result, x) for x in self._avail(date) if x.series not in supported]
        return distros


class DebianDistroInfo(DistroInfo):
    """provides information about Debian's distributions"""

    def __init__(self):
        super().__init__("Debian")

    def codename(self, release, date=None, default=None):
        """Map 'unstable', 'testing', etc. to their codenames."""
        if release == "unstable":
            codename = self.devel(date)
        elif release == "testing":
            codename = self.testing(date)
        elif release == "stable":
            codename = self.stable(date)
        elif release == "oldstable":
            codename = self.old(date)
        else:
            codename = default
        return codename

    def devel(self, date=None, result="codename"):
        """Get latest development distribution based on the given date."""
        if date is None:
            date = self._date
        distros = [
            x
            for x in self._avail(date)
            if x.release is None or (date < x.release and (x.eol is None or date <= x.eol))
        ]
        if len(distros) < 2:
            raise DistroDataOutdated()
        return self._format(result, distros[-2])

    def old(self, date=None, result="codename"):
        """Get old (stable) Debian distribution based on the given date."""
        if date is None:
            date = self._date
        distros = [x for x in self._avail(date) if x.release is not None and date >= x.release]
        if len(distros) < 2:
            raise DistroDataOutdated()
        return self._format(result, distros[-2])

    def supported(self, date=None, result="codename"):
        """Get list of all supported Debian distributions based on the given
        date."""
        if date is None:
            date = self._date
        distros = [
            self._format(result, x) for x in self._avail(date) if x.eol is None or date <= x.eol
        ]
        return distros

    def lts_supported(self, date=None, result="codename"):
        """Get list of all LTS supported Debian distributions based on the given
        date."""
        if date is None:
            date = self._date
        distros = [
            self._format(result, x)
            for x in self._avail(date)
            if (x.eol is not None and date > x.eol)
            and (x.eol_lts is not None and date <= x.eol_lts)
        ]
        return distros

    def elts_supported(self, date=None, result="codename"):
        """Get list of all Extended LTS supported Debian distributions based on
        the given date."""
        if date is None:
            date = self._date
        distros = [
            self._format(result, x)
            for x in self._avail(date)
            if (x.eol_lts is not None and date > x.eol_lts)
            and (x.eol_elts is not None and date <= x.eol_elts)
        ]
        return distros

    def testing(self, date=None, result="codename"):
        """Get latest testing Debian distribution based on the given date."""
        if date is None:
            date = self._date
        distros = [
            x
            for x in self._avail(date)
            if (x.release is None and x.version)
            or (x.release is not None and date < x.release and (x.eol is None or date <= x.eol))
        ]
        if not distros:
            raise DistroDataOutdated()
        return self._format(result, distros[-1])

    def valid(self, codename):
        """Check if the given codename is known."""
        return DistroInfo.valid(self, codename) or codename in [
            "unstable",
            "testing",
            "stable",
            "oldstable",
        ]


class UbuntuDistroInfo(DistroInfo):
    """provides information about Ubuntu's distributions"""

    def __init__(self):
        super().__init__("Ubuntu")

    def lts(self, date=None, result="codename"):
        """Get latest long term support (LTS) Ubuntu distribution based on the
        given date."""
        if date is None:
            date = self._date
        distros = [
            x for x in self._releases if x.version.find("LTS") >= 0 and x.release <= date <= x.eol
        ]
        if not distros:
            raise DistroDataOutdated()
        return self._format(result, distros[-1])

    def is_lts(self, codename):
        """Is codename an LTS release?"""
        distros = [x for x in self._releases if x.series == codename]
        if not distros:
            return False
        return "LTS" in distros[0].version

    def supported(self, date=None, result="codename"):
        """Get list of all supported Ubuntu distributions based on the given
        date."""
        if date is None:
            date = self._date
        distros = [
            self._format(result, x)
            for x in self._avail(date)
            if date <= x.eol or (x.eol_server is not None and date <= x.eol_server)
        ]
        return distros

    def supported_esm(self, date=None, result="codename"):
        """Get list of all ESM supported Ubuntu distributions based on the
        given date."""
        if date is None:
            date = self._date
        distros = [
            self._format(result, x)
            for x in self._avail(date)
            if x.eol_esm is not None and date <= x.eol_esm
        ]
        return distros

Directory Contents

Dirs: 167 × Files: 38
Name Size Perms Modified Actions
acme DIR
- drwxr-xr-x 2024-03-05 04:28:32
Edit Download
- drwxr-xr-x 2024-03-05 04:28:01
Edit Download
apport DIR
- drwxr-xr-x 2025-08-06 06:56:20
Edit Download
apt DIR
- drwxr-xr-x 2025-12-11 06:41:58
Edit Download
- drwxr-xr-x 2025-12-11 06:41:58
Edit Download
- drwxr-xr-x 2025-12-11 06:41:58
Edit Download
- drwxr-xr-x 2025-12-11 06:41:58
Edit Download
attr DIR
- drwxr-xr-x 2022-08-09 11:56:57
Edit Download
- drwxr-xr-x 2022-08-09 11:56:44
Edit Download
automat DIR
- drwxr-xr-x 2022-08-09 11:58:22
Edit Download
- drwxr-xr-x 2022-08-09 11:58:19
Edit Download
babel DIR
- drwxr-xr-x 2022-08-09 11:56:59
Edit Download
- drwxr-xr-x 2022-08-09 11:56:44
Edit Download
bcrypt DIR
- drwxr-xr-x 2022-08-09 11:58:22
Edit Download
- drwxr-xr-x 2022-08-09 11:58:18
Edit Download
blinker DIR
- drwxr-xr-x 2022-08-09 11:56:56
Edit Download
certbot DIR
- drwxr-xr-x 2023-04-05 06:35:49
Edit Download
- drwxr-xr-x 2023-04-05 06:35:48
Edit Download
- drwxr-xr-x 2023-04-05 06:35:50
Edit Download
- drwxr-xr-x 2023-04-05 06:35:48
Edit Download
certifi DIR
- drwxr-xr-x 2022-08-09 11:56:53
Edit Download
- drwxr-xr-x 2022-08-09 11:56:44
Edit Download
chardet DIR
- drwxr-xr-x 2022-08-09 11:58:56
Edit Download
- drwxr-xr-x 2022-08-09 11:58:56
Edit Download
click DIR
- drwxr-xr-x 2022-08-09 11:57:00
Edit Download
- drwxr-xr-x 2022-08-09 11:56:38
Edit Download
cloudinit DIR
- drwxr-xr-x 2025-08-01 06:35:22
Edit Download
- drwxr-xr-x 2025-08-01 06:35:21
Edit Download
colorama DIR
- drwxr-xr-x 2022-08-09 11:56:59
Edit Download
- drwxr-xr-x 2022-08-09 11:56:38
Edit Download
- drwxr-xr-x 2022-08-09 11:58:08
Edit Download
- drwxr-xr-x 2023-04-05 06:35:47
Edit Download
- drwxr-xr-x 2024-10-09 06:35:29
Edit Download
- drwxr-xr-x 2022-08-09 11:58:23
Edit Download
- drwxr-xr-x 2022-08-09 11:58:19
Edit Download
- drwxr-xr-x 2026-03-21 06:19:41
Edit Download
- drwxr-xr-x 2026-03-21 06:19:41
Edit Download
dbus DIR
- drwxr-xr-x 2022-08-09 11:56:57
Edit Download
- drwxr-xr-x 2022-08-09 11:56:40
Edit Download
debian DIR
- drwxr-xr-x 2024-03-05 04:28:23
Edit Download
- drwxr-xr-x 2024-03-05 04:28:23
Edit Download
distro DIR
- drwxr-xr-x 2022-08-09 11:56:57
Edit Download
- drwxr-xr-x 2022-08-09 11:56:41
Edit Download
- drwxr-xr-x 2024-03-05 04:27:41
Edit Download
- drwxr-xr-x 2024-03-05 04:28:42
Edit Download
gi DIR
- drwxr-xr-x 2022-08-09 11:56:53
Edit Download
gyp DIR
- drwxr-xr-x 2023-12-27 11:26:22
Edit Download
- drwxr-xr-x 2023-12-27 11:26:12
Edit Download
hamcrest DIR
- drwxr-xr-x 2022-08-09 11:58:22
Edit Download
httplib2 DIR
- drwxr-xr-x 2022-08-09 11:56:55
Edit Download
- drwxr-xr-x 2022-08-09 11:56:41
Edit Download
- drwxr-xr-x 2024-03-05 04:28:42
Edit Download
hyperlink DIR
- drwxr-xr-x 2022-08-09 11:58:23
Edit Download
- drwxr-xr-x 2022-08-09 11:58:19
Edit Download
icu DIR
- drwxr-xr-x 2023-04-05 06:35:48
Edit Download
idna DIR
- drwxr-xr-x 2024-05-23 06:17:20
Edit Download
- drwxr-xr-x 2024-05-23 06:17:20
Edit Download
- drwxr-xr-x 2022-08-09 11:57:02
Edit Download
- drwxr-xr-x 2022-08-09 11:56:38
Edit Download
- drwxr-xr-x 2022-08-09 11:58:22
Edit Download
- drwxr-xr-x 2022-08-09 11:58:19
Edit Download
janitor DIR
- drwxr-xr-x 2024-03-05 04:28:42
Edit Download
jeepney DIR
- drwxr-xr-x 2022-08-09 11:56:54
Edit Download
- drwxr-xr-x 2022-08-09 11:56:41
Edit Download
jinja2 DIR
- drwxr-xr-x 2025-03-28 10:49:42
Edit Download
- drwxr-xr-x 2025-03-28 10:49:42
Edit Download
josepy DIR
- drwxr-xr-x 2023-04-05 06:35:49
Edit Download
- drwxr-xr-x 2023-04-05 06:35:47
Edit Download
- drwxr-xr-x 2022-08-09 11:56:44
Edit Download
- drwxr-xr-x 2022-08-09 11:56:44
Edit Download
- drwxr-xr-x 2022-08-09 11:57:03
Edit Download
- drwxr-xr-x 2022-08-09 11:56:44
Edit Download
jwt DIR
- drwxr-xr-x 2026-04-01 06:52:17
Edit Download
keyring DIR
- drwxr-xr-x 2022-08-09 11:58:58
Edit Download
- drwxr-xr-x 2022-08-09 11:58:58
Edit Download
landscape DIR
- drwxr-xr-x 2022-08-09 11:58:27
Edit Download
- drwxr-xr-x 2022-08-09 11:57:04
Edit Download
- drwxr-xr-x 2022-08-09 11:56:41
Edit Download
lazr DIR
- drwxr-xr-x 2022-08-09 11:56:41
Edit Download
- drwxr-xr-x 2022-08-09 11:56:41
Edit Download
- drwxr-xr-x 2022-08-09 11:56:41
Edit Download
magic DIR
- drwxr-xr-x 2023-03-05 04:21:43
Edit Download
- drwxr-xr-x 2022-08-09 11:56:52
Edit Download
- drwxr-xr-x 2022-08-09 11:56:44
Edit Download
- drwxr-xr-x 2022-08-09 11:56:56
Edit Download
- drwxr-xr-x 2022-08-09 11:56:38
Edit Download
- drwxr-xr-x 2022-08-09 11:56:39
Edit Download
- drwxr-xr-x 2024-11-01 06:42:55
Edit Download
oauthlib DIR
- drwxr-xr-x 2023-03-05 04:16:40
Edit Download
- drwxr-xr-x 2023-03-05 04:16:39
Edit Download
OpenSSL DIR
- drwxr-xr-x 2026-03-26 06:11:47
Edit Download
- drwxr-xr-x 2023-04-05 06:35:48
Edit Download
- drwxr-xr-x 2023-04-05 06:35:47
Edit Download
pexpect DIR
- drwxr-xr-x 2022-08-09 11:58:24
Edit Download
pip DIR
- drwxr-xr-x 2025-09-26 06:49:52
Edit Download
- drwxr-xr-x 2025-09-26 06:49:52
Edit Download
- drwxr-xr-x 2025-05-30 06:09:10
Edit Download
- drwxr-xr-x 2022-08-09 11:58:23
Edit Download
- drwxr-xr-x 2022-08-09 11:58:20
Edit Download
pyasn1 DIR
- drwxr-xr-x 2026-04-01 06:52:27
Edit Download
- drwxr-xr-x 2026-04-01 06:52:27
Edit Download
- drwxr-xr-x 2022-08-09 11:58:24
Edit Download
- drwxr-xr-x 2022-08-09 11:56:40
Edit Download
- drwxr-xr-x 2022-08-09 11:56:53
Edit Download
- drwxr-xr-x 2022-08-09 11:58:18
Edit Download
- drwxr-xr-x 2023-04-05 06:35:48
Edit Download
- drwxr-xr-x 2026-04-01 06:52:17
Edit Download
- drwxr-xr-x 2026-03-26 06:11:46
Edit Download
- drwxr-xr-x 2022-08-09 11:56:41
Edit Download
pyrfc3339 DIR
- drwxr-xr-x 2023-04-05 06:35:49
Edit Download
- drwxr-xr-x 2023-04-05 06:35:47
Edit Download
- drwxr-xr-x 2022-08-09 11:56:55
Edit Download
- drwxr-xr-x 2022-08-09 11:56:44
Edit Download
- drwxr-xr-x 2022-08-09 11:56:44
Edit Download
- drwxr-xr-x 2025-12-11 06:41:58
Edit Download
- drwxr-xr-x 2024-03-05 04:27:41
Edit Download
- drwxr-xr-x 2023-03-05 04:21:39
Edit Download
pytz DIR
- drwxr-xr-x 2024-03-05 04:28:20
Edit Download
- drwxr-xr-x 2024-03-05 04:28:01
Edit Download
- drwxr-xr-x 2022-08-09 11:56:39
Edit Download
Quirks DIR
- drwxr-xr-x 2024-11-01 06:42:55
Edit Download
requests DIR
- drwxr-xr-x 2025-06-17 06:21:23
Edit Download
- drwxr-xr-x 2025-06-17 06:21:23
Edit Download
- drwxr-xr-x 2023-04-05 06:35:48
Edit Download
- drwxr-xr-x 2023-04-05 06:35:47
Edit Download
- drwxr-xr-x 2022-08-09 11:57:03
Edit Download
- drwxr-xr-x 2022-08-09 11:56:41
Edit Download
serial DIR
- drwxr-xr-x 2022-08-09 11:56:52
Edit Download
- drwxr-xr-x 2022-08-09 11:58:24
Edit Download
- drwxr-xr-x 2022-08-09 11:58:19
Edit Download
- drwxr-xr-x 2025-05-30 06:09:10
Edit Download
- drwxr-xr-x 2025-05-30 06:09:10
Edit Download
- drwxr-xr-x 2022-08-09 11:56:41
Edit Download
- drwxr-xr-x 2024-03-05 04:28:32
Edit Download
sos DIR
- drwxr-xr-x 2024-03-05 04:28:24
Edit Download
- drwxr-xr-x 2024-03-05 04:28:02
Edit Download
- drwxr-xr-x 2022-08-09 11:58:58
Edit Download
- drwxr-xr-x 2022-08-09 11:58:58
Edit Download
- drwxr-xr-x 2023-09-26 09:34:57
Edit Download
- drwxr-xr-x 2023-09-26 09:34:57
Edit Download
systemd DIR
- drwxr-xr-x 2022-08-09 11:56:55
Edit Download
twisted DIR
- drwxr-xr-x 2024-11-29 06:13:54
Edit Download
- drwxr-xr-x 2024-11-29 06:13:54
Edit Download
uaclient DIR
- drwxr-xr-x 2023-03-05 04:21:49
Edit Download
- drwxr-xr-x 2024-11-01 06:42:55
Edit Download
- drwxr-xr-x 2023-03-05 04:21:35
Edit Download
- drwxr-xr-x 2024-11-01 06:42:55
Edit Download
ufw DIR
- drwxr-xr-x 2024-03-05 04:28:30
Edit Download
- drwxr-xr-x 2022-08-09 11:58:58
Edit Download
- drwxr-xr-x 2024-03-05 04:28:42
Edit Download
urllib3 DIR
- drwxr-xr-x 2026-01-21 06:39:44
Edit Download
- drwxr-xr-x 2026-01-21 06:39:44
Edit Download
wadllib DIR
- drwxr-xr-x 2022-08-09 11:57:02
Edit Download
- drwxr-xr-x 2022-08-09 11:56:41
Edit Download
wheel DIR
- drwxr-xr-x 2024-11-18 06:17:30
Edit Download
- drwxr-xr-x 2024-11-18 06:17:29
Edit Download
xkit DIR
- drwxr-xr-x 2022-08-09 11:56:55
Edit Download
yaml DIR
- drwxr-xr-x 2022-08-09 11:57:00
Edit Download
- drwxr-xr-x 2024-07-24 06:36:38
Edit Download
zope DIR
- drwxr-xr-x 2023-04-05 06:35:47
Edit Download
- drwxr-xr-x 2023-04-05 06:35:47
Edit Download
- drwxr-xr-x 2023-04-05 06:35:47
Edit Download
- drwxr-xr-x 2023-04-05 06:35:47
Edit Download
- drwxr-xr-x 2022-08-09 11:58:19
Edit Download
- drwxr-xr-x 2025-05-30 06:09:10
Edit Download
_yaml DIR
- drwxr-xr-x 2022-08-09 11:57:00
Edit Download
- drwxr-xr-x 2025-08-06 06:56:20
Edit Download
7.87 KB lrw-r--r-- 2024-07-10 11:56:21
Edit Download
58.66 KB lrw-r--r-- 2025-12-05 17:18:12
Edit Download
338.96 KB lrw-r--r-- 2025-12-05 17:18:12
Edit Download
23.00 KB lrw-r--r-- 2014-08-31 17:18:32
Edit Download
3.81 KB lrw-r--r-- 2021-10-25 17:42:40
Edit Download
189 B lrw-r--r-- 2021-12-08 10:53:19
Edit Download
48.71 KB lrw-r--r-- 2021-10-03 00:15:57
Edit Download
87.51 KB lrw-r--r-- 2024-09-20 11:44:09
Edit Download
273 B lrw-r--r-- 2022-01-16 08:42:45
Edit Download
6.61 KB lrw-r--r-- 2022-02-20 14:42:49
Edit Download
12.23 KB lrw-r--r-- 2023-11-28 12:16:46
Edit Download
28.14 KB lrw-r--r-- 2021-03-13 19:14:39
Edit Download
9.57 KB lrw-r--r-- 2018-01-16 15:18:26
Edit Download
14.55 KB lrw-r--r-- 2019-08-25 21:11:20
Edit Download
22.69 KB lrw-r--r-- 2022-03-24 16:20:50
Edit Download
2.23 KB lrw-r--r-- 2021-08-09 10:01:12
Edit Download
26.24 KB lrw-r--r-- 2024-07-10 11:56:21
Edit Download
36.67 KB lrw-r--r-- 2022-03-17 19:43:33
Edit Download
1.68 KB lrw-r--r-- 2020-04-05 00:09:23
Edit Download
266.96 KB lrw-r--r-- 2020-03-31 02:48:57
Edit Download
238 B lrw-r--r-- 2019-10-17 02:17:14
Edit Download
33.74 KB lrw-r--r-- 2021-05-05 14:17:58
Edit Download
30.40 KB lrw-r--r-- 2022-03-17 19:30:58
Edit Download
586 B lrw-r--r-- 2022-03-17 20:07:36
Edit Download
263 B lrw-r--r-- 2023-07-17 13:55:25
Edit Download
46.14 KB lrw-r--r-- 2024-09-20 11:44:09
Edit Download
266 B lrw-r--r-- 2022-03-24 08:20:37
Edit Download
6.75 KB lrw-r--r-- 2024-07-21 14:26:39
Edit Download
529 B lrw-r--r-- 2019-09-21 12:28:11
Edit Download
529 B lrw-r--r-- 2020-06-14 21:11:35
Edit Download
529 B lrw-r--r-- 2022-03-17 20:18:09
Edit Download
529 B lrw-r--r-- 2022-03-17 17:51:23
Edit Download
189.91 KB lrw-r--r-- 2022-03-25 09:57:34
Edit Download
164.21 KB lrw-r--r-- 2022-03-17 17:50:41
Edit Download
22.50 KB lrw-r--r-- 2022-03-17 17:50:41
Edit Download
23 B lrw-r--r-- 2022-01-14 19:50:00
Edit Download
46.77 KB lrw-r--r-- 2022-03-17 19:30:58
Edit Download
21 B lrw-r--r-- 2014-08-26 01:11:36
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).