import typing

import java
import java.beans
import java.chaquopy
import java.io
import java.lang
import java.security
import java.security.cert
import java.util
import java.util.stream
import java.util.zip

class Attributes(java.lang.Cloneable, java.util.Map[java.lang.Object, java.lang.Object]):
    map: java.util.Map[java.lang.Object, java.lang.Object] = ...
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def __init__(self, size: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, attr: Attributes, /) -> None: ...
    def clear(self) -> None: ...
    def clone(self) -> java.lang.Object: ...
    def containsKey(self, name: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def containsValue(self, value: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def entrySet(self) -> java.util.Set[java.util.Map.Entry[java.lang.Object, java.lang.Object]]: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def get(self, name: java.lang.Object | int | bool | float | str, /) -> java.lang.Object: ...
    @typing.overload
    def getValue(self, name: str | java.lang.String, /) -> str: ...
    @typing.overload
    def getValue(self, name: Attributes.Name, /) -> str: ...
    def hashCode(self) -> int: ...
    def isEmpty(self) -> bool: ...
    def keySet(self) -> java.util.Set[java.lang.Object]: ...
    def put(self, name: java.lang.Object | int | bool | float | str, value: java.lang.Object | int | bool | float | str, /) -> java.lang.Object: ...
    def putAll(self, attr: java.util.Map[java.lang.Object, java.lang.Object], /) -> None: ...
    def putValue(self, name: str | java.lang.String, value: str | java.lang.String, /) -> str: ...
    def remove(self, name: java.lang.Object | int | bool | float | str, /) -> java.lang.Object: ...
    def size(self) -> int: ...
    def values(self) -> java.util.Collection[java.lang.Object]: ...

    class Name(java.lang.Object):
        CLASS_PATH: typing.ClassVar[Attributes.Name] = ...
        CONTENT_TYPE: typing.ClassVar[Attributes.Name] = ...
        EXTENSION_INSTALLATION: typing.ClassVar[Attributes.Name] = ...
        EXTENSION_LIST: typing.ClassVar[Attributes.Name] = ...
        EXTENSION_NAME: typing.ClassVar[Attributes.Name] = ...
        IMPLEMENTATION_TITLE: typing.ClassVar[Attributes.Name] = ...
        IMPLEMENTATION_URL: typing.ClassVar[Attributes.Name] = ...
        IMPLEMENTATION_VENDOR: typing.ClassVar[Attributes.Name] = ...
        IMPLEMENTATION_VENDOR_ID: typing.ClassVar[Attributes.Name] = ...
        IMPLEMENTATION_VERSION: typing.ClassVar[Attributes.Name] = ...
        MAIN_CLASS: typing.ClassVar[Attributes.Name] = ...
        MANIFEST_VERSION: typing.ClassVar[Attributes.Name] = ...
        SEALED: typing.ClassVar[Attributes.Name] = ...
        SIGNATURE_VERSION: typing.ClassVar[Attributes.Name] = ...
        SPECIFICATION_TITLE: typing.ClassVar[Attributes.Name] = ...
        SPECIFICATION_VENDOR: typing.ClassVar[Attributes.Name] = ...
        SPECIFICATION_VERSION: typing.ClassVar[Attributes.Name] = ...
        def __init__(self, name: str | java.lang.String, /) -> None: ...
        def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
        def hashCode(self) -> int: ...
        def toString(self) -> str: ...

class JarEntry(java.util.zip.ZipEntry):
    CENATT: typing.ClassVar[int] = ...
    CENATX: typing.ClassVar[int] = ...
    CENCOM: typing.ClassVar[int] = ...
    CENCRC: typing.ClassVar[int] = ...
    CENDSK: typing.ClassVar[int] = ...
    CENEXT: typing.ClassVar[int] = ...
    CENFLG: typing.ClassVar[int] = ...
    CENHDR: typing.ClassVar[int] = ...
    CENHOW: typing.ClassVar[int] = ...
    CENLEN: typing.ClassVar[int] = ...
    CENNAM: typing.ClassVar[int] = ...
    CENOFF: typing.ClassVar[int] = ...
    CENSIG: typing.ClassVar[int] = ...
    CENSIZ: typing.ClassVar[int] = ...
    CENTIM: typing.ClassVar[int] = ...
    CENVEM: typing.ClassVar[int] = ...
    CENVER: typing.ClassVar[int] = ...
    ENDCOM: typing.ClassVar[int] = ...
    ENDHDR: typing.ClassVar[int] = ...
    ENDOFF: typing.ClassVar[int] = ...
    ENDSIG: typing.ClassVar[int] = ...
    ENDSIZ: typing.ClassVar[int] = ...
    ENDSUB: typing.ClassVar[int] = ...
    ENDTOT: typing.ClassVar[int] = ...
    EXTCRC: typing.ClassVar[int] = ...
    EXTHDR: typing.ClassVar[int] = ...
    EXTLEN: typing.ClassVar[int] = ...
    EXTSIG: typing.ClassVar[int] = ...
    EXTSIZ: typing.ClassVar[int] = ...
    LOCCRC: typing.ClassVar[int] = ...
    LOCEXT: typing.ClassVar[int] = ...
    LOCFLG: typing.ClassVar[int] = ...
    LOCHDR: typing.ClassVar[int] = ...
    LOCHOW: typing.ClassVar[int] = ...
    LOCLEN: typing.ClassVar[int] = ...
    LOCNAM: typing.ClassVar[int] = ...
    LOCSIG: typing.ClassVar[int] = ...
    LOCSIZ: typing.ClassVar[int] = ...
    LOCTIM: typing.ClassVar[int] = ...
    LOCVER: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, name: str | java.lang.String, /) -> None: ...
    @typing.overload
    def __init__(self, je: JarEntry, /) -> None: ...
    @typing.overload
    def __init__(self, ze: java.util.zip.ZipEntry, /) -> None: ...
    def getAttributes(self) -> Attributes: ...
    def getCertificates(self) -> java.chaquopy.JavaArray[java.security.cert.Certificate]: ...
    def getCodeSigners(self) -> java.chaquopy.JavaArray[java.security.CodeSigner]: ...
    def getRealName(self) -> str: ...

class JarException(java.util.zip.ZipException):
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def __init__(self, s: str | java.lang.String, /) -> None: ...

class JarFile(java.util.zip.ZipFile):
    CENATT: typing.ClassVar[int] = ...
    CENATX: typing.ClassVar[int] = ...
    CENCOM: typing.ClassVar[int] = ...
    CENCRC: typing.ClassVar[int] = ...
    CENDSK: typing.ClassVar[int] = ...
    CENEXT: typing.ClassVar[int] = ...
    CENFLG: typing.ClassVar[int] = ...
    CENHDR: typing.ClassVar[int] = ...
    CENHOW: typing.ClassVar[int] = ...
    CENLEN: typing.ClassVar[int] = ...
    CENNAM: typing.ClassVar[int] = ...
    CENOFF: typing.ClassVar[int] = ...
    CENSIG: typing.ClassVar[int] = ...
    CENSIZ: typing.ClassVar[int] = ...
    CENTIM: typing.ClassVar[int] = ...
    CENVEM: typing.ClassVar[int] = ...
    CENVER: typing.ClassVar[int] = ...
    ENDCOM: typing.ClassVar[int] = ...
    ENDHDR: typing.ClassVar[int] = ...
    ENDOFF: typing.ClassVar[int] = ...
    ENDSIG: typing.ClassVar[int] = ...
    ENDSIZ: typing.ClassVar[int] = ...
    ENDSUB: typing.ClassVar[int] = ...
    ENDTOT: typing.ClassVar[int] = ...
    EXTCRC: typing.ClassVar[int] = ...
    EXTHDR: typing.ClassVar[int] = ...
    EXTLEN: typing.ClassVar[int] = ...
    EXTSIG: typing.ClassVar[int] = ...
    EXTSIZ: typing.ClassVar[int] = ...
    LOCCRC: typing.ClassVar[int] = ...
    LOCEXT: typing.ClassVar[int] = ...
    LOCFLG: typing.ClassVar[int] = ...
    LOCHDR: typing.ClassVar[int] = ...
    LOCHOW: typing.ClassVar[int] = ...
    LOCLEN: typing.ClassVar[int] = ...
    LOCNAM: typing.ClassVar[int] = ...
    LOCSIG: typing.ClassVar[int] = ...
    LOCSIZ: typing.ClassVar[int] = ...
    LOCTIM: typing.ClassVar[int] = ...
    LOCVER: typing.ClassVar[int] = ...
    MANIFEST_NAME: typing.ClassVar[str] = ...
    @typing.overload
    def __init__(self, file: java.io.File, /) -> None: ...
    @typing.overload
    def __init__(self, name: str | java.lang.String, /) -> None: ...
    @typing.overload
    def __init__(self, file: java.io.File, verify: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    @typing.overload
    def __init__(self, name: str | java.lang.String, verify: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    @typing.overload
    def __init__(self, file: java.io.File, verify: bool | java.jboolean | java.lang.Boolean, mode: int | java.jint | java.lang.Integer, /) -> None: ...
    def entries(self) -> java.util.Enumeration[JarEntry]: ...
    def getEntry(self, name: str | java.lang.String, /) -> java.util.zip.ZipEntry: ...
    def getInputStream(self, ze: java.util.zip.ZipEntry, /) -> java.io.InputStream: ...
    def getJarEntry(self, name: str | java.lang.String, /) -> JarEntry: ...
    def getManifest(self) -> Manifest: ...
    def stream(self) -> java.util.stream.Stream[JarEntry]: ...

class JarInputStream(java.util.zip.ZipInputStream):
    CENATT: typing.ClassVar[int] = ...
    CENATX: typing.ClassVar[int] = ...
    CENCOM: typing.ClassVar[int] = ...
    CENCRC: typing.ClassVar[int] = ...
    CENDSK: typing.ClassVar[int] = ...
    CENEXT: typing.ClassVar[int] = ...
    CENFLG: typing.ClassVar[int] = ...
    CENHDR: typing.ClassVar[int] = ...
    CENHOW: typing.ClassVar[int] = ...
    CENLEN: typing.ClassVar[int] = ...
    CENNAM: typing.ClassVar[int] = ...
    CENOFF: typing.ClassVar[int] = ...
    CENSIG: typing.ClassVar[int] = ...
    CENSIZ: typing.ClassVar[int] = ...
    CENTIM: typing.ClassVar[int] = ...
    CENVEM: typing.ClassVar[int] = ...
    CENVER: typing.ClassVar[int] = ...
    ENDCOM: typing.ClassVar[int] = ...
    ENDHDR: typing.ClassVar[int] = ...
    ENDOFF: typing.ClassVar[int] = ...
    ENDSIG: typing.ClassVar[int] = ...
    ENDSIZ: typing.ClassVar[int] = ...
    ENDSUB: typing.ClassVar[int] = ...
    ENDTOT: typing.ClassVar[int] = ...
    EXTCRC: typing.ClassVar[int] = ...
    EXTHDR: typing.ClassVar[int] = ...
    EXTLEN: typing.ClassVar[int] = ...
    EXTSIG: typing.ClassVar[int] = ...
    EXTSIZ: typing.ClassVar[int] = ...
    LOCCRC: typing.ClassVar[int] = ...
    LOCEXT: typing.ClassVar[int] = ...
    LOCFLG: typing.ClassVar[int] = ...
    LOCHDR: typing.ClassVar[int] = ...
    LOCHOW: typing.ClassVar[int] = ...
    LOCLEN: typing.ClassVar[int] = ...
    LOCNAM: typing.ClassVar[int] = ...
    LOCSIG: typing.ClassVar[int] = ...
    LOCSIZ: typing.ClassVar[int] = ...
    LOCTIM: typing.ClassVar[int] = ...
    LOCVER: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, in_: java.io.InputStream, /) -> None: ...
    @typing.overload
    def __init__(self, in_: java.io.InputStream, verify: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def createZipEntry(self, name: str | java.lang.String, /) -> java.util.zip.ZipEntry: ...
    def getManifest(self) -> Manifest: ...
    def getNextEntry(self) -> java.util.zip.ZipEntry: ...
    def getNextJarEntry(self) -> JarEntry: ...
    def read(self, b: java.chaquopy.JavaArrayJByte, off: int | java.jint | java.lang.Integer, len: int | java.jint | java.lang.Integer, /) -> int: ...

class JarOutputStream(java.util.zip.ZipOutputStream):
    CENATT: typing.ClassVar[int] = ...
    CENATX: typing.ClassVar[int] = ...
    CENCOM: typing.ClassVar[int] = ...
    CENCRC: typing.ClassVar[int] = ...
    CENDSK: typing.ClassVar[int] = ...
    CENEXT: typing.ClassVar[int] = ...
    CENFLG: typing.ClassVar[int] = ...
    CENHDR: typing.ClassVar[int] = ...
    CENHOW: typing.ClassVar[int] = ...
    CENLEN: typing.ClassVar[int] = ...
    CENNAM: typing.ClassVar[int] = ...
    CENOFF: typing.ClassVar[int] = ...
    CENSIG: typing.ClassVar[int] = ...
    CENSIZ: typing.ClassVar[int] = ...
    CENTIM: typing.ClassVar[int] = ...
    CENVEM: typing.ClassVar[int] = ...
    CENVER: typing.ClassVar[int] = ...
    ENDCOM: typing.ClassVar[int] = ...
    ENDHDR: typing.ClassVar[int] = ...
    ENDOFF: typing.ClassVar[int] = ...
    ENDSIG: typing.ClassVar[int] = ...
    ENDSIZ: typing.ClassVar[int] = ...
    ENDSUB: typing.ClassVar[int] = ...
    ENDTOT: typing.ClassVar[int] = ...
    EXTCRC: typing.ClassVar[int] = ...
    EXTHDR: typing.ClassVar[int] = ...
    EXTLEN: typing.ClassVar[int] = ...
    EXTSIG: typing.ClassVar[int] = ...
    EXTSIZ: typing.ClassVar[int] = ...
    LOCCRC: typing.ClassVar[int] = ...
    LOCEXT: typing.ClassVar[int] = ...
    LOCFLG: typing.ClassVar[int] = ...
    LOCHDR: typing.ClassVar[int] = ...
    LOCHOW: typing.ClassVar[int] = ...
    LOCLEN: typing.ClassVar[int] = ...
    LOCNAM: typing.ClassVar[int] = ...
    LOCSIG: typing.ClassVar[int] = ...
    LOCSIZ: typing.ClassVar[int] = ...
    LOCTIM: typing.ClassVar[int] = ...
    LOCVER: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, out: java.io.OutputStream, /) -> None: ...
    @typing.overload
    def __init__(self, out: java.io.OutputStream, man: Manifest, /) -> None: ...
    def putNextEntry(self, ze: java.util.zip.ZipEntry, /) -> None: ...

class Manifest(java.lang.Cloneable):
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def __init__(self, is_: java.io.InputStream, /) -> None: ...
    @typing.overload
    def __init__(self, man: Manifest, /) -> None: ...
    def clear(self) -> None: ...
    def clone(self) -> java.lang.Object: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getAttributes(self, name: str | java.lang.String, /) -> Attributes: ...
    def getEntries(self) -> java.util.Map[java.lang.String, Attributes]: ...
    def getMainAttributes(self) -> Attributes: ...
    def hashCode(self) -> int: ...
    def read(self, is_: java.io.InputStream, /) -> None: ...
    def write(self, out: java.io.OutputStream, /) -> None: ...

class Pack200(java.lang.Object):
    @staticmethod
    def newPacker() -> Pack200.Packer: ...
    @staticmethod
    def newUnpacker() -> Pack200.Unpacker: ...

    class Unpacker(java.lang.Object):
        DEFLATE_HINT: typing.ClassVar[str] = ...
        FALSE: typing.ClassVar[str] = ...
        KEEP: typing.ClassVar[str] = ...
        PROGRESS: typing.ClassVar[str] = ...
        TRUE: typing.ClassVar[str] = ...
        def addPropertyChangeListener(self, listener: java.beans.PropertyChangeListener, /) -> None: ...
        def properties(self) -> java.util.SortedMap[java.lang.String, java.lang.String]: ...
        def removePropertyChangeListener(self, listener: java.beans.PropertyChangeListener, /) -> None: ...
        @typing.overload
        def unpack(self, arg1: java.io.File, arg2: JarOutputStream, /) -> None: ...
        @typing.overload
        def unpack(self, arg1: java.io.InputStream, arg2: JarOutputStream, /) -> None: ...

    class Packer(java.lang.Object):
        CLASS_ATTRIBUTE_PFX: typing.ClassVar[str] = ...
        CODE_ATTRIBUTE_PFX: typing.ClassVar[str] = ...
        DEFLATE_HINT: typing.ClassVar[str] = ...
        EFFORT: typing.ClassVar[str] = ...
        ERROR: typing.ClassVar[str] = ...
        FALSE: typing.ClassVar[str] = ...
        FIELD_ATTRIBUTE_PFX: typing.ClassVar[str] = ...
        KEEP: typing.ClassVar[str] = ...
        KEEP_FILE_ORDER: typing.ClassVar[str] = ...
        LATEST: typing.ClassVar[str] = ...
        METHOD_ATTRIBUTE_PFX: typing.ClassVar[str] = ...
        MODIFICATION_TIME: typing.ClassVar[str] = ...
        PASS: typing.ClassVar[str] = ...
        PASS_FILE_PFX: typing.ClassVar[str] = ...
        PROGRESS: typing.ClassVar[str] = ...
        SEGMENT_LIMIT: typing.ClassVar[str] = ...
        STRIP: typing.ClassVar[str] = ...
        TRUE: typing.ClassVar[str] = ...
        UNKNOWN_ATTRIBUTE: typing.ClassVar[str] = ...
        def addPropertyChangeListener(self, listener: java.beans.PropertyChangeListener, /) -> None: ...
        @typing.overload
        def pack(self, arg1: JarFile, arg2: java.io.OutputStream, /) -> None: ...
        @typing.overload
        def pack(self, arg1: JarInputStream, arg2: java.io.OutputStream, /) -> None: ...
        def properties(self) -> java.util.SortedMap[java.lang.String, java.lang.String]: ...
        def removePropertyChangeListener(self, listener: java.beans.PropertyChangeListener, /) -> None: ...
