# Generated by tools/bundle.py from plugin.json + src/ — do not edit; edit the sources. __id__ = 'extended_media_forwards' __name__ = 'Extended Media Forwards' __description__ = 'Adds a Forward action to media opened from telegra.ph pages and rich messages (single media and carousels): downloads the media and re-sends it from your account with a link back to its source.' __author__ = '@lyuksovannyy' __version__ = '1.1.1' __icon__ = 'exteraPlugins/1' __app_version__ = '>=12.5.1' __sdk_version__ = '>=1.4.4.3' _BUNDLE_BLOB = ( "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" "wy17aTJ19BB/93755Zf/A4GAucc=" ) import base64 as _b64, builtins as _bi, json as _j, linecache as _lc, types as _t, zlib as _z _BUNDLE = _j.loads(_z.decompress(_b64.b64decode(_BUNDLE_BLOB)).decode("utf-8")) _MODS = _BUNDLE["modules"] _LOADED = {} _ROOTS = {n.partition(".")[0] for n in _MODS} _REAL_IMPORT = _bi.__import__ def _bundle_register_source(info): lines = info["src"].splitlines(True) _lc.cache[info["file"]] = (len(info["src"]), None, lines, info["file"]) def _bundle_load(name): mod = _LOADED.get(name) if mod is not None: return mod info = _MODS.get(name) if info is None: raise ImportError("no bundled module named %r" % name) parent = name.rpartition(".")[0] if parent: _bundle_load(parent) mod = _t.ModuleType(name) mod.__file__ = info["file"] mod.__package__ = name if info["pkg"] else parent if info["pkg"]: mod.__path__ = [] builtins_ns = dict(vars(_bi)) builtins_ns["__import__"] = _bundle_import mod.__dict__["__builtins__"] = builtins_ns _LOADED[name] = mod _bundle_register_source(info) try: exec(compile(info["src"], info["file"], "exec"), mod.__dict__) except BaseException: _LOADED.pop(name, None) raise if parent: setattr(_LOADED[parent], name.rpartition(".")[2], mod) return mod def _bundle_import(name, globals=None, locals=None, fromlist=(), level=0): if level: pkg = (globals or {}).get("__package__") or "" parts = pkg.split(".") if pkg else [] if level > 1: parts = parts[: 1 - level] if not parts: return _REAL_IMPORT(name, globals, locals, fromlist, level) full = ".".join(parts) + ("." + name if name else "") else: full = name if full.partition(".")[0] not in _ROOTS or full not in _MODS: return _REAL_IMPORT(name, globals, locals, fromlist, level) mod = _bundle_load(full) if not fromlist: return mod if level else _bundle_load(full.partition(".")[0]) for item in fromlist: if item != "*" and not hasattr(mod, item) and full + "." + item in _MODS: _bundle_load(full + "." + item) return mod _ENTRY = _MODS[_BUNDLE["entry"]] _bundle_register_source(_ENTRY) _bundle_builtins = dict(vars(_bi)) _bundle_builtins["__import__"] = _bundle_import globals()["__builtins__"] = _bundle_builtins exec(compile(_ENTRY["src"], _ENTRY["file"], "exec"), globals())