././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1602414965.9142513 objgraph-3.5.0/0000775000175000017500000000000000000000000012346 5ustar00mgmg00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/.coveragerc0000664000175000017500000000007600000000000014472 0ustar00mgmg00000000000000[run] source = objgraph plugins = coverage_python_version ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/.gitattributes0000664000175000017500000000002300000000000015234 0ustar00mgmg00000000000000*.png diff=imgdiff ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/.gitignore0000664000175000017500000000021300000000000014332 0ustar00mgmg00000000000000dist/ objects.dot objgraph.egg-info/ tmp/ .coverage _build/ tags build/ temp/ __pycache__/ .tox/ .toxbox/ *.py[co] .cache *.DS_Store venv/ ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602175284.0 objgraph-3.5.0/.travis.yml0000664000175000017500000000060600000000000014461 0ustar00mgmg00000000000000language: python dist: xenial python: - 2.7 - 3.6 - 3.7 - 3.8 addons: apt: packages: - graphviz install: - pip install coverage coverage-python-version coveralls flake8 -e . before_script: - make lint script: - coverage run tests.py - coverage report -m --fail-under=100 after_success: - coveralls notifications: email: false ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414423.0 objgraph-3.5.0/CHANGES.rst0000664000175000017500000002240000000000000014146 0ustar00mgmg00000000000000Changes ======= .. currentmodule:: objgraph 3.5.0 (2020-10-11) ------------------ - Do not require ``mock`` for the test suite on Python 3; use unittest.mock instead. - 100% test coverage for each version of Python rather than combined, using ``coverage-python-version``. - Add the optional ``extra_node_attrs`` parameter to ``show_backrefs`` and ``show_backrefs`` - Fix IPython/Jupyter inline graph support code that would kick in even if you explicitly passed a filename='foo.png' argument to ``show_refs``/``show_backrefs``. See `issue 47 `_. - Add support for Python 3.8. - Drop support for Python 3.5. 3.4.1 (2019-04-23) ------------------ - Add support for Python 3.7. - Drop support for Python 3.3 and 3.4. 3.4.0 (2018-02-13) ------------------ - New functions: :func:`get_new_ids`, :func:`at_addrs`. Contributed by Justin Black in `PR 36 `_. 3.3.0 (2017-12-28) ------------------ - New function: :func:`growth`. 3.2.0 (2017-12-20) ------------------ - New ``filter`` argument for :func:`typestats`, :func:`most_common_types`, :func:`show_most_common_types`, :func:`show_growth`. - Show lambda functions in a more human-friendly way. 3.1.2 (2017-11-27) ------------------ - Correct UTF-8 mojibake in the changelog and switch all links to HTTPS. 3.1.1 (2017-10-30) ------------------ - Add support for Python 3.6. - Replace bare ``except:`` in ``safe_repr()`` with ``except Exception:``. 3.1.0 (2016-12-07) ------------------ - Support displaying graphs inline in IPython/Jupyter notebooks (`issue 28 `). 3.0.1 (2016-09-17) ------------------ - The ``file`` argument of :func:`show_most_common_types` and :func:`show_growth` now defaults to ``None`` instead of ``sys.stdout``. ``None`` is interpreted to be the same as ``sys.stdout``, which means the right stdout will be used if you change it at runtime (which happens, in doctests). 3.0.0 (2016-04-13) ------------------ - :func:`show_most_common_types` and :func:`show_growth` now accept a ``file`` argument if you want to redirect the output elsewhere. Fixes `issue 24 `_. Contributed by "d-sun-d". - Don't trust ``__class__`` to be accurate and ``__name__`` to be a string. Fixes errors in some convoluted corner cases when mocks are involved. Contributed by Andrew Shannon Brown in `PR 26 `_. - Drop support for Python 2.4, 2.5, and 2.6. - Drop support for Python 3.1 and 3.2. - Add support for Python 3.5. 2.0.1 (2015-07-28) ------------------ - Avoid creating reference cycles between the stack frame and the local ``objects`` variable in :func:`by_type`, :func:`count`, and :func:`typestats`. Fixes `issue 22 `_. Contributed by Erik Bray. 2.0.0 (2015-04-18) ------------------ - :func:`show_refs` and :func:`show_backrefs` now accept a file-like object (via the new ``output`` argument) as an alternative to a filename. - Made internal helper methods private. This includes :func:`find_chain`, :func:`show_graph`, :func:`obj_node_id`, :func:`obj_label`, :func:`quote`, :func:`long_typename`, :func:`safe_repr`, :func:`short_repr`, :func:`gradient`, :func:`edge_label`, and :func:`_program_in_path`. - Correctly determine the name of old-style classes in :func:`count`, :func:`by_type`, and graph drawing functions. Fixes `issue 16 `_. Contributed by Mike Lambert. 1.8.1 (2014-05-15) ------------------ - Do not expect file objects to have an ``encoding`` attribute. Makes objgraph compatible with Eventlet's monkey-patching. Fixes `issue 6 `_. Contributed by Jakub Stasiak. 1.8.0 (2014-02-13) ------------------ - Moved to GitHub. - Python 3.4 support (`LP#1270872 `_). - New function: :func:`is_proper_module`. - New ``shortnames`` argument for :func:`typestats`, :func:`most_common_types`, :func:`show_most_common_types`, :func:`show_growth`, :func:`show_refs`, and :func:`show_backrefs`. :func:`count` and :func:`by_type` accept fully-qualified type names now. Fixes `issue 4 `_. 1.7.2 (2012-10-23) ------------------ - Bugfix: setup.py sdist was broken on Python 2.7 (UnicodeDecodeError in tarfile). - The ``filename`` argument for :func:`show_refs` and :func:`show_backrefs` now allows arbitrary image formats, not just PNG. Patch by `Riccardo Murri `_. - Temporary dot files are now named `objgraph-*.dot` instead of `tmp*.dot`. - Python 3.3 support: no code changes, but some tests started failing because the new and improved dictionary implementation no longer holds references to str objects used as dict keys. - Added a tox.ini for convenient multi-Python testing. 1.7.1 (2011-12-11) ------------------ - Bugfix: non-ASCII characters in object representations would break graph generation on Python 3.x, in some locales (e.g. with LC_ALL=C). Reported and fixed by `Stefano Rivera `_. - Bugfix: setup.py was broken on Python 3.x - Bugfix: dot.exe/xdot.exe were not found on Windows (`LP#767239 `_). - Documentation updates: document the forgotten :func:`find_ref_chain`, update :func:`show_chain` prototype. 1.7.0 (2011-03-11) ------------------ - New function: :func:`find_ref_chain`. - New ``backrefs`` argument for :func:`show_chain`. - New function: :func:`get_leaking_objects`, based on `a blog post by Kristján Valur `_. - New ``objects`` argument for :func:`count`, :func:`typestats`, :func:`most_common_types`, :func:`show_most_common_types`, and :func:`by_type`. - Edges pointing to function attributes such as __defaults__ or __globals__ are now labeled. - Edge labels that are not simple strings now show the type. - Bugfix: '\0' and other unsafe characters used in a dictionary key could break graph generation. - Bugfix: show_refs(..., filename='graph.dot') would then go to complain about unrecognized file types and then produce a png. 1.6.0 (2010-12-18) ------------------ - Python 3 support, thanks to Stefano Rivera (fixes `LP#687601 `_). - Removed weird weakref special-casing. 1.5.1 (2010-12-09) ------------------ - Avoid test failures in uncollectable-garbage.txt (fixes `LP#686731 `_). - Added HACKING.txt (later renamed to HACKING.rst). 1.5.0 (2010-12-05) ------------------ - Show frame objects as well (fixes `LP#361704 `_). - New functions: :func:`show_growth`, :func:`show_chain`. - :func:`find_backref_chain` returns ``[obj]`` instead of ``None`` when a chain could not be found. This makes ``show_chain(find_backref_chain(...), ...)`` not break. - Show how many references were skipped from the output of :func:`show_refs`/:func:`show_backrefs` by specifying ``too_many``. - Make :func:`show_refs` descend into modules. - Do not highlight classes that define a ``__del__``, highlight only instances of those classes. - Option to show reference counts in :func:`show_refs`/:func:`show_backrefs`. - Add `Sphinx `_ documentation and a PyPI long description. 1.4.0 (2010-11-03) ------------------ - Compatibility with Python 2.4 and 2.5 (``tempfile.NamedTemporaryFile`` has no ``delete`` argument). - New function: :func:`most_common_types`. 1.3.1 (2010-07-17) ------------------ - Rebuild an sdist with no missing files (fixes `LP#606604 `_). - Added MANIFEST.in and a Makefile to check that setup.py sdist generates source distributions with no files missing. 1.3 (2010-07-13) ---------------- - Highlight objects with a ``__del__`` method. - Fixes `LP#483411 `_: suggest always passing ``[obj]`` to :func:`show_refs`, :func:`show_backrefs`, since obj might be a list/tuple. - Fixes `LP#514422 `_: :func:`show_refs`, :func:`show_backrefs` don't create files in the current working directory any more. Instead they accept a filename argument, which can be a .dot file or a .png file. If None or not specified, those functions will try to spawn xdot as before. - New extra_info argument to graph-generating functions (patch by Thouis Jones, `LP#558914 `_). - setup.py should work with distutils now (`LP#604430 `_, thanks to Randy Heydon). 1.2 (2009-03-25) ---------------- - Project website, public source repository, uploaded to PyPI. - No code changes. 1.1 (2008-09-10) ---------------- - New function: :func:`show_refs` for showing forward references. - New functions: :func:`typestats` and :func:`show_most_common_types`. - Object boxes are less crammed with useless information (such as IDs). - Spawns `xdot `_ if it is available. 1.0 (2008-06-14) ---------------- - First public release. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602179651.0 objgraph-3.5.0/HACKING.rst0000664000175000017500000001226300000000000014150 0ustar00mgmg00000000000000.. _hacking: Hacking on objgraph =================== Start by geting the latest source with :: git clone https://github.com/mgedmin/objgraph Run the test suite with :: make test The test suite is mostly smoke tests (i.e. crashes will be noticed, subtly wrong output will be missed). I hope to improve that in the future, but don't hold your breath. Most of the testing is done manually or semi-automatically, e.g. by running ``make images`` and eyeballing the results (`imgdiff `_ is handy there). Sending me patches ------------------ GitHub pull requests are probably the best way to send me patches. Or just email them to . I'd appreciate `issues in GitHub `_ for each proposed change, be it a bug or a feature request. Supported Python versions ------------------------- Python 2.7 and 3.5+. You can run the test suite for all supported Python versions with :: tox -p auto If a test fails, often the easiest way to debug is is to compare the output visually :: make images PYTHON=pythonX.Y git config diff.imgdiff.command 'f() { imgdiff --eog -H $1 $2; }; f' git diff docs/*.png git checkout -- docs/*.png docs/*.dot An easy way to get multiple Pythons versions on Ubuntu is to use Felix Krull's "`deadsnakes `_" PPA:: sudo add-apt-repository -y ppa:deadsnakes sudo apt-get update sudo apt-get install python3.{6,7,8,9} Test coverage ------------- As I mentioned, the tests are mostly smoke tests, and even then they're incomplete. Install `coverage `_ to see how incomplete they are with :: make coverage I use a `vim plugin `_ to higlight lines not covered by tests while I edit :: make coverage vim objgraph.py :HighlightCoverage If you prefer HTML reports, run :: make coverage coverage html and then browse ``htmlcov/index.html``. Documentation ------------- To fully rebuild the documentation, run :: make clean images docs Please ``git checkout --`` the png files that haven't changed significantly. (Many of the images include things like memory addresses which tend to change from run to run.) `imgdiff `_ is useful for comparing the images with their older versions:: git config diff.imgdiff.command 'f() { imgdiff $1 $2; }; f' git diff docs/*.png It has a few options that may make the changes easier to see. I personally like:: git config diff.imgdiff.command 'f() { imgdiff --eog -H $1 $2; }; f' git diff docs/*.png When you add a new doctest file, remember to include it in ``docs/index.txt``. When you add a new function, make sure it has a `PEP-257 `_-compliant docstring and add the appropriate autodoc directive to ``objgraph.txt``. I insist on one departure from PEP-257: the closing ``"""`` should *not* be preceded by a blank line. Example:: def do_something(): """Do something. Return something valuable. """ If Emacs is broken, fix emacs, do not make my docstrings ugly. On the other hand, if the last thing in a docstring is an indented block quote or a doctest section, it should be surrounded by blank lines. Like this:: def do_something(): """Do something. Return something valuable. Example: >>> do_something() 42 """ I find `restview `_ very handy for documentation writing: it lets me see how the text looks by pressing Ctrl-R in a browser window, without having to re-run any documentation building commands. The downside is that ``restview`` doesn't support Sphinx extensions to ReStructuredText, so you end up with error messages all over the place. Then again this is useful for bits that *can't* use Sphinx extensions, like the PyPI long description. To preview the PyPI long description (which is generated by concatenating ``README.rst`` and ``CHANGES.rst``) with ``restview``, use this handy command:: make preview-pypi-description because typing :: restview -e "python setup.py --long-description" is tedious, and bash has tab-completion for makefile rules. Making releases --------------- You need write access to the PyPI package and to the Git branch on GitHub. At the moment of this writing, this means you must be me. Run ``make release`` and follow the instructions. It is safe to run this command at any time: it never commits/pushes/uploads to PyPI, it just tells you what to do. Avoiding incomplete releases ---------------------------- It is important to keep `MANIFEST.in `_ up to date so that source tarballs generated with ``python setup.py sdist`` aren't missing any files, even if you don't have the right setuptools version control plugins installed. You can run :: make distcheck to be sure this is so, but it's not necessary -- ``make release`` will do this every time. (I've later written a standalone tool, `check-manifest `_ that can do this check for every Python package.) ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/LICENSE0000664000175000017500000000206000000000000013351 0ustar00mgmg00000000000000MIT License Copyright (c) 2016 Marius Gedminas 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. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/MANIFEST.in0000664000175000017500000000063000000000000014103 0ustar00mgmg00000000000000include Makefile include *.rst include tests.py include tox.ini include docs/*.txt include docs/*.dot include docs/*.png include docs/conf.py include docs/_static/*.css include .gitignore include .gitattributes include *.yml # added by check_manifest.py include *.txt # added by check_manifest.py include LICENSE # added by check_manifest.py include *.mk # added by check_manifest.py include .coveragerc ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414505.0 objgraph-3.5.0/Makefile0000664000175000017500000000643000000000000014011 0ustar00mgmg00000000000000PYTHON = python3 FILE_WITH_VERSION = objgraph.py FILE_WITH_CHANGELOG = CHANGES.rst VCS_DIFF_IMAGES = git diff docs/*.png SPHINXOPTS = SPHINXBUILD = sphinx-build SPHINXBUILDDIR = docs/_build ALLSPHINXOPTS = -d $(SPHINXBUILDDIR)/doctrees $(SPHINXOPTS) docs/ .PHONY: all all: @echo "Nothing to build here" .PHONY: images images: ##: regenerate graphs used in documentation $(PYTHON) setup.py --build-images .PHONY: docs docs: ##: build HTML documentation $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(SPHINXBUILDDIR)/html @echo @echo "Now look at $(SPHINXBUILDDIR)/html/index.html" .PHONY: clean clean: ##: remove build artifacts -rm -rf $(SPHINXBUILDDIR)/* build .PHONY: test test: ##: run tests tox -p auto .PHONY: check: # 'make check' is defined in release.mk and here's how you can override it define check_recipe = @$(MAKE) coverage endef .PHONY: coverage coverage: ##: measure test coverage tox -e coverage2,coverage3 .PHONY: flake8 flake8: ##: check for style problems flake8 # Make sure $(VCS_DIFF_IMAGES) can work .PHONY: config-imgdiff config-imgdiff: @test -z "`git config diff.imgdiff.command`" && git config diff.imgdiff.command 'f() { imgdiff --eog -H $$1 $$2; }; f' || true .PHONY: imgdiff imgdiff: config-imgdiff ##: compare differences in generated images $(VCS_DIFF_IMAGES) .PHONY: releasechecklist releasechecklist: check-date # also release.mk will add other checks include release.mk .PHONY: check-date check-date: @date_line="__date__ = '`date +%Y-%m-%d`'" && \ grep -q "^$$date_line$$" $(FILE_WITH_VERSION) || { \ echo "$(FILE_WITH_VERSION) doesn't specify $$date_line"; \ echo "Please run make update-date"; exit 1; } .PHONY: update-date update-date: ##: set release date in source code to today sed -i -e "s/^__date__ = '.*'/__date__ = '`date +%Y-%m-%d`'/" $(FILE_WITH_VERSION) .PHONY: do-release do-release: config-imgdiff # override the release recipe in release.mk define release_recipe = # I'm chicken so I won't actually do these things yet @echo "It is a good idea to run" @echo @echo " make clean images docs" @echo @echo "about now. Then review the images for unexpected differences with" @echo @echo " make imgdiff" @echo @echo "then either revert or commit the new images and run" @echo @echo " $(PYPI_PUBLISH)" @echo " $(VCS_TAG)" @echo " make publish-docs" @echo @echo "Please increment the version number in $(FILE_WITH_VERSION)" @echo "and add a new empty entry at the top of the changelog in $(FILE_WITH_CHANGELOG), then" @echo @echo ' $(VCS_COMMIT_AND_PUSH)' @echo endef # XXX: I should switch to readthedocs.org .PHONY: publish-docs publish-docs: ##: publish documentation on the website test -d ~/www/objgraph || { \ echo "There's no ~/www/objgraph, do you have the website checked out?"; exit 1; } make clean docs cp -r docs/_build/html/* ~/www/objgraph/ cd ~/www/objgraph && git add . && git status @echo @echo "If everything looks fine, please run" @echo @echo " cd ~/www/ && git commit -m \"Released objgraph `$(PYTHON) setup.py --version`\" && git push" @echo " ssh fridge 'cd www && git pull'" @echo ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1602414965.9142513 objgraph-3.5.0/PKG-INFO0000664000175000017500000003537500000000000013460 0ustar00mgmg00000000000000Metadata-Version: 1.1 Name: objgraph Version: 3.5.0 Summary: Draws Python object reference graphs with graphviz Home-page: https://mg.pov.lt/objgraph/ Author: Marius Gedminas Author-email: marius@gedmin.as License: MIT Description: Python Object Graphs ==================== .. image:: https://travis-ci.org/mgedmin/objgraph.svg?branch=master :target: https://travis-ci.org/mgedmin/objgraph :alt: Build Status .. image:: https://ci.appveyor.com/api/projects/status/github/mgedmin/objgraph?branch=master&svg=true :target: https://ci.appveyor.com/project/mgedmin/objgraph :alt: Build Status (Windows) .. image:: https://coveralls.io/repos/mgedmin/objgraph/badge.svg?branch=master :target: https://coveralls.io/r/mgedmin/objgraph?branch=master :alt: Test Coverage .. image:: https://readthedocs.org/projects/objgraph/badge/?version=latest :target: https://readthedocs.org/projects/objgraph/?badge=latest :alt: Documentation Status ``objgraph`` is a module that lets you visually explore Python object graphs. You'll need `graphviz `_ if you want to draw the pretty graphs. I recommend `xdot `_ for interactive use. ``pip install xdot`` should suffice; objgraph will automatically look for it in your ``PATH``. Installation and Documentation ------------------------------ ``pip install objgraph`` or `download it from PyPI `_. Documentation lives at https://mg.pov.lt/objgraph. .. _history: History ------- I've developed a set of functions that eventually became objgraph when I was hunting for memory leaks in a Python program. The whole story -- with illustrated examples -- is in this series of blog posts: * `Hunting memory leaks in Python `_ * `Python object graphs `_ * `Object graphs with graphviz `_ .. _devel: Support and Development ----------------------- The source code can be found in this Git repository: https://github.com/mgedmin/objgraph. To check it out, use ``git clone https://github.com/mgedmin/objgraph``. Report bugs at https://github.com/mgedmin/objgraph/issues. Changes ======= 3.5.0 (2020-10-11) ------------------ - Do not require ``mock`` for the test suite on Python 3; use unittest.mock instead. - 100% test coverage for each version of Python rather than combined, using ``coverage-python-version``. - Add the optional ``extra_node_attrs`` parameter to ``show_backrefs`` and ``show_backrefs`` - Fix IPython/Jupyter inline graph support code that would kick in even if you explicitly passed a filename='foo.png' argument to ``show_refs``/``show_backrefs``. See `issue 47 `_. - Add support for Python 3.8. - Drop support for Python 3.5. 3.4.1 (2019-04-23) ------------------ - Add support for Python 3.7. - Drop support for Python 3.3 and 3.4. 3.4.0 (2018-02-13) ------------------ - New functions: `get_new_ids`, `at_addrs`. Contributed by Justin Black in `PR 36 `_. 3.3.0 (2017-12-28) ------------------ - New function: `growth`. 3.2.0 (2017-12-20) ------------------ - New ``filter`` argument for `typestats`, `most_common_types`, `show_most_common_types`, `show_growth`. - Show lambda functions in a more human-friendly way. 3.1.2 (2017-11-27) ------------------ - Correct UTF-8 mojibake in the changelog and switch all links to HTTPS. 3.1.1 (2017-10-30) ------------------ - Add support for Python 3.6. - Replace bare ``except:`` in ``safe_repr()`` with ``except Exception:``. 3.1.0 (2016-12-07) ------------------ - Support displaying graphs inline in IPython/Jupyter notebooks (`issue 28 `). 3.0.1 (2016-09-17) ------------------ - The ``file`` argument of `show_most_common_types` and `show_growth` now defaults to ``None`` instead of ``sys.stdout``. ``None`` is interpreted to be the same as ``sys.stdout``, which means the right stdout will be used if you change it at runtime (which happens, in doctests). 3.0.0 (2016-04-13) ------------------ - `show_most_common_types` and `show_growth` now accept a ``file`` argument if you want to redirect the output elsewhere. Fixes `issue 24 `_. Contributed by "d-sun-d". - Don't trust ``__class__`` to be accurate and ``__name__`` to be a string. Fixes errors in some convoluted corner cases when mocks are involved. Contributed by Andrew Shannon Brown in `PR 26 `_. - Drop support for Python 2.4, 2.5, and 2.6. - Drop support for Python 3.1 and 3.2. - Add support for Python 3.5. 2.0.1 (2015-07-28) ------------------ - Avoid creating reference cycles between the stack frame and the local ``objects`` variable in `by_type`, `count`, and `typestats`. Fixes `issue 22 `_. Contributed by Erik Bray. 2.0.0 (2015-04-18) ------------------ - `show_refs` and `show_backrefs` now accept a file-like object (via the new ``output`` argument) as an alternative to a filename. - Made internal helper methods private. This includes `find_chain`, `show_graph`, `obj_node_id`, `obj_label`, `quote`, `long_typename`, `safe_repr`, `short_repr`, `gradient`, `edge_label`, and `_program_in_path`. - Correctly determine the name of old-style classes in `count`, `by_type`, and graph drawing functions. Fixes `issue 16 `_. Contributed by Mike Lambert. 1.8.1 (2014-05-15) ------------------ - Do not expect file objects to have an ``encoding`` attribute. Makes objgraph compatible with Eventlet's monkey-patching. Fixes `issue 6 `_. Contributed by Jakub Stasiak. 1.8.0 (2014-02-13) ------------------ - Moved to GitHub. - Python 3.4 support (`LP#1270872 `_). - New function: `is_proper_module`. - New ``shortnames`` argument for `typestats`, `most_common_types`, `show_most_common_types`, `show_growth`, `show_refs`, and `show_backrefs`. `count` and `by_type` accept fully-qualified type names now. Fixes `issue 4 `_. 1.7.2 (2012-10-23) ------------------ - Bugfix: setup.py sdist was broken on Python 2.7 (UnicodeDecodeError in tarfile). - The ``filename`` argument for `show_refs` and `show_backrefs` now allows arbitrary image formats, not just PNG. Patch by `Riccardo Murri `_. - Temporary dot files are now named `objgraph-*.dot` instead of `tmp*.dot`. - Python 3.3 support: no code changes, but some tests started failing because the new and improved dictionary implementation no longer holds references to str objects used as dict keys. - Added a tox.ini for convenient multi-Python testing. 1.7.1 (2011-12-11) ------------------ - Bugfix: non-ASCII characters in object representations would break graph generation on Python 3.x, in some locales (e.g. with LC_ALL=C). Reported and fixed by `Stefano Rivera `_. - Bugfix: setup.py was broken on Python 3.x - Bugfix: dot.exe/xdot.exe were not found on Windows (`LP#767239 `_). - Documentation updates: document the forgotten `find_ref_chain`, update `show_chain` prototype. 1.7.0 (2011-03-11) ------------------ - New function: `find_ref_chain`. - New ``backrefs`` argument for `show_chain`. - New function: `get_leaking_objects`, based on `a blog post by Kristján Valur `_. - New ``objects`` argument for `count`, `typestats`, `most_common_types`, `show_most_common_types`, and `by_type`. - Edges pointing to function attributes such as __defaults__ or __globals__ are now labeled. - Edge labels that are not simple strings now show the type. - Bugfix: '\0' and other unsafe characters used in a dictionary key could break graph generation. - Bugfix: show_refs(..., filename='graph.dot') would then go to complain about unrecognized file types and then produce a png. 1.6.0 (2010-12-18) ------------------ - Python 3 support, thanks to Stefano Rivera (fixes `LP#687601 `_). - Removed weird weakref special-casing. 1.5.1 (2010-12-09) ------------------ - Avoid test failures in uncollectable-garbage.txt (fixes `LP#686731 `_). - Added HACKING.txt (later renamed to HACKING.rst). 1.5.0 (2010-12-05) ------------------ - Show frame objects as well (fixes `LP#361704 `_). - New functions: `show_growth`, `show_chain`. - `find_backref_chain` returns ``[obj]`` instead of ``None`` when a chain could not be found. This makes ``show_chain(find_backref_chain(...), ...)`` not break. - Show how many references were skipped from the output of `show_refs`/`show_backrefs` by specifying ``too_many``. - Make `show_refs` descend into modules. - Do not highlight classes that define a ``__del__``, highlight only instances of those classes. - Option to show reference counts in `show_refs`/`show_backrefs`. - Add `Sphinx `_ documentation and a PyPI long description. 1.4.0 (2010-11-03) ------------------ - Compatibility with Python 2.4 and 2.5 (``tempfile.NamedTemporaryFile`` has no ``delete`` argument). - New function: `most_common_types`. 1.3.1 (2010-07-17) ------------------ - Rebuild an sdist with no missing files (fixes `LP#606604 `_). - Added MANIFEST.in and a Makefile to check that setup.py sdist generates source distributions with no files missing. 1.3 (2010-07-13) ---------------- - Highlight objects with a ``__del__`` method. - Fixes `LP#483411 `_: suggest always passing ``[obj]`` to `show_refs`, `show_backrefs`, since obj might be a list/tuple. - Fixes `LP#514422 `_: `show_refs`, `show_backrefs` don't create files in the current working directory any more. Instead they accept a filename argument, which can be a .dot file or a .png file. If None or not specified, those functions will try to spawn xdot as before. - New extra_info argument to graph-generating functions (patch by Thouis Jones, `LP#558914 `_). - setup.py should work with distutils now (`LP#604430 `_, thanks to Randy Heydon). 1.2 (2009-03-25) ---------------- - Project website, public source repository, uploaded to PyPI. - No code changes. 1.1 (2008-09-10) ---------------- - New function: `show_refs` for showing forward references. - New functions: `typestats` and `show_most_common_types`. - Object boxes are less crammed with useless information (such as IDs). - Spawns `xdot `_ if it is available. 1.0 (2008-06-14) ---------------- - First public release. Keywords: object graph visualization graphviz garbage collection Platform: UNKNOWN Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/README.rst0000664000175000017500000000402400000000000014035 0ustar00mgmg00000000000000Python Object Graphs ==================== .. image:: https://travis-ci.org/mgedmin/objgraph.svg?branch=master :target: https://travis-ci.org/mgedmin/objgraph :alt: Build Status .. image:: https://ci.appveyor.com/api/projects/status/github/mgedmin/objgraph?branch=master&svg=true :target: https://ci.appveyor.com/project/mgedmin/objgraph :alt: Build Status (Windows) .. image:: https://coveralls.io/repos/mgedmin/objgraph/badge.svg?branch=master :target: https://coveralls.io/r/mgedmin/objgraph?branch=master :alt: Test Coverage .. image:: https://readthedocs.org/projects/objgraph/badge/?version=latest :target: https://readthedocs.org/projects/objgraph/?badge=latest :alt: Documentation Status ``objgraph`` is a module that lets you visually explore Python object graphs. You'll need `graphviz `_ if you want to draw the pretty graphs. I recommend `xdot `_ for interactive use. ``pip install xdot`` should suffice; objgraph will automatically look for it in your ``PATH``. Installation and Documentation ------------------------------ ``pip install objgraph`` or `download it from PyPI `_. Documentation lives at https://mg.pov.lt/objgraph. .. _history: History ------- I've developed a set of functions that eventually became objgraph when I was hunting for memory leaks in a Python program. The whole story -- with illustrated examples -- is in this series of blog posts: * `Hunting memory leaks in Python `_ * `Python object graphs `_ * `Object graphs with graphviz `_ .. _devel: Support and Development ----------------------- The source code can be found in this Git repository: https://github.com/mgedmin/objgraph. To check it out, use ``git clone https://github.com/mgedmin/objgraph``. Report bugs at https://github.com/mgedmin/objgraph/issues. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602175284.0 objgraph-3.5.0/appveyor.yml0000664000175000017500000000162100000000000014736 0ustar00mgmg00000000000000version: build-{build}-{branch} environment: matrix: # https://www.appveyor.com/docs/installed-software#python lists available # versions - PYTHON: "C:\\Python27" - PYTHON: "C:\\Python36" - PYTHON: "C:\\Python37" - PYTHON: "C:\\Python38" init: - "echo %PYTHON%" install: - ps: | if (-not (Test-Path $env:PYTHON)) { curl -o install_python.ps1 https://raw.githubusercontent.com/matthew-brett/multibuild/11a389d78892cf90addac8f69433d5e22bfa422a/install_python.ps1 .\install_python.ps1 } - ps: if (-not (Test-Path $env:PYTHON)) { throw "No $env:PYTHON" } - "set PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" - python --version - pip install -U virtualenv # upgrade pip in tox's virtualenvs - pip install tox - choco install graphviz - "set PATH=c:\\Program Files (x86)\\graphviz2.38\\bin;%PATH%" - dot -V build: off test_script: - tox -e py ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1602414965.9142513 objgraph-3.5.0/docs/0000775000175000017500000000000000000000000013276 5ustar00mgmg00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/42.png0000664000175000017500000003723600000000000014244 0ustar00mgmg00000000000000PNG  IHDReZbKGD IDATxw\S8AC([ (ÁbZ5@j[-V-ZmڏW[UX[- T@Q$?^57G{8^5hbB!%: BKB{X/B1'OSM I0W\s%;ob)gΜ:`0Ľ\=s%;̕$WO} 3f̠?TVV޽{\s%;̕0WKB{X/BaD!!KB{X/Bk DzzzǏ :s%;̕0WU^Xĉwڵx~bnn]vɒ1Q/Jv+ԅ|>Æ hX =233#G%9sѣ?c+W¬,96H' tuu~cǎ ۢ̕0WS\SW =Bዏ]]]<쌍}wtВNK,ٽ{jkk+U) ̕0W\! yKcccm4=Q>#FܹsԩTG0W\s5ɫ^{|Ifg:TYYqN/XYzJv+a3y7>{H$Gb\]] jjj񚛛m6} X"55"UTTSDٳuuu͛---OKHH077 vG311h֬Y҉޽{wHHܹs' ,+adB]I͎ 1c[eeݻw+ad5DEAp̾鵘|w=fvv0ߢQ? QQWw}BFٮbxug[|\T;gNyTP<~|_9TWWxz %B!`Xg޻iûw+=[g`]GrBHK3^52jjƒ%̻}eă f㼹tϜ9 `Gp}|**<h:˖'N|o/)9B'ĉvrso:vCE%9%,l?t^:!AG۷?..>曫њ򡦦W_7OvwΜpo54s޽Ο``n^SVF>yoo2 ;w.>׷SRS쳟BCSeg@/^;vɓg۽f̐\bюYdm)1!Z~q~{Ef[l".;Z[@ zz7n|\_/Ǐ뫪 o3=t ]MK LK@]JbS]݋$/ %ҥ| ^7?X/BVȦM^ӧG|qgii?b:bXpzv6{{ߵKr_cRY~\ܹ{oCMRUX0vg}f} \=zg_z*u%/ھN#KK0wr"w/SlH<{~\Jv+adz ~|رcUUU+++{y6BH1^{cǎ=p@ff櫾ڵ+++_~:}}}CC/wb0W\sD_jjjnݺ/~ MMM=U[[ﯥ;1W+adB}O>qppسgӧO~֭[y<ylllf͚]q@q{2`^Jv+{=uuusN^^200UeJv+aЋzR/Lv())so龾^^^֭2eyKKˊ+<jjjf255lii矋|||ƌcddtyS[[{nWTTٳLXsss2{බ+ad u'ߞF <ظqƍ++&'ONGі/_wUVm۶ihhtttM0ܼuvvv_}]nҥK%WY~c~dTP s%;̕0W\n}___%;z>k֬}/=#GH윒BnhhwԘ>}$~;&z)̕0W\s֓z,zvdddŋbܬ]YY˻TGGӖaÆI㏟}ْ%K&MtСVłJv+aPzR/+++h"CdϲSWW766VSS NIJHHH(**Z|Ν;ᇘ:\s%;̕| xR!'211qԨQօ |V2ެb͝;sssww &(((**jƍ&LXf͂ U̕0W\Nyr5}:9Ba\uUCu/)'ҥKoܹs{Xxߩjjji]]uQQQrrreeeHH~FF@EEE$ |#G%fϞ}ƛ7o._ɓ'=dFuJv=WjjݾT7lc͒'YYYO3"ƍ>>>#FرcGCCsoSSS vrrhmm-++sssDn255=ztMM͡CBBBFgff6}toL8:::***:::-ZﯡҲo 455=zHssεUWWR+sJI8;RGp\s%;̕0W!P^"BzBuoK&ݻTAZ/@u a6oެĉϞ=+T̉n^rݙ&MxTGΝ{nkkKQBKMM >|͛kjjHq޽Rp^._<;;;55344OK߿IG믿 .]jffb ln͛KJJߟVZIIIpp0qvvx?AK+0000 yhjjz?<9W/RXXhѢ`}}Wg0J 9sfϞ=nnn˗/?֫3rU^^uÇ{yyܹsg@窳~9W^) N ޿eIIɺu[]^uƍ<< ^dɸq^|J$]zÿP(6m… O;1Wo߾ϫ{˖-sss{m3Wٛ7ox{5j,'zaFFao +1zƈrUUUTڢf̘fq)9r$˭:(Ed29Nee%ȑP(\`+WHMM 2d J*~~~0lذP%zQjj*QWWp8wܡ:" lmm555H^:;;ϟq5cAz)҄ $ ,,Wvvvxx5899qGQ" ݏTE=>alll``r۩H.:;;CBB455oܸAu,H&X/_OvvvXXN'M>OuP J(޼yhkktEFF 9榎IOO:"555q\mmm{{(HDuD}ۺoߦ:==N4$,,KopvvvR©ۻwBuP+//p8L&;..p^GGnj3RRRue燅h4??VR\۶mstt$lCR8B0&&fq8LXNN@k|wttL6MOOoc+8}ѣ&L33 6`skYYY78Jqɓ'TǥX󿰰꠨mgg@u8}eҤIFFFYYYTҿħNQL^=n…jjjl6;&&F)G+N22HWWNݻ>ZYYIƚ کMd2 mnn?~aWK$"""bRh .b0pbSϗ51bΝ;m~\EDDP(:>mnn>nD @=ח :::J©:cƌȧORy5k Y,ܹs/^88WWW21c(r9cƌIފe,z@ц pҨJ544DFF(jjjp~ ME~ݻGuPe4-00P 2P]]2bĈrcAFfwZRtp2L 2>hnݺ5a:f'O8;;)H %e|ٳgI]l͛7qXP oN cccgWKCڱf111...,+44pzNNN8MA`^eeG 6666mˣ: ''gͮ```x/*P^c̈́BaddСC\n[[PyyKuu5ձ ,SN槓Yx_eeeTynii9WAwwwSUUEu8]y󦦦fPP@:aD,~dİ0){mٲÃF?~|n"~hFCQo`"(**FKK+,,LĨ}=Y`͛7 ###fRI]Dcڒolb``@Vi;::""" """˗/^%S^jB֭[6l σazxӧ?#rs:(U$k7(TuuuaaaQQQ_.]T1 -NL:`D())9xi455aʕϟoll:Çd;[:~Bmm-Y4\Ҭw_VVp ƸqnܸAu8/qYO?@^.2…JUͿ[HH355ɹwԩSuttƌ#=/ [jԩSWZ%C= ,::Y=Ƥ{P} 311!EFF*G;++f@``y<dZ@^KZZZbbb<==i4rSSS)S" @OO˥`kkr7 o~)6<}u}}}zdff&d2L<:Ϝ93k,CCdL&(ںNb06m:%ɪ0""fW-,,>'NP&H1yJsC !K k֬PZSSpLLLHDGGY?f߼y@Bjjj)T#Gt_Mu %zmB099o  ˖-;~xEEE?#]/Ӊ'ࢢ"<&;Z N:thPP/Dii޽{%PTccc.8~>LӿQ*X/Qtvv3f6w"c N0mڴ.;߿ڴif͚X+?d)+++ ΁&.moo8h'rDy`D}illehh@ P$w:X###6 IfpX,uuu6=>ɑ MOO:ݻi4GGIDATD`DrzʕM6?bYHHȁz\;V^ ,+&&ҥK BCCkjj8cTӧO׬Y3u?|͚5[nt{vqZTUU~)d!XHdT__/YV__,}0IIIt:}…ߙi4ڡC C b1 __~V]]]___{yyQ"jmmMLLpBvv֤IfΜ[oOYYٳg###ݻgiixb2Hjpի+**>דJ|W|͑#G.\HU J%Raaa|||BBB|||vv6ppp'V---Pedd\|sʔ)SLSWW:"##>LQ|_ k֬ȐaÆ;vDFF{J4:AAT=HQojjJj?KKKK\\8eOOO;4D"Qbb";~x}}B6Qp---?÷~aÆ%KcݺucBBBꯄhiiw :::ށ~~~^^^T}IWXW^%;whhhN_g9ijj:wǯ\9gΜO>>ƍ&j!Gƍ :>o]rEWWw̙l6b2T֕M6>}zʔ)}Ƚ߈+WϧO9sf^Z `DX,!3)))??`8999n8GGG축VXX{ҥ&8m42_E w;vX[[ۥb_ٳӧO*hknnNKK#ݶnݪ=z'|uR;333Ɏcdr *..>uԑ#Grssy6Ou\}[lDE>}?n %Rd;wݻ'LMM===ɠ1cd֭[v޹s`=z7(WȐǏXYY/Zё^B$;vlݺuk׮OT(~ΝxIJ%RNUUUnJLLLJJsN[[رc̨Q!^z5.....  R{ߎ=#'''6`#FPZ[[8}v7~G0|I(.X…  }9%)?@p޽[nݾ}l?2l0///R;njo]aL2*++c2nnndd\'O>ys…AAAT/}޽{G}~#lkbbb}%t];bsK=>32P(>>իdЄ ȺP(vѣGf6=|CCCCM6;vlʔ);v|ܹso޼K6(E v grr'OORAc8LI^zVSSLJ̅;v 6 );{l{{{@@… yř7o<.K>?gΜ+WȻ<@X%B#rrrRIOORFSD $''_vڵkIIImmm'N0aĉd֋/=zdC16=w\MMMC/rrr-ZuV###9]mƌ߿zQt}Riii)))wpuuQF VuttܺuڵkqqqmmmǏ'm`}:y۷ ͛4a Ht̙kԬ^:,,LNӧOξv횓<.rX/R>yyygvvݻw ק:& sssbcc]VSS!Y:@J:ujeeץoϞ=¡C^tu"X/3a)))?SSSgggIё.$STT$ٲ-00p-.]8f̘Am,++۶mÇǎsN??=ccc``'OB}yyyǏG11/?bO?!Diiiiii:zhggAYƍ7nܸ~zee%3f?500:n;wYYYaaay۾]aʔ)ׯ_oii0aBCCF[dB!y(zCX/'|>hzzzss36ȑ#iW)((y>|HI-vEq gllڵk333?ïظѣI& BPQQ)..BC!=Ez5AnnnzzzFFFZZZzz:iddDZ......NNNJmjj}6鶍ooo;v|*lJJJΟ?O !COS,>}zݺu?^r jitttHH'Lի\noOϿb{woO.7X/RUUUܿ?77W 0 ;;;)666n:;;I$Cm )-O '?rƍUTT/^˵M&], ˟=9zufyz"ܹ' UTT$ZA%Å㳳K䖧3>Y__cǎ[XXlݺu޼y=Ÿz|H$zضmۺuzk׿d'  uԨQF9r™ #FuvvV<噛ϝ;w޼y>>>ps|֭ڹs_|_u jKKIKK˫Qiiio7=UQu{uN9zV__%i!CHťG(Ąvc<8xxӧO噙͙3g޼yٛ7ox{^宽ֶrزe˓'ObML:O?}G 4'rR )>O'@ t+++ LmP'<>>^ TEዋwfΜ9}trJXXXzzŋ7oL0ׯ_IѾիWAߺu늊h4tդhÇ/,,۶_@4 YY:aDH |R>I}K+r,EdR>ڴHT %Q&Of̙#ׯZre\\\H?h~iɒ%/,ׯ/,,4ĉFLض zu6zРSYY)2d 666}9֔[nѶG7nᕗ.\t钊ʔ)Slkkk۷oUSSuFx<ޜ9s^YR5K2SV$tGG4=22 @{  vyyyIhoo0pwKJJJLLLJJD&&&pxzzRG]SSx>A[[Օm/\bbb:;;ǍfCBBz3Ν;^^^d2 leeEƍg&KKK;::{aS__/_Mx<ީSz&KPד))YYY 5EKvttܽ{۷oNJJ*))a2...^^^TWW?׮]c0SN3g̙3{0j7ߌ}q~mRRҐ!CzSWFzR---yyy[yyy\#G:88xFSSꐻQUU%wijj"{?{lLLP(4iҜ9sfϞMb֬Yׯ_'wY,H$|=,3)) K>!$Wb ZQQAڎ}]Nj ---y񢣣l6͖999dEI8q"$$D?^"@PVVVo999:l0Iw.ݹԎ==1cHJ022Փ=Ǐؐ痞~ȑyW>}#."_K sCh^^Js3D---ghscn%+ IC J ӧ+++-,,fϞ=sI&=ϓ'OLMM-{y2+ %BHɑQEr󛚚b >FCoj O> =7oެb09f̘]B$%&&gΜ)((000x뭷lob ""bŊd%ɴz<%{wH/뇹.OZZZ[|^xqƌ:'N'r:;;IQz }^^î]M !!p ܼ  EECaF!ŧbfffff)z}}}qqqIIIII y_ZZZSS4KKKud:;;;;;  KJJH|8y:|l- H|8yh4;;;;;_UQ[III}ۼy/\Ox\.$7ؾD!QQQ!" gXkWKu>*h7a0>AEh`k ۗ!zLUU|PmmmEEEiiiyyyyyyYYYYYYzzziidg.===җm455:*] pIENDB`././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/CHANGES.txt0000664000175000017500000000003400000000000015104 0ustar00mgmg00000000000000.. include:: ../CHANGES.rst ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/HACKING.txt0000664000175000017500000000003400000000000015100 0ustar00mgmg00000000000000.. include:: ../HACKING.rst ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1602414965.9142513 objgraph-3.5.0/docs/_static/0000775000175000017500000000000000000000000014724 5ustar00mgmg00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/_static/mg.css0000664000175000017500000000037600000000000016047 0ustar00mgmg00000000000000@import url("default.css"); pre { border: 1px dotted #869abf; overflow: hidden; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { border: none; font-weight: bold; } div.figure { text-align: center; } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/all-the-chars.dot0000664000175000017500000017570500000000000016451 0ustar00mgmg00000000000000digraph ObjectGraph { node[shape=box, style=filled, fillcolor=white]; o139786176653024[fontcolor=red]; o139786176653024[label="dict\n256 items"]; o139786176653024[fillcolor="0,0,1"]; o139786176653024 -> o139786226505808; o139786176653024 -> o41800048 [label="str\n'\\x00'"]; o139786176653024 -> o139786226610904; o139786176653024 -> o41802880 [label="str\n'\\x83'"]; o139786176653024 -> o139786226505968; o139786176653024 -> o41799952 [label="str\n'\\x04'"]; o139786176653024 -> o139786226611064; o139786176653024 -> o41802784 [label="str\n'\\x87'"]; o139786176653024 -> o139786226506128; o139786176653024 -> o41799856 [label="str\n'\\x08'"]; o139786176653024 -> o139786226611224; o139786176653024 -> o41802688 [label="str\n'\\x8b'"]; o139786176653024 -> o139786226506288; o139786176653024 -> o41799760 [label="str\n'\\x0c'"]; o139786176653024 -> o139786226611384; o139786176653024 -> o41802592 [label="str\n'\\x8f'"]; o139786176653024 -> o139786226506448; o139786176653024 -> o41799664 [label="str\n'\\x10'"]; o139786176653024 -> o139786226611544; o139786176653024 -> o41802496 [label="str\n'\\x93'"]; o139786176653024 -> o139786226506608; o139786176653024 -> o41799568 [label="str\n'\\x14'"]; o139786176653024 -> o139786226611704; o139786176653024 -> o41802400 [label="str\n'\\x97'"]; o139786176653024 -> o139786226506768; o139786176653024 -> o41799472 [label="str\n'\\x18'"]; o139786176653024 -> o139786226611864; o139786176653024 -> o41802304 [label="str\n'\\x9b'"]; o139786176653024 -> o139786226506928; o139786176653024 -> o41799376 [label="str\n'\\x1c'"]; o139786176653024 -> o139786226612024; o139786176653024 -> o41804200 [label="str\n'\\x9f'"]; o139786176653024 -> o139786226797704; o139786176653024 -> o41799280 [label="str\n' '"]; o139786176653024 -> o139786226612184; o139786176653024 -> o41804104 [label="str\n'\\xa3'"]; o139786176653024 -> o139786227378696; o139786176653024 -> o41801176 [label="str\n'$'"]; o139786176653024 -> o139786226612344; o139786176653024 -> o41804008 [label="str\n'\\xa7'"]; o139786176653024 -> o139786226478776; o139786176653024 -> o41801080 [label="str\n'('"]; o139786176653024 -> o139786226612504; o139786176653024 -> o41803912 [label="str\n'\\xab'"]; o139786176653024 -> o139786226475776; o139786176653024 -> o41800984 [label="str\n','"]; o139786176653024 -> o139786226612664; o139786176653024 -> o41803816 [label="str\n'\\xaf'"]; o139786176653024 -> o139786226507288; o139786176653024 -> o41800888 [label="str\n'0'"]; o139786176653024 -> o139786226612824; o139786176653024 -> o41803720 [label="str\n'\\xb3'"]; o139786176653024 -> o139786226507368; o139786176653024 -> o41800792 [label="str\n'4'"]; o139786176653024 -> o139786226612984; o139786176653024 -> o41803624 [label="str\n'\\xb7'"]; o139786176653024 -> o139786226798424; o139786176653024 -> o41800696 [label="str\n'8'"]; o139786176653024 -> o139786226613144; o139786176653024 -> o41803528 [label="str\n'\\xbb'"]; o139786176653024 -> o139786227380176; o139786176653024 -> o41800600 [label="str\n'<'"]; o139786176653024 -> o139786226613304; o139786176653024 -> o41803432 [label="str\n'\\xbf'"]; o139786176653024 -> o139786226507528; o139786176653024 -> o41800504 [label="str\n'@'"]; o139786176653024 -> o139786226613464; o139786176653024 -> o41803336 [label="str\n'\\xc3'"]; o139786176653024 -> o139786226507608; o139786176653024 -> o41800408 [label="D",weight=2]; o139786176653024 -> o139786226613624; o139786176653024 -> o41803240 [label="str\n'\\xc7'"]; o139786176653024 -> o139786226507688; o139786176653024 -> o41800312 [label="H",weight=2]; o139786176653024 -> o139786226613784; o139786176653024 -> o41805136 [label="str\n'\\xcb'"]; o139786176653024 -> o139786227480376; o139786176653024 -> o41800216 [label="L",weight=2]; o139786176653024 -> o139786226613944; o139786176653024 -> o41805040 [label="str\n'\\xcf'"]; o139786176653024 -> o139786226610264; o139786176653024 -> o41802112 [label="P",weight=2]; o139786176653024 -> o139786226614104; o139786176653024 -> o41804944 [label="str\n'\\xd3'"]; o139786176653024 -> o139786227007616; o139786176653024 -> o41802016 [label="T",weight=2]; o139786176653024 -> o139786226614320; o139786176653024 -> o41804848 [label="str\n'\\xd7'"]; o139786176653024 -> o139786227007736; o139786176653024 -> o41801920 [label="X",weight=2]; o139786176653024 -> o139786226614480; o139786176653024 -> o41804752 [label="str\n'\\xdb'"]; o139786176653024 -> o139786226610504; o139786176653024 -> o41801824 [label="str\n'\\\\'"]; o139786176653024 -> o139786226614640; o139786176653024 -> o41804656 [label="str\n'\\xdf'"]; o139786176653024 -> o139786226610584; o139786176653024 -> o41801728 [label="str\n'`'"]; o139786176653024 -> o139786226614800; o139786176653024 -> o41804560 [label="str\n'\\xe3'"]; o139786176653024 -> o139786227480456; o139786176653024 -> o41801632 [label="d",weight=2]; o139786176653024 -> o139786226614960; o139786176653024 -> o41804464 [label="str\n'\\xe7'"]; o139786176653024 -> o139786227009016; o139786176653024 -> o41801536 [label="h",weight=2]; o139786176653024 -> o139786226615120; o139786176653024 -> o41804368 [label="str\n'\\xeb'"]; o139786176653024 -> o139786227007856; o139786176653024 -> o41801440 [label="l",weight=2]; o139786176653024 -> o139786226615280; o139786176653024 -> o41804272 [label="str\n'\\xef'"]; o139786176653024 -> o139786227480816; o139786176653024 -> o41801344 [label="p",weight=2]; o139786176653024 -> o139786226615440; o139786176653024 -> o41806168 [label="str\n'\\xf3'"]; o139786176653024 -> o139786227376896; o139786176653024 -> o41801248 [label="t",weight=2]; o139786176653024 -> o139786226615600; o139786176653024 -> o41806072 [label="str\n'\\xf7'"]; o139786176653024 -> o139786227482256; o139786176653024 -> o41803144 [label="x",weight=2]; o139786176653024 -> o139786226615760; o139786176653024 -> o41805976 [label="str\n'\\xfb'"]; o139786176653024 -> o139786226610704; o139786176653024 -> o41803048 [label="str\n'|'"]; o139786176653024 -> o139786226615920; o139786176653024 -> o41805880 [label="str\n'\\xff'"]; o139786176653024 -> o139786226610784; o139786176653024 -> o41802952 [label="str\n'\\x80'"]; o139786176653024 -> o139786226505928; o139786176653024 -> o41799976 [label="str\n'\\x03'"]; o139786176653024 -> o139786226610944; o139786176653024 -> o41802856 [label="str\n'\\x84'"]; o139786176653024 -> o139786226506088; o139786176653024 -> o41799880 [label="str\n'\\x07'"]; o139786176653024 -> o139786226611104; o139786176653024 -> o41802760 [label="str\n'\\x88'"]; o139786176653024 -> o139786226506248; o139786176653024 -> o41799784 [label="str\n'\\x0b'"]; o139786176653024 -> o139786226611264; o139786176653024 -> o41802664 [label="str\n'\\x8c'"]; o139786176653024 -> o139786226506408; o139786176653024 -> o41799688 [label="str\n'\\x0f'"]; o139786176653024 -> o139786226611424; o139786176653024 -> o41802568 [label="str\n'\\x90'"]; o139786176653024 -> o139786226506568; o139786176653024 -> o41799592 [label="str\n'\\x13'"]; o139786176653024 -> o139786226611584; o139786176653024 -> o41802472 [label="str\n'\\x94'"]; o139786176653024 -> o139786226506728; o139786176653024 -> o41799496 [label="str\n'\\x17'"]; o139786176653024 -> o139786226611744; o139786176653024 -> o41802376 [label="str\n'\\x98'"]; o139786176653024 -> o139786226506888; o139786176653024 -> o41799400 [label="str\n'\\x1b'"]; o139786176653024 -> o139786226611904; o139786176653024 -> o41802280 [label="str\n'\\x9c'"]; o139786176653024 -> o139786226507048; o139786176653024 -> o41799304 [label="str\n'\\x1f'"]; o139786176653024 -> o139786226612064; o139786176653024 -> o41804176 [label="str\n'\\xa0'"]; o139786176653024 -> o139786227480536; o139786176653024 -> o41799208 [label="str\n'#'"]; o139786176653024 -> o139786226612224; o139786176653024 -> o41804080 [label="str\n'\\xa4'"]; o139786176653024 -> o139786226507248; o139786176653024 -> o41801104 [label="str\n\"'\""]; o139786176653024 -> o139786226612384; o139786176653024 -> o41803984 [label="str\n'\\xa8'"]; o139786176653024 -> o139786226475856; o139786176653024 -> o41801008 [label="str\n'+'"]; o139786176653024 -> o139786226612544; o139786176653024 -> o41803888 [label="str\n'\\xac'"]; o139786176653024 -> o139786227480696; o139786176653024 -> o41800912 [label="str\n'/'"]; o139786176653024 -> o139786226612704; o139786176653024 -> o41803792 [label="str\n'\\xb0'"]; o139786176653024 -> o139786226507328; o139786176653024 -> o41800816 [label="str\n'3'"]; o139786176653024 -> o139786226612864; o139786176653024 -> o41803696 [label="str\n'\\xb4'"]; o139786176653024 -> o139786227377736; o139786176653024 -> o41800720 [label="str\n'7'"]; o139786176653024 -> o139786226613024; o139786176653024 -> o41803600 [label="str\n'\\xb8'"]; o139786176653024 -> o139786227481016; o139786176653024 -> o41800624 [label="str\n';'"]; o139786176653024 -> o139786226613184; o139786176653024 -> o41803504 [label="str\n'\\xbc'"]; o139786176653024 -> o139786226476096; o139786176653024 -> o41800528 [label="str\n'?'"]; o139786176653024 -> o139786226613344; o139786176653024 -> o41803408 [label="str\n'\\xc0'"]; o139786176653024 -> o139786227008496; o139786176653024 -> o41800432 [label="C",weight=2]; o139786176653024 -> o139786226613504; o139786176653024 -> o41803312 [label="str\n'\\xc4'"]; o139786176653024 -> o139786226507648; o139786176653024 -> o41800336 [label="G",weight=2]; o139786176653024 -> o139786226613664; o139786176653024 -> o41805208 [label="str\n'\\xc8'"]; o139786176653024 -> o139786226610224; o139786176653024 -> o41800240 [label="K",weight=2]; o139786176653024 -> o139786226613824; o139786176653024 -> o41805112 [label="str\n'\\xcc'"]; o139786176653024 -> o139786227379896; o139786176653024 -> o41802136 [label="O",weight=2]; o139786176653024 -> o139786226613984; o139786176653024 -> o41805016 [label="str\n'\\xd0'"]; o139786176653024 -> o139786227379856; o139786176653024 -> o41802040 [label="S",weight=2]; o139786176653024 -> o139786226614144; o139786176653024 -> o41804920 [label="str\n'\\xd4'"]; o139786176653024 -> o139786227007656; o139786176653024 -> o41801944 [label="W",weight=2]; o139786176653024 -> o139786226614360; o139786176653024 -> o41804824 [label="str\n'\\xd8'"]; o139786176653024 -> o139786226610464; o139786176653024 -> o41801848 [label="str\n'['"]; o139786176653024 -> o139786226614520; o139786176653024 -> o41804728 [label="str\n'\\xdc'"]; o139786176653024 -> o139786227481776; o139786176653024 -> o41801752 [label="_",weight=2]; o139786176653024 -> o139786226614680; o139786176653024 -> o41804632 [label="str\n'\\xe0'"]; o139786176653024 -> o139786227379656; o139786176653024 -> o41801656 [label="c",weight=2]; o139786176653024 -> o139786226614840; o139786176653024 -> o41804536 [label="str\n'\\xe4'"]; o139786176653024 -> o139786227007776; o139786176653024 -> o41801560 [label="g",weight=2]; o139786176653024 -> o139786226615000; o139786176653024 -> o41804440 [label="str\n'\\xe8'"]; o139786176653024 -> o139786227482576; o139786176653024 -> o41801464 [label="k",weight=2]; o139786176653024 -> o139786226615160; o139786176653024 -> o41804344 [label="str\n'\\xec'"]; o139786176653024 -> o139786227007696; o139786176653024 -> o41801368 [label="o",weight=2]; o139786176653024 -> o139786226615320; o139786176653024 -> o41804248 [label="str\n'\\xf0'"]; o139786176653024 -> o139786227480416; o139786176653024 -> o41801272 [label="s",weight=2]; o139786176653024 -> o139786226615480; o139786176653024 -> o41806144 [label="str\n'\\xf4'"]; o139786176653024 -> o139786227479776; o139786176653024 -> o41803168 [label="w",weight=2]; o139786176653024 -> o139786226615640; o139786176653024 -> o41806048 [label="str\n'\\xf8'"]; o139786176653024 -> o139786227378736; o139786176653024 -> o41803072 [label="str\n'{'"]; o139786176653024 -> o139786226615800; o139786176653024 -> o41805952 [label="str\n'\\xfc'"]; o139786176653024 -> o139786226610744; o139786176653024 -> o41802976 [label="str\n'\\x7f'"]; o139786176653024 -> o139786226610824; o139786176653024 -> o41802928 [label="str\n'\\x81'"]; o139786176653024 -> o139786226505888; o139786176653024 -> o41800000 [label="str\n'\\x02'"]; o139786176653024 -> o139786226610984; o139786176653024 -> o41802832 [label="str\n'\\x85'"]; o139786176653024 -> o139786226506048; o139786176653024 -> o41799904 [label="str\n'\\x06'"]; o139786176653024 -> o139786226611144; o139786176653024 -> o41802736 [label="str\n'\\x89'"]; o139786176653024 -> o139786226506208; o139786176653024 -> o41799808 [label="str\n'\\n'"]; o139786176653024 -> o139786226611304; o139786176653024 -> o41802640 [label="str\n'\\x8d'"]; o139786176653024 -> o139786226506368; o139786176653024 -> o41799712 [label="str\n'\\x0e'"]; o139786176653024 -> o139786226611464; o139786176653024 -> o41802544 [label="str\n'\\x91'"]; o139786176653024 -> o139786226506528; o139786176653024 -> o41799616 [label="str\n'\\x12'"]; o139786176653024 -> o139786226611624; o139786176653024 -> o41802448 [label="str\n'\\x95'"]; o139786176653024 -> o139786226506688; o139786176653024 -> o41799520 [label="str\n'\\x16'"]; o139786176653024 -> o139786226611784; o139786176653024 -> o41802352 [label="str\n'\\x99'"]; o139786176653024 -> o139786226506848; o139786176653024 -> o41799424 [label="str\n'\\x1a'"]; o139786176653024 -> o139786226611944; o139786176653024 -> o41802256 [label="str\n'\\x9d'"]; o139786176653024 -> o139786226507008; o139786176653024 -> o41799328 [label="str\n'\\x1e'"]; o139786176653024 -> o139786226612104; o139786176653024 -> o41804152 [label="str\n'\\xa1'"]; o139786176653024 -> o139786226507128; o139786176653024 -> o41799232 [label="str\n'\"'"]; o139786176653024 -> o139786226612264; o139786176653024 -> o41804056 [label="str\n'\\xa5'"]; o139786176653024 -> o139786226507208; o139786176653024 -> o41801128 [label="str\n'&'"]; o139786176653024 -> o139786226612424; o139786176653024 -> o41803960 [label="str\n'\\xa9'"]; o139786176653024 -> o139786227011416; o139786176653024 -> o41801032 [label="str\n'*'"]; o139786176653024 -> o139786226612584; o139786176653024 -> o41803864 [label="str\n'\\xad'"]; o139786176653024 -> o139786227377976; o139786176653024 -> o41800936 [label="str\n'.'"]; o139786176653024 -> o139786226612744; o139786176653024 -> o41803768 [label="str\n'\\xb1'"]; o139786176653024 -> o139786227480736; o139786176653024 -> o41800840 [label="str\n'2'"]; o139786176653024 -> o139786226612904; o139786176653024 -> o41803672 [label="str\n'\\xb5'"]; o139786176653024 -> o139786226507448; o139786176653024 -> o41800744 [label="str\n'6'"]; o139786176653024 -> o139786226613064; o139786176653024 -> o41803576 [label="str\n'\\xb9'"]; o139786176653024 -> o139786227481056; o139786176653024 -> o41800648 [label="str\n':'"]; o139786176653024 -> o139786226613224; o139786176653024 -> o41803480 [label="str\n'\\xbd'"]; o139786176653024 -> o139786227007536; o139786176653024 -> o41800552 [label="str\n'>'"]; o139786176653024 -> o139786226613384; o139786176653024 -> o41803384 [label="str\n'\\xc1'"]; o139786176653024 -> o139786227008416; o139786176653024 -> o41800456 [label="B",weight=2]; o139786176653024 -> o139786226613544; o139786176653024 -> o41803288 [label="str\n'\\xc5'"]; o139786176653024 -> o139786227380096; o139786176653024 -> o41800360 [label="F",weight=2]; o139786176653024 -> o139786226613704; o139786176653024 -> o41805184 [label="str\n'\\xc9'"]; o139786176653024 -> o139786226507728; o139786176653024 -> o41800264 [label="J",weight=2]; o139786176653024 -> o139786226613864; o139786176653024 -> o41805088 [label="str\n'\\xcd'"]; o139786176653024 -> o139786227379816; o139786176653024 -> o41802160 [label="N",weight=2]; o139786176653024 -> o139786226614024; o139786176653024 -> o41804992 [label="str\n'\\xd1'"]; o139786176653024 -> o139786227379936; o139786176653024 -> o41802064 [label="R",weight=2]; o139786176653024 -> o139786226614184; o139786176653024 -> o41804896 [label="str\n'\\xd5'"]; o139786176653024 -> o139786226610344; o139786176653024 -> o41801968 [label="V",weight=2]; o139786176653024 -> o139786226614400; o139786176653024 -> o41804800 [label="str\n'\\xd9'"]; o139786176653024 -> o139786226610424; o139786176653024 -> o41801872 [label="Z",weight=2]; o139786176653024 -> o139786226614560; o139786176653024 -> o41804704 [label="str\n'\\xdd'"]; o139786176653024 -> o139786226610544; o139786176653024 -> o41801776 [label="str\n'^'"]; o139786176653024 -> o139786226614720; o139786176653024 -> o41804608 [label="str\n'\\xe1'"]; o139786176653024 -> o139786227378176; o139786176653024 -> o41801680 [label="b",weight=2]; o139786176653024 -> o139786226614880; o139786176653024 -> o41804512 [label="str\n'\\xe5'"]; o139786176653024 -> o139786227480336; o139786176653024 -> o41801584 [label="f",weight=2]; o139786176653024 -> o139786226615040; o139786176653024 -> o41804416 [label="str\n'\\xe9'"]; o139786176653024 -> o139786227378856; o139786176653024 -> o41801488 [label="j",weight=2]; o139786176653024 -> o139786226615200; o139786176653024 -> o41804320 [label="str\n'\\xed'"]; o139786176653024 -> o139786227481816; o139786176653024 -> o41801392 [label="n",weight=2]; o139786176653024 -> o139786226615360; o139786176653024 -> o41806216 [label="str\n'\\xf1'"]; o139786176653024 -> o139786227479736; o139786176653024 -> o41801296 [label="r",weight=2]; o139786176653024 -> o139786226615520; o139786176653024 -> o41806120 [label="str\n'\\xf5'"]; o139786176653024 -> o139786227376176; o139786176653024 -> o41803192 [label="v",weight=2]; o139786176653024 -> o139786226615680; o139786176653024 -> o41806024 [label="str\n'\\xf9'"]; o139786176653024 -> o139786226610664; o139786176653024 -> o41803096 [label="z",weight=2]; o139786176653024 -> o139786226615840; o139786176653024 -> o41805928 [label="str\n'\\xfd'"]; o139786176653024 -> o139786227480936; o139786176653024 -> o41803000 [label="str\n'~'"]; o139786176653024 -> o139786226505848; o139786176653024 -> o41800024 [label="str\n'\\x01'"]; o139786176653024 -> o139786226610864; o139786176653024 -> o41802904 [label="str\n'\\x82'"]; o139786176653024 -> o139786226506008; o139786176653024 -> o41799928 [label="str\n'\\x05'"]; o139786176653024 -> o139786226611024; o139786176653024 -> o41802808 [label="str\n'\\x86'"]; o139786176653024 -> o139786226506168; o139786176653024 -> o41799832 [label="str\n'\\t'"]; o139786176653024 -> o139786226611184; o139786176653024 -> o41802712 [label="str\n'\\x8a'"]; o139786176653024 -> o139786226506328; o139786176653024 -> o41799736 [label="str\n'\\r'"]; o139786176653024 -> o139786226611344; o139786176653024 -> o41802616 [label="str\n'\\x8e'"]; o139786176653024 -> o139786226506488; o139786176653024 -> o41799640 [label="str\n'\\x11'"]; o139786176653024 -> o139786226611504; o139786176653024 -> o41802520 [label="str\n'\\x92'"]; o139786176653024 -> o139786226506648; o139786176653024 -> o41799544 [label="str\n'\\x15'"]; o139786176653024 -> o139786226611664; o139786176653024 -> o41802424 [label="str\n'\\x96'"]; o139786176653024 -> o139786226506808; o139786176653024 -> o41799448 [label="str\n'\\x19'"]; o139786176653024 -> o139786226611824; o139786176653024 -> o41802328 [label="str\n'\\x9a'"]; o139786176653024 -> o139786226506968; o139786176653024 -> o41799352 [label="str\n'\\x1d'"]; o139786176653024 -> o139786226611984; o139786176653024 -> o41802232 [label="str\n'\\x9e'"]; o139786176653024 -> o139786226507088; o139786176653024 -> o41799256 [label="str\n'!'"]; o139786176653024 -> o139786226612144; o139786176653024 -> o41804128 [label="str\n'\\xa2'"]; o139786176653024 -> o139786226507168; o139786176653024 -> o41801152 [label="str\n'%'"]; o139786176653024 -> o139786226612304; o139786176653024 -> o41804032 [label="str\n'\\xa6'"]; o139786176653024 -> o139786226503888; o139786176653024 -> o41801056 [label="str\n')'"]; o139786176653024 -> o139786226612464; o139786176653024 -> o41803936 [label="str\n'\\xaa'"]; o139786176653024 -> o139786226475936; o139786176653024 -> o41800960 [label="str\n'-'"]; o139786176653024 -> o139786226612624; o139786176653024 -> o41803840 [label="str\n'\\xae'"]; o139786176653024 -> o139786227377416; o139786176653024 -> o41800864 [label="str\n'1'"]; o139786176653024 -> o139786226612784; o139786176653024 -> o41803744 [label="str\n'\\xb2'"]; o139786176653024 -> o139786226507408; o139786176653024 -> o41800768 [label="str\n'5'"]; o139786176653024 -> o139786226612944; o139786176653024 -> o41803648 [label="str\n'\\xb6'"]; o139786176653024 -> o139786226507488; o139786176653024 -> o41800672 [label="str\n'9'"]; o139786176653024 -> o139786226613104; o139786176653024 -> o41803552 [label="str\n'\\xba'"]; o139786176653024 -> o139786226504008; o139786176653024 -> o41800576 [label="str\n'='"]; o139786176653024 -> o139786226613264; o139786176653024 -> o41803456 [label="str\n'\\xbe'"]; o139786176653024 -> o139786226507568; o139786176653024 -> o41800480 [label="A",weight=2]; o139786176653024 -> o139786226613424; o139786176653024 -> o41803360 [label="str\n'\\xc2'"]; o139786176653024 -> o139786227377936; o139786176653024 -> o41800384 [label="E",weight=2]; o139786176653024 -> o139786226613584; o139786176653024 -> o41803264 [label="str\n'\\xc6'"]; o139786176653024 -> o139786227379696; o139786176653024 -> o41800288 [label="I",weight=2]; o139786176653024 -> o139786226613744; o139786176653024 -> o41805160 [label="str\n'\\xca'"]; o139786176653024 -> o139786227377136; o139786176653024 -> o41802184 [label="M",weight=2]; o139786176653024 -> o139786226613904; o139786176653024 -> o41805064 [label="str\n'\\xce'"]; o139786176653024 -> o139786226610304; o139786176653024 -> o41802088 [label="Q",weight=2]; o139786176653024 -> o139786226614064; o139786176653024 -> o41804968 [label="str\n'\\xd2'"]; o139786176653024 -> o139786226796184; o139786176653024 -> o41801992 [label="U",weight=2]; o139786176653024 -> o139786226614224; o139786176653024 -> o41804872 [label="str\n'\\xd6'"]; o139786176653024 -> o139786226610384; o139786176653024 -> o41801896 [label="Y",weight=2]; o139786176653024 -> o139786226614440; o139786176653024 -> o41804776 [label="str\n'\\xda'"]; o139786176653024 -> o139786227481736; o139786176653024 -> o41801800 [label="str\n']'"]; o139786176653024 -> o139786226614600; o139786176653024 -> o41804680 [label="str\n'\\xde'"]; o139786176653024 -> o139786227378136; o139786176653024 -> o41801704 [label="a",weight=2]; o139786176653024 -> o139786226614760; o139786176653024 -> o41804584 [label="str\n'\\xe2'"]; o139786176653024 -> o139786227482056; o139786176653024 -> o41801608 [label="e",weight=2]; o139786176653024 -> o139786226614920; o139786176653024 -> o41804488 [label="str\n'\\xe6'"]; o139786176653024 -> o139786227481416; o139786176653024 -> o41801512 [label="i",weight=2]; o139786176653024 -> o139786226615080; o139786176653024 -> o41804392 [label="str\n'\\xea'"]; o139786176653024 -> o139786227480296; o139786176653024 -> o41801416 [label="m",weight=2]; o139786176653024 -> o139786226615240; o139786176653024 -> o41804296 [label="str\n'\\xee'"]; o139786176653024 -> o139786227481376; o139786176653024 -> o41801320 [label="q",weight=2]; o139786176653024 -> o139786226615400; o139786176653024 -> o41806192 [label="str\n'\\xf2'"]; o139786176653024 -> o139786227007816; o139786176653024 -> o41801224 [label="u",weight=2]; o139786176653024 -> o139786226615560; o139786176653024 -> o41806096 [label="str\n'\\xf6'"]; o139786176653024 -> o139786226610624; o139786176653024 -> o41803120 [label="y",weight=2]; o139786176653024 -> o139786226615720; o139786176653024 -> o41806000 [label="str\n'\\xfa'"]; o139786176653024 -> o139786227378776; o139786176653024 -> o41803024 [label="str\n'}'"]; o139786176653024 -> o139786226615880; o139786176653024 -> o41805904 [label="str\n'\\xfe'"]; o139786226505808[label="str\n'\\x00'"]; o139786226505808[fillcolor="0,0,0.766667"]; o41800048[label="int\n0"]; o41800048[fillcolor="0,0,0.766667"]; o139786226610904[label="str\n'\\x83'"]; o139786226610904[fillcolor="0,0,0.766667"]; o41802880[label="int\n131"]; o41802880[fillcolor="0,0,0.766667"]; o139786226505968[label="str\n'\\x04'"]; o139786226505968[fillcolor="0,0,0.766667"]; o41799952[label="int\n4"]; o41799952[fillcolor="0,0,0.766667"]; o139786226611064[label="str\n'\\x87'"]; o139786226611064[fillcolor="0,0,0.766667"]; o41802784[label="int\n135"]; o41802784[fillcolor="0,0,0.766667"]; o139786226506128[label="str\n'\\x08'"]; o139786226506128[fillcolor="0,0,0.766667"]; o41799856[label="int\n8"]; o41799856[fillcolor="0,0,0.766667"]; o139786226611224[label="str\n'\\x8b'"]; o139786226611224[fillcolor="0,0,0.766667"]; o41802688[label="int\n139"]; o41802688[fillcolor="0,0,0.766667"]; o139786226506288[label="str\n'\\x0c'"]; o139786226506288[fillcolor="0,0,0.766667"]; o41799760[label="int\n12"]; o41799760[fillcolor="0,0,0.766667"]; o139786226611384[label="str\n'\\x8f'"]; o139786226611384[fillcolor="0,0,0.766667"]; o41802592[label="int\n143"]; o41802592[fillcolor="0,0,0.766667"]; o139786226506448[label="str\n'\\x10'"]; o139786226506448[fillcolor="0,0,0.766667"]; o41799664[label="int\n16"]; o41799664[fillcolor="0,0,0.766667"]; o139786226611544[label="str\n'\\x93'"]; o139786226611544[fillcolor="0,0,0.766667"]; o41802496[label="int\n147"]; o41802496[fillcolor="0,0,0.766667"]; o139786226506608[label="str\n'\\x14'"]; o139786226506608[fillcolor="0,0,0.766667"]; o41799568[label="int\n20"]; o41799568[fillcolor="0,0,0.766667"]; o139786226611704[label="str\n'\\x97'"]; o139786226611704[fillcolor="0,0,0.766667"]; o41802400[label="int\n151"]; o41802400[fillcolor="0,0,0.766667"]; o139786226506768[label="str\n'\\x18'"]; o139786226506768[fillcolor="0,0,0.766667"]; o41799472[label="int\n24"]; o41799472[fillcolor="0,0,0.766667"]; o139786226611864[label="str\n'\\x9b'"]; o139786226611864[fillcolor="0,0,0.766667"]; o41802304[label="int\n155"]; o41802304[fillcolor="0,0,0.766667"]; o139786226506928[label="str\n'\\x1c'"]; o139786226506928[fillcolor="0,0,0.766667"]; o41799376[label="int\n28"]; o41799376[fillcolor="0,0,0.766667"]; o139786226612024[label="str\n'\\x9f'"]; o139786226612024[fillcolor="0,0,0.766667"]; o41804200[label="int\n159"]; o41804200[fillcolor="0,0,0.766667"]; o139786226797704[label="str\n' '"]; o139786226797704[fillcolor="0,0,0.766667"]; o41799280[label="int\n32"]; o41799280[fillcolor="0,0,0.766667"]; o139786226612184[label="str\n'\\xa3'"]; o139786226612184[fillcolor="0,0,0.766667"]; o41804104[label="int\n163"]; o41804104[fillcolor="0,0,0.766667"]; o139786227378696[label="str\n'$'"]; o139786227378696[fillcolor="0,0,0.766667"]; o41801176[label="int\n36"]; o41801176[fillcolor="0,0,0.766667"]; o139786226612344[label="str\n'\\xa7'"]; o139786226612344[fillcolor="0,0,0.766667"]; o41804008[label="int\n167"]; o41804008[fillcolor="0,0,0.766667"]; o139786226478776[label="str\n'('"]; o139786226478776[fillcolor="0,0,0.766667"]; o41801080[label="int\n40"]; o41801080[fillcolor="0,0,0.766667"]; o139786226612504[label="str\n'\\xab'"]; o139786226612504[fillcolor="0,0,0.766667"]; o41803912[label="int\n171"]; o41803912[fillcolor="0,0,0.766667"]; o139786226475776[label="str\n','"]; o139786226475776[fillcolor="0,0,0.766667"]; o41800984[label="int\n44"]; o41800984[fillcolor="0,0,0.766667"]; o139786226612664[label="str\n'\\xaf'"]; o139786226612664[fillcolor="0,0,0.766667"]; o41803816[label="int\n175"]; o41803816[fillcolor="0,0,0.766667"]; o139786226507288[label="str\n'0'"]; o139786226507288[fillcolor="0,0,0.766667"]; o41800888[label="int\n48"]; o41800888[fillcolor="0,0,0.766667"]; o139786226612824[label="str\n'\\xb3'"]; o139786226612824[fillcolor="0,0,0.766667"]; o41803720[label="int\n179"]; o41803720[fillcolor="0,0,0.766667"]; o139786226507368[label="str\n'4'"]; o139786226507368[fillcolor="0,0,0.766667"]; o41800792[label="int\n52"]; o41800792[fillcolor="0,0,0.766667"]; o139786226612984[label="str\n'\\xb7'"]; o139786226612984[fillcolor="0,0,0.766667"]; o41803624[label="int\n183"]; o41803624[fillcolor="0,0,0.766667"]; o139786226798424[label="str\n'8'"]; o139786226798424[fillcolor="0,0,0.766667"]; o41800696[label="int\n56"]; o41800696[fillcolor="0,0,0.766667"]; o139786226613144[label="str\n'\\xbb'"]; o139786226613144[fillcolor="0,0,0.766667"]; o41803528[label="int\n187"]; o41803528[fillcolor="0,0,0.766667"]; o139786227380176[label="str\n'<'"]; o139786227380176[fillcolor="0,0,0.766667"]; o41800600[label="int\n60"]; o41800600[fillcolor="0,0,0.766667"]; o139786226613304[label="str\n'\\xbf'"]; o139786226613304[fillcolor="0,0,0.766667"]; o41803432[label="int\n191"]; o41803432[fillcolor="0,0,0.766667"]; o139786226507528[label="str\n'@'"]; o139786226507528[fillcolor="0,0,0.766667"]; o41800504[label="int\n64"]; o41800504[fillcolor="0,0,0.766667"]; o139786226613464[label="str\n'\\xc3'"]; o139786226613464[fillcolor="0,0,0.766667"]; o41803336[label="int\n195"]; o41803336[fillcolor="0,0,0.766667"]; o139786226507608[label="str\n'D'"]; o139786226507608[fillcolor="0,0,0.766667"]; o41800408[label="int\n68"]; o41800408[fillcolor="0,0,0.766667"]; o139786226613624[label="str\n'\\xc7'"]; o139786226613624[fillcolor="0,0,0.766667"]; o41803240[label="int\n199"]; o41803240[fillcolor="0,0,0.766667"]; o139786226507688[label="str\n'H'"]; o139786226507688[fillcolor="0,0,0.766667"]; o41800312[label="int\n72"]; o41800312[fillcolor="0,0,0.766667"]; o139786226613784[label="str\n'\\xcb'"]; o139786226613784[fillcolor="0,0,0.766667"]; o41805136[label="int\n203"]; o41805136[fillcolor="0,0,0.766667"]; o139786227480376[label="str\n'L'"]; o139786227480376[fillcolor="0,0,0.766667"]; o41800216[label="int\n76"]; o41800216[fillcolor="0,0,0.766667"]; o139786226613944[label="str\n'\\xcf'"]; o139786226613944[fillcolor="0,0,0.766667"]; o41805040[label="int\n207"]; o41805040[fillcolor="0,0,0.766667"]; o139786226610264[label="str\n'P'"]; o139786226610264[fillcolor="0,0,0.766667"]; o41802112[label="int\n80"]; o41802112[fillcolor="0,0,0.766667"]; o139786226614104[label="str\n'\\xd3'"]; o139786226614104[fillcolor="0,0,0.766667"]; o41804944[label="int\n211"]; o41804944[fillcolor="0,0,0.766667"]; o139786227007616[label="str\n'T'"]; o139786227007616[fillcolor="0,0,0.766667"]; o41802016[label="int\n84"]; o41802016[fillcolor="0,0,0.766667"]; o139786226614320[label="str\n'\\xd7'"]; o139786226614320[fillcolor="0,0,0.766667"]; o41804848[label="int\n215"]; o41804848[fillcolor="0,0,0.766667"]; o139786227007736[label="str\n'X'"]; o139786227007736[fillcolor="0,0,0.766667"]; o41801920[label="int\n88"]; o41801920[fillcolor="0,0,0.766667"]; o139786226614480[label="str\n'\\xdb'"]; o139786226614480[fillcolor="0,0,0.766667"]; o41804752[label="int\n219"]; o41804752[fillcolor="0,0,0.766667"]; o139786226610504[label="str\n'\\\\'"]; o139786226610504[fillcolor="0,0,0.766667"]; o41801824[label="int\n92"]; o41801824[fillcolor="0,0,0.766667"]; o139786226614640[label="str\n'\\xdf'"]; o139786226614640[fillcolor="0,0,0.766667"]; o41804656[label="int\n223"]; o41804656[fillcolor="0,0,0.766667"]; o139786226610584[label="str\n'`'"]; o139786226610584[fillcolor="0,0,0.766667"]; o41801728[label="int\n96"]; o41801728[fillcolor="0,0,0.766667"]; o139786226614800[label="str\n'\\xe3'"]; o139786226614800[fillcolor="0,0,0.766667"]; o41804560[label="int\n227"]; o41804560[fillcolor="0,0,0.766667"]; o139786227480456[label="str\n'd'"]; o139786227480456[fillcolor="0,0,0.766667"]; o41801632[label="int\n100"]; o41801632[fillcolor="0,0,0.766667"]; o139786226614960[label="str\n'\\xe7'"]; o139786226614960[fillcolor="0,0,0.766667"]; o41804464[label="int\n231"]; o41804464[fillcolor="0,0,0.766667"]; o139786227009016[label="str\n'h'"]; o139786227009016[fillcolor="0,0,0.766667"]; o41801536[label="int\n104"]; o41801536[fillcolor="0,0,0.766667"]; o139786226615120[label="str\n'\\xeb'"]; o139786226615120[fillcolor="0,0,0.766667"]; o41804368[label="int\n235"]; o41804368[fillcolor="0,0,0.766667"]; o139786227007856[label="str\n'l'"]; o139786227007856[fillcolor="0,0,0.766667"]; o41801440[label="int\n108"]; o41801440[fillcolor="0,0,0.766667"]; o139786226615280[label="str\n'\\xef'"]; o139786226615280[fillcolor="0,0,0.766667"]; o41804272[label="int\n239"]; o41804272[fillcolor="0,0,0.766667"]; o139786227480816[label="str\n'p'"]; o139786227480816[fillcolor="0,0,0.766667"]; o41801344[label="int\n112"]; o41801344[fillcolor="0,0,0.766667"]; o139786226615440[label="str\n'\\xf3'"]; o139786226615440[fillcolor="0,0,0.766667"]; o41806168[label="int\n243"]; o41806168[fillcolor="0,0,0.766667"]; o139786227376896[label="str\n't'"]; o139786227376896[fillcolor="0,0,0.766667"]; o41801248[label="int\n116"]; o41801248[fillcolor="0,0,0.766667"]; o139786226615600[label="str\n'\\xf7'"]; o139786226615600[fillcolor="0,0,0.766667"]; o41806072[label="int\n247"]; o41806072[fillcolor="0,0,0.766667"]; o139786227482256[label="str\n'x'"]; o139786227482256[fillcolor="0,0,0.766667"]; o41803144[label="int\n120"]; o41803144[fillcolor="0,0,0.766667"]; o139786226615760[label="str\n'\\xfb'"]; o139786226615760[fillcolor="0,0,0.766667"]; o41805976[label="int\n251"]; o41805976[fillcolor="0,0,0.766667"]; o139786226610704[label="str\n'|'"]; o139786226610704[fillcolor="0,0,0.766667"]; o41803048[label="int\n124"]; o41803048[fillcolor="0,0,0.766667"]; o139786226615920[label="str\n'\\xff'"]; o139786226615920[fillcolor="0,0,0.766667"]; o41805880[label="int\n255"]; o41805880[fillcolor="0,0,0.766667"]; o139786226610784[label="str\n'\\x80'"]; o139786226610784[fillcolor="0,0,0.766667"]; o41802952[label="int\n128"]; o41802952[fillcolor="0,0,0.766667"]; o139786226505928[label="str\n'\\x03'"]; o139786226505928[fillcolor="0,0,0.766667"]; o41799976[label="int\n3"]; o41799976[fillcolor="0,0,0.766667"]; o139786226610944[label="str\n'\\x84'"]; o139786226610944[fillcolor="0,0,0.766667"]; o41802856[label="int\n132"]; o41802856[fillcolor="0,0,0.766667"]; o139786226506088[label="str\n'\\x07'"]; o139786226506088[fillcolor="0,0,0.766667"]; o41799880[label="int\n7"]; o41799880[fillcolor="0,0,0.766667"]; o139786226611104[label="str\n'\\x88'"]; o139786226611104[fillcolor="0,0,0.766667"]; o41802760[label="int\n136"]; o41802760[fillcolor="0,0,0.766667"]; o139786226506248[label="str\n'\\x0b'"]; o139786226506248[fillcolor="0,0,0.766667"]; o41799784[label="int\n11"]; o41799784[fillcolor="0,0,0.766667"]; o139786226611264[label="str\n'\\x8c'"]; o139786226611264[fillcolor="0,0,0.766667"]; o41802664[label="int\n140"]; o41802664[fillcolor="0,0,0.766667"]; o139786226506408[label="str\n'\\x0f'"]; o139786226506408[fillcolor="0,0,0.766667"]; o41799688[label="int\n15"]; o41799688[fillcolor="0,0,0.766667"]; o139786226611424[label="str\n'\\x90'"]; o139786226611424[fillcolor="0,0,0.766667"]; o41802568[label="int\n144"]; o41802568[fillcolor="0,0,0.766667"]; o139786226506568[label="str\n'\\x13'"]; o139786226506568[fillcolor="0,0,0.766667"]; o41799592[label="int\n19"]; o41799592[fillcolor="0,0,0.766667"]; o139786226611584[label="str\n'\\x94'"]; o139786226611584[fillcolor="0,0,0.766667"]; o41802472[label="int\n148"]; o41802472[fillcolor="0,0,0.766667"]; o139786226506728[label="str\n'\\x17'"]; o139786226506728[fillcolor="0,0,0.766667"]; o41799496[label="int\n23"]; o41799496[fillcolor="0,0,0.766667"]; o139786226611744[label="str\n'\\x98'"]; o139786226611744[fillcolor="0,0,0.766667"]; o41802376[label="int\n152"]; o41802376[fillcolor="0,0,0.766667"]; o139786226506888[label="str\n'\\x1b'"]; o139786226506888[fillcolor="0,0,0.766667"]; o41799400[label="int\n27"]; o41799400[fillcolor="0,0,0.766667"]; o139786226611904[label="str\n'\\x9c'"]; o139786226611904[fillcolor="0,0,0.766667"]; o41802280[label="int\n156"]; o41802280[fillcolor="0,0,0.766667"]; o139786226507048[label="str\n'\\x1f'"]; o139786226507048[fillcolor="0,0,0.766667"]; o41799304[label="int\n31"]; o41799304[fillcolor="0,0,0.766667"]; o139786226612064[label="str\n'\\xa0'"]; o139786226612064[fillcolor="0,0,0.766667"]; o41804176[label="int\n160"]; o41804176[fillcolor="0,0,0.766667"]; o139786227480536[label="str\n'#'"]; o139786227480536[fillcolor="0,0,0.766667"]; o41799208[label="int\n35"]; o41799208[fillcolor="0,0,0.766667"]; o139786226612224[label="str\n'\\xa4'"]; o139786226612224[fillcolor="0,0,0.766667"]; o41804080[label="int\n164"]; o41804080[fillcolor="0,0,0.766667"]; o139786226507248[label="str\n\"'\""]; o139786226507248[fillcolor="0,0,0.766667"]; o41801104[label="int\n39"]; o41801104[fillcolor="0,0,0.766667"]; o139786226612384[label="str\n'\\xa8'"]; o139786226612384[fillcolor="0,0,0.766667"]; o41803984[label="int\n168"]; o41803984[fillcolor="0,0,0.766667"]; o139786226475856[label="str\n'+'"]; o139786226475856[fillcolor="0,0,0.766667"]; o41801008[label="int\n43"]; o41801008[fillcolor="0,0,0.766667"]; o139786226612544[label="str\n'\\xac'"]; o139786226612544[fillcolor="0,0,0.766667"]; o41803888[label="int\n172"]; o41803888[fillcolor="0,0,0.766667"]; o139786227480696[label="str\n'/'"]; o139786227480696[fillcolor="0,0,0.766667"]; o41800912[label="int\n47"]; o41800912[fillcolor="0,0,0.766667"]; o139786226612704[label="str\n'\\xb0'"]; o139786226612704[fillcolor="0,0,0.766667"]; o41803792[label="int\n176"]; o41803792[fillcolor="0,0,0.766667"]; o139786226507328[label="str\n'3'"]; o139786226507328[fillcolor="0,0,0.766667"]; o41800816[label="int\n51"]; o41800816[fillcolor="0,0,0.766667"]; o139786226612864[label="str\n'\\xb4'"]; o139786226612864[fillcolor="0,0,0.766667"]; o41803696[label="int\n180"]; o41803696[fillcolor="0,0,0.766667"]; o139786227377736[label="str\n'7'"]; o139786227377736[fillcolor="0,0,0.766667"]; o41800720[label="int\n55"]; o41800720[fillcolor="0,0,0.766667"]; o139786226613024[label="str\n'\\xb8'"]; o139786226613024[fillcolor="0,0,0.766667"]; o41803600[label="int\n184"]; o41803600[fillcolor="0,0,0.766667"]; o139786227481016[label="str\n';'"]; o139786227481016[fillcolor="0,0,0.766667"]; o41800624[label="int\n59"]; o41800624[fillcolor="0,0,0.766667"]; o139786226613184[label="str\n'\\xbc'"]; o139786226613184[fillcolor="0,0,0.766667"]; o41803504[label="int\n188"]; o41803504[fillcolor="0,0,0.766667"]; o139786226476096[label="str\n'?'"]; o139786226476096[fillcolor="0,0,0.766667"]; o41800528[label="int\n63"]; o41800528[fillcolor="0,0,0.766667"]; o139786226613344[label="str\n'\\xc0'"]; o139786226613344[fillcolor="0,0,0.766667"]; o41803408[label="int\n192"]; o41803408[fillcolor="0,0,0.766667"]; o139786227008496[label="str\n'C'"]; o139786227008496[fillcolor="0,0,0.766667"]; o41800432[label="int\n67"]; o41800432[fillcolor="0,0,0.766667"]; o139786226613504[label="str\n'\\xc4'"]; o139786226613504[fillcolor="0,0,0.766667"]; o41803312[label="int\n196"]; o41803312[fillcolor="0,0,0.766667"]; o139786226507648[label="str\n'G'"]; o139786226507648[fillcolor="0,0,0.766667"]; o41800336[label="int\n71"]; o41800336[fillcolor="0,0,0.766667"]; o139786226613664[label="str\n'\\xc8'"]; o139786226613664[fillcolor="0,0,0.766667"]; o41805208[label="int\n200"]; o41805208[fillcolor="0,0,0.766667"]; o139786226610224[label="str\n'K'"]; o139786226610224[fillcolor="0,0,0.766667"]; o41800240[label="int\n75"]; o41800240[fillcolor="0,0,0.766667"]; o139786226613824[label="str\n'\\xcc'"]; o139786226613824[fillcolor="0,0,0.766667"]; o41805112[label="int\n204"]; o41805112[fillcolor="0,0,0.766667"]; o139786227379896[label="str\n'O'"]; o139786227379896[fillcolor="0,0,0.766667"]; o41802136[label="int\n79"]; o41802136[fillcolor="0,0,0.766667"]; o139786226613984[label="str\n'\\xd0'"]; o139786226613984[fillcolor="0,0,0.766667"]; o41805016[label="int\n208"]; o41805016[fillcolor="0,0,0.766667"]; o139786227379856[label="str\n'S'"]; o139786227379856[fillcolor="0,0,0.766667"]; o41802040[label="int\n83"]; o41802040[fillcolor="0,0,0.766667"]; o139786226614144[label="str\n'\\xd4'"]; o139786226614144[fillcolor="0,0,0.766667"]; o41804920[label="int\n212"]; o41804920[fillcolor="0,0,0.766667"]; o139786227007656[label="str\n'W'"]; o139786227007656[fillcolor="0,0,0.766667"]; o41801944[label="int\n87"]; o41801944[fillcolor="0,0,0.766667"]; o139786226614360[label="str\n'\\xd8'"]; o139786226614360[fillcolor="0,0,0.766667"]; o41804824[label="int\n216"]; o41804824[fillcolor="0,0,0.766667"]; o139786226610464[label="str\n'['"]; o139786226610464[fillcolor="0,0,0.766667"]; o41801848[label="int\n91"]; o41801848[fillcolor="0,0,0.766667"]; o139786226614520[label="str\n'\\xdc'"]; o139786226614520[fillcolor="0,0,0.766667"]; o41804728[label="int\n220"]; o41804728[fillcolor="0,0,0.766667"]; o139786227481776[label="str\n'_'"]; o139786227481776[fillcolor="0,0,0.766667"]; o41801752[label="int\n95"]; o41801752[fillcolor="0,0,0.766667"]; o139786226614680[label="str\n'\\xe0'"]; o139786226614680[fillcolor="0,0,0.766667"]; o41804632[label="int\n224"]; o41804632[fillcolor="0,0,0.766667"]; o139786227379656[label="str\n'c'"]; o139786227379656[fillcolor="0,0,0.766667"]; o41801656[label="int\n99"]; o41801656[fillcolor="0,0,0.766667"]; o139786226614840[label="str\n'\\xe4'"]; o139786226614840[fillcolor="0,0,0.766667"]; o41804536[label="int\n228"]; o41804536[fillcolor="0,0,0.766667"]; o139786227007776[label="str\n'g'"]; o139786227007776[fillcolor="0,0,0.766667"]; o41801560[label="int\n103"]; o41801560[fillcolor="0,0,0.766667"]; o139786226615000[label="str\n'\\xe8'"]; o139786226615000[fillcolor="0,0,0.766667"]; o41804440[label="int\n232"]; o41804440[fillcolor="0,0,0.766667"]; o139786227482576[label="str\n'k'"]; o139786227482576[fillcolor="0,0,0.766667"]; o41801464[label="int\n107"]; o41801464[fillcolor="0,0,0.766667"]; o139786226615160[label="str\n'\\xec'"]; o139786226615160[fillcolor="0,0,0.766667"]; o41804344[label="int\n236"]; o41804344[fillcolor="0,0,0.766667"]; o139786227007696[label="str\n'o'"]; o139786227007696[fillcolor="0,0,0.766667"]; o41801368[label="int\n111"]; o41801368[fillcolor="0,0,0.766667"]; o139786226615320[label="str\n'\\xf0'"]; o139786226615320[fillcolor="0,0,0.766667"]; o41804248[label="int\n240"]; o41804248[fillcolor="0,0,0.766667"]; o139786227480416[label="str\n's'"]; o139786227480416[fillcolor="0,0,0.766667"]; o41801272[label="int\n115"]; o41801272[fillcolor="0,0,0.766667"]; o139786226615480[label="str\n'\\xf4'"]; o139786226615480[fillcolor="0,0,0.766667"]; o41806144[label="int\n244"]; o41806144[fillcolor="0,0,0.766667"]; o139786227479776[label="str\n'w'"]; o139786227479776[fillcolor="0,0,0.766667"]; o41803168[label="int\n119"]; o41803168[fillcolor="0,0,0.766667"]; o139786226615640[label="str\n'\\xf8'"]; o139786226615640[fillcolor="0,0,0.766667"]; o41806048[label="int\n248"]; o41806048[fillcolor="0,0,0.766667"]; o139786227378736[label="str\n'{'"]; o139786227378736[fillcolor="0,0,0.766667"]; o41803072[label="int\n123"]; o41803072[fillcolor="0,0,0.766667"]; o139786226615800[label="str\n'\\xfc'"]; o139786226615800[fillcolor="0,0,0.766667"]; o41805952[label="int\n252"]; o41805952[fillcolor="0,0,0.766667"]; o139786226610744[label="str\n'\\x7f'"]; o139786226610744[fillcolor="0,0,0.766667"]; o41802976[label="int\n127"]; o41802976[fillcolor="0,0,0.766667"]; o139786226610824[label="str\n'\\x81'"]; o139786226610824[fillcolor="0,0,0.766667"]; o41802928[label="int\n129"]; o41802928[fillcolor="0,0,0.766667"]; o139786226505888[label="str\n'\\x02'"]; o139786226505888[fillcolor="0,0,0.766667"]; o41800000[label="int\n2"]; o41800000[fillcolor="0,0,0.766667"]; o139786226610984[label="str\n'\\x85'"]; o139786226610984[fillcolor="0,0,0.766667"]; o41802832[label="int\n133"]; o41802832[fillcolor="0,0,0.766667"]; o139786226506048[label="str\n'\\x06'"]; o139786226506048[fillcolor="0,0,0.766667"]; o41799904[label="int\n6"]; o41799904[fillcolor="0,0,0.766667"]; o139786226611144[label="str\n'\\x89'"]; o139786226611144[fillcolor="0,0,0.766667"]; o41802736[label="int\n137"]; o41802736[fillcolor="0,0,0.766667"]; o139786226506208[label="str\n'\\n'"]; o139786226506208[fillcolor="0,0,0.766667"]; o41799808[label="int\n10"]; o41799808[fillcolor="0,0,0.766667"]; o139786226611304[label="str\n'\\x8d'"]; o139786226611304[fillcolor="0,0,0.766667"]; o41802640[label="int\n141"]; o41802640[fillcolor="0,0,0.766667"]; o139786226506368[label="str\n'\\x0e'"]; o139786226506368[fillcolor="0,0,0.766667"]; o41799712[label="int\n14"]; o41799712[fillcolor="0,0,0.766667"]; o139786226611464[label="str\n'\\x91'"]; o139786226611464[fillcolor="0,0,0.766667"]; o41802544[label="int\n145"]; o41802544[fillcolor="0,0,0.766667"]; o139786226506528[label="str\n'\\x12'"]; o139786226506528[fillcolor="0,0,0.766667"]; o41799616[label="int\n18"]; o41799616[fillcolor="0,0,0.766667"]; o139786226611624[label="str\n'\\x95'"]; o139786226611624[fillcolor="0,0,0.766667"]; o41802448[label="int\n149"]; o41802448[fillcolor="0,0,0.766667"]; o139786226506688[label="str\n'\\x16'"]; o139786226506688[fillcolor="0,0,0.766667"]; o41799520[label="int\n22"]; o41799520[fillcolor="0,0,0.766667"]; o139786226611784[label="str\n'\\x99'"]; o139786226611784[fillcolor="0,0,0.766667"]; o41802352[label="int\n153"]; o41802352[fillcolor="0,0,0.766667"]; o139786226506848[label="str\n'\\x1a'"]; o139786226506848[fillcolor="0,0,0.766667"]; o41799424[label="int\n26"]; o41799424[fillcolor="0,0,0.766667"]; o139786226611944[label="str\n'\\x9d'"]; o139786226611944[fillcolor="0,0,0.766667"]; o41802256[label="int\n157"]; o41802256[fillcolor="0,0,0.766667"]; o139786226507008[label="str\n'\\x1e'"]; o139786226507008[fillcolor="0,0,0.766667"]; o41799328[label="int\n30"]; o41799328[fillcolor="0,0,0.766667"]; o139786226612104[label="str\n'\\xa1'"]; o139786226612104[fillcolor="0,0,0.766667"]; o41804152[label="int\n161"]; o41804152[fillcolor="0,0,0.766667"]; o139786226507128[label="str\n'\"'"]; o139786226507128[fillcolor="0,0,0.766667"]; o41799232[label="int\n34"]; o41799232[fillcolor="0,0,0.766667"]; o139786226612264[label="str\n'\\xa5'"]; o139786226612264[fillcolor="0,0,0.766667"]; o41804056[label="int\n165"]; o41804056[fillcolor="0,0,0.766667"]; o139786226507208[label="str\n'&'"]; o139786226507208[fillcolor="0,0,0.766667"]; o41801128[label="int\n38"]; o41801128[fillcolor="0,0,0.766667"]; o139786226612424[label="str\n'\\xa9'"]; o139786226612424[fillcolor="0,0,0.766667"]; o41803960[label="int\n169"]; o41803960[fillcolor="0,0,0.766667"]; o139786227011416[label="str\n'*'"]; o139786227011416[fillcolor="0,0,0.766667"]; o41801032[label="int\n42"]; o41801032[fillcolor="0,0,0.766667"]; o139786226612584[label="str\n'\\xad'"]; o139786226612584[fillcolor="0,0,0.766667"]; o41803864[label="int\n173"]; o41803864[fillcolor="0,0,0.766667"]; o139786227377976[label="str\n'.'"]; o139786227377976[fillcolor="0,0,0.766667"]; o41800936[label="int\n46"]; o41800936[fillcolor="0,0,0.766667"]; o139786226612744[label="str\n'\\xb1'"]; o139786226612744[fillcolor="0,0,0.766667"]; o41803768[label="int\n177"]; o41803768[fillcolor="0,0,0.766667"]; o139786227480736[label="str\n'2'"]; o139786227480736[fillcolor="0,0,0.766667"]; o41800840[label="int\n50"]; o41800840[fillcolor="0,0,0.766667"]; o139786226612904[label="str\n'\\xb5'"]; o139786226612904[fillcolor="0,0,0.766667"]; o41803672[label="int\n181"]; o41803672[fillcolor="0,0,0.766667"]; o139786226507448[label="str\n'6'"]; o139786226507448[fillcolor="0,0,0.766667"]; o41800744[label="int\n54"]; o41800744[fillcolor="0,0,0.766667"]; o139786226613064[label="str\n'\\xb9'"]; o139786226613064[fillcolor="0,0,0.766667"]; o41803576[label="int\n185"]; o41803576[fillcolor="0,0,0.766667"]; o139786227481056[label="str\n':'"]; o139786227481056[fillcolor="0,0,0.766667"]; o41800648[label="int\n58"]; o41800648[fillcolor="0,0,0.766667"]; o139786226613224[label="str\n'\\xbd'"]; o139786226613224[fillcolor="0,0,0.766667"]; o41803480[label="int\n189"]; o41803480[fillcolor="0,0,0.766667"]; o139786227007536[label="str\n'>'"]; o139786227007536[fillcolor="0,0,0.766667"]; o41800552[label="int\n62"]; o41800552[fillcolor="0,0,0.766667"]; o139786226613384[label="str\n'\\xc1'"]; o139786226613384[fillcolor="0,0,0.766667"]; o41803384[label="int\n193"]; o41803384[fillcolor="0,0,0.766667"]; o139786227008416[label="str\n'B'"]; o139786227008416[fillcolor="0,0,0.766667"]; o41800456[label="int\n66"]; o41800456[fillcolor="0,0,0.766667"]; o139786226613544[label="str\n'\\xc5'"]; o139786226613544[fillcolor="0,0,0.766667"]; o41803288[label="int\n197"]; o41803288[fillcolor="0,0,0.766667"]; o139786227380096[label="str\n'F'"]; o139786227380096[fillcolor="0,0,0.766667"]; o41800360[label="int\n70"]; o41800360[fillcolor="0,0,0.766667"]; o139786226613704[label="str\n'\\xc9'"]; o139786226613704[fillcolor="0,0,0.766667"]; o41805184[label="int\n201"]; o41805184[fillcolor="0,0,0.766667"]; o139786226507728[label="str\n'J'"]; o139786226507728[fillcolor="0,0,0.766667"]; o41800264[label="int\n74"]; o41800264[fillcolor="0,0,0.766667"]; o139786226613864[label="str\n'\\xcd'"]; o139786226613864[fillcolor="0,0,0.766667"]; o41805088[label="int\n205"]; o41805088[fillcolor="0,0,0.766667"]; o139786227379816[label="str\n'N'"]; o139786227379816[fillcolor="0,0,0.766667"]; o41802160[label="int\n78"]; o41802160[fillcolor="0,0,0.766667"]; o139786226614024[label="str\n'\\xd1'"]; o139786226614024[fillcolor="0,0,0.766667"]; o41804992[label="int\n209"]; o41804992[fillcolor="0,0,0.766667"]; o139786227379936[label="str\n'R'"]; o139786227379936[fillcolor="0,0,0.766667"]; o41802064[label="int\n82"]; o41802064[fillcolor="0,0,0.766667"]; o139786226614184[label="str\n'\\xd5'"]; o139786226614184[fillcolor="0,0,0.766667"]; o41804896[label="int\n213"]; o41804896[fillcolor="0,0,0.766667"]; o139786226610344[label="str\n'V'"]; o139786226610344[fillcolor="0,0,0.766667"]; o41801968[label="int\n86"]; o41801968[fillcolor="0,0,0.766667"]; o139786226614400[label="str\n'\\xd9'"]; o139786226614400[fillcolor="0,0,0.766667"]; o41804800[label="int\n217"]; o41804800[fillcolor="0,0,0.766667"]; o139786226610424[label="str\n'Z'"]; o139786226610424[fillcolor="0,0,0.766667"]; o41801872[label="int\n90"]; o41801872[fillcolor="0,0,0.766667"]; o139786226614560[label="str\n'\\xdd'"]; o139786226614560[fillcolor="0,0,0.766667"]; o41804704[label="int\n221"]; o41804704[fillcolor="0,0,0.766667"]; o139786226610544[label="str\n'^'"]; o139786226610544[fillcolor="0,0,0.766667"]; o41801776[label="int\n94"]; o41801776[fillcolor="0,0,0.766667"]; o139786226614720[label="str\n'\\xe1'"]; o139786226614720[fillcolor="0,0,0.766667"]; o41804608[label="int\n225"]; o41804608[fillcolor="0,0,0.766667"]; o139786227378176[label="str\n'b'"]; o139786227378176[fillcolor="0,0,0.766667"]; o41801680[label="int\n98"]; o41801680[fillcolor="0,0,0.766667"]; o139786226614880[label="str\n'\\xe5'"]; o139786226614880[fillcolor="0,0,0.766667"]; o41804512[label="int\n229"]; o41804512[fillcolor="0,0,0.766667"]; o139786227480336[label="str\n'f'"]; o139786227480336[fillcolor="0,0,0.766667"]; o41801584[label="int\n102"]; o41801584[fillcolor="0,0,0.766667"]; o139786226615040[label="str\n'\\xe9'"]; o139786226615040[fillcolor="0,0,0.766667"]; o41804416[label="int\n233"]; o41804416[fillcolor="0,0,0.766667"]; o139786227378856[label="str\n'j'"]; o139786227378856[fillcolor="0,0,0.766667"]; o41801488[label="int\n106"]; o41801488[fillcolor="0,0,0.766667"]; o139786226615200[label="str\n'\\xed'"]; o139786226615200[fillcolor="0,0,0.766667"]; o41804320[label="int\n237"]; o41804320[fillcolor="0,0,0.766667"]; o139786227481816[label="str\n'n'"]; o139786227481816[fillcolor="0,0,0.766667"]; o41801392[label="int\n110"]; o41801392[fillcolor="0,0,0.766667"]; o139786226615360[label="str\n'\\xf1'"]; o139786226615360[fillcolor="0,0,0.766667"]; o41806216[label="int\n241"]; o41806216[fillcolor="0,0,0.766667"]; o139786227479736[label="str\n'r'"]; o139786227479736[fillcolor="0,0,0.766667"]; o41801296[label="int\n114"]; o41801296[fillcolor="0,0,0.766667"]; o139786226615520[label="str\n'\\xf5'"]; o139786226615520[fillcolor="0,0,0.766667"]; o41806120[label="int\n245"]; o41806120[fillcolor="0,0,0.766667"]; o139786227376176[label="str\n'v'"]; o139786227376176[fillcolor="0,0,0.766667"]; o41803192[label="int\n118"]; o41803192[fillcolor="0,0,0.766667"]; o139786226615680[label="str\n'\\xf9'"]; o139786226615680[fillcolor="0,0,0.766667"]; o41806024[label="int\n249"]; o41806024[fillcolor="0,0,0.766667"]; o139786226610664[label="str\n'z'"]; o139786226610664[fillcolor="0,0,0.766667"]; o41803096[label="int\n122"]; o41803096[fillcolor="0,0,0.766667"]; o139786226615840[label="str\n'\\xfd'"]; o139786226615840[fillcolor="0,0,0.766667"]; o41805928[label="int\n253"]; o41805928[fillcolor="0,0,0.766667"]; o139786227480936[label="str\n'~'"]; o139786227480936[fillcolor="0,0,0.766667"]; o41803000[label="int\n126"]; o41803000[fillcolor="0,0,0.766667"]; o139786226505848[label="str\n'\\x01'"]; o139786226505848[fillcolor="0,0,0.766667"]; o41800024[label="int\n1"]; o41800024[fillcolor="0,0,0.766667"]; o139786226610864[label="str\n'\\x82'"]; o139786226610864[fillcolor="0,0,0.766667"]; o41802904[label="int\n130"]; o41802904[fillcolor="0,0,0.766667"]; o139786226506008[label="str\n'\\x05'"]; o139786226506008[fillcolor="0,0,0.766667"]; o41799928[label="int\n5"]; o41799928[fillcolor="0,0,0.766667"]; o139786226611024[label="str\n'\\x86'"]; o139786226611024[fillcolor="0,0,0.766667"]; o41802808[label="int\n134"]; o41802808[fillcolor="0,0,0.766667"]; o139786226506168[label="str\n'\\t'"]; o139786226506168[fillcolor="0,0,0.766667"]; o41799832[label="int\n9"]; o41799832[fillcolor="0,0,0.766667"]; o139786226611184[label="str\n'\\x8a'"]; o139786226611184[fillcolor="0,0,0.766667"]; o41802712[label="int\n138"]; o41802712[fillcolor="0,0,0.766667"]; o139786226506328[label="str\n'\\r'"]; o139786226506328[fillcolor="0,0,0.766667"]; o41799736[label="int\n13"]; o41799736[fillcolor="0,0,0.766667"]; o139786226611344[label="str\n'\\x8e'"]; o139786226611344[fillcolor="0,0,0.766667"]; o41802616[label="int\n142"]; o41802616[fillcolor="0,0,0.766667"]; o139786226506488[label="str\n'\\x11'"]; o139786226506488[fillcolor="0,0,0.766667"]; o41799640[label="int\n17"]; o41799640[fillcolor="0,0,0.766667"]; o139786226611504[label="str\n'\\x92'"]; o139786226611504[fillcolor="0,0,0.766667"]; o41802520[label="int\n146"]; o41802520[fillcolor="0,0,0.766667"]; o139786226506648[label="str\n'\\x15'"]; o139786226506648[fillcolor="0,0,0.766667"]; o41799544[label="int\n21"]; o41799544[fillcolor="0,0,0.766667"]; o139786226611664[label="str\n'\\x96'"]; o139786226611664[fillcolor="0,0,0.766667"]; o41802424[label="int\n150"]; o41802424[fillcolor="0,0,0.766667"]; o139786226506808[label="str\n'\\x19'"]; o139786226506808[fillcolor="0,0,0.766667"]; o41799448[label="int\n25"]; o41799448[fillcolor="0,0,0.766667"]; o139786226611824[label="str\n'\\x9a'"]; o139786226611824[fillcolor="0,0,0.766667"]; o41802328[label="int\n154"]; o41802328[fillcolor="0,0,0.766667"]; o139786226506968[label="str\n'\\x1d'"]; o139786226506968[fillcolor="0,0,0.766667"]; o41799352[label="int\n29"]; o41799352[fillcolor="0,0,0.766667"]; o139786226611984[label="str\n'\\x9e'"]; o139786226611984[fillcolor="0,0,0.766667"]; o41802232[label="int\n158"]; o41802232[fillcolor="0,0,0.766667"]; o139786226507088[label="str\n'!'"]; o139786226507088[fillcolor="0,0,0.766667"]; o41799256[label="int\n33"]; o41799256[fillcolor="0,0,0.766667"]; o139786226612144[label="str\n'\\xa2'"]; o139786226612144[fillcolor="0,0,0.766667"]; o41804128[label="int\n162"]; o41804128[fillcolor="0,0,0.766667"]; o139786226507168[label="str\n'%'"]; o139786226507168[fillcolor="0,0,0.766667"]; o41801152[label="int\n37"]; o41801152[fillcolor="0,0,0.766667"]; o139786226612304[label="str\n'\\xa6'"]; o139786226612304[fillcolor="0,0,0.766667"]; o41804032[label="int\n166"]; o41804032[fillcolor="0,0,0.766667"]; o139786226503888[label="str\n')'"]; o139786226503888[fillcolor="0,0,0.766667"]; o41801056[label="int\n41"]; o41801056[fillcolor="0,0,0.766667"]; o139786226612464[label="str\n'\\xaa'"]; o139786226612464[fillcolor="0,0,0.766667"]; o41803936[label="int\n170"]; o41803936[fillcolor="0,0,0.766667"]; o139786226475936[label="str\n'-'"]; o139786226475936[fillcolor="0,0,0.766667"]; o41800960[label="int\n45"]; o41800960[fillcolor="0,0,0.766667"]; o139786226612624[label="str\n'\\xae'"]; o139786226612624[fillcolor="0,0,0.766667"]; o41803840[label="int\n174"]; o41803840[fillcolor="0,0,0.766667"]; o139786227377416[label="str\n'1'"]; o139786227377416[fillcolor="0,0,0.766667"]; o41800864[label="int\n49"]; o41800864[fillcolor="0,0,0.766667"]; o139786226612784[label="str\n'\\xb2'"]; o139786226612784[fillcolor="0,0,0.766667"]; o41803744[label="int\n178"]; o41803744[fillcolor="0,0,0.766667"]; o139786226507408[label="str\n'5'"]; o139786226507408[fillcolor="0,0,0.766667"]; o41800768[label="int\n53"]; o41800768[fillcolor="0,0,0.766667"]; o139786226612944[label="str\n'\\xb6'"]; o139786226612944[fillcolor="0,0,0.766667"]; o41803648[label="int\n182"]; o41803648[fillcolor="0,0,0.766667"]; o139786226507488[label="str\n'9'"]; o139786226507488[fillcolor="0,0,0.766667"]; o41800672[label="int\n57"]; o41800672[fillcolor="0,0,0.766667"]; o139786226613104[label="str\n'\\xba'"]; o139786226613104[fillcolor="0,0,0.766667"]; o41803552[label="int\n186"]; o41803552[fillcolor="0,0,0.766667"]; o139786226504008[label="str\n'='"]; o139786226504008[fillcolor="0,0,0.766667"]; o41800576[label="int\n61"]; o41800576[fillcolor="0,0,0.766667"]; o139786226613264[label="str\n'\\xbe'"]; o139786226613264[fillcolor="0,0,0.766667"]; o41803456[label="int\n190"]; o41803456[fillcolor="0,0,0.766667"]; o139786226507568[label="str\n'A'"]; o139786226507568[fillcolor="0,0,0.766667"]; o41800480[label="int\n65"]; o41800480[fillcolor="0,0,0.766667"]; o139786226613424[label="str\n'\\xc2'"]; o139786226613424[fillcolor="0,0,0.766667"]; o41803360[label="int\n194"]; o41803360[fillcolor="0,0,0.766667"]; o139786227377936[label="str\n'E'"]; o139786227377936[fillcolor="0,0,0.766667"]; o41800384[label="int\n69"]; o41800384[fillcolor="0,0,0.766667"]; o139786226613584[label="str\n'\\xc6'"]; o139786226613584[fillcolor="0,0,0.766667"]; o41803264[label="int\n198"]; o41803264[fillcolor="0,0,0.766667"]; o139786227379696[label="str\n'I'"]; o139786227379696[fillcolor="0,0,0.766667"]; o41800288[label="int\n73"]; o41800288[fillcolor="0,0,0.766667"]; o139786226613744[label="str\n'\\xca'"]; o139786226613744[fillcolor="0,0,0.766667"]; o41805160[label="int\n202"]; o41805160[fillcolor="0,0,0.766667"]; o139786227377136[label="str\n'M'"]; o139786227377136[fillcolor="0,0,0.766667"]; o41802184[label="int\n77"]; o41802184[fillcolor="0,0,0.766667"]; o139786226613904[label="str\n'\\xce'"]; o139786226613904[fillcolor="0,0,0.766667"]; o41805064[label="int\n206"]; o41805064[fillcolor="0,0,0.766667"]; o139786226610304[label="str\n'Q'"]; o139786226610304[fillcolor="0,0,0.766667"]; o41802088[label="int\n81"]; o41802088[fillcolor="0,0,0.766667"]; o139786226614064[label="str\n'\\xd2'"]; o139786226614064[fillcolor="0,0,0.766667"]; o41804968[label="int\n210"]; o41804968[fillcolor="0,0,0.766667"]; o139786226796184[label="str\n'U'"]; o139786226796184[fillcolor="0,0,0.766667"]; o41801992[label="int\n85"]; o41801992[fillcolor="0,0,0.766667"]; o139786226614224[label="str\n'\\xd6'"]; o139786226614224[fillcolor="0,0,0.766667"]; o41804872[label="int\n214"]; o41804872[fillcolor="0,0,0.766667"]; o139786226610384[label="str\n'Y'"]; o139786226610384[fillcolor="0,0,0.766667"]; o41801896[label="int\n89"]; o41801896[fillcolor="0,0,0.766667"]; o139786226614440[label="str\n'\\xda'"]; o139786226614440[fillcolor="0,0,0.766667"]; o41804776[label="int\n218"]; o41804776[fillcolor="0,0,0.766667"]; o139786227481736[label="str\n']'"]; o139786227481736[fillcolor="0,0,0.766667"]; o41801800[label="int\n93"]; o41801800[fillcolor="0,0,0.766667"]; o139786226614600[label="str\n'\\xde'"]; o139786226614600[fillcolor="0,0,0.766667"]; o41804680[label="int\n222"]; o41804680[fillcolor="0,0,0.766667"]; o139786227378136[label="str\n'a'"]; o139786227378136[fillcolor="0,0,0.766667"]; o41801704[label="int\n97"]; o41801704[fillcolor="0,0,0.766667"]; o139786226614760[label="str\n'\\xe2'"]; o139786226614760[fillcolor="0,0,0.766667"]; o41804584[label="int\n226"]; o41804584[fillcolor="0,0,0.766667"]; o139786227482056[label="str\n'e'"]; o139786227482056[fillcolor="0,0,0.766667"]; o41801608[label="int\n101"]; o41801608[fillcolor="0,0,0.766667"]; o139786226614920[label="str\n'\\xe6'"]; o139786226614920[fillcolor="0,0,0.766667"]; o41804488[label="int\n230"]; o41804488[fillcolor="0,0,0.766667"]; o139786227481416[label="str\n'i'"]; o139786227481416[fillcolor="0,0,0.766667"]; o41801512[label="int\n105"]; o41801512[fillcolor="0,0,0.766667"]; o139786226615080[label="str\n'\\xea'"]; o139786226615080[fillcolor="0,0,0.766667"]; o41804392[label="int\n234"]; o41804392[fillcolor="0,0,0.766667"]; o139786227480296[label="str\n'm'"]; o139786227480296[fillcolor="0,0,0.766667"]; o41801416[label="int\n109"]; o41801416[fillcolor="0,0,0.766667"]; o139786226615240[label="str\n'\\xee'"]; o139786226615240[fillcolor="0,0,0.766667"]; o41804296[label="int\n238"]; o41804296[fillcolor="0,0,0.766667"]; o139786227481376[label="str\n'q'"]; o139786227481376[fillcolor="0,0,0.766667"]; o41801320[label="int\n113"]; o41801320[fillcolor="0,0,0.766667"]; o139786226615400[label="str\n'\\xf2'"]; o139786226615400[fillcolor="0,0,0.766667"]; o41806192[label="int\n242"]; o41806192[fillcolor="0,0,0.766667"]; o139786227007816[label="str\n'u'"]; o139786227007816[fillcolor="0,0,0.766667"]; o41801224[label="int\n117"]; o41801224[fillcolor="0,0,0.766667"]; o139786226615560[label="str\n'\\xf6'"]; o139786226615560[fillcolor="0,0,0.766667"]; o41806096[label="int\n246"]; o41806096[fillcolor="0,0,0.766667"]; o139786226610624[label="str\n'y'"]; o139786226610624[fillcolor="0,0,0.766667"]; o41803120[label="int\n121"]; o41803120[fillcolor="0,0,0.766667"]; o139786226615720[label="str\n'\\xfa'"]; o139786226615720[fillcolor="0,0,0.766667"]; o41806000[label="int\n250"]; o41806000[fillcolor="0,0,0.766667"]; o139786227378776[label="str\n'}'"]; o139786227378776[fillcolor="0,0,0.766667"]; o41803024[label="int\n125"]; o41803024[fillcolor="0,0,0.766667"]; o139786226615880[label="str\n'\\xfe'"]; o139786226615880[fillcolor="0,0,0.766667"]; o41805904[label="int\n254"]; o41805904[fillcolor="0,0,0.766667"]; } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/canary-chain.png0000664000175000017500000020110200000000000016335 0ustar00mgmg00000000000000PNG  IHDRQbKGD IDATxyXu B H K'*YYi|iϩjҙjZglA4S+IK\R7v83p@>}~Ͻ 0 L !Lp hhTyyK()::e xbM8e\4ƍ>e SUU%I B.oq !LpaCB&z&0T7QH*j#L4#CcZ||:D&qO_eƫ'4b&reEtS?hʀ3&2+s`F8;:GCn+M;epߕ{&|<=Q.3cvn'@,ܕ2eU|Fŧ$IzpjZrws[[3}C8$?oMt|ۋՔ+m]|=NÅ 3P~LFUDzK\wyr2Hq4m}M*)/Ѵ֣L]/ެA݇3SO\L.ʚTG7~gf?}B[ojߑJ ꂗjd2)Ч_ӔꪌnV}oE sV=$)/VL{bj$I[s6+/um1aņioڎs72jJtR Ð$ޣ}G*6<ζ]j)?N)ŦP'yԜR3 J}IRQiQo]+I[a%XjX o+ZRq`zMI}u2'FbVZyG%I%j#I hz*:4Fޞ>g,3|&W۪g uV%!?.H\}ŠsU3;ikswuT}oD]v.Ow/?ꏵ"t{Y&CdNnj>hm{)7Tq:+UɋX-zֿtRWmpIRLXIOz'Nճt$Y^ޒ$Oϴ'w^J&=>zpŻ zg?%ںVRя[ Taivخk3ӶrR;PK[U5f̘-vQE-ܹsu7*`+~'3Fsuv)hzY\! !LpaCB'qCǜ]J pv &ECdPnzBe+_FW'UV>~r>:Rp LzԹXQ*:9ů*e2] ..9((}3ÚߦL ٥"03PYzҠ׫]h{$U{ ӠkP+4wo*5up~۵}I _1mcrw2l˽Z9KU*߶Vꂗl,NPlx$w?xRVêTIu]5~iテ a, 8MM`$K\w8]$'NUVUھ7~@@yy\}֯ݾFMذV/<v؋Ccs2Y$6P+׶ion=T\^l[fF^ cvy{Q՞;N?VbߩXTh3F߿+0ۥwo2؋˜T$ItzUkkYn2lA]ϴ'wƒ"=tsn+h|i.q5QV~^)Lw$k|Y=Ⲣ_8F^iӦMsv i۶m7o<[?:quS>*,-ԡʤ>WAiuaO U[r~mݣ)3^ϖӯ)m{]Zv7U~)k*<(B.:Pީ#z)*(ɗ$/]t!͜9S>>>4zhegg'ԁG4}tyzz֚ʼnG4 hX d&_?YVBBBw. UwS֌{&83g/&80! !LpaCB&8\N:uF[IIIv7eYLa.b3uT͘1녇СCMPPoY\۷d::...m#L8رcrS'6A5cN췰f5 0$7t,K\]]5x`6qUN2rHyxxԹb覛nj⊀!L8 &773yyyiȐ!N aƏZm9rT` ;ve !LpaCB@vv @ѰMMVΝվ}{M4ɶ쩧Ν;03*++_(,,L&ֲ׫֭[7dyCMBgϜ9S/s= Y.shAZn 00H\]]5|pT-wqqQnԹsgk$www]s5PYY.R}wZdck4if͚夣d2ɓ';0 iF cZm6{:|$l6 [o0 ]uU[EiԨQ'Hh}QRR !IӱcjWZZZ.ӢElۭ[Nv4vbftYtZV5FRR$ɓ6Ţu5Fo@#TJBCC&&A^^$/v999aÆzEppzal67@oChK.jՍ7ި.LJJJRV$Imڴ$yzz>SIIw?0`FI&i͒|*** GaWnnO??k *Ijժ ӧO멧ҦMnA[[oӧOK͛Juݙd Hzz6nܨTgrطo֮]{d13! !LpaCB&ЪU+O{|?p@{vSOiرDu8uꔾ;C\7&&Fv]PPZm[vNgQRRru|||ԥK}2M4If͒$yzz*--MmڴQddJKKP׮]թS'/7߬SN7ߔnFȑ#zu![?~rrrkV'OVyyyc .`L8K/l֞={jj۶mJII$iѢE|[0L[i&;zꩧdZ?Q^^^О={ԫW/LӟS/׫ӧ+&&FǏUǽޫ͟?_0 3T_]'..N)))JII9cY?*//OR[n$zugm۶{=y?~zK_"LS.]ԣG:=Ӄ>p EV%iӦMڿ&M$=zwv/.> zh{նm[M8ѡ>fC]_>[{DDl2QcذaZh^xKsFE@q6YxxxH h(o TTT$ѣG5|p~+5j(?^֭$V&l2lԴ˯~y  =oQii?`Lja%Ikm'СC%IZҠAy橲Rݻw$UUU]jܸqo2hѶڒu+((H4zhj $ < |}}5m41B7|vءpq2aHOOƍR.ڵk~Q.YLpaCB&80! !Lp hLfY?}grA1.̀=w^}w..ЕW^R+44Tsvp,@3a24g;Y3! !LpaCB&80! !LpaCB&80! !LpaCB&80p8z̙g}٥Adgg駟رc5{Zz|I%#L\8`:11Q/R녆uMU. . /''Gr֭[gksE5UY&.0Ԑ!CdX] .p\_~Yƍɓ!d'I[oUݺuӀeIҬY}v9rD'O>~,Ν'_~2 C~.EDD(//O#Gza|۷+--M=|AF NcYd̙3ǘ9sb?~0 x IFFFaaZ &ٶmhi(((աC:'NڬVqאd<ƾ}%K޽{۽$uֆj5 0n=z! 7 f?a$=ZaIW_}ٳg+116[|riڵWVl_L&]r% $=j׮P}v?//O'O7YV=3gg-aݻ В%K$IN$ 8Pi&%%%03 2^l\m&I{|||=zD4{܀ < ߮맟~s=g{DqqrrrTRR"ZZ,FϞ=Z:u=ܣ+WO>z뭷tm5jmhZL43E[n_Z`~a[HHJJRYY^xZm߾]FϞ?쳊ӊ+Gb'hz<&0 gˉ̙;vӣ>+((H111rwwWEE.2޽[vjeggkƍ7o|mذA:u$GڵӾ}$IEEEWDD<(I?,j)""B:}$wVHHV7d13\y*..wܡ+%%E Ӈ~(www\RÇׂ (//O~ӧSYYY{$Ϛ1c<ӧK:3g?,IzgTPP( IDAT3g*77Wcbw'NP=ORSS٤@3Q33QQQǏ$YVjǝ\) Ilfd޼yɓ'mm...KԻwo::6.shFv)I1c%U{ӦMzG4{lgeN̈́d[oQ󕜜6m(--Mzݝ]&P˜k. 9paCB&80! !Lpop{jŊgXB۷o4eiLa.bs]wߖd2I,|}}UPP2''>|$JUUU]]]u 78RNsSQQ7QE@&Mcǎuӯꫯnª!L8ɸqTYYY2www?^fGp}*<J7ʾo89V``D90ZuQIII ҫd%%%)))I/G*33S$iĈ:pf*=#ѣT^^1c(++KC*//O '|Ç۽Owww[m۶UyyWVaPjjԶm[i…:|mڪU+YF7pMCUvt1}G:rmَF``Ǝh)33SoNKKjt-[vlVZZ|||TVV&,wwFsI@`Zk.u]K. P޽`{Ҙ1clN8QZt-Zm۶M˖-$:;ŋ?VDDnnMԂ _kȐ!JNNdѣ??/,04eyzzR? \3fPTTN%$$h֬YzW#Fj?_g;{ܹs+22RFTPN -^X .|$M:U^^^2L뮻ԪU+͟?_K,ߐ hF-FYYk0BNUTT(ۺ~~~V~vZ-]TUUUgϚ5kdSRRٯ_?uA=7bh޽Qnԭ[3m۶㒪o8߹sm?Zr$)77WEEEmoO0 :uJ _޶nqq/_k:z׿vǏ׉'re"L\maL~~~,?^#FP׮]5|u?ׯ'///ֺ|T}_bhƍH9rD/B⌶2i=}K~ PqqIӧkg Is . \.x7o֋/]v)22Rwzy۷o~Xǎӗ_~y HY?PPPP@кuZEEEr[h̗ߡy!L u1={\\\4x`_d7Na(;;r{ߕ~~M֭չsg=zTnnnkjm>}޾,jf j׼bΝz׍˜@QIrssT}_yr,ŢTmذA4zh:uJR =[^^^Qhh(w+VP׮]թS'M2E7obرcJKKS@@vޭPEEEi֬Y]fٶْ\\\dZu]1rlk9nZJ:uR߾}i&J飜[N999رݻW $q Z6iӦ9Z?O]ց4o^*//W\\:v(2C)%%E;wT4ݫ믿^;w:v쨲2eff\Seev-I*))QllڷooVGUttڴi#]~gvv{(22R***ҼyTVV&0e+!!AUZZ*??? 4HԾ}L&իt"~<>}}Ku?N:9''GussΝ;qFy{{+%%EWYYΝ+ŢٳGׯzR+;;[:uP4ZcƌQrrrCwdL&:;83gjΜ9JOOo讳gCB&80! `54//z+BlzZckSh?0pހ ꫯVrr4H߿Sڵ]hhieڳg-Z 56צԒ~!!!ر hc^߅z[N. Lp {u),,L.. wPUU5k($$D&= ֹ疠1Ƶ,.R]{Zf֮]۬Ǽ ժUVnPPP+Y,UUU51D_|yxx8&;KA oL&n&}7*))qv9Ynn?aÆ9Zgd2]vԩ:uW^yEcƌQLLh"ٳGRCU^^O>DѣT^^1c(++K޽{m۶*//WttjժU2 VG``Ǝh)33S$*((Hm۶UYY.\ÇKf㣲2fqqqQǎ JNNVRR/*==]:z233m5˹ƺ&IRYYz)l[q)aaa1b8 ٬J]g-ɺK4:׮];O?%Uߠ&*WWWȑ#ZlJKKջwo36vի.I:u];vnիus̛ 3&I>>>ӧZj}jʕRhhL6mHNk[nEl2IRaaEv""" 믿֐!C\޽{kܹzQF=z~G}zeL"OOOL&u]jժϟ%KhccZk.uեKwZ`{=EEENW=rnqW߾}5l0͟?_YYYZ`$222λ~og!I'NTdd.]Ei۶mrss;k-]t$8pݻwիgK.}ݧyxxhԩŋpB}JJJԩSĉ˵f͚Zmw}.'uԘZڶmN:-YDER9GJs՚5klz[V($$}O:ts=gnƍX,ڻwou?sSNTuMݺu;X(>>^_m8~N8qUVVf0 竰P!!!|)**ʮCBB;.m۶5>Oz%i=zt?R,m&???y{{_~Zv.]z{6$)::Z嶿_mۻjȑU\\_޶nqq/_k췦޽{.jʕ+zM0@ Rs[jĈ $_^ׯzΧIRNZ,mܸ7 CŶِH9rD/B4i$qi//-maL~~~_w)rnq׾}$mٲEޒ;w6~YHRVVƏ#Fk׮?-Og] e9R᪬3.0&&};))I5Af˜h $Sֱc_>>>f<<<T...GZ6f{\cje˖iΜ9;v !Ch/t?g7o֋/]v)22Rwzy>VݵIDuusS_>Snl Z֚ONǍ'0-'c<IVMN֭չsgj8zt5j S>}l&$$jg\5M12Lj۶fΜE_V\)Z4VgԱckrqqgaaonժ$);;wT3kP595\]wOMfF\3.M˜h\\\l'Ӛ5k$Upxyy)&&FO=TPPB(<<\ZbvN:iʔ)ڼyw}Wl϶}^ӯnݪcǎ)--Mڽ{BCCYfi߾}رݻW $tOy/Qd2>ѭYn6[y\c6kJNNÇӧOD'Nbk?iʟ$jÆ *..?ѣGԩSg={GUZZj{Ν;aSN۷6md;qӧrrrn:Iґ#GԦM 4H7nTBB-tAv:q^^5g2O6mӟ&#m߾}B͛7+ @WQQ͛rwww(55U;vT}{nm޼YJHHP||5|@{Qxx^zTVaaN:u{(vK*((Pվ}{yzz\qqq СCbpssӞ={Yƥs_M65U]tQ.]ԭ[7S}U>}TPPCi˖-OiiiߛYHСCչsgyyycǎ*++SffY/;*//W=O?zR^^ԭ[7o^ :q>!ŢoVJIIQDDUVVsWڿ"""ԱcGo^={@cM!&h<<BjҥӧVZrl6[n={v ag9057}_̎?"T !LpaC 8:}!LmٲeyfEDD4J߄ pAg dҜ9sRp&80! !LpaCB&80! !LpaCB&80! !LpaCBpQ͙3G>KA3F@-z5vX͞=oq]uU+*&PKbb^z:дiӴpBmVEEEM\! WgӳW^yEruuU``>& 3?,2L03pھ}~u]z饗TPP ???k̙ڳgl٢@͘1C_~y}-^X/Vii9ɓ'K^|E6a!L\ƌ#G/dݻUVV&___M2E>$Iiii0`v-32d 7|Saaaz7p q*//O'O7YV=3W_}ٳg+11Q&I&I˗/W^^֮]т&.P|||=zD;?$%X bP")uk~XoP(@$! @,d25dN;|ޟ|>ޠ %''W^swٸ&Q>RRR4|pڵKC ٳUVVlJq"L\f̘nݺiڵoekW^_:ǧ?vSq65c=0=CzꩧԩS'=Zݺu[o| 6Liiiڹs.\(I:{$ўl$Y, H kd5uT*66V~|||n:=Zh/_OSPPHy￯kŊl}G>|z! v"  -X@ .pF"a єONKKs:~guIm={̙3<^zgmڴu^ggg7WI@ &Nxc5ufp a =z`04xb?܌UCpɓ'ӳ}A}QTTT3W80&'NfwLCpN:8+fC=䆪&h]7nM:tpSUsn4~zO4+0Faaa; %$$*9 74i%I^^^1bZj檀lFp IDAT#Lرc36ͩW`>w8pY~>2vn릛nҿ/w8F?^>>>3vjeZ]\;;͉LKVU ݻK+믿/\3% .!Lp aK\B pUuAIR.]dUYY-Z(**J111n~_W!!!ѣGpfj꥗^R--[8ޥKIbQPP7Y@c&Uk׮رz-hԩ$ݮ \R[nĉնm&bK.8q|||$<+$$D=$ٳϚꥥ T"""oe˖1f-^X3gճgKp˜Uv? CoeZ5o\%%%ݻk׮=n uӧOoQyySJ\T,s׌h-YD;$Iڴi<<
Dַ~5j5k(##Qv-]TъOj^ q?J8 ^.kjՏ?ѣz7]%uAIR.]dUYY-Z(**J111n~_W!!!ѣGpfj꥗^j҇eggk˖-:|1K5O wܡ&>3uIwuKjvСC UYY"##uM75ٳgȑ#{gժU+]vD999l3f>]vTaaa-p)ë0enM۶mxNliii'>_v;ꭷRHHN*SFFV\[jĉj۶meXԥKM8Q>>>j{LtY}gZ/C.]~[-[tl6kŚ9sƏ={^rW}sNΌeӦMڽ{|IB3gTyynV9y*++u]w߱ѣͭ$vܩիWW^l֢E[-[e2O?4fϵ׃eN\<] h~pfov?I CoeZ5oTb`ٴo>mٲEŊQ|||%6M7nTEEFl6fsv*++i&yxxfĉj۶bccfZ,ܹS'OhT^^z!C(%%E2ZtF-fUTT'N8~]rTXX+V(""B6M۶m+`{֒%K;I5%u'IےtRIқo*OZj$7PFF222tA=SZdԺukjӦEKCc SNNӕwJLLTqqz2UWW+55UTqq~8]CcϧdիպukӺ{Զm[`0\3P w#I-}]PPZJR||l٢};T߾}m RXX$9ΓbQYYsw]w;gԱc f&pBUU~GZbz^G$vΝR{コ;5`iO?u,*##C|*++U]]oV5j(Ok֬QFFbcc%I/5v]K.UttO`0hΜ9_ϟcǎi뮻%Zo{2 ɓ'lq9σjU^^ӵxb۷oeA P˖-}}}u־}{۷OgΜQrrFq)??Йc.4֊ yzz*99Y%%%ڳgbccյk:˵jyxxk׮ڳgwgjp|~7*((Ј#%&&:>/|s7rI5~6(<<\?t ԩS:ujAB_gV"**QKm]G7Hjjذa f&4-ZH޺[5`sٳGYYYXvЪU+lR&IeL&񾀀͛L=3v+uԩ޾sssw^ݻ}GQTTUQQ;vh>|xkڅ5ކ\PUUCi֭3g5GDDhȐ!ڲeEg<`X~:w|YW ߿?($$Ds'|%X҅PWE;>FUTTHl63$9j֓O>H;vLfݻYYYlի7ކ4yQ߾}M6]rͮrf͡3''GBCC_>z^..I]ܩVϿfnHAAA.x[s89+--M^^^>|x NhӦƎ^ZxkΝunEZLgEkjltU۷Ts_>Dp6mbh֭u-,,TRRP=7nnݺzۻжXV]VAAA4hPօq9ù ),,L6lp<\rh.Z{c93h"I5w~g>/gؿڇΞΖgmݺU={T||N< 6ۦlջw }CӺ;^$4BPP.ׯ6nܨ{O۷o$~ի)Ţ,ǯEEE2dڴi:^&%%cǎ4h*???8p@sQRR֭[%K[njnzH344T7nŋ?kݺuZbnI[FQ!!!'|Y: _Q?J}zU7PttK_cyyySN4htEGG+((H;w։'cڵKX,޽ԪU+WJNNVAAOU޽u;vLYYYԮ}WVV|||)S:|8{V^JS||FyIұctq_͛uqUVV*;;[(3m1===u7_xk>|X[nUAAdZ賩ѣGn+00P PppۧGTPPTjРA:v:w`eeeizÕ옅Z:quCtYS[lQZZ$9hѢϴl͛*Fegg+555tI֭k* @999U߾}oP<M0A6MU!LѨQTglք T<(!!S[l#G*9 7{e6%Մ_0fjݺ%N npa<==5ydIRDDbcc\5m…O]EJyXpDϞ= n]咐5k֨K..墎;֭[׹JT\\#G׽Df&5K.6m˸f޽[gvwpL IDAT&0% .!Lp aUTTIpkXf`X~z߿_GG}oT||+ faÆĉ=-((Hj)\Bh&jѢyq9vL&̙ӄaUD3g>>ѣG[wv<\taM6ݥ\3vޭٳg<$23% .!Lp aK\Bx+QIIҔ uvmذA۶mSQQuw*&&Fm9\vL#$$D7|RRRtwСCum={o~ѶPg[qqq4@n2TVVGyDCՃ>{Lnݺkȑuڛ3gN 4'94RIIƎ[g[=F5sL,h FڵkۭV"##|_uu٣ԩSzcO%IUUUڰaN:cǎO<ڷo/٬{j***ҰaôpBhʔ)X,Zx96mhʔ) wQPP SNZZ~}]Ʀ=Q deeb{mCIII*++$}ݒj v] ,PLL&M_~YA}*++Ν;k׮]*((hԋ/͜9Siii6m{9ᆱS_|\)>>^}bLg2f&.Quuk„ ܹh{YYYڹsvy޾ÇwjݺҳgOI5:uJ#F$EDDEɩFYYΞ=7;P\\*Pa-[LݺuӠA.zn+I999 ׫ڨv|}}'NCiܹqƱ .a%&kJ&If}՗~LL[QQQ-ms&\b5LAfff۲l߮];Y,Y1ڼyVRXX~i=裪ֲe.]\XЀڙfӵfW6mTsɓ'e4SeeهZ*--U~~"""ԧOiʕ*))QUPPTs>k*ǒ㪫Q;u+00Pӂ ԪU+g z}zmf^ZR%6lؠ[oUGݻw+""BzgM7ݤG}TFQgΜڵk%<.##C***$-]TFO?$$&@ m߾]7|fzC7 4ܹS .TPPZn4Zٳmۦih"\ p,ѨDI֭[1chѢEztI͛7q]dobcc5z 3Wڙw8 !Lp aK\B&0% .!Lp aK\B/wp=ڵk۾vZ8^GFF;lvE\o{1}vlZf0$I6M*--uKE$ ƌ#IX,?VUVKcǎus@n0rH\٬ &4SE@&[Ǐ\6lX3V4aM~aY,zh„ l&Wڷo_>٬~+0&A'NwS4x`7T80F-uɓT 7QnlX,4i*GpI&9: C={tsU&lĉZ$OOOM2!LY׮]էO l6%$$$) +>*ݮk׮.pn]_ֻ2ѹsgegg9NGэ7ި{ݥu޽N0꫒j{n͝;W˖- /;6YUUUի^z%J&L֭[뭷ޒ$^lL&BCC/\XP/^^`0_~>},{=UUU5YfYqqq#F\r(,,|Im F ѸqTXX˗7Y}U>}.z܈#r?EEE_ӧO % _|kرgj2 lSI5K֮]<СC0`F}_$UVVjʕ:qɓ'C|}׊f5k,mڴI׬Y4mڴpp= L_:z/nv=ӧOkJNN;#___oSpp|I _^_|"""ԯ_?/5fo^;hƌz>@/ ?~\fYJLLTpp0A0"YVIҿohAAA̙3xbh߾}zd0$IT=emٲ}銉ӧUVV~Aw}@S Ljq7JFcjCKZjF F|Ν[jԩkt_@CfӀ$1PXXX`I5ˢΜ9#I*((TXXXݤ%\;wӵqKEh$Ţ UV9r$gϞ={9d2IyvEdd$iŲc t^?<\2ZdIZzp+j%&&: XP_-Kٚ;w?I8%%%iժUկ~x:5kԽ{w9RgΜя?$͘1CTii233s9]$r- עET\\h+33S>$iŊ6lt뭷jjݺ+''G:uj~ 5(!!ARpЦMKz)oooyyyS:tyGTVVWNN:t )..qsaa[eddj[nф TY۶m͛%IGV~Խ{w1&IsQzzԯ_?%$$8ښ0aӧOd2GQ֭yf͝;W#FPBB:رC~a}3e u0λP .!Lp aK\B&PRm߾]/vw)׬gϺKhB?IR^T]] [nQll|||T2 233;J'Nb?OәkZfڵk%]u)eddbWDD:b˵{neffj޼y/%0@ӧwﮩS*,,L$nkݚ;w-[^xA;vl~ԫW/KT֭[뭷ޒ$^lL&BCC/+2DDDhҤIZfMt}k׮ռy_J~*++])=ܣ˗ n۶mnX%:t,Xx]e? OӧOb{ァ&l6+..w}5bĈK/2 nv\=yߪUԪU+yzz_=v>_ݮm۶nkv]{ҥK#F87N/_c6I=}^2b )**_WUWWzgsp\6}NRV\)rjMaFZڶm.]'OjСzնm[4h ߿&Ξ=ŋ`0f)//O:tP||$,eZvCi=zg$~J\R'NP^^4yduARzZlZ|f͚M6)??_5kM`_v]+WTffi&YVo:n޽[)))JII;8gz6FDDO?駟~o>Hzwt_Re2d2#SN BO~~~/00й6:~x5VUU)99Y))):u}W ՓO>)ŢoVVvO*""Bv]VRRvܩ_]gծ];M8Q=zhbsw.srr4o<߿_111z'dm۶M=~_9YKIIݻUUUR͚5K߿W߅zn/jjѢE*++l6ypϓTou˜pBee/_g}V_맿6mZ$+88XGuꫯW?&Mڽ{^y={V6Mߔ\SLѯk͟?_wnTv]_~ 'xB3f̐`Ќ3TQQ!IM0Arf%I RͲyiԩ6m{wWEseSTsAK-=\1s q #MM%H%ES\RJ0GDA47@dWdP>W1ww 9ɓVVVػwoqm!!!HOOɓ'1e!66;vX'OÇѹsgaݺuHLL fϞDE򎳪JW@1jhh} Err2^{5Z Xnaoo˗#..ފ:‰'C?-;w(}^{*SEEEqСCHII￯\WWƍ;*) 0E.OLL \注(t_#Fں^ ;={Į]Seڵ+ p]EòI&C\\\eƢk׮hҤ RRR0x`4j:u5JQ***hԨRRR*<ѣG駟VTVו(t044Ľ{0zhOzzzUtX[[+Lx{{رc1cFXsT&fϞ+V`ժUxall\+:{.|||}Oۊ#22...ټys4kLq>k{)** xwK0 ""Bff&rrrкuknZ8VVQQ22294-qtpUUU 0E˖-nݺ י>}:<<<퍳gֶ T+W{dƫ,LmmmdddTF׳݌}௿Bvv6 +,:穲-\LuU17.oڸ{ne%>w߅7˫Ye0zh>}zEMӪ[*yjŞQ[]OΝCnݪ-:͉ ڵkaddkbҥ YׯC.{נxA]7鉽{b߾}G}T8jX*-ZG}Te:2euMc|^PaXiBܻwM4; k\FM=yTFɾ* Vݸ=PTTTZ0 ""SSS̞=nnnx78qFS6lcǎ-Djj*'w۵k/5/Vf?]߲eK?(%e%iѢ,Y磸~~~up,..FRR;|ppp~jQ)c۶m̄1=]wOguΓ2*XJ%wyvyÇѭ[7̜9IIIߪxQ2%1A{ IDATO$ß+|Tt=EDD(ʩML&j}~' </:%ųwY#;;-R`jjǏy tÆ رc08;;# ~~~رcbwy-ZOOO;wسgıcǐ ݻ7ѴiSOMOOGBBBuu!\|Ѹvbbbp]XQ U=Bzz:bbbWq866e:穲U*o~~a[IL5̟^ XYY({U1k֬Rw˻fnݺ8:u!CpܼySQ6ĨQ{"""~:ݫsΡgϞ՚B&TW\VK$""^z)]:,--1|p4n7oDϞ=C7#&&f̘QꍾjjjׯDFFBGG3f̀лwoۈ>OG]"<<FBBrrrPPPMMM>UTTЭ[7ܿሌD&M`kk[o>!77.\fΜ mmm4něoYa!44!!!8wN>I&hӦMq $$Ds֭[XX;gϞ喡Çŋt1SWWWQQQA߾}ajjwhڴishiiGll,rrrk}ډCBB.5sO033S QL6mTZs4j2 AAA型eddWnehh7x믿pi4nx뭷```-Z=P4uT믰Qcy_LHo""" Y[[#11RJ;{,?~#Gxt!==ׯ_7<==%a[p!޽{J sϟǦM^nNDDDT<[e2 СCAD """u~zCll,ߏsJ"e=DDDTΝٳ)tuuѥK̛7R۷oѡC#V0ZZZO駟J ͉dddDD ݿN: "z/..ϘLQӪU+aRBDRhժUebQݓd񁵵ԡULRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRL50=:zE0 """j޽{I&>ٳ'%^fL&---888 ::ť>k޼9 kT^RRRmG/)5 """kYfHOO/?Q92e k38p=x9swwwDFFBOO7nkϸq0{lxxxHuxTȄB d񁵵sU\\aÆvL&Cll,,,, QLKKC&M`aa( ͛7ݻ///̜93f d2b}jdg8{,~m̚5 oFff&֬YHNNƍK.?͛7|r$%%aϞ=YZZZTPĩaڜ1 """'YyܼyV^ej+j3ADDDTO&xo """""R """""R """""R """""R """""R """""R """""R """""R """""R """""R """""R """""RL!ٿ?<<~C.]`߾}RSlll!u(TȄB ~SWWGQQaQ2qDݻﵚ;pƏ/uTU;wرc[[/**’%KпWň#|Q8fddddddeeeIQ{&={ )) ϟG~~>~'tA갈^z8p?S񙽽=:w3fH!Q1 "";wb}6_*Q-G}@Q34nܸF=xFFF"Q1 ""OOOCMM zzzسg!R444_&I_reIIIuZLBRRd2aQ%>|˗###CPdǏ\+++ѣ8~8f̘9siiiXr%͑dSN#G$̛7- <<<+VҥKh߾=n E?35kvvڅ|߿8p444`cc\ooo3f硥w}gφ7n@t6662e ~g$&&Xd 8B૯ǏǸq׸_9TXlLwuTTTеkWY\'''2 'cĉؽ{7 HLQ455ѣG"66SN 7oTTUUU!fffXnܹ#&&.]ݻ_ġ1Ξ=۷I&ԩnܸTݻwall\PNBpp0/^}"-- 111oHMME\\b|d?(LHH'\u!11"<<\ͪU GGGo/>֬YǏc"((NBRR`HKK-[ 55=e˖LNRС~j VŒ3pu CNNHMM---Oׯg<|BCCԓ ")>&WL&Ν;1vXC!!ɰdU2bZP~ """""R """""R """""R """""R """""R """""R _ZGDRFF<ٳg JGhh({e˖RD$ > z#??6l̤111Xv->sHN)hҤ VX7"66*믰ŰaJm7bѢE044at;ZBǎaoox"//Xx1ڶmO>D۷o "74551o<ܺu ŵ^~rrr.j(Y:(]ˊkӦ `EnllQFСCxQ̰`[kSDD\]]xb=z7͛WRVVaƍҥ d2Yy{^TDuթ/V8BӦMk} So˫qVFSSVQ.+NUUUq8pCAAA+ /// ]t-[s)]f}憨(8::BWWۭ\&LP"Qc2AD/\qq1?QFaȑxqΝ;ÇeyUC9κl]9ҥKѵkWlݺYYY5.cܹxJ-+**'|R[aJիFn`iit9>ˑQI)((i&ܾ}'N͛Ѯ]R_CAArrrJCUUy&:vGGG\ܹ7oބ..\>vvvػw/ l۸q7xo e$$$TX^ypww˗{Va;vğ (( 96oެ2,,,cǎѣ8~8f̘9siiiXr%͑dSNgeqƕz5j c#G$̛7- <<<+VҥKh߾=n !СC8|0= ",, fffXjSyyVyuoAAA>|8lق7Xlllljt=#G"<<{֭[Df͚f͚Y̙33g<=={=V^SZ`` I&Gbb"ZnӧK.nS\\g… HIIq $&&BGG6m'asn߾ ̞=mڴA^^BBBcpwwGӦM舂رQQQ055W_}_]Gbb"<<<СC8x`H2!:"d2v܉cVk,޽Evv6Oٳgi㣏> ~'d2ǣGHKKCVV ?-𤯱pi͚5֭[={`_`eeCCCo.\?w\8880~x\~77n޽{ud2&M 6ȨLyeCCCر3g+ŋBϞ=o666„ УG_q9a̘1ѵkW8p=\˗/hѢΟ?e Sn=UVݻw0bǣ{Ν;ѡCtm۶Ŕ)S`kkD  iӦ!??Lj#p|ǹst=T)OyLNN\\pXjU *֪GuJ-/((o͛7۰Kt1̘1;wĈ#Jm#44Z‚ 0mڴj-(akk V{dXd _޽ ;;; 4 Xz5RSS6mڔǏ'T1{Ĉ~B`QeYd sNks>s4j| ^uL<9r$F{aܹxw쬈a̙HOO/d2`oo_p%FX[[W{jdjѣG1oC8::ŋUÇE#FFFzje\t Ç)bcc1uT`y)LUUx:?*_E*bTQQQ<222 A&&&=SN022•+W<]/˖-'ҥKO UkaÆ>i$LCC~)lllpqGVVVHLLZfD߾}ann3g`ŊXp!1iҤ>Z XYY,--1}t]CەWƍ8y$N)#]n.Sn%O3#++ eg\.)BPP Wbȑ_ptt|r899a믫GmKEBCCѻwoaѢEvC*QQ .T^5yrm#..-[Ĝ9s_2j۵k0c t ׮]?TBõe˖x^r?؃< //g1Mv~e࠸CLQĖ-[pUuT IDATvvv޽;v؁\zm۶r(PjyɼD׮]: $l?ۇ-[/Fqq1L&211U)S`ڵҥ <<<秨sA__qە\?OH144Djj"1իZl{bÆ 8uv [ ?]vzOXπШQrg"Rʕ+WJoNNN3fskiiwޘ9s&4isa̘1066F߾}qul۶ 044Dnn. cccm'NģGsNDDD ((ذa444ШQ#;wŵk͛cJ qhkkPUUŨQSN!((&&&Xnʕ+q!dff͛[8p/ ۷o tRi۷oǁkڵkǔ)Sc?f>3gk׮Aaaa ѣGadd.]Tx044,B`!""YYYсVsPr-Çۄ |q'N`رhݺ5'Omۆ-[޽{ i0cƌ }G마*8p ._ܺu XdISa~:rss֭[I&z*oCEE}AJJ o\zM6Ѹqcc޽y&rssѱcGܹsyyyqiOw[jMMMرٳgѨQ#|52/O>oYmAaJ53g'w SRRKLuQ_՝"԰  pjX"eڵpqq)ZEE&&&ѣGU/@AD>&DD/HɋMMM!pUlڴ ۶m8Bzz8~bb"/^-Z`U"66Fzz:(J"z1 "zAmۆk^^^TXm۶m/eUk*嗘:ujdff x2fy1 "zAn:àrɉ j"ĩaH)L&H)L&ѣd^yX|9tGp^MDղ~z޽[0^IͅԡxQo%znܸJYEEEزe ;hhh&M*݋?VCP1 *988 ))I0^9>DLL ܹ&MRꐐa̘15}mRRΟ?O>#YfÇ^) S0 !A5Ɩ-[QFaѢE۷ԡ̙3?~300DUOHHzӧcܸq= :'DD)==nnnă0qDl߾]v:2 1o7: %%%W^>ryޫȈ*'˱c8996l-ե1DD"燾}wHMM?`oo_ xUU*U/gQ=z'OFtt4fΜDa2ADT'N ѣGCEm۶-bcc uuu}0-ЧO6Hrnѣ1p@!""...000:4"zW%''&&&Xt)FhӦcѢE|2,--$B8p4{Ooɓ' sssC# 0 "zJ4ڵÁdLj6nݺ &@CCC1emAA#qt~|}}}v\t :4" "j8|0Ν;իRӓ:Z5{lcϞ=Gn<W^GG t'''|uLt!$j85Xyyyسglق5 /m78tN8'OBMM 8s <==C"<<8u&M@J "jpRSSyfxxx 33'O7t"uh/TNN`mm] fϞ-adԐܻw_ѧO{REDJb2AD FTT֬Y???`3g7o.uhubݺuHKKԡP=zasb2AD@رcm0a )) ֭ŋٕXl222zj̙3RFDTTT={wСClM )ŋEꫯ ӧOǸq {{{&D> WʣGm6xxxĉwyG$sݻ۷o믿o#G""";v:,"zL+!11صkTUU1k,̞=mڴ:4Ic6l c8;;ch׮0d"Ο?ggg;v XjOƍKZp\|YP&˱c8996l-ե^0 \.޽{ÇG||>>֭[(,,bܸq",,V+ mchh(Ϡ2~ܽ{WLw077m۶B!,,,_!Bann.ڵk'@鉎;Vo!x7(..B1fq޽/>!ɄqF,K@2 Z DƍXh:Wڐ!CĀH&.d2BBѣtСC+ܹsPK!!!kjj*رpY`mm 777Z (**4fwww/D= ]]*E􄥥%vڅ7ʕ+2dHʑ%jNgVTT$|}}{ァ;\.uh ӧaQO&000_};vEQQQ.РA(NNN  )Mnj#̙3e˖ѣnSޱĈ_bǎ5>WtUhjjE4˒Qꗨ "RNNN`ii' ѣ9\xǎŋ児刌n:Xx1TUU+ܦnwɝIII*^ȑ#dRT<ann@ݻr~mUBܸqCŠAо}{DDDť̀皐ԧ%"LrrXh022NܺuKcNJw}W0Ud"??_P d '''Ѯ];}vsΉ(E}!D֭?曢e˖ى{O !Djj9s戡C*qY%qyXfBѤIq}!ēqw5>1sL.v*N:UkeK}NC`QDFFɓ' ѲeK"|D=uV4nSN:!Wr{Æ SlwE|7$)SwAaa!°m۶Hٳg!::?# MMM̟?sAͥʑ_sŪUB޽{ѣGx7ѬY3 6 ]^^\\\~z4o7nѣd<'D vs"jw\UAQRs[05-q(MTPSEHNX[͜{/PKEO .~|]>{ν=ZCF?*U;4֭[JիCkH[G\\~G7D+LuDTƤc˖-hӦ 표\v ...L$\FF-[CJp8q۷ǨQЯ_?ܻw&L`KɎ-Deċ/ oooDFFbȐ!X~=Zj%whT۷'w(T1m4ڵ z•+WФI""Rc2A>|OOOlڴ zzz3f ƎuºuХKhBP|ʕ+akkCᣏ>;,"lL3gV̙#GXШ'C!066F%OHHHP?WYRJƥ .]oGѣ1sLԨQC "-3\x͛7s}2h۶m8p ʗ//w(y[.=zmy| <==K*,Y=~SNagggϢurEDTdLi[naҥ!ƏD IDATqZH׮]åKl2CW ddd亏B(>h"OF@@#wXDDELi'NO>h֬;OOOH/,, àAE#fffѣG+6+J|%U #:u+++\r+Vܡ;Xȋ/еkW_…  &N:Xp!qmlٲ2);vnݺj!?J2*T}pD̙3'}^| &I&y&:={I&%)$IrATڵ+"""~y8s <==jժoLLLd]zпOrDXZZ")))vLiN$1[n>n޼ _W*¼y󠧧sbȑ0LC L>{FǎqU^n„ HP\888JTX000Ȳ=-- C)qwwǶm I &L~mxw0}t5 n݂  "*L۷o?ΒH7pvvF J¢TuqR:thSSSS4j*,ZH=mZZ݋_~OЦMܺu .ɋR ҥK֭^|[oժߏݻ9;޽; !Vh8qb8q"ԩ?!:""Ė B8}4lfBlll FG]ll,N8Q*V'ZĩS0x_S*HJJ„ HQk׮HJJʵE"lܸ"#]RL:ѶDNd(wwA^ݒ$/_,興 8r郴\$aݺu%m۶;Bܹ3lllÇZ111GBBB7$I˗/xHeÇpuuErr\1i/^ȀB@N*+W044DahhCCCT\VVV2D]3 ;WN899ao߾m۶055;,6m%K࣏>™3g쮘Y Y=""mӧg 8PZݺuQ|,*TNru9u\2q]<|G{[nYլYzzz0111˓'O:u*VFCCC( вeKk*U*鐉V9dDDY8::,BBBPR%k׮]`A1D{waΝP(X"CCC4imڴAѼyshrMD85,?ѱcGF4STZ.Zj-ZyhԨ#"*$""Ga4B@ &"7DDZ"<<QQQܹܡi8v*T FLicǎ]v(_ܡi8y$deR <~ Ԯ /Ԭ Ԩ<} xz%Q3ܹs:t;b8~8_ӧO_srr»ヒZ$0("">$ ؼhP( 0W(ʔC$iFP4bhhCb۶m򚹹9LLL Tޓ'O`mm]!Q `7&%C<< H$@O ߀y$*cΝ;իZjr縘'Fq9ј1cFFFDD%-e[u@9ӥ %QYVjZ%RLL &MuJL5{{_mpw-;.nRq11b?];ʕP*GuhZh9YHOe"1"ΝC֭#OiiiXn/^kbʕHJJR ̞=;{ؾ};̙K 7oFFFكpXpEDDo-eÇ^=ӻ@ZP*0dpкHoo`rOc'.x{-F~ ڱ(/ٳgxZj%w(ĉaee3gBP ** }Ю];|wS@Tbʔ)077ǬY̟?uȑ#n:XXX`rJ Pf[1 bP&PhyPy]Ν˿j]\ss࣏ľ&eSmH4tč7 I7o.w(ڷoBCC j֬5j 22RqܹgΜ?лwokuDDDa2Q4i"ݺy21f +*/^Aܪ.GܙE2T9ѣE?%$Dt"wޅjժ%w(믿"3UxAhh(J\rӧOqIDD%c&{{_@#Ǐo4l̚*c1>c2 4U'"p}ԭ[7[E\DGG XzADDDY *k9uphmK 18rxL̲tߝF= DFȚʼnTHI3w}lT1Cͯw4h wy/UV̙3HIIsS@TT 111#`ll`֭ {,--SܹsG3#"7d,j|7NLje4o.d/h?@bB*̙ƍbsE|H[ZDo Ok֍I'k}DfͰvZԩSӦMqE4jãGӧOca֭֭"""'O~૯!&]%Kt pРmk׊ >9RT|4 }[Y1xnvhI{u.'C"95J4`B|y&1_̛'VTI6/G=EJJP(dI&0qDbÆ 033}011ɲɓ'.0H2qꔨ#|)*?g/YSTtY @ժg{w;<>8~y@TBP@<:;}'>oMZg\O {옸S٪U2_`f,]*m۫}>cQ=Z$Of>uxVM6m׮(9tHR>d###ŕϟk׮_~8OO,ϣ1{l_C$""-W<ݜ22Dѩ`g'@Dܺ̚5ȬKD*QQ@ޢZl.uuu&ΞH' ȺqW=sKf^ߚHg]hvX6Mt1?>\7Mc쫆ju(x*U-%닸df5jÇKΝCpp0:t耷~`ҤIxyFGDDE&"axQkL$VU*?r۷Ewwqsg%M?q':&Fgbk'fWR)VY8[ծ X2^6SSEMJRF$EFJRʢ9s$)"B{/2% IPAgI:|XF8I6MlzUYKR߾y_ %i֬W۞<ՓŶƍESJҡCn$U(It떈)O=4l$ݸl{{IXIJKϿBJ}W>{j֬)ݥGJ7n$===7I:u꨷̙3R^$???KUTBBBӧOK@266VZ%J5kJnnnґ#G۷Kg^ztٳRΝj|/9""ʉߛLK;95UuyDV}}q'fM1; gԩ);ˋ;..N/nX& ˖*k6167 njyJ.̟u9sĝ1ckŀhU oiW3>,ZeXR<cP`1pS'.w׬ T43w;źPh鉊]Fr/71Qt5*Lwtq^g쓘(]=y_׬^7McD։V˜`8(x zh$1 볒XXX+Vo WWWddd`Gmlr%۷h׮ڵk3gpP.sssoְBTTʕ+aÆ077׳s|+2220f.GD$7O&bbD E4i"oҼ1c+VA))9Wp̲Vp+CU~}$kk1u]1<7'Nׯ2d˿j˗s>PuLwo1@tyk@pNfP}/^dݮJ1iP˖yo֬YD7Ν/,>Oe#F$D3 Gf"iU%knŬR^nnbZfՀ?Wo-f}>ׯGhW+u6m@]^Q^=={6?;;\122ʶ8iӦ˖-È#^J֛'..cݺb֭\9U<ţ&7l*cQY_LT;t3FDDdݮ24ɭr/Z7rZ)W (u ݻhpf5 *n׸K3DaC -sg1כϋ6ߵK$ @lcSڵsH%1SNHJJBtt4QؖLum۶m۶y&FE=ih`.fx=ZtSYFt Qqp5kľ9IN:IܡK{V'9Y<\U5:W.xnSEC6k0uHV ^-frs{u-T_L$9ݧ;w}>qβkz3v쫤Z5q-T33&kI95k٠_MxjbbquBPٽ[|r>owJW r% ߯>_|!cT槪tgj=z.9b7$qZ\I̞ϫrqF]ي*SD2۫]5qwףlʕ+͛9RQspp@5m6uѣGQJ 6,beeiiO|jժ 6`޼y8p֮]KIl?[Fl~[4|}}S69#"b?{ٙ7\v vk B,2/.fa!*{ߋVnSzzf]ѸjU1 `0Qq:֢Ͻ8ǼySTSW];wD]QV;p@t[ۼYTۧJqzu9^.998NZ;W\8##Yܾ-޷x#{5uj;]'5y^{z?E*)x~]\;D7UsNhִedݙ/",, !ι݈ȁ>>c>}G͛7q},X,&\t \2ׯU"44*T@۶mA? IDAT.] ::NBhh(1uTٳgذa\D;Į] I[oa8tN:Paw#88\WHR־>~~~4ht#u@V  @ޫDe#IxeQ>Z爈ޜ?;1kbz(WI%?ps/lZnlӠi*K]EWkJ͛檕MD^ӦMQB?͛7;"""e"7uꈁzzᆬeQA7NtZr&"YwũSHclMz[\(͘ QӵkWs""Ҁ-DDZSNs__ HK1 "> pHKDDa2ADTƔ+W^^^8tܡC"555}Tݻ1H^L& ;;;899믿Ƌ/nݺ< 1x`+zDDQd(J̜9HСCahh멩2dH "2sڵkq")sȐ!vuQ8DDLah۶-d퉎;f͚ٶ?2~L&0===lڴ ׮]âE޸6l؀ .6lz%t :$""dwww|wwt( 4o 4((H0 ""ӧvpss{rlmmѶm[H#FMpDDu$IrADgԩXda(CCC9rܡ2rrG@D+""-[ĨQRhԪUKP ?~|[n=5j` $$ɓ'ѠA,X7\˰Źspa>|0aϟchР=zh̜9M6ow3fܹsqqqXz5;waÆpssCʕ<,.c7'""yf,\gܹsprrݻw!IfΜ=z`ѢEx DLL vX/_ƌ3 2bcca``;v777θy&&OE͛8q"PjUu"TXSLOOO><=LcǎA$TT УG̚5 .\! ?z갴ĕ+W-ŋQZ5DDD`0335j=-===!"""Yn bʔ)ذaM񈈨1 "QZݻ#66`ggr lmmq\P(ٞѸ Uz7!C ..6m˗/ Rk9aaaʕ+g޶m[<=&DD: pwwL<D($%%({J%=ƛ'D.]gϞ}:֮]cǪ+HNNwݽ{[noRƴiӠP(ХKPJH'==]vBBBZݙJ[&tԚ5kƍ#22+Wjժt uօ>QT"..aaaw/_7niӦpvve888 m6nÇxDDTgϞ=[ #55z;*aiiiػw/[nŶm`ccf͚8~8N< 055Ŷm@t1j֬|}}#RRRо}{32 CӺVZUV#44aaa۷/6l .ݻ7USN;v;v8y$LMM1o:?"*zDDrxzzF¤Id|077hcرEvlm8*ly]BXXX˱& SSS) OOOxBcݺu [lѣѿ3˾[l abb5k֠E;I"*rL&(_8r A]ǏcxܡȢ4ac.s-uݻT*ѱc,;v숤$ܹS;KСCْh( %nND4bx! N:}$I._ cccڵ iii޽DÇuLLLߣQFFHHBBBs|嗨Zj}7mڄٳ0331k,899ᅦ$I2e ƍ$17n@PPн{w$&&bĉppp;w0zhj ~~~y~DDD`ذaHIIɓ;`Ϟ=1c>S(J ==m۶<Eq!gO__ 4صk>|^Wݻabbݻpqq{gH̟?طojժWbx.022¨Q`aa%K@OO;wuᣏ>v9Q*yӱcGαk׮ݻweݹsOq^ *'%%wA˖-k.$%%o߾HNNơC0~x^z7ߠnݺ"k [[[ܹz?[&(Çcԩ022 k;IPR%@=0k,\pd{ohh(>CX[[#<<nnnիW\ɷ/?Dj >`ԨQ=:`ff\gݺurT,,,)S`Æ 6mZ+hyk׮ŴiԯM8̛7ׯǂ 뺜={믿p!5߿?Ѷm\6oޜg9AU lll.~65qDz033իWahhVZ=:w\I9QП~H\*idd%K`:t( g" dMiӦ$!7Zݻ#66`ggr lmmq\ȩbbbbG2T׻ 2qqqشi^|k׮رc@T>}w֭[5Mʘ6m tUe+pt۵k RΣG LyTt9.`Pg>WjuHIIQ`t^~1k \ PПzzz*ӧO\rY[~=pBܾ}+VȱD=zQ)nND+Xj/_WWWTk֬App07nHT\fffU Э[7ԭ[^^^x :t{r)I©~6--M2TRRNd 66qqq ý{|2`eeܸqM63ߏ-[A*m6nÇxӴ󐓂,cǎŎ;0x`T\رc\]]].^Wb̘1P(?s$N%((5j@Æ O5# qD]gϞ=[ #55z*t˗G6m0l0ٳ껈iiiػw/[nŶm`ccf͚8~8N< 055Ŷm@t;i֬|}}SRRо}{32 %..UVU677Ghh(зo_4l.\ѻwoTV N:v888 66;vqIb޼yHOOx˯<#..wFhh(?Zja֬YY+WJ*6l󼶕*U'|Ǐڵk8y$V9sg)233r9ɯMϱEy&<0|r ڶmjժɓطo_߅6m2ߘsjwAn߾=6lؠ%)99mڴ{s\x~\{=7YMPbEl۶ W^Ů]Я_?899AP4i7o P:th֬Kcǎَy=lݺ*U+W[oi?uN K 35lAxnO1IDAT118}4͛\FF5jeT"%* oժUXbzV@QAV,nG1VZ2G]45l""]d MD`ܸq(_<$I•+W?㧟~9B'M69"yT6.`2ADO?aժU֭[ѰaCXXXK.-Ps]^uV8q?#:t wHDDDL? w:M"46:DDDDDT(L&PLQ0 """"Bl2 22aa2Ajժxxx QG5H)$IJ """"Ba2ADDDDDd  """"R]עDIENDB`././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/canary.png0000664000175000017500000032554000000000000015272 0ustar00mgmg00000000000000PNG  IHDRPW% bKGD IDATxy\ua? "*n (R,JBZfFmuMNMeM5N35=sTNZ6**.[*.悈*p@ =G}=uu\leg @#(4>/^ԗ_~kGppqqѤITc;6kҥ6mcɴjJƍ U^^.I3gYL>gOu@hFP@hFP@hFP@hPeÆ :{:r%$$ڱflúupB3FOC?~\cǎմitq͝;Wݻk۶m:u\\\/ȑ#o>M>]==DK٬ ($$DӦM~; ͞=[%%%V> @KOVTT(I`$M999$vIշo_Irss5rHIRΝ#GX͛7k͵28p@AAAWa(lVUͭhL&^Z&I媬_uNNNFKE9"___͚57 ;ԬY㣻K-2niiΜ9S㓫hp|g2 ߿KKz|}}UVV+V؞_46o,X]yy$핕9EEE2LTvvL&KKp<==^UcZf\>~PPڷoe˖@}ѩSta=-|ָ0`UNҲe$IyyyJNN֑#Gl2I.\cǎY0aF,X 3Fd2dxڻwΞ=+IZdl?))Irpp3<jΝZh.\GyD...̿t~\%4gkGp>}+ FP@hFP@hFP@h)..c:8ӧO;vfSZZ.^`oڑ~ ( LIIIڽ{>>ڑpڵkvZTe2 #I*--w}4=ի rrrsN(99Y4gΜtQ-^X cǪUV-2>訸8%%%l6lruՄ vJe}mVǏXTTT3g(^hԨQ45;K};e˖i̘1rvvʕ+s'lcM#++KK,uGGGqϜ9sxf9φ8::8Wz-ήvI>|7c۶mڴi˛裏gϞӃ>(Ѩ\c lݻrJ:tHÇׇ~JV,y-\l~ڱc=z48NNNZ`,Y8EFFťYYccckmСC5NC(!k۶mZbrssu뭷*!!F#r-[L2ŋkc2?`0B'NPN4zhKً/jݺu:yF233#GjӦMΖh5eID^Z:qℌFթS'I_|W֭***b6zj9rDFQ?cϙ3;vTZZvޭݻw_ uA C)55Uz5w\9sF xbuA:{&MΝ;{ }... ͭTߵvqqQNNNKKKݻw+//Oqqq/奇zHeeeua衇f>۷kΝzg5|effG&LP^\w.W׵<~-Zt˵m6{ oֽVuI[oluIcǎU޽oz뭷UViҥ>|n6yxxzFF>=#uk6wi„ j0ss DIIIz饗W_YM2Fl6o5i${jֹsjoIƍĉ#(--Mo񆊋UYY:vH}7JKK4|5Z`BBB4m4w`ٳURR"Rq=ܣ+((HeeeuW5khѢE]kI ftrrRݵm6:uJ...zu}ڷoO{NGUbbjݺuSrrF_ztԩ:6޹\]ײsz''NINO?zkHff$[nzFztĉuqqQll^u+55U/>sxoii<ߝ;ww˵|rmذz1 #55U~5bEGG׻`ӦM+" Ij׮ڶmӧOK/_ӧO+::ڲFO>DԺukW_s뭷޾Yڼy6o\(((H.\PQQ֬YnMsOaݻW,I _|FsС222_kWDD%/lą d2'???K.wR$Y,Kˋ0UL2OOO[=#GYf)SO?Ubbl٢I&5/D=w^޽[*..$KA)9.g0d4u&QuM/_B-ɤիWd2~M<:Zc ^2V_899f4k>;fJLLwƕ|f ֭F˗7iIC\]]k5#I:yd2 ԩta9suO2WFQ|6oLV\ԩFZ_L:J7//O;vl`4UTT$I:}TgΜQiii"OeeΝ;k_M:Y_G-OOO͛7OYYY:}Ǝo9Z\sA͝;W<ﯭ[6x| yWеnn_u֒To%>frss_z饗\eeel6[>'4?kʕ駟Խ{wM>]lvAIu%ұcG=z7yW^ڵkk4yR̥.U3fT9{$o߾ڵ$~k!//O۷o___iŊ5Vrre駟֣>J}wuW٬'O^OhԨQ/Mј_2g}&[VUyMy 4Ld*((+*ԅ(nH^^^0aN[N˖-;S#FP\\vءŋK={TfflU;vh͚5 Xv .h˖-ڱcfϞ;wNG%]UPPPǏs Rl2O>:u>\j*EEE]ւ ԦM:ǫ?]vSN:s\\\ԪU+y{{I9S}VAiiq "L&eff*;;[&Iҥe*γ)GCǫOC׺ƫ\Y" e-==]:tP\\$Y~U7zJJJ/,oooIu3YYY:zF)aÆiʕ߿{MiZby 2.YYY/t :Tf͒oOKKܹscY [IIIrssSHH\\\,O@h'jSݫEi̘1W}(441b J\u֖‡ul6Tݻwƍm6ItANNNJNNVQQ<==/:uu-[LGdhTǎsQ;vLeM3;v]ZfffJMMז.]VZYVҥ$aaaJOOWjj~g͙3QK[lQaaF!,߿_z^999=}tW1|ӧOW_}7K_n6 ///[ \eEW}Ul =Pt!I{qrttlѣGrJ=VNd7֔/R OΝ;UTTk\Q?-[-[(99Y;v~~(--ҥK-O-^\5J4~t_ ܀<<<4ydk@5~번p3 @#(4 @#(4&lou2*))d #J(YCդITQQa( ̙3ٳgU^^.ѨAeeeIza$ 8PC`6V6ѣZn6nܨUV)++K Sdd"""&kGe%IVN3P@۷R,IIIQvv\\\x@ WV5FML[lƍm۶)''G^^^Ќ3N͎?L&XqFm޼Yꫯ*""Bv\6 ٳgzjKd׮]*//W߾}k,ɡ(PkJJ/٬`EDDh̙Ru N} _'*22RCP@`kH͘1C Q@`sJJJRk۶mCWVoYSk=KWVG5?kڵ 6|Pǎ$Q@pUoZ5$++KNNN2dƌ>@aaav\-R;w,駟t)FEDDSDDf$P"5|mݦ^xA8p ğ^%??R,YjTVVnݺ)**Jbcci B@; _+++BW7 (jػwo Ә1c?ICU (M<"##VZY;.X &RZZ 6XflٲE.\P6m4b@=hÆ %9;wTqqtaÆwQDDdooo`(7\]ֲ$k``"##c)22'@3Q@cu5|Spp!CԡCkG:QXl(22uСrwwv\P@lT} _===3f(66VAAArttv\Q@lD} _۵kÇ `%u5|P߾}i 6 pdeeY%7|լY)___kG\ pYĉKWNP@Z@iimۦ7jժUںuΟ?֭[+**J3fPDDBBBjf\simV111zWv?&8s挒-Krvڥru]qqq4|VRRRA!!!̙3;Z;*l֎;j5|urrҐ!C4qDEDDhСj߾ n:/^֭[k5|54| lL&XTM61b _i͚5vUJHHPDDeggg\9byU, _IW/Fו:::*,,5,,L>>>֎ AP@M5%%E[nӧH=cTxxZjeؔzyy)""B>^h$Q0pMTTT(66V=zvMPVV"*,,TQQJJJt⢢"jժ _ jqtt<==}وO+2 IDATldYL&tr SpP@1 ruuڶmk8\U- EPAPSxR6mԳgO988h޼yζv,(ن '?;wN֎p04[LL TYYb}G֎pU14#\S@MI2ek.hРAG}Tm۶kVZiܸq:uꔼԦM}:~5h 0@JJJҤIO>D?~wﮜ}'58;;kĈj׮:u$ɤD8qŠW ܈,--Mϗ$?^_|"EGG[Zlۧr=ܹ}gܹ}QIŋua 2D:tPIIz-uMO>9s/vxK_;vg}7|SfYO?\\\r}()//Wffվ}{mذAEEEJOO$%%%l6K*++UTT$IlVnn$… ڷo$)??_ڵӊ+$IǏխ[7qZzvC"IQQQׯhԈ#d4 ;;ZUwZL&"IݺuSvvf͚BgP?W^5krrrtRȸj۶mO^h \UӦMl֞={$]]R+-GGG9v___.,`oo_v;;;UVVZh4_2.-)((Ѕ jjlgggˌOKKӧ5zhyzzjСwﮏ>영C=z$[111֭F-oooIĉggѢE2L^źe4uZ T~ԦMIҽ+777XƏSVT^^{OvRpp&L www}*)) : bccգGkGpҪUl4 $%&&Z9 n@hFP@hFP@hFP@S 0@{n8C і-[v_[A`;w^Ǻ{yy'fM:~bbbm*,,gm۶6Z r-*-}]95ǪUjmӖ-[<`ШQԦM+++K7nԙ3gZ2* ޽{U\\hM2E4}t(**J&Ll$___w}:rgyF;w֠A4h ֣>m^SQQQcN!!!0`;xW޽N8 ȑ#d2G UppyM2EѢEtAkԩrttԒ%Kb UVV*,,L>K2L2eϟ_#ԣGh޼y:~KMfNf۫SN:q№-[&ɤ 0@ 믿S* @NҼyt :tkf}S~~klsqppѣ*${{{999اsIÆ Sǎe2ﯝ;wjŊ[꼮1bڵkN:d2)11Q'N{o:ݻ}i&衇4볨֢EaÆ&g4w^uI=zP@@nv?ҥK( )  23a5~]RRZ?՞>}toV_쬊 EGG[ZlۧZǪKee.Zr-Zr/^.]瞓Os1 jժ &ooohZ`|}}3ϨCڼy֬Y#Iڵk*++%IYYYڽ{6mdin{:GGG?ܹsյkWM32z"{ѱϩj/K777K o[5JFRTTTk…z5sL}Ә1cuEyP6W^2JKKl˷Mv [L&effZxnذA7oJKK]+W[@@$Y DҥB܏?Xo[nkSUhk/f\begg+99Y$)<ٳgkܹwc^^^={4k/՛~={V7oVttbbb?گOwQ5J6m~KK.1W^ftvvրjPnU_WoѣG%]WVhhhhYUW111M}Q'*Ǘ1<==O?H& 愅i51H,=zڷol}ZDK~'ٳdYzRe}ǪzK*U 9B*T}ɭ 6;~Yu)%%%xʕ+6m sΝ;[U@z+Vɓj4`>|233\ܫƮz-00PF$(&&Fv&Ol)tyzwk *//;_$UVVjܸq ,Ю]&+$$DO?{GSL,=z4tPs=,G. ￯3)l\\nVkƍS8wu&M$___~'\1^Ϛ5kCn|գG8;;+!!AK,Q^^^>Ν;+$$Dzڵkխ[7W^-!RTT]xQ߮I@RllM6MÆ UTT?\>|$]*;vLÆ pttl֓O>۫5֭>Sk׮ҥRRRj{~߿{@PΝ5bEFFHNNNڻw ͛77xnھ}ԵkWZ`J~UVV*55UڵS~|}}ƍWޛ7oL&S$y]ZhӦefO&}ȑ#եKTeee%NAAA1b޽{kÆ ZvmGC ȑ#աCʕ+#T|eee .$M8Ip02@̌=zX;MxWӧ7^Kz뭷~Q >j>^h$QuEO$kz/['O\\\Xpv1kYǏ>>֎gHF}]kGeff7VZ'^S>}YBCC~Qj ױ͘1C:vVZx"]i,%`uŋ={?YsԩSegwlO֎PoYܤ.\_?*!!.H@7T1B&MÕ3gZN}5k(11Q{v4ѣ (XAii~mG+V}vX;UСC֎Pp31Zh^z%:uJ/~_l233e6e0(\#6mҭުɓ'+&&F9s&œjzbegg[; @ Pʎ9xEDDh4j֭3g:vhh6_i$5Q@*9^xOʕ+fX;}P͡ -Bf͚ ͞=[= uޝ(0?hzꩧ =cOgϞP͡@ سgt]wi:p?Ѯ;<" (ObmڴIS.]E" (\͚5KZr,X :Ѯ{={TAA&4lֿo:w^~e=S2֎vèzCm40&ڸqkر̙3)nݺM{v (4ÊWTTڵkݻw>P۶mdgg@ݻQ,(Psiƌ PFFV\K*00nxl .S^^>@ꫯM;vPll4([CYYt{99rD3gԳ>VZY;M_~:q i8@@[C с4k,'VҿIҾ} (کS`h˖-7o'lKx7%ɤ~[|||d3ڱ l MRsk .7O… XzAXXnbÆ zkddD׮] ֖Syjb奺BtЁڵkӤILLLXjw1tXBT(xyyq^z%C#* Cv-Z?&==8222ӧ`nnjaÆPju7oޜ /9 `jjʃX~=׮]+(gΜŋlܸ{RhӦ #G̜9ׯZ7of߾}Ywy]R`b%%%#bccY|9aaa%AgĠhPTsرR:!DIӿz-:t(fffK cǎ߿a Pϟ磏>ܻw~kkk͛sgooO||Ui4?λヒZ>(3 h"==3g^ҫ&j>5k2e]FQ:psY7GBCCIJJ";;4,YRUIpp0gΜÇETPLMMٴiyˣGؾ}sw8::2eʔ<˴fffYrJT*UB@)VBBW}[7ŋ$%%Jy:uٙkzb?<.%cggg4BCCh42 E?~<[+++"##BVӰaCO֭[GJJ 33,, 'GeӦMLLL_>GwȈ_|?Qh'''e˖qu>/GQùy&\\\5j/_FVӧO"##IOO/2!_ZhA155f͚ <###Ξ='̝;#Gboo̙3QݻRvm֭[͛7133ח͛cggǞ={8p |רjOF믿3ϊ:uN:8;;Ά u[Ih۶-;v(׋(N;8QJY:uŅTƍǢEC/ʲݻ3n8z쉥%ݺu^W^i0aǏe˖ܼy??uRض޸q`ʔ)L2u2au!(dRSSIJJA@N/eXegXYYallԩSiԨ .dҥ޽aÆѦM<;;;??yfӰaC gұcGlll QR1vXY`&MB0k,,--Sqqqzoipuueʕ,\F.{իYb'NԴX9wk֬rn[f k׮%55 `odff2~xׯ͛Yr%gȑ@Nb?u̙3WWWƏ7_}~) 6$/J+?ʕ+={6I&}֭;w,E)ܮ8JYׯryViڴ)m۶e„ 9}|Νܽ{W;--͛7YvU]6/K.eܹ3vX)j[̤{888бcG֯_/+!(d/2cΝ>dL4e̘1Jro>pBoݺŘ1cԭ[{Oy]{գ(^^^Z5 <'Ǣl޼Y=++GQ^=ZjammM^Yz5O>-6'OUUff&W^%11:Djj2lϞ=w3;;T{߿koH:uصk7o$99WWW^777*`~;w̶Y޽;ӧO… 4kJ,s+g‚֭[ӯ_?2333f hYYY.h4Q:')) www)n[=<<8y$ԫW]v#nBC=`ccß 7[ۯ (/FCjjj϶jc[v£-[bbb}jN2kjj*5k3b$r_ч:)=A>>>,Z۷o|6::'rY4iܹsҥK!;ӧO'..m۶}}q̰T ؘ.](( Cv+gk޽߿"##;g%y*V1j5C%>>^UK;ș3gr T*e,^7nԔYB=8z(.]"<<@rejjJN'NFԩS_'9mܾ}S駟bddĐ!CE| FQj{LsjnݺYs֥K>Uy!2˭c>RayV·i4/^Lll,JmӎHebc/) UVZg:5j`ƌ0M6Ѿ}{zIHH <</m6jժEHH۷g֬Y9r[[[ݙ3gjon'}6Ύs₇sA0|>#l2;Fff&fff4mڔj*kkkEÃЧOvÇ9tcǎ޽{"KE.r###(<)777c+III:@k633SF/ܹsܻwpllltu֥QF,YZK/ݻӧr;]1'W*,ςG1ѨQ#鈺Y;yyݸqɾ}Sr=???~,Jth9&&&dff>۪-X,BQQOw ظq# |y{{VVVhт`ɓ|+X[[Fƍ%%%EIzz:Ύ&MKbb"/&55///"""hܸ1Bbbb͉KKKx)iӦXYYFll, ???|}}gɒ%==bϞ=ѽ{wJpp0dddbŊ<$''ӬY39pxyy̡C4hXZZҾ}{RSSIIIرcERܹs 0`R/[=mժU-Wݺu  %o߾=/$'' L,A&M8~8w GGG._L.]pssܜ FRaff TA\\?̙3ԩS<==ILLdڵrv+!X[[gqQQQܸqTnP]n~~~ߟƍcee)JJÇיg#Zlɓ'O8wr!I&XYYaddDRRr'((ۓ˗iԨ۷ۛ;vίJ||<#!,,969<:533_~v9 â+˼yh>UJoF 6)CxNO&00 6zQJl!Dյw^ZjU&%COOSFU>,BQ{GDD@KT^2B!*}@ttCB!D'(B!4i7[n5t(B!E!Z޽E!eN:PBQٓk׮)B!( ҁ"BJ- WWW[C"B*L:PBQT*"""Xn.(BQjʴʪ,Հ :tPA&*5kҺukŠ]¢"*SY4t՞CT"##ɓI$BTL&])}M6xxxЫWҮH,^aÆXuB= ֭[RȌ3xwHNN.ϟ!!!űce{˗/yf:wL-pss7лܖ](RԩԮ]w{nN>]︻|mԩܿ_vSt҅͛ӨQ#ƌSzVEハ,rPѣu.-::UVwww֯_O6m N:*m Ο?JҒDN8޽{(z[hLzz:qqqdddӧO'''j5Æ #!!n޼9 ^rr>~z]Vjڼyp+V0t(JsδjՊ[nakkٳgWr̙Cft6j(ܹݭ[7FV /Э[7ԩCll,7o2OJ%##-[зo_T*Ui_ Ξ=[e:O퉏7tgm˪ᅲyI.]ĵk )Nrr2iiidggsw~j[lmmcȁx饗yEDD`eeO?#:t_ܜÇ|Oz`ӦM(5j[(ݞ>}ʞ={ҥKskE,Y$%%/0tP\ՕXnllL6mؼyLpĉ#r?+WO?-li)eŕw.^ƍw>M693sL_^jqqy>#?~ ?{xf޼y>w}\r(m677g„ ,Xٳgsر箷"HJJѣGZfUʹٖHtĉIIIF,\ZjUO bŊyM6+OIXX#F`3qD&L;wؾ};t֍wy vl/DV&EFF>,R^wYpttdʔ)àJԳeU ky q_ӧOuh"~Ge%)3rHOzX;;;Yb?ׯ/rFٙ{n9311y-j{kE+y%-[yߟǏsN߮]tvU_~7oV꫅^VSi-ɓ'@Fj>J-6SSS6mڤt#o(A[offfe+WDR\uV$3g$**ʫJ9>ٹsk.^u2uT6o̾}DGGYGseiaeܸq`ʔ)L2u2aj֬ùy&:uꄋ 7EێiiiEWUٹi׮[-[0j( C|7߿Ϡ2kӦ .\ --  ѣ177C2'''"##~:t҅ɓ'S~}|}}eܹ9{{{fΜIjjjt122Ϗ͛cggg}u'''"""hԨn"***g-?==ƍӪU+^x>3qqqlܸ+W!CPlٲ]vM6m>|8| 899YfMlmm:t(7&..UVqM ') C`ll3nbӢE 7oN͙5kC ӓwj*nݺLLLzj>k nĄp,--IOOظU٢M[)ԫWt_صkڵٮffftԉ:uLzz:6l֭[>{뭷 -/7JEFJe8z(1˗s}:uJ9Wo .Lƍk׮l۶Mr_FɌ37oA'C611!88Sn]… |'#*\Vܹܠ4ύь?___֭[W*۫Rj:޽;ƍrrRKKKuk@^E#_͟?/#1= C_w(i^YT\Ey{{GwFWu9#۴i666~|rLLLxb/Du#PT*ӧOޞ%K7?Rvme )C-[g}? , cccNJFXp!K.e 6L ͍իWb N8$*<.ٓ^{%Kh".] ֭[ٳ'*c͂ 4iYfaiiիW vڼK,]sرcz +ښLw;vd/<}iӦʕ+Yp!5R_ȹT{-k֬Yd})]ɓ'\t \\\HKKݝiӦ'|?yו6&,, zɦMXx1...̚5颫-cbb㏉aÆ>zk.=z -ݼyYYY vtvAJJ &88C02dȐr; z'OuVvYq<9,c0enݚ~ɘ1ctN4]yX_d.:mkq.sRXo={,ryּ9.jG͗4_533m۶LLPP=>iӦ$֡hHIIQFĸ<оt#p g˗Qj֬ :on͛7޽{g۴Nj$"ruuΝ;L>uUEI:O?e?u뒕U I&""Bzr#Fзo_bbbhԨQkcc111\vۭ3OsiQAi111Ɔ?(-LYvܽ{(ڑv+.:ϓnI,i{4W_g-g+K.7oT.gWrO^|uܿ_}$ٷo_+Duܷh:++B&?+NMMU~@{ĉ9{,M4aܹt <3}f„ k >+WvZ ꀣ!>yaѢEܾ}k@v,ʘ1c Yb|^ړEaIgi|fT*իG||<'OFVĄVZ=k~gf͚NÆ 2e ۷/ Ç%*_4ܝzwFRѹsg6lȵkJ8?m"5m2g/lݺ/pvNVZԤlraoorI=}~ѲeK&Ǒ3v1c'NlRSSg-: ёիWk;wdܸq1}t,X@t*)?}ΥEe˖(e)vػw/' YvJڞϛҢri ZfС+5jE;OѰxbbccyW l{n̵J#- %mC_]JFQFh5oޜL~'e>*[g}j {{{֭['(*?z_}ٌ1___LMMiѢ\;99i&nܸA=sEmFTT)))oߞYfΐ!C7nrpӧ2v΅{Bttt! M6x{{ӪU+pvvVNL'N 8 &«ʨQ}ګ&&&%*#bamm^^^tU{{{SӎEWUukݛ]<ܼy-[(ɦwDDk֬s5<[4mwww:ٳgٱcYfE2jӦ O.&888ѹsgcԩS)#ߥܟaauiO#ThOQ/^СC;///޽˞={{n̨]vW>|MާsǾk.n߾MǎLիW9p@m}<і}ˋݻ(ewؑA)LXX-[o={M~BVlC:uڶ44i!!!ݛ+Csw :mһwo"##+gE{>y-Z`<-g,?vzqrrru N?qq5eϊ+>|8vbРAXB,)LsiQssos3gΤF̘1CA[Zۛ6O+vе͏?fΜ9dddo繥ƍDFFR^=zZ~~~殯,U]eoZX/.%u'**^zIy%ݻwgʤZm۶޽{~3*H=zGٓ7x#E!Dn@p7nC_quuW^tڕd矕D~ʓW7n/))),ZL9|0vvv4i___Yxrb>|8XZZҾ}{RSS7VZU`r.# K.ʁ\vcǎ䄟dzdRRR'88VCXX2̌L^~eڵk LLL$11߬Y39pJ'ϡCe˖5k ˓;GQC}aFF9 AΝmW\xGbeeEpp0...xyyի"$$D@Kppj4 Ǐf͚_hذ! 4 ݛK.} ))˗/S~}:uD`` r>ǎ+r۞%*/&_a"##u8_Y f͚* ;;;7o믿^7Q>,Y3={4t(eaÆR/[=5jT]Y}G8::2zb511+"{ҪU29.UD?{ŋ4mڴrV!Qy󈈈pqʫOP2y:tLO$UUOxx8:B'BQRJ;W@޽"##JE&Mׯ׿ }jaYsڟ<<<4hjss"+/7###ƌÜ9s5kVOB!(N2o͛ǛoĉDE3m4"B!֬YCzz:cƌ1t(dĉeŌ7N%*p^xfϞmPBQIHBT@ 2h ԩcp٫oɓ'I௑R[l᧟~2t8B!E!*={pE&MdP[.]8vǎ#((xC$]vcǎL:С!!.\Hhh(͚53t(LJÇHPP7n0tHB0g9¶m B!*8@B dĉTr! ܹsIڴiC^x6t8B!E!*/ziPJ#YfpaC$1~CB!D&(BQ$$$_3vXT*)5j~SNtܙM6:$QG}ӧO B!*(@B djFaPʔ֭cСDFFtRC$3fW_:!BTP&@!DL ^{5 N366fɒ%XZZ2f2227nT&Mx뭷8p I!@B bܺu &:rcddĂ >}:ǏgنITcSNܜ3f:!BT@ҁ"… ի}\?qPAX[[3}t,Y…  B!*@B ĉDGGWGСCb 6LC$#G;cPBQHBTiݺ5Š͛߿??6tH166fر]v:!BT ҁ"vM֯_ JK/sNNJJCLǎٳ'&MPB!PHBW_}4t(Fؿ?ϟ',,:$Q̟?Wl2C"B B:P€Yd GT(~~~믿fܸqaYXYY?вeKBBB8q℡CU;.~!7o4t8B h ,,,t>/Dz111+166fȑR~Ct֍cǎ:$QŽ{ԫWOnUBQ8@e͛у:!*,>s éXnHQw}op$BTU&@T ̜9lll 55Uy=++M6}vbbb'xb~WjժѣG۷/ߨUcƌaɒ%jFmذ˒PTu}dVZž}8{,* 7777n̕+Wlmm?gϞ=DÇĄ!*'OrAgP$ccc Bxx8;vc(̚5'2h Zli萄x& !D(m۶ФI1coٳ2!*Ǐ_2j( NajjJTTAAAtMq,G}%SL1t(BBQ2ҁ"gxzzҿ<==9|0=ׯٳu ,ʊӧO/sEMFll,V ٳgcnnjڵky!oCvLMMٸq#:tk׮XQv4gzޝC SrdR2ǩLNmlv2gLchaHΧQ,aP>)Ǿ5Exrq~_~^~riҤ ͛7'44T8VJJ ~~~?ӨQ##2SNܼy'OJM3QdXV!OiRER^߅ J-&vf!^ůʹs?~Q5333݋#:u?T:(cV^?>3r`˖-:w?%B@ Pt͛}YyK;bѢEk׎-Z(333^zo^=PV-̙ 8zqDקO{@!DY (BQB\®]7nQPwFt$Q >ooo}]}_~E.A:t`˖-,[3f(GzzzX8.\t!B")@B I&(E]n: #ʀ _t!B)@B u?cƌQ:x̛7 &tQ8991zhrss#B$(B!!!!TT+E3`>t YjGaѢEJB!K2P:(nffQi\JII!00___ )OIV>>>קwޥJ޽{YYY\x VD Y&;?k!^F޽ׯC%11Q8BMxrrrr!(%R#.5t邹y)|wER066&((SV^=8x SLQ:qK,Tz(={,DBQ~Iٳ'ƅM```)'{nT*ػw/L۳rJϟϪU#tX*UX~={aŊJZrahhktڕʕ++L!)@ffft֭/OSSSv@*!ʧ{Y#LOO0:vXʩDi dڴi >\ݝ>s%-Xh,M!J~Y`={B sN(*+WңGR'зo_ǹs甎#tiذaB+^ ___ !D$(:K.OUȠ_~ %|*oFF*'T*=t֍۷o+I(CCC֮]Kll,3fP:R&&&###4###zɄ|bdd/O :u`*!ʟ;w[RG1vX %k.ݻ7JG:ɉs2k,;tGFFoM!J蘾}\8B=Ǐ#7UVUmii)m !D)IjՀ~yW8KNN=:w,]Jp2 i&6lٳ#tk׮޽{9R8B FFFt,!(WE3`jժ‰(_,_\ϕ .Dpp1;v,qqqJ:,55+'CŹM8ӧO{LFJ)(K4iǏu4o\HѣyQ?\$gbb’%K]QB#TJ۷kkk<\cn߾f* +++*VtrrrHJJ\N/rKOOˋwr TR EYn"&&慅Q+%%gcm͛ɹPLޱpQVhӷV:FOdd1 hҤN !Ë\njپ};...ӇKAxalܸ͛3|p6mڤtrC5+$$DBQp_! kkkÉb̙J:֖kʕ+#BE!8777fϞʹi8|qe33g(G!(E!(&L >}tΝKW.BeHBQB;*T!C3m[ Y~=;V8B!D&(B!D R DDD|reooϊ+Xf k׮U:BQnIPBwww>>C]t~mFѣU:(r(G1Bиqc1b?K.uV =ڵkGժUWt,! Oٳg_~AR)Iŀ8r&&&JG&Bݤ$""5j޽Kұx+Wѣ(G *yf.^(Qr(M PTfff/Y{9ժUcذa&䐚ʲeˤZM6eĉL4ׯ+G(ggg6l+XtqD {@!^RRYXX0f*Ut!Jx!_~%j"((H(Buޝ>qq-$BQ2-a``*T -- }}}ԯѢE 7n%OOOj֬IZZ:uЦMlllHKK#00 6(yBhT&Mhܸ1FFFT\@8s 4k֌y1l0UөX"z֭[XXXPjU6mč7066Yf+""wy$V^!{ΎDV^]ccc:vHթUiiiqMF,]///֯_O$tٳ9}4'OzJG/IBwH -R6mbǎDEEQJ<999FʕPGkFhh(aaaDGGӳgO4i¾}(K1w|oܸ<<<͍{KVVcƌ֖۷vZlmmU322z*ZFnݺ:88憛S^ufϟϮ]>}: .T:QVVVg}ٳ$^ !n-иqcn߾]`zbQ;::l=Z1 yIJJJQQQұcGLMM100@OO嗑Դ4u @ݺuIHH`ԩQTZiӦ1n8 ґjݺ5_5cƌe˖[H=Bi£U /Bկ_SȞ={HOOrVZ'/߂hРQ5jfȐ!ZwB7=By:/T*tKKK\\\C0h rss9w ܹs666xyyҲE٦Ϝ9sؽ{7J:ᆪ~ի!pv{@!_bb"7of̙b䪪"""ɡW^899ahh:{ҢE &L@޽;dͱU`˄(9@/to077www}uB򖝿vɿpm8p [{⹺v튏|999J:Ąm۶qtQLr(DOi߾=mڴyn8M;úuJ)r'(Zڵk|ܺu#F0m4ի׉t9;v$==3grIlll֭^Z}x '--~ݻIMM[nңG򜜜pvvjժ333bŊdee_s7ooMJXr%O<)"tW_}ٳg U:quaڵtQ r(DYt)&L`ԩرsrrbPSsb9OLL JG)3㉌,N%T*W:BGu9rK.ahhXbG}7|CTTJ aaaH a+ESy^XX 6$;;/rT* 4… E(B!¦O΍7XfQD0sLի JB_rwB0B!ׯsaȐ!#Dqm6ڴiTPAXBFAjjXK-3993fOFFΝQF|gXXXҥK9wUTرcٓI&ǥK}z.Q:L!| .\`JGeDN={6SLaϞ=JBwj}=z0ↆ 2D'((-ZIOO'++^t)fffL0WWWRRR\ƶM<!ZiӦtܙy)E!~!_~?^8Bj\vtkkkT½{Y8;;S~}bos):vHLL Z%D )@BU\-[yMMMK!ыL%I:iGqq;tQ,Y'''zŃ#:+޽{ L~:>>>lgT<׮]c˖- 2J 77uϜ9?@vv6}L8;;쌅s-J7ޠQF$&&Rre.\ǟ?K.u֒/ښ/I&RY… iѢ۷'11};.oߎ7M4#G{%-:uzLJRѱcGݩZ*n~駟rE7CCC|||hܸ1vvvEYijxYyzzBpp0mڴQ:(#LLLرcZߟt,W{~B222|&MDxx8~-m۶3;wawܺu'N̑#G#99ǏSfM,-- `… >իQSK2w>Ty͉ӪU+.\P'uE '_~f͚p%q/PVRߟڵks!9B͚5yh۶mY&lݺkתEEEq'P~$""5j>ߕ~<볶5j[nQDbccCxx8QQQ|J)wyUTa4hЀ/ >sZoRRՕiӦ1n8<==ٴiS 5Q!ciivRϓJtt4=z~#%%.YժUcȐ!|W /IRʁJ}]E?.233yqKj[}\fffѣRibiiIJXbzٳg7n:u"::ժU ׯOLLLio%>ߕ~<u}f}eҤI\R rssg8::2tP#gSB3*UՅ(/ޞ`zy٩fСڵ+Ps>(yRG\\\.\wwb/‚1c8ߥ^ҒSNJbJǏ177/}'Nx͛sKȣ甗yu,[쥪 , `„ =X͉JB5*.\tLeJ WS%%%<FOO-Zиqc,--?>mڴƆ4ٰatؑիSV- ͛ӬY3r"""xwHJJbһwoHLLd$$$skLJhWֹryRSS 00g1ڵko﷉'bkkKfh֬cذaTVӧR`])y&[l)CxҰŅ͛3|qpp 11p._А;vprrrpuue[ B< 8{{{ ƍ?梯OZy&{%--&Mиqc7ň3߿?ܺuPn޼ɟY200ʕ+/Y;;;Tȿ>PiiicddT=ڶI͚5IKKSNq:٢JN#űcpttdȐ!\K.|PũRׯ'Odڵ̚5\&L \zVZQF ԔWWW ,,u v*r´lٲ;?J,,,شi;v ***UmPzzz5^{PˆgϞ4iw(}男|Mύ:~VGԮ]Ν;rJ2А-[```@=HKKS:RPk !V I^Aѕn777K/_qrrRJ;|$%%D9piiiܸqRn˯TffftJΝ;Uucjj7X~V~KKKʕ+G&..P ]Wau\ڵ8رctm?Pgٹs'/_ܹ===$33S7@֭9r3st=Ν;GJJ7|+++>z{RZ5tBRR޽{wϟÇE8G^X~=W^-VF6HӦM*@ҦMTw)PVmСNNNݻWGvZ._\hj符3g0v"|VGW >_)EAժU#""+WЧOB߄ȵJB;Iv-X/?ݴ'T+[. L:7W~iiiOUݰaߟ֭[iӦrUuՕ3gY-wYEVVOߟZjeߙ3g ÇDGG]HNNA߿!:rssysppxx+<{奥Z[n\tI] 5j m5n۷o?+Oq-85 ;;G8&YMyS SJS*???Yf _|qDdggǶm?~nȵJB;I 0>VO!dO<Ɍ3pu?,{e...8qUUv_hycЧ>őwSfly_:yfbΝ/VZ=UVZ5>NRm+D*v%uj(gytY9!ڵk?>˖-S:NT*B'(%ɓX`z ~)&$$`hhn// /of…X===u 6xj#Ë﷢*,,,8w -?ҥKi~//BkIZ^myVZ9;;caa={ V~f466qOj8;;8ۖ$W}?....f.c}PNEq>+MS 6k׮/(Ea|駌;H)V=B(K P4$?3i׮#E<<<طo͟dͱ?1p@ZnM PEPX?+y7_/goooy;ܿ8D繺SZE~~~XYY奮аaCu?EsQ%gXqwCW+ ..Ç<899q-""" sAZSW}\ϗ8?:tPsb޶?o&^^^xyyѡC.evܴiSݻWh﷈rrrիNNNކv۶J-0a۷{rܹBkqg{}N/z\4i҄oFX>+M͓볮hРnnnZJ(/wxg]c^Z !vҟ̖-[HHHנA:wLڵ111!==LuuK.uԡm۶oOE.___ի iii$$$#\xN>Mqvvё$6nHjj*+WLLLz*xzzR066ڵk 6611 zꅋ hт4BCCݼ"))g-M_~%E166fر{xիҢE ׯϡC[./_&))Dz~ۼy34o *C ]WjΎ *y길y&nݚ_ggg޽ƍ122*r[X"ܻw###^u6lPǏ_>GUC'%%E}\^tN:ѢE B?oooDZc033ӓ^{ '''RRRX~=ٴo^}\ru<==54 e̘1XYYѨQ֭˚5kHMMN:Ԯ]pwޝ/r<ҥKұcGIIIȈܹomKOO'&& ԩ>~P|y{y@ESEժU5{޽cǎ}geccyš ױL;vlJ/?#=}U̗uϟ'<<@ x58׼:-+111癅EB-[ЧOB+`S`T j V/ZHVVM6 kkk;| g~Nun m%''cccŋ:tb9Dp]ڴi5?S( # Ç+L aO ,Di;N" i#(vڽԈDltTR???֭[tQTV]vqy 5?!JaEu5jP:}?믿N߾}144Dkb%Džv0`=zի)GqNNNl޼???f̘g}t$!BqRE [[[:te˸sq=cccz^888<5'77KҎ*JڭK.XZZqFrSN̟?Sm6!(T:t-[_2zhڴiC>}FxNzz:[ne֭Ϝݻ|祔J(M fhhH@@֭cʔ)Jĸq|2'227xCHB!b(,Z7o믿̙3Uv-c !V0`.\W:(G[zM.]8sqBH(Uzzzk׮?`eeG}Dݺu޽;֭#))IBuZnM 3YQT*+WUV+I!PTPmƭ[X|9 6 kkk:uIJeHHHP:Bh@6nHffQD9bdd֭[Z*CBrI PVR  b߾}ٳ'JGB!Jcjj[oÇfŊl{{{ƍGtt4999JBRUNݥP- 4HB+2 O>t2E__;_5QQQر;vL:uK.t33./22!ʧW}#*UtQ4nܘ۷oG1o<#s\5@7e*777W">>^kkk<<<4\bbbػw/|}}~O/**DfBi111={N:J*SJ:*߿OZo6lqD9a … 7nq^ɓ'OطoJGy 0a<>(ES)DR"ʄ~gþ}qVVVtܙzN:QJc Qbrssٳgf~m۶LPD`ff7;w'@`` 3w\e$$J[oűc8|0t֍-Z*AÆ ĉ>}Z(/1b ::Z8B!DQ&9;;3yd"""u7nٙ`ZlAAAlٲG)Wrwwgݜ:uF1tP6mJhh(YYYJၓVR:(.\H۶mի/_V:BQbEyUVO>);#F >>~aees%66VBhLf /:C Qdff*OhСCYnJG嘑[nf͚tܙ# !%B PDvJBB7쌃AAA޽'O(YW֭[9wZbذaԫWoǏ+OΝ;"ʹ*U1ܾ}[HB!I'B >ٷoqqq兏>>>ԫWOB۷owߒСCxה&^BVqm۶FOTXQHet)D"4Mjر#'66xf͚Enn.1ޞ ùґx)VVVL:3fc8p ΝS:xA'NɓJG[[[ǟIϞ=IOOW:B1R"D9r$۷o;w 0`>[lÇJGTXqb N:Eƍ՝ ТE YpQ}߾};v!C(`B! )@s}"""ӧ111`iiI˖-裏F3 8p gϞ-0 dgg+Q<ٵk.\P:nݚ͛7رc#BhLMMfΜ9$$$?i׮VVVµkה,D>_QEtbl޼޽{+Gɨ"B/BӤERHTTݻ7oRBx ڶm;)Udddi&͛Gll,;vdرtJtroҥ7 .`oot!rrr0`;w$22777#,y |&(B((++'Np!~WIIIZjxzzҾ}{hذ< ܹsٻw/M4aĉCCC[899U#Dt֍Ǐs!7nt$$B/BӤE-Odd$ܻw+憷74o\q;BCC177'((cRjUK֭cȐ!={'''Q@FFݺu#&&_ *I'4)@BǑ#G䧟~TT֭[K*W^eѢEZ ΨQ]ʕ,5jDٸqqxJjj*o&>|;;;#y |&(B萢 TWN֭qwwۛ-ZH’%Ky&=z`̘1o^hݻ֭G8B<%99:ÇQ:ΐB!OiR"+@ OOOuR"?LHH۶mΎaÆ1|p,,,WۗGry*Vt!rڷoRH:A(>9_IeHFFsCq1RSSqppڶmK*ʙ?+VBVV}eر2 r JLLɉaÆ1o<Q7oҮ];WNdd$*UR:֓B!OiR"D@;vGacczƍt\Q (L8{,-[dƌ|JHgΜ ___BCC@(D"4M P9_IRSS9yOtt4/o^8B<Ӛ5kxw5k'OV:?%E PIh!Dٙ|rΟ?σӧIIIL+}_i-Orrr8z(֭cdggӭ[7 /JGtЁ7nґxE1a,Yȑ#҈/s!4AjMBWK% ѣG8vW&33:uꊫ+ZŅ+*ӹ>dddIfbccR #F`ٲeZnQ{1| W\ٳpBu笱?VZ HNN~%IOOwwwݙ7o7o&44nݺakkK`` AAA)Uq*TITTƍGVVG{OHvZ !6(BFLL ǏWz*899ѪU+Zj+M4P/,''N:akkիQT\r ERѠAeРAL2GGG:uę3g|2+Wٙ[nq]T*=z $$++Qbcc eժUܻw6m0p@s:t 33_~# L}gfڵ*e˖ry=EH iBgĉٴik׮,]333&L+)))T\D4333ȡCt.aaa4k֌F1k,]tRgmm͑#G͍g*I"T*:t(ڵKHZ]υB R"(sfԩ޽۷osMnJ׮]eȑ4jsssu̖-[u떢ٯ^ @rrr\zjx9u;v$&&wwwVZU*JRz1cΝk׮,^;;;:uj*L177g߾}ҩS'bbb$DT*K.e„ ?;,+{f( V@(*A5vž1X|5f5&1nt7ku-QcTlQX@ U))?\A.za9{<Ϝs:$v$ѵs"  ;vĤIvZ"++ AAAX~=lllp̞=;vD=oc֭v-gȓ . xqNNN(**¦M*'""B\ `gg???:tJys4%ظq#RRRp5 4~-lmm1h lݺO<;fk۶-aÆٳbG"_˗c8|q?ω%"O"$$!!!Fhh(!Jagg}o߾pssC>}`bb !!!@۶mqA 4AAA:u*[[[t kqpqqAll,.\#F 228vr9 sssT*k~kh ooo?~JG̙31cƌlYY>ݻ۷oǒ%KĎDT-Z+Wbؿ?Ν+vU(f@@?ω^Ȓ֮]VDDMucΜ9Xr%VZqơSNx1Ξ=͛7cƍرcΟ?PdffBKK ЩS' 6 öm۰{nPaeesss\t 1bDo׮]d2L:p.]Ν;7ڶm Xf ǏwqZ---888`ڴixѱcGܼy۷oǮ]6mڠK. FXd2&O mmm|HOOѣ%v4J$ Ǝl|gر7`ҥ<'z̙3ENB-Gѳgp ?QQQPT0113܄''':СC L2^^^1btttĎQW\;v bG"ZƊ+ƴiĎ :QB TUTR1\\\v"##ѣG:_MKJJ/3gʕ+ȑ#1sLL>`aa!һwo-n*Hkx{{ŋP*x70sL̚5 :t;b<{ ;իWcݺuCMJҥKo>/7nؑ4'D i (DD(''ʢZz޽{}􁋋 ŎMuTPP˗/'ODAA<<<0i$xyyN숯m߾}9rY \* K,I&IcxBHT{|BD$2ܹsGlnggg899q]f&//>>>8qΝ;"&LѧOf\޹sgFFFa޼ybG"DVO>֭[{n,X@HB4"&*--BQZ\.GϞ=+U8Z+**/Μ9C?~<ƍѣGC.Vc׮]?ssscU_bعs'.\(vz !QB Q3SU(ZZZPT0`@/L '>>Oƙ3gR>}`ԨQ8q"<==蔀;֭[1|#Ui&|gغu+>C Oj4Pܻwwŝ;wpRvvvpuuEϞ=₞={Ɔ 61ٳgqE<{ ݺuøqob000;f|r>| ,͛Ѷm[cU7`?+W񄐨~!McR*ݻwqmܻwHNN z \\\ЫW/Nh"JJJ3g… . c7DϞ=ŎYɱcǰ|rj(Xl֮]?\8'D i (DDHii)bcc+L.,agg'LrvvFϞ=Ѿ}{nr Tk#FQ0atIB7|7x,v,"Ν;tROƍŎSgԴBQ }E6mDN(Jŋx"V1`;#GD-j@,]<_|'5QCa㏱i& Oj4PJ 111GXXo||}K.ŋÃ`hhcȑ1b\]]EY󦬬 ?n:t[lq=QU=yaѢEؾ}{_Oj4PNSa Jmmm #Uѭ[7@WWW-^FF燀DDD5jF>}4jAѣGXf 8aÆa۶mpqqis̘1 ,, !QB iDFF){}C mdx">C$&&bժU`hh(}Uܹs[o;v4" Oj4PA!66h<|PҥKaJy* o *x:wCbȐ!:t(,Cii)6oތ_}.\--U\I&aĉؿy=ѣ(..n۱c`mzzz5k=#QS i (DD$L#**ȕL/H⊕UY9pedee Qk|ج,-[о}{[o6[͵k0a8x` VXI&aرcƌL&FƔ׽RT*QF5Z64PI)))A\\\ktݺu0jW^bo+W(((nnn駟̙36l]#mխ[0vXxxxرcӃZƼyp!tvR#//###W"z (i,Q%XBdd$Z L8::Gѣ𻩩񛥲2ʕ+z*}}} vի+W`ոu&Ou֡gϞ1vX'NիwARA*b-ϢEo>V]GG ,B 5k III0b%,,Lݻw0j[npvvu"00o߆JB0h xzz  xo?!!!5jO> 'D+bffXe$%%ȨQ\|#G|}(yPHX@!"IT"!!A-ZprrB={{{.`[KyyyF@@"U( 4#T*= qqq7o>37-[*kiiaڵ5JeFFF-,,ѣ& "1B :UR>jF/4]  D@@^Dd2888T\c[JӧO?E߾}ioڵk/^\xRV[+Ww}Wi-[͛77J4PшALL <}˅vvvG=`ggh'S͉JBdd$_@\~{{{xxxpttL&ԆZƙ3gi&k֬ĉy8ooo̙3j6>clܸQ2cnDUc4""Zx)/ܿC~~>@WWFt ={DEރٳgs0J% ҂=܄*&\x7nocʕ1cjs޼y077лHǏaeej'F{ow nA|||OB Q=( $&&"&&蕘$''R)v*Zqppw++F$jSU\\;w $$nBHHR`aawwwpww7ĉر#/_EUJaa!Ǐǯʢ > _5n݊lHR(*﫭Kb۶m/ƍQVV&g᫯j#PHX@!""j B1%66шFll,rrr<_ݻw~ʋ+y/QVVj?tss:w`>|`|pppں~:<==+ߦM߿^^^_Μ9$aiŕ s/1eeem4DDDԜBDDDdff333߿6R$$$ÇB%88GG1fffF\`>}͛(..|XCCC@*"??_X`VPjZDDDDT"""L+++ U)rЋ?w'(S;[nС{O.]]l~-q9ת(**BII ,YիWSNwQ̞=GZ2P nnn W$=.]k׮ڵ+tuu+PF=;yIX""" (DDD$*\WWWVIIIHNNFRRPdINNF`` ):`iiYTe兔{bϞ=;w. i~'c4]]]XHOO ,E$\|YkuJKK?3<ӧc"""jX@!""fpwwp{dd$jFcǎĉH-˃pMVQRRCCC888wuZ6w^ZZZHMMڷo& IDAT2dggCP`ժU022hDD (DDDb%''>2 (..L&C^СC={Rsekk]bÆ 011;PՈs}뷬 ڵkabbE k.(zS׻"@*v"""LV6]]]H ԩS'̝;[nExx8JJJcbĥf|tH$ppp… P(paat&( xzz œi7''ǏWDD- GQ JD޽; "'#FSpu :T#U* V]xݿ<:tj "jiX@!""k„ Jׯ#Q+ӧO#>>^(իJP*Ȁ }}}ϧ鄄 ##zzzHNN#<==kJRܸqB{cǎeffر#J%駟Ν;̄Μ9'6""j^X@!""ݽ²DEOO;wDϞ=1l0@AAك(,Y:::8r 0m4H$033C=jݿZ 333o>|GѣG3̛7DXvȐ!|2 Yu?55XlY8q"N<޽{?~||DDCDDDDT*ˆ 300RXXήwEiiim* uZ,Ynݺ!-- {۷7QK ) \t r&111EǎW^p\ܿR?5]%eee p{ff&~ڵkcPT|pB q k)_DPTѣG8<[o r<==`](((@XX"""o>8::ٳgHKKìYPЮ];#//666x RSSnܸ777>>>ժtXZZj5_,QRR0%77?d2 J޽{CGGGx6{=\z'OR) 0|HRaERRiӦUh x).]xvq9DEE!669),,Ν;ѧOƍ9.\@DD (DD$BGٳvZ5 k׮?\H)g9zI(DDDDDDDD +BDDDDDDD , (DDDDDDDD +BDDDDDٳgիWŎbKKDDDDɃpMVQRRCCC888wh ػw/tuuabb---BKK ۷GYYP(j*ijy233aȐ!bGzP<}IIIP(2e ŎUBT|嗍VVoߎUVаQ&jX@!"""jDڵ+6l;Z?;w.ڷo~`mm?]&&&XhvBwO>qiZ~VcǎEHHF{cYDž~)JKK믿u68---xxx ((j 'D/"""K. .wYXp! >2eP('UiӦ oNN?^6ֲ5y5\{,`A*BOOgFNgcֆAV={6zDMG5ZX")) zFSN:tFA&~H$O^^:$ʷ捩gcxcYBu\8::aHJ%SLA۶mk݆N>xR\\WB*BT"##2d< !99*# JKKq dgg ;VVϣcǎP* §~;w 33zzz8s &NXm_j7n@jj*pm(Jaڵkaaah"&&K.ӧ333LŸq`iiY~<_ꎵ.XZZ(ӧs 1m4( "%%ڵôi`nnZDDD 22.Μ9dkcƌU^;/Xŋ=Ncȑpuuk-&&111(++ógpT*U>ۚ(JzzzP*s@"zO߱^yZ#N!"""Ҁ\~[n+V`ĉu* !sN`ԨQ;v,;v* GAzz:L7|}ԿZ0uT,^CII ѣHKKÈ#0f888@P X<7oŋ?~<&N7|ၵk׾2Gǎ|ܺu o&f̘T9sRTTL[n!77wСCakk LC5jLǏ EW=O5W53jkkSNGff&tuu#55B\\fΜw}iii8p̊\ܼy „ {ɓ'yYUś9222,,X>*?U> =Q8x 0~x9ógτhsדZFxx8\\\jKZq Q=EEEɓo~ .T*E, 0d/v ,_\ӻwoHG T%99wݻw+mKLL= PTT7ob>|xÈX999ɯ̑{{{!++Kcll CCCTX8֭煜c)JjUSPPF]mթXהQ";CCCr91h ϋ/3TZḌ9R( ¤I*ekttt0uT޽?Ю]Z?&ZZZҥKťK^~=zkܽ{m۶055OM}zJLLDqq1}Z"PꩠŰe ֆRDAA,,,@((\)?!JNNraL&C>}jj*ͱlٲj3qD}:T*._,ܷ/fᅬ1c`Μ94hp]R6~Wϯ`>x^:œ+8JL/333xxxZz*_KIIIAZZpwww{qU)T~yϱ-7p@DFFFFFڵ+RRRM}Tz S.wNZ֮]VDDDDMq1 6҂6m 11HJJµkאb<|P8)_uҤI066ڒdիq-#!!8q"d2tuu|y={ W^}c2\kkk<~7o6mڠ vvv022B۶mZρ^OƍÅ 0rHzΕ+W0sL8;;7`̙"'Bn}DDDDѣG1{l{u= #sj5󑐐 .`"'lݶoߎ'O}@vZUxKyGZ BDDDD'NpD"\.G.]^[p"" 5$cxq-T\t ^^^b#T\K,`ڴiǽ{ sss^^^\RD0=}pn"֌""""jt0a1 :::=z4F-v"&Sx^"""""""W`X@!"""""""z."KDDDTP#Q K:uLӧOYdԩ1 (DDDD/B;Qx"Ə۷cҥb!"jҸ Q+5foG}~M8DDM (DDDDDի1k,̜9b!"jX@!""""jv[[[xyy@8DDM (DDDDDN<'O߆Z;Q Cٳg~z59,;v_~ ooo5)1 ϟP,\=z@Ϟ=ŎDD$p Uyf <'OFffqPL@KK ӧOGiiؑD UҶm[:u '|"v""ѱBDDDDDUrtt޽{;v;X@!""""jM2k׮/v""ѰBDDDDD5_///̞=b!" (DDDDDT#D;wɓQXX(v$"F >?4̟?jZHDD"""""+++?~OƍŎCDԨX@!""""Z4hlق/8}q (DDDDDT'|/^z b!"j,Qm۶ nnn\t wޅD"ڢ[ngjjZq۶m/ >;--- 2AQ 5}?~m888`…̙3ݻW(RRΝ; ikkwxF"jxc"""""jp'|e˖!88X'$$>}Zeee@Q*DDUaŦM0rHL:m|Ʌ ~6lJ%Cx{{ + $挋Q˃r9\]]]mĠAS"??qqqE~~>r9:uꄔAOOˆ"j}8݅ 0a|7Xbq4@!""""F7vXlذ+WD"OTTTeDLD(֬Y{ܹsy&ĎT+O:q fݰɓ| b" FOO'OD^^̙R)v$"*BDDDDDС;~ _|q _b!"Q`C.v$""GQyf 83fǏŎCD$` ---=z:::BIIؑBDDDDDML۶mq)cҥb!" 5Aطoۇ۷"""""jL/+W˗ŎCD (DDDDDd}>}:fΜ8Q+ 5Y?#lll0ydZ)PI̟?*k׮o),Qgee'NܹsF IDATw؁ÇcժUHHH1!t,Q0h |Xn:?Xd J%d28 vD"j$jZ-v"""""ښ={6N:BB!ޥK$&&B"Yf=*rj)8\rJB$R2"jX@!""""f4hQVVVi6'B2"j X@!""""&履~+MyQYY9ReqX@!""""&rZZZ5///ΝkTDԚBDDDDDMބ %K@*B&Uy?Lݻw7r:"j X@!""""f۶mí[ Bٳg%BB"jX@!""""fO> hkkWخV-R:"jX@!""""fG*bňìY HQT*#rB"jiX@!""""f KKKhkkCV֭[xy k"""j._8cQ+2fX[[7X\[f |||pET*XǏp¦EOOśQZ@ii)}}}G}ݻ̙ٳg#00DMZƿ/bH$̄pT GGGܹ۷wA.w߅D"kptǏǯ \ Q  Q3~cǎHHHy`bb.] LmLSSS$$$x~Rhmm 077СC:tÇl2qߐ;v ǎƍ=zt3&!** 05fffⱗ/_Fdd$׿ 8p d2E BDDDLILLL*o#//vӧOQRRB!lj-2";wW\#,, `aaQ/{N&a ."KDDDܼyÆ VZ[PP$VڦT*5Qcx N+(( T`Yr%$ F  Z]vQ\\n?XSȓqVVVgVx?eee!44T[Ri %55CDDDĕ@i8+( hiu999gr??KBșM33M3f;q̐CI!6񫌜˹L()SJ_WS)Ovs3?纮uߺ%UCBB033B @JZO}777pqqٳ})S =kf-[y#Ν @tt46lƆ]v;wXh# 5k2vXXt)ӦMŋT^:p]صkqqq۷CCC~a֭ܿaÆahh~)BAi_N!BFѰtR>#!GGGJ,oC_Ҽy<;FQ舏jG)pҮI^_E"=PB!B!^A (B!B! !B!BWB!B!+HE!B!"B!y9%JP;(B BÇCn߾ѣGr NNNjݻw ٳg4k֌J*I$11e˪C!R@B!+%&&tRKHHׯ_W;(oߩ]v*TZFW_})|ܼyrnܸmt\|;w77nȵLgΜa֬Y`llL׮])11CCCc"D! qttŋzyT<3biis2~mL7|fffٓm۶n{ f͚keLxx8 ,`ѦM֭[ѣs8jg1qD֭ FFF~^,!!RJC!R@B!'Odܹ>_dI*Tǽv_um*.癕fueVe6Bvx^7oחKŋiѢ7fpnYz5W\aСg{QFѳgOݿܹï ޽[zY IE!(RRRO>ݛGcbbpppݻg~xk_δl///?~6_|'SU:uFz?E޹so1D"s!PRR~~~,^(뇛5kLqqqD|||v>|;Z$"##_>cƌ}SV\)S 'OgϞ|pLLL8q"'{e޽wH:u_tY3knݺ;vݻw{nmW_}ŵkػw/N:ܸq7n?ҰaL38㙚fx2\|9ӌڵ{ru:u*UTa…$&&2sLBBBݝu( Nbر???&MDpp0L6VZeo]sB@@,XOOO6o̤I{Mtޝ`֮]˲epsscȐ! >))):u0޽9z(111*Uk2p@ u}qmJ*=ժU#11ӧOڱf+WaÆƍr +WfذaTRE#&&j֬Irr2,X%K+RRR("WI!y1K.e˖L6ݻsq\]]ORRR8p 7n`֬YL4s֭tm###~O'C?ΰa_~aƌ|g̞= +V݀*O^psschZfxĈ2qDNJIHHȰo̜9ٳgꊋ7n2GӦMټy3^3fdN>ĉ_y.qqqzj_Ά 3f ;vD__ɓqssܹs|W^{eydv,3,Y+++lM2eرcOl28sn>ݻYbFbΜ9s fo]ˆ 퍥%qE6l؀]ccc Ņ={ТE ;._n'OaO]v駟鉇WFQ<͞.]@͚53f G̟?'}Z- 4 ((OEaݺuXYY1d&OF͍ Uܼy%K'Νё &pU|}}ڵkݛO?Mp-?111<jժE!E!(&vѣ)U_~%L2naٷon"ƚ5kRF \'W\I-v =z4NNN,\+rajSGOO/^/=5w!.._Çwx>(n^z1ydN<ǎښʕ+seƌ@jըX"gΜyeNښUꮣ)۷`ȑkVD ʕ+yŔ)S2=^fYej\Ŋر#UT!**QFŊ+ri];/^I& }b ː!C2ߓfҥKs.\iӦTX2eаaCʕ+۷ҵ#|HFhܸq-ݻxϴeHY^j'0b̜>}urL;w.Gٙ72k֬LAi޼9d޽ٓСCl*n߾6Ү鿇 <믿yydxR֯ʘ*(ݴzIdqvv&222K.F# V^z4i҄^':mٲe[.eʔo?(##t?իdRvV鉊J*L>=GXRMرc_䒨( ZQD"CxBbbРA8pի3h lllغuk7׮]umH KtttӾ511-Uω{ ׮]{id ?ڵ#44?gcƌfر̜9Yf1ydƎq.9v:uVZ7ҥKg}v^92=Nnf/JII!**Uٳꫯh۶-,_5k丝QU\GVH|bDbb"w!11rcIw+++LBz*ȑ#oܮH=TFLWuHE!(Fիǂ 8vڵcܸqk׎O궫U@lطo_ӾСM6=Ftt4۶mśۺu뒐Eҵ{uժU ___/^Lrrry(sLdd$;v`ԩXoFvvrʛ1f4 ]vMwN/$xy=^GV:;sSZA.Q!;aFŋӣG܈pfrJQ߿?666dzi&nJ=^}UO4i=!r2j֬ϟ?y/R IIIٳ'61118p`ΝTT1c_֭[߸]gϞI&jEPBbJ*L6'O2p@x_Թ-J(?ÇIHH 00Pw_MzuKgذa|-[۷ӯ_?駟8qrܼys4jժcǎeӦM2m4Пe˖閏裏011<2pB9vĉ\tI7cvr}+b mΤl֫7'66`֭[! ƍ/gv^2v'OK.bċ>|:u+ٹ4n8]O3'O̙3ݛv1d,Y[%^%wLv{/͛@J3gn~rڵDٓWrAR s1k,oΣGرc̟?LRR[lalڴx{{MժUiܸq9ټy3:|QFZ۷7N[66 d׮]@pJ*閦PGۗur ._L޽Zjקo߾IIIY/3Y]2i///N8Ǐi޼9W\aʕ(B||<͚5cCsj׮MRQzu>}JPP.]W`BBBx!eʔ^z|YwBCC9{,̎;5jFppn+ҸqLk ˗?Ow-9¢E8{,O<ȈRJqعs'ʕcɒ%ۗz+aRF &_ˋX;ƠA6lXyӭF\\\x=wVEDDDpi]ƍ71bDCٵk/^$!!###VJٲeАji֬o&<dǎ\|D,,,uBQUGCdhhlڴ'OSBBB022bȐ!*U*kѨQlS%$$0aF!E4JQXL!(4 K.壏>R;JqFݻǗ_~ ~+ˑ#Gpvv&<<\[tRTUVvںydr #%K|i9ܤh/i޼y(qtt{{{tЁ(~m"DVB!D3|~g"""tiZTBeKdWE쯿\'"IE!ǁ=[ Q3gΰd<<}JՎJBÆ ]6ZtVyzs- RJ%yZlv ՅΒ%KԎ"0<B!T#W΃tjIJJ"%%}J(Aҥ9pVVVP:t(ofǎjGɖǏ?J 5kFѨM#|+W[("ӦMcժU\rE~6<#{!B(eʔVZz$%%aD___'9\3}t.\@Ν:t(-[$ @h)QjHIIaG'"OIE!̙33,&&&;vL'9P (iWΪU8vt[[[.]v4Q Hںu+.]bԨQjGEPBQՋ&Md9ׅe˖%00c¯PҼuVΝ;G prr"..NhJ|@:uԎ"8)!QkkL{HJ[[["""7o+Wvڸ3"H (ӧ9x NNNjGŀPBQ:tVZF*U^ϞV< k**t bʔ)4mڔ 6M1R@)iڴ)ݺuS;("Bȑ#mۖΝ;oΜ9smbA*%-R%[o;gϞiӦӵkWN>v4QDHy&eo"BU]x{{{ڷo>4hЀPre4 g)X@IS^=|}}ٻw/wBN (FFF 8P(B!TqMiذ!ϟ?jJ'OFQJ*yTL]4J]r)ҒI&cBJ (ݻw?>NNN.]Z8B!Ç4iu?dڵd:~/`RMǎ0`666\xgggՎV,Jjժ166SNX[[v4QH1cիWgĈjGŌPBg]=VVVs9TъZ@I{q!nJTT͚5ё۷oM`R@)Yf ...G3R@B!DKIIaҥ;n:oNzԎ&J[[[Ν;'~~~ԫWWWWՎ& ) SL~_(B!rUXXڵɉHFQ;R@}}}FAdd$#Fٙ&MaF (۾};7oM~ UHE!Ç8::bjjJDDgHh_3w\xwu=zTh?~_͐!CV;("B7燷7;vBX"R@ɜ%߿Dڶm=QQQjG*OӧO_Ԏ"1)!ݻwCңG:uDdd$2\ʫuܙ'OiԨ&MÇjG*zBBBpwwgټ[jŘPBcl2j׮ѣG9|0+V|jG h4q9Mŋ_>˖-bH (HIIё-[_GsR@B!Dܼy>}0rHi׮ڱDH%g8q"_ӤIvܩv4///N:… wPPBm~~~4i҄)[ڱDITZ///BCCY&~!քM)Pƌ3VVVjB (B!x{aoo'|g}FDDPI4lؐ;w͛7ёX<$g}FVԎ# !B®]hԨ`ӦMąPrGn aѢEl޼:u0}tԎ&PԩSVn[E D!Bd(%%3gbkkK9y$}Q;)))rCK1bϟgԨQRn]VZ(jHՒvba̟?wwwjժv!tB!x۷ٳ'3f`ƌ۷5jK遒LMM;w.ϟSN :VZv4KJxÇW^ :T8B#!B{n6lȥK b[JީQVѣӡCrHll,>>>̚5+>x@c禜PԼ^YJJ ٳgj%ېB!PsbkkK˖- S;R@{-[$ N8Aqrr˗3e:uD֭x6#""1cg̛7:[oJv (j^nʔ)ݻ۷SbE)!Ǐӷo_Nʜ9sضm*TP;#R@;;;"##駟ߩ]6<<׏dƌټy3UTѣGon _ra/s켒׫0eܹxyyѬY3!)!\xx8͚5ĉ1~x4ڱDJ200ɉK.1p@ƏO&MذaCÃjժ)6mEvɒ%_kE: 9£*Ξ=qttdj"SR@B!7ҪU+WΉ'dN1!uTPwww¨SX[[s̙\iիRC2lވO>Yf,\P8BdI (B!D1ꊽ=ܹ~YIE]g۶ms-ppp͛9r$ܼy#G2rH?~Ea 0#GbhhF̃0a&Mbرtޝcr=w666Ҿ}{?{… ӇAѱcWΝ;G0aZ6W+e%RJrr2|XZZ*κcccKKKVZEQz)w)tRH100PΟ?(XZZ*|*[ҠA,ϭaÆJ啔EQwJlll='֮]~8_+%KTՎ"DHE!(FbccVZ)*T_X1FCNJRT)\RsPlllF$&&*sPZji'OVƍYr(&LP6 ,Peኢ(ҥKe˖)ZPP< *($''+ʃr|9~zEѨ~8)۷oW;&CxBb"""֭[s==J۶mՎ$T(2)]4ӧO… tܙ#GҲeK>nӦ cݐkkL9reʔIx믿=nhh?Pݝ3gU,YBҥ3f -Zɓ'\D%P֭[z8Yh~q6)!@PP:t|m33k,,--ٻw/֭#99STHx왪Ks- 0?9sGBQ-_^z1p@6oLҥՎ$T&֖͛/Օt={ cl۶v_umw}GF &&FݢEh۶-| nU{E777/uݸq#G믿?NttKpssSSS~{N}fΝRsCDD4i҄u Q(iJB!(OΌ36mY.)RlYvލqDܻw~ 777j֬ɏ?]F;]vaÆjߟAq֭t+WZn͂ ` :===fΜӧiҤ %JĄ &ػw/<~Zja``GFOO+V0~xjԨgϞ~g̙Yc/_5k2l0n߾Mtt4 .Fu_{nzɖ-[/U^&M;wN:ѨQ#v؁ڑx-R@B!ӧŒ3 Mn?߿O[nj… L2 6йsg~5kY;w0zh u7npƌ'Æ #wr)22N:Q^=v)=!E&CxB"fԩ̘1OOO)¯nݺo>߿Oͱիh4g1x` ObnnN6m]v~^qttMW\{l۶M'ГBQ;9svZFvQIҥ 'Oۛ@6lȤIx:ƫpssס( |^Z+h^z={bbb RBdD!Eرc`_8qժU#00m۪Gx<<<5keʔٙÇPˌ3صkqqq4jԈJ*ѽ{w A>AH:t(땅(u놡!LHB )!E)S3g^^^|jXtt45jѣjJ8"?̘1~wyΝ;H8z(mڴ!::sssXaaaX[[SV-vڅڑ52G!(~gfϞ˥x"^ImժUˋǏSLt邵5jG+>3i!`:uDÆ (r"BbL0%K矫GR@)8x ЬY3_ZzWdPvQw۷oXHB:)!Ԇ =z4...8::GR@)^uFHHQ~}\]]ILLT;Z#8p>+++6oތڑR@B! ! ӦMS;(DR3bΟ?ψ#pvvnݺZ 1uѳgO:webQIE!(dΟ?OիS;(dR|+WsF˖-:t([毿R;Z EaҤI 8I&qFJ*v,!PBB޽{R~}֮]+7"nZ5ח VKv'**JhZgF (СC7o .dh4c B!D!-m۶QdI#B(%%(Zjő#G!88 2i$>|v)3*?~'|Yz5Ԏ$DBQ(.\`׮]/_^H!LHB+)!ٴik֬B8Ȉ'N$22O>qѤIvءvP666jPDVTaaaԪU^zammMhhTW (СC=*|QlIE!(\2\Mhtڶm yLJrRQ4hЀ;vOll,͚5XÇT^6mڤ{wQ9iINNɉ/3fqFՎ%j"BPߟ~ŋGR7~;Z33|J$ nݺq),YŸI:u>}: jGs+Wgq(=x}l28q#=)!㉌GVm\5DQ ODaLj#x"ƍՕuj*EQ;^6l+/%%Sɓ'9tjG@BQh"<==T;(lll(SLkZ5kF:u1(>}:.\SN :-[v/ΝA899> 6{c׿LKJJ>ӼFɦM2|>**.]yf|||d!2!!ؿ?;FFFjEu$ѣG*VB*Qh4숈য়~bʕԮ]WWW={ƍW^b"ڊ+bccKϙЭ[7RܼybС?۴iVVVs1RJ! >)!ĥK=z4&MujEHfC 2dJDQb``.]bРAL2Ma6AAA3pWNp\ 2tӷoB1|ȑ#L<>s|9J(AƍVZ*%!s1Uδoߞʕ+O?TDY ~t$N8! CR@B!T?#\n(WÇG_Eފa֬YyO2VXӧgΜɯh9j>|8˗k׮*'\\\\/Isҥ|H%D s!*Q6m`llo^["""8("""hݺ5KV;(4h… _ݨQXxq̌`zӘɓmq: IDAT'=zjժj۷/}aǎyFAQ Ɗ+)['Baׯĉe{ZjE0(7n)jGTtt4*PBܹI4M7ϟ?֭[ N>Ms=*Q5jԠB $$$'H|}}y&[lpVҥ 666GBNE!PӧOw,Z(i4|||tB9___&v=',,3gpY=z!ɺ>fffԮ]I&95p!rŐz]100K.ӇnݺaaabZ! /"Bӓv!s˗cǎt1ׯ_U8q.]͛INN&((dKKKz聵5:uL2jГBϞ8.hZ>3ZjjȑBϖ,YBRRtMB hZxQ ###zڵkՎ"D&k !ӧ/1e˪G!BdPB|n:߿QB!DHE!G .>BQ=yDBH@B!Ç eժUjGYr2+l7oB`hPܾ vJ!gϞyf?΅ غuqѨQ#>s !&!"xyyѢE y** zE+wAXN)Dd``{4߹s *fD!dBݻǦM/Ԏ" D#_Af Ag 2{ԩeX͛ф@B!F_~jGʕp<,] oөܽ9s\\\HIIQ;"I!"^>jԿ۶zO?_}ߧPΜIe :oʭ[ۙ@6A=jք7RQݡT2sm[ ! ϟf,YիYbSRR ͍I&OLLϏ |rƍ(۷hXh%#E!cQQQ9r???ڵԿk>z: ) *V <{/ 1xy! GdFHHj1 `*:֯!&\]ᣏ@l:!CrEaTP'''4 111lٲEVwUzZrr2?#ʕc̘1h4ك'իW_~YSSSF !PB}[+_PqqI-8:HB@jE}nPz-czzztK+. !,E!Cw%00[[[:%8;g>l^1aB|+nn Zo8\pe"("B!Z-={T;(I-@,^ WdMBB Z KUNNN[Q7iFyV><Bei=OBBBr%(/|NnݺE PYGG (B!DUV-[V(hR#о=N -4l}K]ȑyHV7Oٳgr=bbbx) yؘ#G0ev5kXh͛7|ܽ{+CPB<~tv QXԭ WWM.6oea(W/u.r`4X^MnȂ~O3ocܸ碢R7.uekvcEciiɬY077gٌ9saaaA=uC2lBɒ%Y`m۶%::krƎt=RFQrS!uUj֬ɁԩSh>W={VV=VN#򁯯/#/o#퉉aĉyvՕ*U=B!=PBH'B!<&]!#AAAXYYahhv!r7sUL04lP0\n.y3й3{@@~7˗SaVڷ޿uk`ڴH0{60f oNBQݻݲ3#zϚ53`bl +bSQ*Gu-zt?&¢mۀA ~ױhћ&1@` Щ`j cOj?wLFF~w̙30`^{ԩSm۶R+%""*n A{Vkz,,իŹvzOϞ@n"0fH=yDΝ{⻍ Ppī1 wk ~^~{\O9"N|9PR^A_nŠ+4Nܹs=ի?j;D"*8Hbcc CyR)&.."a'nOձ7Ťƻ4qwS:uʿO41B}j$3ؿ801z"oWߧK^t/VBxcGͮ?̘!͝ ܻMMӘLyͯTI\ga43 l׮g*F XXb{nW"&1%cHE qӛZҀU'*˗?狍ƏϠ>4oO|Ͽ]55ե^Ĕi>;v޶hQ#aKZڋƏSmlm_=>+ hFť}QoN(@M#84,~~\$~*1T? ^xzɫ)SD?լ)F'ɓ'֘:u*wz×(Ja͚59s($&&_~Q{bڵo1gUԯPv[L DQО=# -'˗Ow7͛ym|pH]SSQ".N+Ib:ԧΝōpNs(v( I5mG"YT5]67ׯ~u 8yRL*޽G*EצMt22' 4٧~}dhD$*U~TQM+:qBYH$oMӘU#e/?͛I񘚊ݻwHL~xMW7o899aXx11{lue:::hڴ)N: <2qD$Iظq#ڶmɓ'c͚5P(3gPre4hΝCTTj*ܾ} .ĕ+W0sL,_o-[wbС5jZj)"*.&P,66ժU̥6^-OU7`&N#9@WW̸}[X"Q6駢6E``mT,>W}>nHFl*nV+YE[vJa/mՋmժҥ_P+\V)Gu85zRʉb͹s?s |(پF]d UmSj>VݸDÇ&_?(LZFS^99~d4:Qw߉dWqՆ ƍ⻦ìw&1c`(x*U ak3񰴴Dahh `$ ,8 m7oӧ1a zիW( T_  4k UTA*U# 8ƨS,,,p٤$<$I:t(߮CH@!""Ҳ'Ojժr!nƒ''1]&Q-|Xv:xf4@7uojClxy1c$OB_U…+W~oC_?iQꗫ( j/󼮨iA3M~/QMe;zeKQ# @^Q1ͪq7SX:t(|tILK8lFz0;V$T7ooEŬbi)EQܒW'VyJ9ebb]]|ۚ4i@ ,ܾ}5kք+_-[,yG)))n݊)S 33F/!"1BDDee&2nCLSٻ.]wUMM?8;ϖTӦŚ5"/Dyy(nn^} !MIXRS_}.7W|HAj 걋ˋmJ%p 4|HfWjXx̚%cGڳGl7%/]]srߤߊ }% }h`>쐔IT+U鈋CFF+);)mbݺuhڴ)ܹӧDAH@!""ҲO+Y_1fqүH@lXxZG#1zss<7/Ez6jET7oSFz&G߮*J"Dϧ|@zWhE xɒJ<<=_QQQ8*<<<`ggŋcڴiP*ؕwo"**ƻ%Qse=rH+{Ԯ-o+xx)MK7hz埚 nEmՒ>b  *UD_O<)nnEoj*DGiz6n|QZgl,F u>xi֤?l\,nGz 2D@qu>ٿ_LkjE{s|ΰ0@8wNPTP}?.dm.Eci)FUىchӯHh-yHldxmڊ۳G IÑ#E-b>rD$0W sDdDюE-`iazaHHۇDJJ \ T]]]tAAAx"޽H̜9ȀBCCcccԪU ָv*WMBGG}bccq\v UT `jjDݻaaaHOOGÆ GB$ddd~8qΝ;@L+GʕpLLL0i$6%055[q 8&l([Fb P(w^ 4HmKYYYpQI6m^%zGxxx`(ۈAѣG1cF"Qzuxxx Q)MDDDbH8թܺ%Ϲ_DTbRSS(JYDDekiG(3ָpBɉ#PLP@TQ'I<~7n܀$IVw j"2#PrADTfׯnܸ-ZѣEݺuBDDeȐ; "2:u*>,T\Æ e"""-344d(wwwԭ[u_ԫW{Ejj*v  BDDe%9GWWK}""MOtt4Ν#11ر#VX-ZپrgQ SN!..D&"ҔM322j*lٲ[[[L6 ,F/YZڐQFAP/s7o\*<&P$Go߾D%"*Obɒ%طo!I0n8,Xoܦc鉜"Q>p@#" ,ų IDATUd ;:HbԩСajۡ7(D&P rAD7o8u^lzӧWrAnn.HHH̑QibHlmm&wDDEDdd$R }}}#-- 4hƏmBP}%nKc2EDDr`HlllX蕈d"&&QQQFttQQQU_reۣFӃ9LLLubpssW%;v@TK;v0BQH$QEsN;'D$G͛7q-ܼywE||z}}}ڢf͚QjԨԬYBPPqa$&&M6ի\]]ɤJtt4j֬o PF "#(DDDZfccL$%%Bpy)t5Oxx8]Vs$իGK92"(DDDZVJrBDǏ1k,ܹ7o&Li ٳgq?IIIG׮]W_sΰ.+)كJ*!+++U{bܹɁSxJ@50uTL2EP$ ۶ma``~#F+0CǎѱcGtЁ#Bݺu5f 舻wRDD$'@!""*Ý;wʑ{aȑøq|rOHHɓ'#''5 lقvVƫ8Lvu_*HNLzI"ɓ'1x`TZΝC۶mC~~~|2䄶mbĉh׮ի'wm~:,144,H>CDDT.]I"z-I`,\=z@ǎ???s鉾}.i@G*" XYYi$ѥKիacc~ =Bdd$5jӧOc˖-L#BDDTB6lP 'NرcEDDо}{,Z| APٳ~z|ODDo ""ҬY3iq1;v $ m۶Ÿq'E} ň#0ydL8#'" Q iڴ)oR Κ%*bccq!x)6l>}`h۶- l'55 BfO?BDDmL)))w J.\Ç닠 K.Xd :w GG7nwرx1?e){{zzzz*(DeXVVΝ;C<@ժUѽ{w|wڵ+ݾ oook1r""*MLCCC899ڵk8pQ 8v:$%%iӦ6l\]]ѢE L{&M &GZ Q jڴ)]&wDΝ;5:&''G+}WsUtL֭[COO/^; +$$G-`ooofܿ?>7oFuMlll^)ѱW^ő#G0}t/iz-:Mq ʺFaժUotUD(DDD%M4aHI&nݺxvZ4nwFll,1n8888<~|}|a{ٳg_Zq\q644DjJ\剁AZ,&Xiӆ 8y$P~}}tuuK>F觤`Ϟ=Xt) ET\or-8N#PJG}˗/#==]Pʕ[n _"&&ӧOǍ7p-,_...ZM#F@BCCǿxooodffbaժU9r$&O֭[cP*Dhڴi9s&L]bʔ)x`P(Lrr2VZ&I_$Iիc\ۛyhh(u kѯ_?|:t(:tPqڵ+fϞiӦAGGϟ?/~''K$???C!*]&-^Xjժ#IzjΝ;G||@jРzˏ 3zh]veggK]t*J$I@:p,999IS'999Iuԑ={&I$9::J/ ڦT*(D -\Pzt ԦM7|qmI HٳgKߗ>,\\\ _200H˖-N8!=ZJNN &ݼySV.]jժIIIIR|qss4]Vё>}*I$/oͷ_޾ѴU}7}t鯿6m$I*Unݺ%I$999I$IRVVdnn.5jԨsK$5nXJ$IԧO)..Nk}BT1BDDT jԨ!OrATdddH &UZU Jƍ:$R,vI={vmVHaaamYYYҶmۤi֬Y)&&&q۷oHӦM$Mq^/o_~JR*U򲗏4-I/Mt͕$CCC>NNN)>>^|0NtMR(Rff$I"@헷ogڵiђ$IҦM~M$ѷ^$IR@Zf+6DTp Q)hݺ5.\ wDeBzz::ѣGf͚ݻ7N:ؼy3z###Yb,n풤$ܹs[ηԩS{{{6}}}9;N5M?^]PYYY_VOAժUMT=wŤ7$>0ZM6$ G.]z̛yʕ۷/ 88W_aРAXn-ZL6_oѪU+̬k%@!""*;wɓ'-w(Dƺu333nٳq]<|7nD׮]QR%-(Hu}vǩ<ȷ`nnHƝ#55rss|̝;[lѣ5M-[yzj;;; '''̛7&&&EZhZjaƌ8aҤIptt;T|LL 7*-Z,YD]47*QQQ^HP.PY"IVE4czYƍ1PlذKKnn.nܸK.aŊؿ?fΜڢo}>Sȑ#P(УGu<_KK,|}}"77s-R*9 j׮--^X0JLnnty?4l0YGrr@Qz[%CCCիw JLLdii)>ciÆ Ҝ9snݺI)))Rjj,ըQ#_m?R۶mlI$i֬YRxx~zJ ;vLɑj׮.*bgg/.M /ii[D(RrrrHϟ?$I$Ε2j(i׮]ٳ.]HIIIE>_m@Y`(mݺU:v/{Jڵkk 6WFTJ&Lt颮)cii)H~~~Җ-[u.]$EFFrnI$kkkǒ$y 飏>Zeϟ_I""wQpp00bC!ҚL;v K,aDGGO>Xr%֯_Aח;\bɒ%aaaƍ'O1>Į]w@ Btt4\___bƍ> gϞaӦMz*N< +++l޼Y=u0qD}Y&|}}@Lxi&۷Ү];y-wqi;vĪU@,₵kbĴD[[[T^۷/ݻoO>yH;]ѹsgdgg]v;7}.]:t耥KO>ppp;2aÆ7o&ݼyS}}em9xzz{>s޽ m:::G6m^)D\iOZw4lP)QY* {{{̝;vvvضm=z'N`ҤILammjժ!$$DPވTr/$ۖFTԗjtɚ5kE%I?;w2ߘ6)s<}'N;z]9ɓFǎꊾ}vrX=.]7V\(D6~@DDTz쉳g"))IP{֭[X[[cرM6+M8mFDTp Q)KHH vލU0ؿ?qEo߾իt C|g 2.]BHH #PmBDDTʬЪU+~2MZser 4իرcܘ<)e˖-Cll,VX!w(DDLɠؿ?!II&-Z֭[ѹsg?111ؼy3ző2U/^E! @p-q  Pvm=zݻw;*qq>|ǎCTT4h> a$gϞG`` GsCnDDD2Y&Zl ///C2,55>|8lmmѻwo`ĉq¸pP( ;;3"rd8prrrʐ$رzBjg޽{p}aƌpvv;TPj@3JR@!""qYC!bݺuҥ lll 믈S;qpp7P*&M`Ϟ=ػw/Ǝ$ Q9'wDDD:uYfBNJٝ;w^nΝ;ѹsgXZZ"iY=A!77[n'"*/8HFǁ+w(T BCC ;99aptt|ea&O*>} puuErr!@!""СC'N ׭[زezO.WWW:u AAApqq ѣG:u*RSSK9B""*(DDD2]6ڴiwwwC!-Ά7+Ԯ]ڵ1l0"** ֭ tuudŋE-pW>}:V^4Q ̆ #%%EPyXr ooo >իWG޽qe5 7n[07w={bDɕ+WԉU___;$.;lƁ%IV\cڴiN+99Y= }{0w\ܻwz'D111;6l؀~ ۷ǝ;w0~xu\ر3gΔ9Z"w(DDD2Bn8G&Ϟ=CϞ=1}t(Jao1cxu:u%P0a!77[F`` +JXk׮1J"wBX@"""/CTVMp~~~0`={YU(x!K.=z􀫫+\]]aee%%PzP*RJ?~ɓ'#77WP->>~gϞaÆ P*~n"(DDD$IOV?4޽>ĝ;w`jj)Snݺ8wwww,]ppp?z@m8::"((gΜ3gm6̞=ؽ{7?qqqw}݃ .]YfRRRCGGٸ{.֭1c333@D`\~YYYHNN;Zjطo`6mڤ>3gvڅ0bQ ++ gϞELL q]4k ݺuŋ#C Rĕ+WpuѣP(Ett4jԨ={PxH~CDDTL{u0c ̚5 SL| $IX|9:uyaΝP(T4j>>>x bԩXlBCCtRxmIIIׇ=z#G`̘1ɓ'1o<=`mmNa0447|)S`ѢEСC&M`Ȑ!D͑!C`Ȑ!ҥ TmjB@@q9 4cǎŃԉR7"** ÇǠA#88=zwnAFp%$''222tRTT F`,YCDe!""* .@$uN:׮]ѣGqW BvPJDFFb̘1[[[XYY͛Eq kDaffVZ B@aonnB?PbeeѣGc޼yصkz>"@WWm @\\z @י!""p)ܼy .Tiprr*/=~8?~۫gϞ?;v  (2"*@!""*&MŋϟZn  #<<< mCyǦHHHx6^Bӿ`x9_[ի^h֬y+BCCCȑ0z]]]iӦv{.1&/UF|QQ)|8|}}w^S]tM6_{>"ҔLM^:bccqi!!!Q|hԨؼyv?S߸r ֬Y>IIIW_}077Gbb">|{{{hl޶u+WԩSann8s ֭?8ߵ u ϟ/wDDYHHۧA_cpAxxxժUC бcGDGGҥK f̘333xxx>ӠA۷'O +͛7GΝ lC__۷oӧ%ՉKKK\r׮]C=`DDDk׮?lzzzٳ'o>f͚מ-044[ch޼9JT>Ӹ}6all N:x!\;wcǎ@bJ͚5q9Ȓ{hժ0/P׉266FXX*W "33ǎÝ;w###ԬY...HKKٳg0cСř3gxʕ+m}PHc#"yxx`?qQ$&&/ r?}Xj:BT͜9-p Ǝ-Z9ʳ@lٲEiv8lق͛7ԩSm:::V4iMDDDDj?3_Plذ-3<""""2@!""*Ea˖-8z(<<<+++|Xh ""bŒ3J  """"""""0BDDC -ϔJ[zz! qiEKkQ www?׮]C@@k1b>L4"رc?F$:t.\@ڵ-[{oθqpʕ;p@ߏGի?:uuϟGBBܹ >իW-e˖~0`l1P/ݻ_G$I… p 99 6DVި+W>xbTZU߽aÆ!44~~~HHH-v͛CP}P}D $$Ϟ=+Yff&:` 6 NNNsӧgϞ|ǴmÇϷCCCb ""*qqqqܺ@T5̴_\ō$5oۃgZh?[nšC333$''cȐ!x>ss=`ҤIPoq]/yo>[gΜAZZ.\]`9sYxyyaڵ;Yj,--m333QP%yܛرc}G9r.\9siiiXx1?N:itc011Qo>޽/yRΝ;QjUtqqq8 @~ +kW^d Tp Q7`ٲPR%^z5FsSō$+W\b7L%Eyn݊yfffׯ~$%%it;w`ƍ6lzBΝw^TZ055Ŋ+\,ݻviXXX@GGFFF?~<;8܋Ep%ItJMt2Q&iq\z6N4hbRH4e. dAQ@s wu9{>{ι.s%nfoɤIK Cq>מqtt'W̩*8c̘1_fŋ3aF%j 6Lg/L׮]y;v,3g7{Hq >>ggg;ё61JV~ל?6DF?/8qb}&LV""hll$..PQQEP:x^X{ mZ/NCCC!&LypMN8Ѧ5L;46l|@CC-[P[[!д>e=> cHHH,0`7ofoĈm ZW]]MPPβ@MMgϞпChHNNfxyyYÇbӦM\tIoYbNG#ЁnݺEtt4;w)Sj*<<}ӧ9}4w&<<<==Yj}0X)))s"[CC@ZZƍcܹ_cXYY<ƨ(k||G@s+9ׂ%1ԞsmP)S1n:dʕuRWS]"RSSpuuY@vv6|G$$$Ϛ5kؾ};ѼL3}gywٵkwwwΝKϞ=թS(--֖<|}}8q"gΜ [[[vٳill$99tx Kas⾓%ܹ|ܘ;w.=z 77TRSSywغu+.]bʕT*bbb[[[st )//'** www|2 z2^sss$]^.\H!88Çȋ/޲322PB^z 6jomx"à &0eϙ3gzy)++gϞL6 oooEձk.Nʆ `$O>c-[FXXK,`֬Y$%%?}YV^_B7 8P~bҥdffLʸr |wqBCCCRh"rrrx뭷Xz50y^遱N8/ K,aݺu>}9sPSSctXy[~'?pB4 ؈QQQrK}6K.%;;+WtR^|ElB\\T9u~d3ge\ Z{ε-b #<Qcc#| .\`ܹ1f{ 7$>>WNN>}:/2!!!{Q__oV<Ծ+>̡s޲[eΜ9RXX޽{illDTKUULb4ww&sS/ ),,DRѧOj5coo%>>^l쌮uw)//XZ%\V 4=ٸq#F'>y&gϞ,|QQQ̙3msM(Jf̘apŚ|///Mƶm8v͓%00vͩS _!|2׮]ۛl̙3>}qɭ#G 33///""" aё˗/[\Fӧs5Kmm-nˑ(>n) Y6''cǎeƍ+[דzYh;BRm-'11h91nmtBV<黎L={^ӓjkkڵ\- "88?qZ㾶* lmmh!JQF,%u"HJHMţۻos_{˸[ΕBA'i!k8RPP@Yf;ft!C}}=ZC}}=r]kӓ'raΝ;K^ ?O?m6lٲٳgOrQT*/1HyTJKK~f̘1DDDPQQa~#pM>z… 3gG1ʻ˺u?[oł a%%%׷?ݻ7 ,0ؒ%~,rʓiPڒzވrbnT9w5nS絽>R+jeer!CrXj7o4X#G~ߟիWӵkW6o{GRRRrVzӇ(ARB=טTr҃7td766\oHNNk͍֬)S+q(%8ZN #MMMTVVVٶm;E6o1Gjj**SkAިT*ϟ 1455ˤ nzJxt Bb͚5߿#FiӦo߾6cceÆ ^^^ܸq;v|.??ox[ڵk=z/erHRԳ\wRŋuboTHo,/u~r1oSLc1J-!-χ9,9sw\7L Louuu>}E=z 88p Ν;Yr%'O4`jp)y3>z8xg#m*#lJc 2+hF}Iڛj]gw+׽{wyMx yIDAT8qرB!Aeݛ:CP(^I_R36::!C0o|Eb BruueѢE_|g}FHH*۶m#66}R\\kkkݻ7[n#Fpy222>P755? nݺeVҏ۷oyz*׮]ٳ?^~sFFo֭dggܹs9v~-'O''d̙FךI}U FiKzo*233zk}kF3fYEAA[neʔ)̙3͊Y =DaBRLudv>ӱDEE"7Nff&CPK/_3z6 {zHcaVy饗 ԩS8p(đuR{\x0j(222k-33ʟmyI=Z-&M_~!99M61tP\Baa!ӟpvvbz 'Х&NHrr2Ǐgggy.>}0n8c1L֬}ߍRTz?gnq744ȽZ7x\]]9pJ݋/ry^uT*\~z(++뾠.]UjI&'$͛('??B-M< G'hvYvw{/++Ç3tP9iDyy9ϬmFInn.iiiQ]]Mmms/O}ɾbbb&$$BAjj*L0~k׮3 ={0|p&L`x͉Ax(X:NAБAdd<=llle̙t҅dXr9t?۷WWWرc)))!>>XlNNNDDD-ZVVVߟHbbbʰaxamm͎;*׮]k׮ðZ&99giii2aHLLsΌ1Jɓz*dggaaahZkTyxnOOOjkk9t)))9s={;$h>st̙3Q*FΎSQQF!!!nݺ|rcsqCjj*AAAdff2tPHHHѣF___vj2f}Zq[ZaصkǏ^ ޽{ʕ+ ^GΫXz/2|plmmٷoYYYL2YfP(8~8. ')<{,)))8qy>'|ˆ#쳠RRRvK;v [[[^~eok2l0zѮ[[[ӯ_?ƍ999 6/r y{{{:w#?8$''رc),,_~hHJJ=KZ-O<O=555hpvvf֬YrF  ƍ:t\Ã1cPWWǩSpF~˖Rɓ$$$_~mѝ;wfcT*7pW_~899ԇZףq[Zv9z()))@so߾-4Ϝ?49쌳3VVVRYYIFFZͫ8::Cnn.~~~у<>|8jڬz߿?666>>us KC.D2522*[4ɘk@-£M$PA`R={kѩS'bΝ[#|4+ 2D?U{] /C"?e h Aغu/8x xyy₟֭h ABB+VAA6DE²e::G^hh(  AAAAt""   `H    (    &IdAA)))AVh4~AF@AC={DTѡ W^zG\\=ݏ ãChjjj AAAAdbAAAADEAAA@AAAA0A AAAAd(aIENDB`././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/chain.png0000664000175000017500000020124200000000000015067 0ustar00mgmg00000000000000PNG  IHDR*@bKGD IDATxy\TuaEA1q!\ 3Ү2MdeWGmՕzf֕Afer! "03\A}6=vs$$ps,] @ jjjjKҊY{Ąq@nݺqYeĉ_}1 !GZV Zs <(@xP @';y\-PZ etZs /ǁk/7fP'_O4ejC <LuMzYI78ʿmbO(V]SuI_psk< @m3&lX.Ոmg$+;}xr !*T(gsӇϼϿCJʋ~0BQ޾?C3%EmmwÅy98ֱۨ~C={rbo^aNvn="J+Kϧ~뎞{EwW' (U{At?~|-LJNN0aHKjTONNt!".(@xP @'Oب %lBփKuy~k=A͍X*!Scm{OuٲewiJˊ,Rيໆlk$E*꒾҅y0#OJPqq"z׈zz*|쏣 wNe9.tGN]%/~:Wn}tP߰ }>7ޝ{vhO8}咼];ԧ}2s2f/{?5Z-d0~]w˒Yx$Ipq[IB}7vx&ioߋfIY_鮛Ѽl{X !thoFavIyml!j|>U/!SN/~;7ݹ]^B8i`;_!B;G$YumڔW !8!tu 7(?kN<:~MxgPSieicڿR?྘B>|~:k}KJGO=⢻+yn%U%{xw `!hDQXz_Xt_Yq>52owЪj /,=هBZH7k#خ|{oxBj/`.76Dj0V(99y„ #-]GQyD?>99҅܋ @'O  <(@xPdz-]Aa(t0h0,]ozݡCK",]=dz$IIII{s <(@xP @'O  <(@xP @'O  <(@xP @'O KO7|O>...yY*$-M=3FѶmn{YnLmظ[6mtíN>=eʔv <pg9r`t!:-_/**rrr ÷~e˖ӧOݻWQYYG8qcƌy?TGG'xb={d2,]w Inh4ccc۷orJI E\TT^WW7|p/O>y7l0j(IunÑf1@K/wu1I:u̔uvv6lٲ;v[YY !򗿨Xl\@Kؼy" "g#dwBo^^h4ӦMk*qU-B^5/_,0J!<1m۶p͞={ !|M]Μ97ȯn[)'Zs=R;vTUU޽;//O%(++B !^z%gg甔!C|O<1|p!g^^ޱc,z(:-W^w7n\pp}w>cƌ3gΔ[BܥK9r$>>>--^;_~igg'x뭷t:y  Pɷ*]HZZZpp+i2AܪeZœ'O  <(@xP @'O v@qqqŊ sVDQ Јgyfɒ%{+77%qKtͷ:uO4&11_SNmbhСCkVTƍk`Y'n`ҤIAZ6lEJ1cX[[7h4 &MH=,7`ggCi4666#GTI 7֚Z1clmm-X, 6XSS[X j 曉;;;Z$X 2qĚ!VMLL p/ <pS]]]555 .CxনTɓ' !-],!G$%%?zBV[pSHHȲe,w!$dY [l/YDII&KWqc'O  <(@xlmm-]ZnU@Cf:u*.X`Azzڵk-[,'ݺu$IF^_QQqm]\\ngi<PSSSZZZeś6mj|+77Yfκ`y\ym瞳b`.Gx?jѣ+++U*neeիWp77_]j Ҿ}~m >}g}fCmDx@!$I7o^QQъ+L&ǰa䷌Fɓ'̙s!JzgzM&SLḶ>aÆx^Or1BDEEue֭&I_PP`~Tذ 6kݻwŊ-_3,'"<<\qEs~ݥK!DQQh0BU` !pss7wWL{{{!Dvn{MhO!D~~ᚧOB5|(77H5 [l1aaaZ644Y!t7nXQQ/:4>>~ڴiǢK5|Korss}}}ⴴ4[[[F ڷo_۶m;vإK^WVV !˻tRSS !zs, 8Z_5**҅Xٳgweq@'O  <(@xP;9;;GGGϙ3[JƮ^N,X0q/w2T\\oEFF]s;E,w&U?4`ggw5ŋ7m$vss5kVsև; pϑ$i[l眴msppᎠt؃ʏ++^z >}g}&tqqq:t\z筭{ٽ{wWW׭[N2hfĉ:uxsssx{{O<9;;[R >nS[heejFɓG6l rr$/ˡCVXꫯL_|Ʀ&++O>UUUw}˖-{;v#SO}7k׮ߵZzh~~B?~\QTTw !Ν;͛888?۶mKIImq%iӦڵS^TB/// luʕ !V\9cƌGy_~_|EUU=zDFF6h|?nnnhTTϡCΝ;7mڴ.]k׿~'E=iӦ_|w<==OBj j|0%%En ۶mzFqE''<~Lܵ$5msNgWQRR#8zŋGco'O޻wBߩJ߉|† &OHWXXشRђOShh)SnnnÆ UQqqq666ɵUE9rgϞ?Ç~XUU8~x!kXX}*?~СC܄ÇoӦ~cƌ2eJZZܧO`q kTT g۷nb @'O  <(@xP @ TsέY҅X>[n3gܵkWWX1}f)` É'<;_^QhhhUUom^355ߗ_~7 ܹsW_}e0^}[G2L;$IIII_|K/ұcGV[SS9}A:t(%%˫ݺuBTVV9sFQVV흓#;{hy{{]rEq]]]܌FKHH-yb-2-"))iOW^m2Ν;7j(ggg{@pʕ/dʚ3gŋϟ? /ȋK,y뭷 ,())YdsUVV^!߂ fϞ=jԨgZy@y䩦駟BƼ={̝;c8ʤ|7EEE򢕕U۩S'qB,YZa2>/Zҥ%p$IZbu֒.]N6MZ:.Hܛl @'O  <(@xPw1;w߲sΒ!C,Q,gИO>h4)I`0zKևe;3j(!Dɯjرc-] Z :99]󭚚~hFILL4_eРA-_, L8AV}U*EJ1a0L۷kо>}X$X#O܀$I&MjpC{TI 7ʝF>ٳ*j=\޽===&NvZ!ѣ󝝝VFEEyyyUUUuرc;v0L111nnn[)))yyyZV.m۶v?~|II_|hƌWPP_^pA>kvru2ggI&uر`lllFZۺu|SV6ֶJRY[['xO!,h4fddDFFiFqܹ={:::?%%>8q>ڡCnǏh4?AfΜqUVy{{O>nf̘Ѿ}իW߿ԨQ]v$)11ѣVzM&SO=jkkϜ9sk׮w5kVhh觟~xbq\˖ڵ+W0aB=5557no?󰰰^xFYf999%''oڴvpphOU0O7L%%%z}֭BⲲ2y6m 8jkkm׮]&Ia4+**6&&&88x…V4Ny@@'.]$(--MKKBn߾][VV+H'<7o6LEEEryW(++Lw…zK]Fx w5M&See<(%믧L\]]}uoQyEsBb-p! x|ʕF:&gT^^.w/N]]]rfahv\a=hѢ gyO>W+| b5 !vuujNN|N'_3;vGGGz^O?eggw}̘1%%%YYYBWW–=[,XSNm۶t!VԩN ޽d2DEEChz=z؄WVVY"((<000 СC.\𰷷֭5=yÇ|||JKKF\RR$ϔ>|3g  Iٳg۫W/!DMMMAAAuu5;B2dHxx|6 $F~A;;WTT]`0Loo}VTThT^_\\>|x]tirZ$I.G}III M9O  <(@xP @n7C6m[ЪzNOw2dH׮]̙ӄ5fϞȚڵ0`@~~? 7Λ7ԩSׯoJ@rww޽hiieee5jԨ={X <=M~DZ#~'///5ݵkG㏖B\xqݺu ;q[-b,{G{~ӳOK(Ѹ}WW.iӦ5NmmmYY٭{mв|m۶oݭ[ԉ:ujrrr]]]mmmyy55D***lOx4sL{{{Kh%$ISN=p@EEe+ZnnKƌ2c$I _dIbbAAuN:%pww=zt~~srrrnnn޽===&NvZ!V򪪪رcva~I:vXPPz\!uLLUJJJ^^BV6ֶJR5aHʪ{aaa...K.ڵkXXXXXآE&Nzjyw+zGtҼgkРAUUU{V]O^?f?QgϞUT~窫k׮:tHJJj9n8??u֝9sFaccg4jW^^֭[+++?qD`u:]~Ǝ+={v/*--m;w,,,-c x$ 0m۶۷oOJJj׮xxx!fΜqUVy{{O>]!5.--f̘Ѿ}իW߿ԨQ]v5k׮]rτ &&&=ztժUodzꩧt:$IfrrrJNN޴i?FcFFFddd6mΝٳcSRR>3___kze4rDzkI5B<:t֯_qFsz)ߠ=22rΝ6lСܹsu:?_SSqo? {lllg7ջv2/6^ N>meeգGO~` xFĉ}]]]>>>~_}ծ]XQQ~u'111 .>>B[rWi3M&SII^wwwߺu2<<۷7~n 5&8~x||b߾}666111666jܹX^4 T^^.h^p7hc=&tRmvD\4LXʈ]4h\vvvHHH.];fkk+HOOoroO믿2eJ|||DDDrrzvܱc㽽kjj;3H"Eܝ9yx# W^)((喫 !Y[[jVVV...ax29kf<ou5k<#cƌ5jƍ&,=ztѢE>>>}h46^ 8^/'@& n/iiOpw@ffbB'O~YﺤR\8[... pF5xzzFGG#!!!|H h䈮yB 4^$I^^^WX}vx̟T5\\\AAeV\iee^yiiiEɓ'qo[Ӫf1<9n\Mk.!v?___^sssm֫Wz?ppp]bBeN/SO8QPP0l0''v}'ݻw3fLIIIVVյ_BɃ"UE]$yA~WV_ kk5OȡC 4u5//յuuuVj%4hо}ˏ9XTTtuٙ}13;; 'F _~IqaÆ۷ooE7cǎ+WluiБy=20aΙ3G1hРm۶J3dȐ/ lO>$>>~Z''e˖]  xÇN8_~ζtQ?|.\(++KKK/Zs/77wӦM;vt-BR"""V\bI0 Zf' @'3oJEy{{ZRonU$qc'O  <(@xP @'O  <(@xP @'O  <(@xP @Q~~~RRқoiB V'--m…V'+ӧOZZʻhuBBB}}ܹsϟaOOϲ2 נ{jiݺu 'gϞ$U'ZJjjO?ݫWw}W׷iӦ|ҥYYYǏwrrZdI׮]ly͛7WVV^x'BA@H&5pǐ$))))!! vŋ$=zŊnnnSN}饗ǎtppnuEX h!EEE?F믿~UVH$IҎ; kJ-䣏>;wnDDDEEÇCCCMȑ#-])Cx=ztG߿g}V^^~銊 KUAx曁;wꫯ ëZUUoIMM}-X$n (p+]]]܌FKHHȏ?9}A:t(%%̙3Bkkkf>$(ĭ h!/_6mڥK-[jw5gΜoٲ塇ZfCvvҥKgϞ]dI޽{!ӧ{Zh]<<@x@&;--MhY\@0؇k;O  <(@xP @'O  <( dA_/_ܼ:::ʋ!!!}Je-]O?o)..6>}tW 4ih4ӦMkbp ȸ7fzzzPPP˗ b cZ=y&DFٻwz耀ݻw !t:]LLhTwﮪBh4vUWW%I5jԉ'RRR>4}tyޱc֭[4͞={ ZСCHHرcG[***__re߾}nݺ988DDDl޼믿n߾yEDD899ٳ'33|1͋'@kg4...w=~ŋL&!n4O>}}}}7v1==Ʀo߾߹sg#XAAA 0 /...nPՋ&IחʃjzۻWpz|~X[Dxj*>??_+r3g!|||r`8r]PPtҫڸqc||#wiӦmbΝƍ1bĚ5k d愪o5RS.n\j:uRT'O w˅նB[[[;;;k@׉'{ャ,oo3fw=z4444&&FiR0ZzX^!|.88ؼԩS999BI䷜f+((h4 07|$++C+O*4L7n,((tБ#Gʗggg'?KJJeeemڴf555_}U]]݄ \]]Ƃ!ĠA\\\VVV %'zo5R!Pj` ,vsst!w6?c IDAT?///N߭[7==}Æ F? ڰa`9~W```YY٦M tjVd2m۶s vª֭[W]]]YYPSSݡCz{{t:I+*****z}njjjrsssrr<==<}^ L .DFFʋzo>} 6 ]tBt&?s ۷oIM0$i7xwE%%%%$$[P @'O 5Њꨨۿ˖.ׯԑlIt:]YYYzz#Gjkkܳ_+Wյo߾ŋEV/Zɷ| Bh4^gϞ .4j֬YO޺u i9$;w.,,:v z:vؠGQQW^NNN~~~jzݺur˥K~Ǐ7n'hE׿&?Lh+wsm{ԩg.XO?BH܄XOll/qvv0aV^2 dJKKjɓqdf޽rrjJ{nprkjjm&IR}_~?6m[oF srr4hСCXUUuxֶ=<<>쳟h4'N0ЧORX]]%''>~Ĉ6662lܹQQQ##^zV&;wfcc3sR5~>]$Νۍ/T*{|/Ro_|ŹsB6olll|x\\\nnb"EV >ѳ.+œ'OQ49s ZiwxD,//_bqry~:69B|||NԆ-FEEJNNNNl6m <.// 򤤤ԖV >u޽jjj$!$ *55Z!66_ wssojuaaaƝ>|p݉<oܸqɗ/_~Bj5쑚ꑽ066vwwWT|D"iU۷F*Y[[SjR^Ϭ vttΖJinnnbL&^!+@mZdmmqƵ{NѢ~)~bBryddڵkW^5\I}ɠSL&N>]RRҕBx]\.{=<<!ڎ()DhB^x#V{CRm^,wmgEGG/\pƌÆ ;sLTu,ѣG=Rs/Ecc˗%ɂ f̘qn|M]dvѝ`jzLV[ʾrqx<6M\=ͺΑ=[tvvx)x>>>N,--IbR644Bd2E$JcccPhdd;* ##w~~5kFٽ$X{Hͽn [F܃nuu+WttGtHBj$aee%J_~e6~kvyyy)ʘ,'^ѣ]v̟?>;vpωű5ERBH``vD(PHMt>b1׶`ccC}E?00СC'N`2SNmnobAAAR4%%qj;cn&::Z,O<S;-uۣm)ue.\hrrr߻::G]#=[g)##CP^Jumꭿffɓ'mmm'Oju###wwwHg(=^uT*=Ν;oܸ1iҤ77Vq8WWWnKKGi(;vlqqqJJիWk;vԩsΥ>!YYYՓ&MZ`aæN:sLBK/ !wޕd%~n$*?`VGRWWVM<^jS.+Eiȡ:?&MdeeGu4dR+jBf)ZQO$zW㙛;99=)@Q#={JG[lU.Tz_|wcc1cQ߹stt{n~~[*]F??????q͞={=X|I7Vʧ~ѯ_..T*RRR\\\222 ?nܸQF555ݿ֭[&&&cƌsssknnRTr\$  4̙3ԝ4MMMnnnr@dffZZZ<ͭNشiӼ\СCO:%t%0͛---΁ r...>>>NNN7#G۷oӭ2hР;;;.f 셣ĉ\.hhhhlllllJCeeevvvCuvv믿틊R7hnjCp8vvv*,,D VTC !p܆Ϝ122 tvv666dm7Q\\lll8pӭ[b5j߾}9s Ziw"VV rQөŇhѢ2t''2At|f7p@.,˭V\imm;88DFFv:{bb/L {Ou ;wnWoO/ĉ!!!)l@ O4 <Ѐ@ O4 <$CXCW}'""bر.رcnj;g`zX"? \HMWT'O|`绻T*ꃸ=;;[T=zd/vQ!۷o׎UTTAV*V#t @_Y,ƍcbbccc>|H'B!7o SLٿ֭[׮]L{;w +;'0zX xxx$&&6l͚5EEEuuu;v }w|>?--m…YYY۶m+))9v'رj{ 0T O4~-,We<0T=OH? <Ѐ@ O4 <Ѐ@ O4 <Ѐ@ x@'$F>oddd`x ~e=`pl hwtuuzYx1+x <cmm=uT6Y,ւ $0,'N,]TRfOnaaa:1o&J77WPB !---y+IRȑ#x. 'x8;;T*.V322%ɚ5kb1=}y!r<11͜9r޽{Z&L8s@ XhBpƒbccCmE,**!!O>166c U\\T*b2nnn I&B̨h_~~`---Ν;\.*--=rHnnҥK׮][ZZh/{zz*u><sJV_pa.)t݉VVVSSABAuuu@@!ԴTJcccSSSRRK/pzdנW!<s*&&eȑ-RӵtxJ۹sFDD={֭[s5.޽{l6 v]"HrDZMoowyͭzM' <Ѐ@ O4 <Ѐ@ O4 <ЀdzӄbD>Ѕ 2t ;<&iii, $$3T:'Z Ɖ'BBB ] y 'h@x 'h@x 'h@x 'h@x 'h@x 'h@x '())1Ⱥ`pO$`Luu̙3U*U7---@=׮]̬Xv-5_׫:jԨ)SD"jzfffPPЖ-[˜Lf}}#GZ OF1t O qĉEgggB4͊+6oA sNnn!C*** ܹs0 4BcIJJ=== X\SSgZs\C = ܸqK IDAT9s&!~ދ/hnnnb <slϜ9s!)JRIf7t hw\. zp8/^eee5iҤ/ K,Q(&X,:h>|jzrrAJB@' ҥK[]stt;vJBx\+wgٲeԀe;.AcX ׯ_~]wbnnw}}}ccc\\\``YK`@O|Q*uuuu|BΥQAA#XXXPY,_W/..۶m[YK,9vXDD/^]xqxTaÆB^j\sssBkll$TVVmEwZ&1b<ؽ{wrr 99y˖-&&&MMM۷o4ivWPPM622"P!0 ?PPԺA.>D OUUU?֭[7m4Zmr8xÆ ::BMYYVVfbbpB*ayyyDDJ|7|_xV[neddTUUwD[l9~xNNe˨ƕJ盚x>>۷o J333+//ٹsѼy.\ꫯD/YV8pdٲe/K/uNh4×/_i&g?<={}|| !m!dzxx_T /p TkSݿD"Yhќ9s&L Jv=zhÆ m?} !ԳS ,^'$$_^^^###gg7oR?իWO~ڞJj+7o5jԳqd2Ycc#?$|>!Ey;w9zɓ'L@u,ŋbx„ t33ӧ=z… YYY| XAux~~ׯ_;177ۻ1...00p֬Y]ҟ`B GBB!WvvLUۯ_?kkkXcc+W~W~ lmm;?vB.6" b|GtttGgdT8677 ʠ Byqqqs|3knnzϝw}d2 !mŨjU*U.'S__z(ʺ:rI~~>?ƂGX,??_\\lggm۶,Yrرׯ/^+hǫ#D"BnǛvE=B.^dɒN[ꤺ13BVPy<ޣG݊ӽvOejjgQɉҿ*jSS!1Ge;3~m۶YYY۷/yZ999*jذaOj\<Qee%ZZZZZZt'R1b<ؽ{wrr2;BB#+ꩇh*++B#GJe׷sFY=ǧ{?mORLOOGOŹ$N^u}m!<);;+V_rww_^vJettP(8q"KB}ɉr;麭;BtvJyyիWlll6lذj*Z}j'P!\twٲe>?tWlUU]_=gmǧ{?mOeVVV|ϝ FNNvY,c`Bp_|K/t-[R ;҃Դ~z'#((...N{k\]]'N8m4ڵkgΜ 2dnmccs955̙3ƍ#\r2j(geeE}k\1YwR:u*tRrG)J?''ݽ~2$''ۄ蘐@(J곰,...))!CXXXX[[>m=n駟 !yyyo677wtt|AiiK/DL"gw***^J:cbbd2=jnn677zH]] ZZZ\\\bq||FiiiqvvNNNq!ֶPnoرtZEEFFΝ; ƹwȑ# !666vڃRRRƎ;yd=uQ;H^yzjC+--(# O4 <Ѐ@ O4 <Ѐ@Ek ]CqƘ؇B !B͛Badd)S߿uֵkB>|x /=:66cÆ [fMQQQ]]ݎ;!eee}OKK[paVVֶmJJJ; !;vr^(0 U@C*g _%++x! U@C=O4 <Ѐ@ O4 <Ѐ@ O4 <Ѐ@ >>km.^Ȩ϶a'ȩS,X`*,Yn*&GT^w <=ADCu!,R;;ЅP`}z޽VڹsUy*u Bsst>C N׭ɓcX;v?)_~ezpQX>9s_r߾}Y.tSEEMo,juo4櫯/3 䤤$LVSSk.B#fbbbccAMHHHLLLIIINN>|W_}GBd2YTTTAAϿwhh LMMwEW&''߿pQ&T* \\\V\ijj[)Ry醆JBMWթnݪܶm!%%%&&&G5kֵkLLL:ktWmƍ #XZZ-^x\>=&&*::zÆ ~iVVݻ !*jӦM}ц fΜy+Vh'0QFxuֽ۶mKJJZjUCCm@4W_}U]]rEM***//͛7nd٧Niw[ni'P\\/lB&~1c)KKK//W^533~wBYtttNNNssۄ $IQQQFFŪU{222 %QN>%;;_G5իW{zz>W֭[===CCC/677رzFG666ڷBܼg7dj㏹ؓF[ ~g=3`9rܹs633Wkkk]XXа~z@@MDwgΝ/))?4k,BȿoTà ?X,ޱcGO/lhhϨq;")VVV_ G-UVV>{ ޽{ׯ_ussZ555_}U]]]O)\{Z)˗/?~,88xӦMs1d2YMMͮ]!_N6!!!111%%%99_}UZZG}JdQQQ|>޽{.\(**255ݵkWXXZzjrrryy ! Ge2JeʕJf26nff&ɮ]RQQhѢ?}ffhݻwիW߿"qÆ Zcj !%%%X,[Ś|SSwy]UTTgOOOBo]xjzږM;wx6m{ۧj4'Ndgg+ ٶpu]B=unnn^^޾}n޼9nܸ-[/W\y7M֪ׯ׏:8mwz-R&jJ;;ݻ󡡡{O(nݺamjujj[*++mvڵ2CkLv…Ge˖9::ܸq֭[UUUGZnB˳[npYYٱc\\\T*չs:rcBӧ~ ٳgO<}q㨏KK˰ŋ0uߺTUUEGGoذO?ڽ{7!DRmڴ)77>ڰa̙38b m&9jԨ?S"P<oݺuomےVZРg[ti= 2EEE|>YYY7nLMMߟw^BF;uTEEEddҥK? 6ϙ3cj !aaak׮ݼys^^uubf'NܼyCLᆱGخ?8''gׯ?~|KKK컞z%:::,,O>۞q522¨~}ݕJUUB݆U^^sNgg炂={MN+WhٵiD"\.۶j_77z曭>v}B-[6o\SS}V1̡C&$$P͛GTrh43fڵko`0oldd斒RVV>]vݽ{wÆ ۶mg\Y{i+`XPQ^Xւ(Xе+ˊQE,b{TP MD(]@JhI>yP$0_f29s$s̙O>yyyrȑdkkYfׯ*=O-̳gv%--mmm=y!..^s`hhh͛7Ҿ}{UUxBoDD7$7NLLO>5 utpy9;;{yy-_}ku~…˗STUUMMM !_|={6!PUU5..d2444/^,!!A?z_Uk]j̙&X}=j OddY]R|j…B9Fij`&پ}{EEńj%?^"|B~С72Pi1տ%--e˖%K\rɿKBBB/B>y_U֧+&&|r=-}55H}>͏=Zӭ!&O\\\[TTTYYfknEJ^nݮ]=z޽k (&+ow[{ŋCBLLLjQC*^dddqq*څ:ح[7//uZ‹/ڷoY<Μ9ӷo~!O_֭377r劤ŋ#999111"榧ܲѢIII:::)_%%%U}QVV6##8SNyyy١W%/fҤI^^^ZZZ֭[`Ç5TuC:kLP_lpS׮Rx[A9sΟ??QVVV}e=SP,,,Ο?߿e˖ O͛7oÆ {9~ɓ'.]:ZlHezLnUݣG_gWgϞIJJ.ZOQWBBɉrƍDDKK\.ZzOiT^^S^^^}e#> سgO=ZSc``e__~ݻwƌ|_|_E3 sV]v%\pѐcq]u^ŋ5٤v-kEkTU߽{74hh˫|ϯx<==uuu]\\9xs8O>>}zŊ{챱UC*ÙLׯyk޼y#..Λ'{С7oә3g^b?ސ),,,;;Ύ׻YSUUU|544TTTpΎ^&&&)))"IK7("7oKpphjjn޼yʕTXrIΝ;7}t;>)oϧQ9%𾨨4+++mmm?~zׯ7#/CkΗPOE{7"oիWzzz3f̨ﹹѷn*..&eggWlϟ߳gOpp˸q^z>Ĉ򚚚:z;:UzW~= .FFFEGG䣡1gΜ7nPܸqcܹ ߘ#Gԩ/_U<$$DSSʚ*=t˗/j̘1PBHvvv~~ȑ#k=ph#Gи}6P#""'LPsK({IYY9??ʺ맩ЫW^paذa~R-DM0h YYYމfhAZl~ULL̵k:Q+II޽{O>]YYݻw)))~~~XEEEYYYeeݻ'%%?6mZ|||>}444"""=zDa2FFFTREEG+555[II222Դ:QQQ򆆆'N,** WQׯ_~ݻwqٲ#GkqqcZoΟ?{գG4.[VV֭[@jzzz~~~ZZZ޽[~=uڮС !***޽;vҨhfbbbCkXXׯ544~87ɓ'?~\RREEM6)++ eee늇o۷+WS eee{z*uwEEEn.^yɓ'u[\Ç>>[ \m@ss󺞺t钞^S#"Νsd2544z*Bmo\]3N/jz[[[III.m6C)HmaXΝi߿Ixڶm۹sݻg``bjj}vL -'h[ddd/_|riTUU@0U<<ƛիWBsp$%%jbrrrG='ȥ%$. 0`3~sV&%%%&&FMM^됕j&M[LLLvvn莫000,҂ZvmZZPzr^RctG۳@իWnܸqrrrtG$4[n}6ߝk[UVr\qqq6---=a„?~mh`ZoP|X[[ɬsd6bգF;h1<tGD +++[eСCOQ}Q)))@X,ּy,--/^Lw,´"̜9SZZ˗mRἼwܙ3gZ>,XƆX5@"W^^>mڴ{ݹsܜp},[ HQQQ/^p9sZ$O k֬ٿy莥Yd59s͛7^^^t-ϟ~ BH@bbb,Xn:ci !9ݻ… 7o\RRBw,Вddd1BOO/00o.$O dEEE]tqqqbB,.YYY>>>M9N"))):B3oߞ)A T^~~1cn޼)++[f"}@*[[[ 4bd2ӧl2lذ ˗BtҨ`#33cܿ!CĄ^,]Аf7?l*֭kʐjbXÆ _$O L.]b0B,TEE!'*++N&X,ijj$%% \XLUUUQ ,\("##k IDAT !>l}5Nے;qĉwnjQYY9i$n,7z8mB|˗ : lꪣ#..|uSSSA%--]}199y֬Y"эy;z6k׮ ^zϯ(6&hKP=o޼iӦ&gɒ%w޽zj=~H !yY|޽{ %%` &ZnSkbeer_IӴ%kAaWVV5j@ # ((C^^Kضmۊ+lٲ~[;;;믣F&ܾ}{ҥK.]tiqqNi&aÆQg c}СCE>ϟ Ǝ= dVVVB}.{3g.]TJJ_5,,,\~ƍ׮];zkW 66v̘1C VZ5f3fLFFFTTԡCV^=`{RS@uh%%%/^9sٵk״MMM߽{7zh%%%X_x࠯:~xeeeSSӧOzLFRkܬf\Z+珽xjMIKK3fITT!f_zuܹCr7nXxNvvԩSMMMyF@eeeSN  ⻓ n|yZ"]]y 46=rȹsr8.G111r89sQ[ZZZjhhR#:vr+**uFرcϷXwﮪJE5y䬬?wB#G0\.{qBȚ5kxю;YYYFFF\.K.+88ԩSTHu!ߕ#RFFƆ9~iBH@@@=f?|@QVVw^jj*!SN{-((j~\.֭[yu=yҥKTc4U߬f\,c?ʖ-[o߾M177ˣ6p8iiiԏρ333jJKKǎիϊ "' 6(++ ܹsH###ٳg5ܺuڌԩSOrl6cǎz꣐b=ɓ:!aQQQ?kg">>q/3f (//rYYYſyfBׯ_yOQ_(++:r!dܺEխ^QgϞ[FuM mپ}{"̨r!dѢEzL[]ouY:z5yW6*##C=ŷΝ;vpڷo/))I-hCjkkԺ Myi;Y...۶mk~0P#""w׈'LPk9K,vqqٹsgyyyUUOvI995k֘*ncGP_YZG뇆B~xСϟO2Bi`fP7 "!!aggR]YYƟM4Ґj5j<5+YX.h{|{,k߾}8vX1qƑ~P_TRVVFmF +}sk.##x{{m۶5 e߿7nHC~SH©~7RwE.ߵk>+С 3l06SScj<5+YX^w9<<\LL]v>~2/nٲҒg@]Oե0̐www˗ӦM#l޼Ç xwܩ~|Q%hiiȼ{ZTSSrl6[YYyРA?O ӯVNNN;vΝ*}q5Zooouuumm Q @ q… jjjKVVV&##s jJFJ[[{ժU[l;h")))Vy… 8vNAcM2ϣ泦YZQ+++۹sg>|xidN ݥK7olڴKY)//5jT~tڕh ~7D1p988KMM`D*77jWիDGG^ZGGg֬YL&ӧO6mР;4!yեp\!Pf͚El|}};::ּ}u޽W^>ܶm[zzzppԩSqf \@:))EWTT9p/::b̙ӦM­͚-6}ΝٳgرW^݋\jUs@<TUUuɉXZ'{{{BL+9++ֶwRRRqqq... txڵkuuuǍo߾/_\reih1~yyy &z_ǏСw@MVjjjvSN9;;33ga`x3sŘEtܙZu2h F^455~%%%rrrM`kk&WC0]zGې #$$Duf322,Y訪*AXӯ^zpfHp=O-1cBᘪ)S 2(DHX]l6cݙK,믿ꚞhsEEɓ'رcԨQHp;wFDDL:uΝm3 }[bcc544f̘gϞA9 ;;;GFF7.,,Ąp8ϟ߼y3 11QCCcĉ{5j H@`Ԑ#Gϟ?ڵk:u;.%%% ϟ?gXfff ,0a1ݡ6H@'NHMM9sMuFwPmWUU˗/޽{7oHII :yܸq2 ysuub0vvvVر#AQqqq7o|AhhhYYY~&L֧O fhH@yyy/;֠l6;00ϟDw\mNEEϩNH999 3L'hO>]|ʕ+H~FEExxxBB۷k֬ѣǂ 荭/_xxx:ڵk'OFFSÇCBBBCC###9ΠAfΜN&!yjC233f͎;[ʕ+B m:u׫OQҐkNvmyyy[[ŋcq)** }ӧO#""*** j* ]]]$OmƗ/_6o3HII +6NRRRYYf?|UVV֡C/޼yvڵ#Gz{{OxӧOL&o߾Frtt455UTT;@$OmBVV֊+l6݁@:::r8\ZZھ}s5[6pu6zaÆ 6LKKNHڄ$yy{7!$::?~Νo߾_n]k[ZZ啖a##>EEE򕕕eeezI*řYYY=x 55UNNرc+Wb`7oۤInݺ5vXqq|,DjjjxxxXXXDDׯ%$$z5tЭ[6}t O6aɒ%ǎSWW gϞMOO'ϝ;ʕ+\.ǧ{YYYNNN ,700^&uvv^h~ . 9.c555k0)&٧O{RYlΝ; ݻw]]]3fxyy7s"\rٲe***-={ׯ_GEEIJJڵ+}DH(jd6LSS3%%ޞch^^/\cǎ/y[nݺU}ׯ &[{رcԽ뵴455~J=[=y۷oܨ-G%&&֣Gfhhq訨w%&&BMLL6l`jjjbbLw<?;wu owԉ} 'hkk0Lc)uuujQ\\ҲARBtuu{ieeebbbbbZ$Oԅ5rdX,F9Nx233 !%%%?b+nVX,VBBB\\\TT3B{5k֬={ x6vTWGyy9]^YYIrջ@(_o}ǎ=<P !222366߿1R%6S[Ѯ]섄v:uJNNvssPPP@QUUܹs=O޹sΝ;IKK2 S[jժS۷wI[[UUU~~~TInnTzz!ׯ.\2eʙ3gvçOZXX۷եs{p®]njӱc:dee)))]zw KKˣG={6&&ŋܹsݟ={SYYYnnnr322222>ׯ_={466:ujǎwnhhYaV7`P7&NhQ都={X[[7k`06n8dSӧȭ欢"##˗/ϟ?deeQۍB%? IDAThjjTo``Y<<}̙3knpBCC#""233T99cǎ\bnܸgyyE뗕x"<<<;;{ԩnnngϞMHHYvm>}sΕ С-b2y&D|NeN\.y>>>L&s…RRR={sΧO彽߿bŊϟ>|111OB988Ç///xEJGG6l?~ ӧÇަ3fBTTT̉8q|͚5... c˖-RRR]tyiZZÇ?|͛M6߿?11ݝ={|qΜ9 ,0`@ksz積g\۷ooݺu֭+_~=l0CMM̌Ҿ}Bt颦{K}VXXxٳg短xr={޼yʟj$M^^bcc=zD y!DEE_~uu +++Bx/)(((**yI̙ӊFHڨz.8}N~*.ϟ?nݺu߾}{˖--Z||ʕ+ iӦׯKHHܲ:OLLСɓ'*ii+V?O~Ѳep7Qi;bY,VF}Ѿ 3gblF<==z)!!aBȝ;w-beffU_و:777wuuӧǏׯ_,h CHlAǎ=<s1ڜP&..Ni׮rƫ:TTT\vTjj*ߙӆ޵k_p-~S+DuגBHii)خ]섄Bܶoo߾)SB***\UUUY^W~~>!dر ؝‚F-((2dH[R^j^^^rr2!dڗ/_vqqy N>miiI$5W,CAibt 4zhCC7 ?{l|||II u{uuumX,ӧ߾}[RRЩS' 01"===44˗[nURRsss,--ݻwJJʕ+W\.ѣPP!DFFF___FFw^IIkɓT999ճZPPPjj'OlmmkN&YVVb;t蠦)%%ջwo&9hРׯ_{]v˗/WPP(((rJ\\֭ׯ_\nYYY.]}TOqܹs6q<''2NJJjĉM@s eUUU|+ŧM&++KKH 'q)((𭬪={6-47H_$%%w +,-- YAf͚UYY[9s&_:fa'p455srrxkLٳy]MZZZC 7$b̙ԙ; AwDNA-\nEDDtG\ j`0!Ȝe.ihlwńӔHKK?~CMGA]`0맥d{LIIҒl=X[[7d…&L; B4 $O@ $O@ $ONw-uʔ)z⭜4iҮ]h BIII-Z())V+++_~eh&"--^XX[s*--m~~~ A1o޼Um6ť@QQZfܹôk׮BX,WBB›7oƎtR__DM6ٳChRH"ckku!r)111ss˗wԉRUUpv>|dz{{oܸȜA޻w`B:t萜L=ܹsϞ={1$X[[0$OmÇ !5TnD2*Jhh(!DKKZn 'LUB~eAA!)H"ɓ'?ܒ9Օwa]zzz`` JT!4WHڢ%K޽ٳgeeeϟ?"B !%%%+W*))͚56m hhhdeez(M S[Իw+Wtiɒ%ݻw={vzzzqqc!AAAƍKLL%%lvY㴴իW,(Vyq8hpڮ-bٷo^f!7111;;{ӦM%%%Gupp?~̙3 !ׯ__rԩS~׉'&%%̞={&LHLL%11qߵk^qq1- \H"111sss??}zԩk׮EEE999toٲҲ"kիׯ_~ʰ#GBڵk7tPBVJJʲe!ݻwWWW$//ٳvvv֭ѱ4%Gx1*ꁑQYYɓ'yO%&&zzz Z˗]]]l+}0:zZʊ޽KffǏ߽{F p\UT!rrrjH8#9sf֬Yjjj'NܲeȎ穵y;!iii1115)--=v!$33ãxÆ RRR ˗/=ݻ;w;z|nnCBBzhTIDDTT|0ER988߽e˖֭[;]z99Êk<ׯRZn @Dot̙3V+qڎݷ~;A-YV=s挳s׮]]QUax{tݻtnY %%E7//ϊY<Yቈ ODDDD`x"""",DDDDd'"""" 0<Yቈ ODDDD`x""""]ِÇڵt˶mt7o>l0kEDDdCT"bV˖-sttmJҽ.))qqqv#"" #!CH+**ҿV#FvDDD;Odj5jtU{<عsj.ٍ9R?mWZƍ;uT%'22|"FQF?=8mG~7cǎk*y"Saaa[ڴiDDDDJJJ9;+CDDdS8mGf<ǎlT͛[(""";OdƨQj5;;oLNDDDz OdõZ-;;;DfxxxtIRi["""D3FDzaZlih֮j9::޽څPe?~ĉ;v3^zͭ:,>z茌j;=`x3СCpp ""zq,DDDDd'"""" 0<Y999.OQWPPp޽{?^zEGG[("""srr8qٳguVn -ćdj֬zM}˦M*<… Ǐo4"""D"33344TX""***Z`7ܹkh4۷o߹s kV:}t:ucÆ )))uԉXhU/Z1<=Z7nl2JtR.ZݣG1cxyy())>|֬Y3iҤVZEFFΝ;ݝɉ5 O7۷* @-x]Es{1BVYj"""(ҭԷ貑.Q߿@ƍuaaaT%M E.\@垊 @SE{N}=׿?*==}֭%%%UV#bxzM4IVϜ9sϞ=|24tol۶m+W;wnDDD@@ ^rĉV""(zvѪUO?txxxzz۷.\ 33sٲe=;dddXVZfΜYF-[XjJD]UJZzuHH BΉ.LDDDDd'"""" 0<Yቈ ODDDD`x""""*Zvҥ>>>=z/yW^<""C%**ȑ#cǎ5jӧ׮][Vg77u7322F""?7{k@Lzzk>Cf```HHH||ѣߴi Ə7TGDDDf Oy7{Y1 IDAT~  h4UYCvΝ;n)**񹻧Fٲe˄  `Æ )))W^usNllkֽ{V;c ''~DDDՏ;1*]k6mr{қ7ooժU+**gϞyyy?_`xz}NNN ;w\p!//t=,'8p?н{#G[!"") O.33sԩD́%%%mڴϏJIIIHH lr~Fyw,Q={ 8PuZٳgԩkSowm6lʕ+'NxꩧӲe \|[ngΜ_t Z^\\D7۫hj5K3AߧLҴijyG5陗pB˖-9r̙3Oe˖zqǎ;vعsg߾}WZݻW\x@LLԩS?t#G_~vvvϞ=®]֥K TADDTT|JzꐐkRCCC]Q扈 ODDDD`x"""",DDDDd'"""" 0<YO3ٻwoNN ""z ͚5}CLV۷څʤRa)DDD&扈 ODDDD`x"""",DDDDd'"""" 0<Yቈ ODDDD`x"""",DDDDd'"""" 0<Yቈ ODDDD`x"""",DDDDd'"""" 0<Y*clgݺu_ !"" OT}bŊkFGGoڴ=0 OT)1115jPPP`UVvvvjuϞ=[F __ߦM={W^W^޽];уDKN#"";`999/yfaaaII.QիWZUy"˸hԨmk֬Yk׶viDDDՁ,sE}R^xgAu#""j T*8qsrrN>F())=lok 5{!C 4(''gÆ عsg||Z#Gm>Ν;4lADD 8BeQT.Ȇp,DDDDd'"""" 0<Yቈ ODDDD`x"""",DDDDd'"""" 0<Yቈ*v d+6mڴ|rcǚ7oTvdC9o߾-7nпNKKl_,kCxxxuCDDd8mGFϜ9c"%%u_M'22rHZmҨRڵkDDD'2/j4FZ=j(CDDdk8mG:v/hZ}JpBӦMX'25rHJTվLNDDD: Odjذa&-aaaV1<)WW=z+ST-v0<aaa5OճvEDDDhyr&#̨SN>}T*À] 1lM6X"OoܸڵMx']=/4h!"5|O>UYѝ|l& 扈 ODDDD`x"""",DDDDd'v99֮1&Add-\WWTP GfPnuW`aX)JJnP~W`"""bx}b2u\KfMo-Z'_~]mj:;ի`O+څ/W_q/nn#/aaʕ&$ [!C 2U{kGرxmcd88࣏hXqqX ֯/upuŋزo*58?hԡukFs0x曆5L.1 ZbbP " `*:$%a:[gtHMŷ"%E)iU=NU;%|9iswرX=Ǩ=77XqqX@ke|}!L?Z //LlP,^9sPX!YYyӴW];F]r ǎOxI}anhD2@""*d &AB\.ŤIO ) ʕxeDFb4.f*oW^Q^8mY;Z%SJKNFI [ިi{n.pQFy1 {c \~0jSضM7=z $Dsf@Fdzx{獖s@gOh_Eǎp ,Z[й3rs1v,ڴAÆذ_5-~B8;cDnٳQ.fD͚7NN>zđ#HIA2Æ!='NgOCx !C0v,&N'_>8[7ذuq4fŋX=L=DDDU@%l6onJ{{! #0~j">>` j5~h *-NU: ??4eWI bcѭ/`Ib̘c':{w:\ =zsg<8mڵѡ ?WZmt(c$H>Bh(:w6->ި9s*rʸ{*U""ғRMZQ^Hf&5k uK,(ɓ3ֿ̛WhYY_bԨH~ongшcΝJ|WOy?+Yp% ,fϖ%;[D$;[7E* y?V&Lv -bqCBBS'yEYD&M''dJIeZL9|XDqp2֭sgy]+rKNV2a{xWE 2dȐ = \x:xPO/50WT*IM5ꖙ)Һuy͔i XjO{,_'"rJ;']6o 2.rieVI=gk%sbooΕZڵܸQZƌæjNK v4lKD:wӸԮmZ?fkҥ]iedgˌҪI{{WJi;_~nХ n2,^lԘ|.PQ\sn~K BVe\lfkXde!6VzJ* PR7ꅼX7oFVÕM7cht릴1|8&L@%&fq񆲙DE!, ݻQXNLtۿWѼ`>Stdo]铛sѻ7W{GD||C5SDFb4LLbXJ鞊ޤiS8zG*눌DӦX ;wI嗘0yy'LϢaCEE.] .-Z`d$'c DFbFwѩܹFLLWZ~1t(+8^9""J*}vn…Ҹ8;˴ir>qbcƍ%6Vԩȉsl4Z:2zt$..bHG.J?=h)3K 'fRfY h@\]Ϳ9v.d.Y\jGG9sF cj2r>/nn#/aaʕ&$ [[KfR6^//iBnܰZIcK{$/rҩHnx{K撟/˙31B~ۨ38 rPv]*;Ld~Nt̙#jPSeMȚQsiqvFd){`ܸ!=&MHQL_"NNfLa4Z˖r:%;wʄ ('KIA5%(*\jtϒIMV6/W~i4)fdqcWOŷes"k,]f܎{HJrxQ|O@23 -k V+oli]U{NLNZ||䣏̏pԮ-'O5ubի++-M^xA@|(Wxi"ȳVJ͖q횼ἕ O<], > q>SY,r7wwkك>}:ۣysx{# |  &SrW_Pf͟W&NT6ǏGh(/Ɯ9(,T퍬,ܼi^\WѮQcʋ`8v̴~“OB+(wfX^[,Tj. ~cKkћV6jlv耩Sg5?f ̙GWjסChc`V,xq䄳gJ\2^}aaHMEJ RRPX))Fe[%EDDe<< NO!1_&AB\.ŤIO ~^h(+v+ҟwŬY\΁h^^5 k_0idQwEZ1jhp:k5,zJBt'3Т{ݥд)FRDغNN;O5j`&HHԉjԫ//Wjѫ/w坷2""rӂmz5ЫƎEVX yy^^ Br222 >Y3a ,Y^˗^'N!bLS KgHM_ :/@߾O>|̟oh9u K}{xhJS3ϤVfUOIul.X`|N0ssW2̒.aLý*U\ д)ܔZyСRelDo坷sQJsnܐy]40>> class MyUnpicklableObject(object): ... def __getstate__(self): ... raise NotImplementedError ... >>> my_object = dict(foo=dict(unrelated='things'), ... bar=[dict(nesting='fun'), ... dict(boobytrap=MyUnpicklableObject())]) >>> import objgraph >>> objgraph.show_chain( ... objgraph.find_ref_chain( ... my_object, ... lambda x: isinstance(x, MyUnpicklableObject)), ... backrefs=False, ... filename='forward-chain.png') Graph written to ...dot (4 nodes) Image generated as forward-chain.png .. figure:: chain.png :alt: [chain of references from my_object to a MyUnpicklableObject instance] ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/class-with-finalizers.png0000664000175000017500000002176200000000000020236 0ustar00mgmg00000000000000PNG  IHDRk9~bKGD IDATxyX3IdJcA(.(`qA"*R)zZjzuik-޶j]ZJEVuE@DC y?& 1 %I ;ga2s"B1vN BX}B@s#GM$EgAYg+?#Q x<^CCQt͋ir<66 ӓbV; ؁!>!v`ABX}BꃚQRvtu o@^eܽ iپ =3oA ի χiXwb?`8qB9N]\ 0h\!iY7 !>`fs> /͛5 ^B 9&OmYpॗB&j7++ذApN5 \`* VFXrso( ( 23!>E!1vR cOq8|at4Kp jj؎=ҽ}HOUV@QЧH$M˳`(4 !V pv6hFEkBHP\?SoV99`A^-[ !++HI"P(81?kNNypKUa:G /J>oo= !Zcs~x++pumVVVӖ7o*XXIL??x`c"SǴyzBF0u*d:Vx-THIѣ!%>B!) &N;;2Ls’%hS]xk\XG+p?吝 @PV#F@nz!ºuM@"u !, ֬B\0c<ׅ0f 88ᐟ;uUĬY 5,_|x>H.]Cr6W@%Ef !ܸA\ 'W( 'nn#Bݛ89)_CWF"\beE$3̚E?&={aC 'ӧB?@{jLZUSK&G4bmM|RTԔzM=;ҼtD0 sʹTLLȯ>w )+kz7h!'mxU"r͜_!Ņ \N dJASUմ.׭#UrlJuP>Rƍ̚Ք1zM=;<> o^怢`V3UrslmPKTq:qyi`co CXS=ӳ1]-, !u6KK&h]V3ak {'0mZB~vww{{}Cݺ̜==͘'O `(8wa6D_:*m*n%ί6-gʄ>9|XSz1Z"de߃\ァ\AE*U>AcݾJQ7;L_:)+{q?8S26am-YhYByFv&> 55d÷" w2|8%ݺ> ÇٳIVil$$&8:wwkʊC ݻ> Nbbȝ;mqt$K:M̟OΟW-Jɐ!LO'ORr&\Ll4edd'1x!>!v`ABX}BbV; ؁wd'_V@Y'P:/gT*q޿c"=0-66%%%ƍiNӧOR(پ>>>رc  r6}8[rƍE"QvvA<}4:t Bf̘#Uuk_~؂Ǽ]re\.wPÆj4B۷---?C k.C\/_\ W]SnpBv?kmm|aRREQ%%%1Yׯ5kBpppXXa$TTTڮX°fggD"-[(T͌9cfϟBCC_n333 77#B.]jooo5d\.wWUcN233{iggg bƍ3ȴggE-7 󁁁`͚52,>桲2>>'i[5PuY#OYvN444Y* ̙32 >f`׮]nnnۊB 1&!O< g6&_/^mVVRRIQTRRR5}=ٳgùtQBٲe1NZ(-[=zxBDџ{{ݻp_sry>}Lb B^ycoH}^bVic^C(?T7D7(NSj<==Pa1-2HshhhDlsilN}^ݻw(z&>&̙3BLvonaaq ƶH9x ´իK4X}Ljȑ#z:V[}}}g͚FiLnQ5/qĈ׮]crHVeeeڲ;y˖-w{2ɓpA{h J5RP(LNNf~Ӵ~3H5/qΝcx눆Շ5BWWW!>ƛ>>>|Ƕ<`7[n-[j^bRR;!09zֺ-99ˋ߿k޽FI`a}S  09ZD"ج]@%VTTNؚCGuuòeIjjsMM ہϼDGGGvvxX}H}Im[||i>trrzDI5/qرof; ;PJ;;UVիWw޽{l… yƀTs'LBRSSDD"~7)yAAAt(X} lݬ!޽{&r~W?߼y@4-,,p^a1wFFFsKII6~27!!@tPKӧӧ#c&5P++O?@ٹs'˽|2ہ O{BΝ+ M\.߿IDz^"3Mo;0>mH!ӧϩSn޼iaaaX~%V6:{lMj~={4P !Æ g;g%:99EY75X}Zɓ'/x/ BիW\m؋urrr@f8g1%FDDҤ|aiGB C y=zD3rƍPp\[[ۅ x;vT\x,[^H`6ռġC"w49A ˖-]]]%++ƍaaaz1iX}ܹ}`s5fDv￿.|lGly}c;ӅՇBRi@@EQ]t)//!d A)T Gvlذ( |>}`[lҤI')).[gϞ&fyX}!W^xo1cCmʕ|>_p8Pl@@wh;v,=/GV-,((rEEDDyt`!7o8R7oY9sw[ _؎Ο?G(]K|L&+5o ɓTlmm͛gG3d-}lRW^.@įivڵk׹s窿(:pѱSWﻻk&XXXe-쬱;]ta;ֹsNϞ= 1ѣGfRplmmoܸvt,@g8yj\TCC۳X b_y<bTmЭ[ӧOik׮R;uҥ@kBJQQQyϊ+rsst>KQٳR)QMpvv>uT`` Q[NNU |>ݨ,--ܹsoׯ'&&>bǁtMFQv߳gۑ޽{]ݺu3>%GMAxlG]taܺu+a23ܼysԩ -,,#|@tңGFGG`EYZZzxx?~GlG^?y<^cccaa!_WWgaaٳϟ?dT,c1M"ݛ~XZZҿQ׭[v2gD|IT4443۱œ'O8D\wUU2"#sɎq۷+,,lz~#d믿uN8l-O?0WEEEeee#GlZ+Tz̙'N|P6͕wЀڜ+\^PPsĉ쪪*pqq1BlzaTTTFFjd0$?GÇ s0`ϟׯ_>}[:^Ν;3uFdD".s` ؁!>!v`Accc:ÇO2@0qjO0aȐ!zR]nݺ˗/oݺ:*PQZZ>i\ &}d2پ}'<~xsԵsJJJkCc0WbydG/YbŮ]}ѢEƌM;Lf`LUc\\\/_~/caaZŌeNjkkK7s8C<=55,--#""|||bӧ3j(P(Ν/NVhرcΝ QQQcƌyW ::6lСCSSSʶn_ikeeI'󫯾/5kVHWhh믿wرw^\>bĈ lڴTOȏ $EQKZZڷ~o999O)/988]ti=>/ȑ#3f2dHzz:t{wС{OI$~~Hpssڳg_|! W\ٵkW1)JNNݸq#}߫+WZ[[3gjt?~|G7zٳg?']X>aaaͣ-//wl]]jͨϙ3^ѣrF di*3gTVVzyyر'Li&/ӧϙ3g>0W?GGGO0nz:v1VoR^^Z|@~Xʹؽ{wb gR0Wjjj92vo߾?4.fco^вvvv:,BD߲ɓ'B8h<+;&&F$iDžJ31V飞Q(пw۷$ʦN\PP  {EgaZE;v 1֑ח,Yrw}7--w7o!!!Ǐ?x`KV^bgwwŋaf_~k׮xmܸqРA}mnN+z'=0W-Z={:1VW&O:tЫWfeegFf Q9NT霹j̕1VWkkL4)==^Svfc o߾^znذފP(LJJv횅ń ⴛM_>|XYUaC2R|fΜsN3mڴ1chѿYlsc닊BBBBD"YpH$ZlY``5kRSSE"k;sέ[zիWO<966vرڝh0W-j쁮=ez:䈈|X~IDAT?RSSCkܽ{7ܺuF$^boookk;w644yҥKw HHHHNNnllj9U{hd=mNLLl/zjJ\Xzy $&&92--4[Օ└0ꃹj9U{h=m%BQWWWVVqlnnoq{> oLwZu\ 檵XV'''''nN2lҥk׮p8ӧOoL/)oʝw^+ovXw#GOJJCwUeUf„ #+**ZGF5qė^zn<_}Cilj֠={R/_޽{w^;$$dҤIYYY{=*..w: @PLKKspp:uuQQ)׮]=z#~̙Æ ş~/?.//WiI`111'Ntrrz:s&֯_I& zLCu:v`׮]ņǔG\\?occ#H&NiӦiǏU)5HP^^ޭ[XF\::#LV; ؁!>!v`ABX}BbS6+_8R0 w `Z>㔗wti+-Rr9Q1=$$`Zs*7o v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. html_short_title = "home" # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = [ '_static', ] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_use_modindex = True # If false, no index is generated. html_use_index = False # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. html_show_sourcelink = False # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'objgraphdoc' # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'objgraph.tex', u'objgraph Documentation', u'Marius Gedminas', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/extra-info.png0000664000175000017500000004767300000000000016101 0ustar00mgmg00000000000000PNG  IHDRXT̳lbKGD IDATx{\Lǿ35骛J)R$-Z-D-,bKVH!RiIBQHE)TՔFǎ1M45syysy|9y0 ѷ! $ ':[$%%-Z$!!уu"!@Mkk+Q ܹs{B$hmm vpp :WHn4G@  $ @B@ $᦬ ?CABZrr`^Xk mq1 +HB>=ʚJJlXTħ!HJܼ&l<~̧$Dq1̚mmD@Q BB`r ְs'ld2@@dgCi)YCh4"@ bb0}:,\}%e(-( hh]a@8sX{hD!HBe%x{P@A"}i͛ax K@B]χa4x y !@. zzp>B[td$aǚ/r AA PW!#CСn |xb8p8~'?azP"#}Л$ y /4"@ HH !@ @HT6 @C\\ÒȞ@BMVV+VtXŞ9vdLMB` HK@d$&Şam-+W1Luup28:\0~*(c_}C@K#!=0#Bnkl02;~M^ƌ.\olԨNddFŋ'1wwLRtw0) {0P0{o¨c4fj sҺ:LO/0;ޏ0GX8vה1iiVAA߱+{~džwA5+*뷗CaVZAl12{ۖۇ`^}Ion+;n?#!$>5%1FL^"-HI,:0WCav,g[4kV AL ͜مZ[cXC׬1YYJla>8t_Sk Ȁ~ 'ض %6DE&ܺk@}5k`X8`f`na;C͐_0(]0hLrr`j vJ?΀P[ %%_=,YS|y#BY]A#/̘1V_5&N0 !C''l<~IH`OrUVb;h0 Ū'O0MML^e0ůYKbazzaXs3&/wr8Rt_]\t1? #/Bq1XZ= Φzy,jwg„ \e׃"XZ‰u+8\]AN&NNc8_LHH* huu_~11PV7o:9ABk 壉 l0v,n߆av{7L˗s)Êpѣ\Y )*@V `c'Cu5`XY8ްo45}Kbr:=  767N<҂e˾ s7@R6k ,-_/!gvÁJjU4`l'-O^%%Rc00==YY6{d9R _S< ́Kdݼ"#.{acf[:w--PU2gܹ_>dwRض &OG/)+W1[?\H`Bn&vtuxWUaÆa%l޼/w֮dor{lMM 6h/u~$ t 06lfGMbc#9:~ LU2?>+*X|Fӧ_;:.݉Ecؒ%؎ٳ_Nkװ5k7 ΟO?aMm99خ]F"a'N`YYXB—י{S/6~E[[˗/Ú?l0}}"槕zh#>|ٹsۓ 3tǏS(ss7- \2rȂ={tswPWW𡆆ɓ3)eDנhK,qppHKK3c #CQQzzz?CZZ|  <|pرqNDQPP2116mڳgψ K6n8uԑ#G|r>y̙3NDt8H\nll̙[n dy'[[[dbABN?t萩Djj+ي=.]4uTkk디#AB萢"kkk B}]]B[YYY[[{QF{.>>~Ϟ=h*P(AAA'Nsss  Je˖-\0--mĉDG$HJJ^~}ԨQ666ł bccǎ0__޳P_䑔y󦦦UYYիWO>}ر/_;w.9{fͪ䮑 ?nbbrʕ3g΄QEYY޽{eeegnbIֶgϞ &(**x $MM;w/Z "ABЧyŁC#Bܾ}{Ν#ٳgǍW^^۷ӧtv/ӧիW6l򒒒":".]쬥eee}!!sDFFZL&߾}{ƌDݻ_~=$]]]]!V^mgg7qtt9===;;ϟ?oGH Ϟ=311 qㆪ*!_tXWWכHDĉ_xl2#Bt uuGݻO@B 噛t6t+?~9s-[ݓFEtDA奢#HcfeeEEEyyyIJJ"##Y!A8gkkӧH,--׬YFRUⴵCBB7}v6ϟ?kjjt4"=<="VXx N?~b llljBhDGGdrXXo#!-?Sv̘1d2y D(? &&fggGth|gٲe:::eвfyy kyy9NgKP0 pT"~EP-Zԧ\[%%%}}}+++ a\p!44j( ~EEwmw_ mm 6$r}̮^ʡOQQ9СCٳa!-xn'' Jݶmϟ!lwϛ77lhii kiia<:I>|XRR_4666޸q#??_FF&++Ν;޶mMAt=^XXrը>jjjaaasa[@Gt:}֭T*u˖-s̩dݻwmmmۛ7o<<<6n8k֬3g$$$,_i!8ڵիW...ׯ777ojj=wȎܽ{ٳg-m ev MIIY|9L[[~mر?X7.!!! .DB>`nPQQ< ܳ=7oNHHHNNfI&LHOOo ч?~|KKˋ/Xґ }Cʾ|% ч H}ݫWXґ }>77% ѷ>|7oX } MMM|3׏<99ӧT*חCIWW1cƬ_^`!w~ZSSS__/--H# p.bSD FMM +`뛎t"w2``XK]}]BJJ {^p M]{G>}VVV}ذa=zIii… ?k׮SNeggkiiڵK[[K{;+A( xKNacq0ȑ#;v8wL޴iS]] eddrrr~}8qwD;̨(K 333LIIiÇŋRNNc]/;n,,B/,6uhkk}9nݺ?TVV=% ч$D&==]SSSII% ˂ A8׮]rJqq1ѱI&O# "##*++~NrssKOOgI 7oeddxxx$''GDDjkk;::N:bNvvvf<\ ڵkǏg|5kG-h.~{eG1D?>>~cǎemKkjj֭[ڝ,8t:=11/By99+W~y6)((]~=cacvha IDATvvff&ㄸ~OTTTCCÁ 4wܢpOOz;;;→fݸqѣ.\ӫ;w.J=p ,7Q[[[߿f#Dbt~}{{.R!ހu::t(;;rh7Ϝ9ԩSϟ߂y&%!!AZZL!0GfddH122jlluO|[ZZ,--)gY&&&圳.ǗHWWWrnN|S6nGnZa.u:<{Ǐ700ಥ0ws nnn"V| D{1cd{aa'tuuo߾rJͩ0a۷o_|ٳe˖[qh)Rb<"pPQQquu-((Yf!VWW@uu5 >}-k֘{wAfn6zyyikkKIIۻ 111n5{m۶lnnvvvn_Kٳguuu(ʺuXj>(=~7\\\Ν;wM-UW[ĈG:Ǐoܸ۷ZKXjj*#KLL t:oY<ɟ?ae! ܒ;wRnnnZZZkhll:u*7kkk;}:bn CCCO<ɽ/˷lׯ_ﴥmCKyY`^+))OW!!!ZH&O>Y[[Ô2[ 2|p]q 7.e oݺ|ˆ.UUUuҥuuuPWW|r|r5+++77wڴiFFFAAA, 8tPD7?(8)))dXXXXXXhhѣG>}9 IHH*JX.\pرBhjj:rȴiӜ8V]mi1D`Μ9 ..NQQɉsKܴiSO0y]]SQ322P =~xn #&LXhQ[[/bUTT{AAA^^ޤIg{C:88tKyyyNNс +++997nC$00PLL(bbb߿<#;+W߳gk] 7蛜;wnlݢ؂ qqqooo 6?^ZZD: CIIݻw)Bpuu}I޽{Gt8"N_={VYYyΜ9o@L4)55U\\ѣGD#AccڵkV}HǏg̘amm}9Yի555k׮Vh$%%/]4rHWW'OrBF3{qC_%0ae #/ _~;uEw. iҤn1mD{Dwޞ@0`@TT̙3ъACCêUf͚hѢ%?~ۋ/w!#}`)}WW߿ܼpz:"xÇ3xVTɓ''NLJJ":^HV^=f̘W%GGGɓ''N2eJ@@DrD㓞~8Q;R}YYk׮VZzukk+ vرqѣGxHD9<<ի?#oaDoDyf%%ݻwr:RYf=~͛7Ǐ|FF?@">}m6--K. T~#b#߼yWNN#!5F2x's.}ԩS=LA`}&:^۷'O\VVFt,fժUDG#/_qwwX2<0srcc㴴4#;";wرcM=Bya )Sˆ_keeePPBNEܹ~ -N:z%---A9Q=Y$_.#-[xxxo)qGd"z'' sss{Ѝ>hllg]7ӧ&&&=kG,5"hkkstt $x葝݌3DYF7n}A  wSS؅hDp|АF25222,,ʪp}}ijjpnΜ9Ǐ':RN ?*((+8yקLBt,!+&Q^^niiٿ7oKp^A"*++_ll,sʅ H$ӧ DSnݺ BYb MMM &&&nnnD ++# FFFHLLB\~OP([l|0M!hnn贈&:@aחBx… I$Dz a6bĈ_[>\NNnt:]pF4ð5kְ]JttBL\\w|%&&6|fbc;pۅ E4vڄ  7+ѱ%QBBɩ7O&~&OW__odda}ۛ.\3fPTTp0gϞexC┕YZZJKK 8 ZNWWWoDC( DL~ l,QH0ԤU+`AdG$iɒ%,W'N$*$J:88's:N߸q#QQ,Y,g ''7k,qڵO*CŜBر蠄'rxf>""޿<"P(...cԨQkKKK|Te!0LWWHٿ?111mmF#7n<~XƲ=8ŔAxxC4Yt) 333SSSvPVTT%,^19i$LHG˟~I!uJ_ r>~xq|.59CTlEEENߵksC!&&F"ƌs=G%D\0 5j%//XD,OOOMMMfEP(&M"pٌ1YYYҥK &&F&Gy^ LLLDiii\hQ~d2% %*|E[RROkii?E1 5Q455=~#O_766HTFR?~HѤz.wׯ?FO8ղ4x`k:iiiM`z`npB++- h4Ih4ZCC_*_xG;C=X۾}z6ݽ{7?jۇ $ $ ʘ/(!^p3**C`TK*C@06l`ITTT߿? T*߂bD_*++7=tҥK9lRRRg>$曎TUUcI&BR۶m8 *={<{JJJJ^~}مYYYk׮ ܸqc/uEt:Ē|[__իQQQw),,=|mۈw!R/_ჵ-~L:tXRRFKKK6mۛj 2lll|]ڵիW...ׯ777ojjZ|9())!hH A]]]}}}BBa,^ZC ?~yؾ!1hաt:u4gDJ̙#!!q֭'O677ׯ}adt9 z9s&55aee`ddիkFFFQF 66vΎt:=::OG}/jjjz{{ٳNmmm;)!ѣGKIIrrr%%%xxHDazhhh?|N*++;p@PVV#&^H A}}ɓ'cbb"""3flnng###?~Ht3g488J^t CBBꪪ\\\.\mhhի%$$x~=!!aGܱcǹsdM$$$ ߿_XX(##痓믿&''۷'77ĉ<1 QUppp8uꔯ  @tDĘ2#0334h())?TUU?|xbURRal°88&BNs{̘1]7/b!U_<q!x葁8/PA%L~#%--M\\~fsvSS˗Yaaa]#CQEţG՝8qb\\\~~>A!أtpu.<<|l 2;N4ISS3 ~~~޶t!2*sc" ˗//^(##_JIIav%qkqvv^d_/1^x+klld'dv"P('N@ !@ H !@ @h?t4-''=$򔖖755M2ESS믭j{ðׯ_0vذacǎt+__߂m۶1n8o߾vttf\ qTTTdee7lؠ{snܸ@II Fc[FG޵kŌgΜvyG@BB{tEt.#EWWsKƌkmmbWUU͚5~"Regg@}}}uua1 `}633s:8pGBBLLlРA/^0(xxs>}:w%..ҒRZZ8z,yyrY_"]]]]^^nhhi={pҌ `w<-r˥Aaa!0w3Ǐ9;2kyyy*+'''77?x´ WY`ggW^^~-uuT ӧ3J&&&3k}||8c hnnSii)>T8p ۀ}IzLsssMM U7 nyyy'OLMM533۹s˗cbb\]]g̘RIRR w 777\0FyaH8qBWWNNN+WEkAAΚ5k 9 >}0`@QQѩS BRTM0;;[GGmĈn;w\zٳlccc||<mmmO__N CCC֭[G&wV^^O?ի¡ѧO4hСCSSSSRRd2~舗$ǿ ) 477{{{_rÃ/BRPPN|N>6ۓiݻ|!~~~?~ĉNX)Eyy9ޗRRR}O+7 liJ:;;߽{ܹsJJJC&;=!Cddd*))),nK,nʶ'Oc̙3_njnn~U WWWλqkAAnG-6lϜ9yA988`6n8ٳgֆԴH90ydooo9E/0>ftNg{Q6+**^GGG\\  ''G***uuu|.!!DњwÆ [~޽{7m$--][[+WЩ NuplMcccp...\fS  t/ZZZ4T疎7ٳ߿xbi4n|K.9q}/B '??_LLS`sssnn.7'_6mcXQ.ϻ,^`^L;/V Z[[[ZKKˣG!Q'OMMMo:t(~:=N-,,vؑϲyCCCbb"7BDRW\S|C3FUUUQQ)SZZZ_}}}.}}||ƌØ>pD255ԟ* 'N9r˾孬%4MMMIIISN';u n]To޼y!$&&_朅߃ ꫪjkkQ &())=z↓,YYY }}\vPڵkh"l|{rssMfdddooIJ0>>~CeṆŔq4,,,,,,44ѣO>ecc @Ri4ڴiӘw ̙ww\\7---$HnuuuEEEfffDDȞCRzK:\hUWPP311!H/_~ȑ#فHJJΚ5t钺:ʖ?<66D"644g555e)))a2d:uTEG3/1-i4ڌ3/dUUUxxxAA؈#llldddʶ$^yIIɵkTTTf͚żت _s55"l&H><|>;? x̷޽{}EqFcc㚚M6_ӧ4440 uȑ#KKK bŊ~eҢ"##׬YcddxF@]]d͚5[7lGȓ'Om޼9??ٳo޼vZCC:Bppp`6yGϪ yTqqq}}}uuy [nIHHL4yۙNpv Sd@~ @B@ $ @B@ &־ B~㸸2B111[[k]۽ 555  #@ Hmk9IENDB`././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/extra-info.txt0000664000175000017500000000143700000000000016120 0ustar00mgmg00000000000000Extra information ----------------- .. currentmodule:: objgraph You can add extra information to object graphs, if you desire. For example, let's add object IDs: >>> x = [] >>> y = [x, [x], dict(x=x)] >>> import objgraph >>> objgraph.show_refs([y], extra_info=lambda x: hex(id(x)), ... filename='extra-info.png') Graph written to ....dot (... nodes) Image generated as extra-info.png .. figure:: extra-info.png This way you can then look them up later with :func:`at`, if you desire to get a closer look at a particular object: >>> objgraph.at(id(x)) is x True Warning: this doesn't work with strings or ints or other simple types that aren't tracked by the cyclic garbage collector: >>> a = 'a string' >>> objgraph.at(id(a)) ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/finalizers.png0000664000175000017500000007155500000000000016167 0ustar00mgmg00000000000000PNG  IHDR*sS^bKGD IDATxy\4c*TTC%-T}e]ײ%bs캭²%g:Bҩf>?t(LNG;{S׼"!!4T"^idggcF=\.СC!ɴɓ'ZYVe b=:TD뭈_}CRRrssF}K|<iB@V`iieVt7o{HJFǨ!GAE< *BQPB"xTPAedhNӛӮm9UTy]@t>29f{| U{|к1~~#ʱC&V6_|O]A GV!ĢGCׯʱ';;GD"ڸ$yWfMMGtdfg .9=G_Դl$''tR8p177ǜ9s4Ya~mY&{(:[>6GVe L\=Udr,4h'Q1i(<|@F 2 }K0gBT$Ȥ2V?x; X3`Oj18,bjXI U1yLZأIfHNKm "DӫBСCQZ5B*J*b:uB۶mannyT޽{^zHKKCFp5:t...FZZL7@h_VfVy7; ECxڣC[~w.zaԏdZ:qkTϭ_ V@Zf휇o}Ыm_\Z{F8$ԴX[v5,TfDjԲ\ڒrn/.Udz\[yr>fZmx#&wjY_F%ղewz^XXC033C.]TS. UY )ZV #cBi]>Sp=4[oB?G Wepj g[ {HLυtSQ݀ si U r)fӗa;t!6L݇ceX1~-ݮᵤ(J=-ZL&CU-,P__G8Tt˖-C>})S$$$<2"4E-z!oPcЅh׸TÍGao週}&C,P*n=nc00@zVD=BJz2_ j5EIhn[DRj"fmD'ĕ{MsL?#"!%U p_q:>uĀCСIl; "^^~\Ef 6 ))x쇭\Z}n-z3EuiDYe=Ѵvw-^VVpar=ؠpssCJJ T[n!>>o޼4iǸpLMMQ~}h_| wj5uݝ|"VܑI=QqZYH$vMt~~~|RABQPB"xT"!D(!GAEp ;6L$aشi8իWk׮%~ N4yƍCq ^z;w.\]]Kgq=ҩ:y_T\ժUѡCũ 733q lٲ˖-|駥ηptN>U%&0tPEլY۶mSvHyH ;D"L0 "%={VkU 0$4RҒѶQGvzU߾}qe zA1z8z].cPN߶m""" ѱcGifff8rƏx^2 GF 5k:1~x<~R'222>p>~jBXJY'⛭\~"Io4m`֙ufsըQ#H$|8BBBpܹR_J ܙϟc4"^ lڴ 3gرcѽ{w ==Ժ0 >~]脗0Wo vx|c%FuBTѾ}{/U:tl.&rwŪ+00$b =gwEmvlo1ݿf6hՠ-\)m+./񁕕S?׺ukԬYW޴iwU葑d;4LM0Ku#QHVmzBD[TG`g`s.ؤW Lл~PPBt!D(!Wi˳ aaa仌 pwŸR}:t( 6y'׮]tؑJH$h߾֖_uϟpww绔2' ە!%8莼d"!D(!GAE< *BQPB"xT"!D(!GAE< *BQPB"xT"!D(!GAE< *BQPB"xT*$K R*Aff&~tjڷo9sT!U r9K>-ZKm… aii1cիx VX>+)%uwz^6m?V8pqnn8 ݻׯcʕ8|0͛DTEٳgСC;w.ХK\v /_<}x 557`޽8x z#&&7nCx% ˗رch֬={իdeZ-mϟGF0x`4jW\A-0aDDD %%˗/DEEaڵ044͛71dϱk.(r9m бcGbرOйsg4jk޽{aaaQz%1.}yxxx<=={n~3g(J|.\Yk+%B~(r&}QFtn͚6b$$$bԩS:u=!]?www0>KW55k 33Nnܸc3-TCtxyyuOTK 2DuÆ5jbUDTP}駥nQ 4H?.}S(>|"FzӧRiqR}EyáP('1p@-WDtNw\,P\./2\*t9 )U>}!zCE44hP-᜜ 6.ѹ}:BCCeޚcDFFm۶022⻜RM0C ỌJׯ_ѬY3>y'W^\IBBB0bĈr u>̐)011?BOjּy}]tA}9޽{.GgQB* *BQPB"xTӉ=#$e" >ϱb ո7֖ں gvJOO]vE\\ ѫjժ%''kLw0zψ6&cؾ};0dD"ʕ+ib1ׯ}VZ?]vjժH$BPPgΜAj^=#"cTn“'OХKD"\7,|@600aaapvvV=u2dlmmS|%ElQRY_?}ڛH$iӦ<${FE0[T=_xM=#"255u|u\pA,Qbb"BBBTJ${FE0AX'O",, 999x)RRR,=z􀾾>BBBm6\v gΜÇѰaC@jՐh^YEU:u0n8aϞ=FDD,--Ѿ}{$&&"++ .\ʕ+d6m5kX#99~SoM>gD[B7o|}}Q.D6l"֠{QF㻔JO0[TR *BQPB"xT"!D4d$ ͚5+FeccS\ԫWOmիW\^yo~ٸr }}}kFvv6߿O׮]qQ9998u"##QV-xxxLUGll,;:u@PXhT~+g]S.g_M5,22Je/~۷nBjj*i3p4k 6mD"mۆ,HRX[[#88qqq:u*^x;v ,, Çĉ ;vL={ ** nnnݻ77n]MB2"V*8u>S/xzz:0xw_YnZ֭[uVqϞ=CƍUMުV \+xt `aaUŋjHKKCzz:ѹsgA*k*zψi|:tPk= X,VRV"/^)n>y G\\ڰ8~8n߾T]zψi4߿===զ~y{{syfee!11E~J%m֬,,,p>>O+=#@cAc$''Emxxx8-[VdzoooŽw͑K.U5<66aaaܹ{-#쌱c"88;Μ9] ŋGի_\.{ Ӷ@ƍQfM;wɰG\\?///-* P7]W\Aahh͛ȑ#066~$]Ab׮]gϊ;w{;;;Hm? H$7v&M0tPTRtb'O@T")) piΝ;[@]|mڴ!ӱaiiiiEu3kgPtC=Ӆ'B"xT"!D(!GAE< *BQPBGh$ JjYzz画"Ho>۷ܖQw- IDAT5mڔMff&NjRݱ|8 KKK!L *H]" R*g3gߥJBŋỔ h֬ߥJU޽˗/] ӧO› T666hԨN>w):ohҤ >K!T *q)iػw/f͚Hw9AիW/|6m1RH%V rgϞM6aҤIR JBpAKIvBFF&Mw)A ¹s琜w):ETb͚51bjժw9Aտ( 8qRtS|W|BHź_Iz ccc|ݺuCq1K!oQߩS[ # @+xz!A5`dffj\\NNN055?ĺuЪU+ѣ\毫R!O.733VVVHHHЉFFF;vm9^*1Nׯ\\Sg֯_KKKxxxrtm~U2dT???KdlٲSNT*BT*MPbسgOcXz5>3L8UTH$R}Ǐ1h ̟?^^^֭P(pE̜9666x%u놺u"!!AW^066F׮]nZҼߥT,[ GF6mгgOyD0a",9y$DӧEƭ]bkc7ndجYT8880;;;cȈ5nܘeff@&b ƌ޼y6ls3g0f``d2{[]J%1b U=ՕRMNNW1c"8*rrr?~qzb"eee1{:t蠚LJmٲ1ƘB`vvvLOOO5`jT [v-ƌSyV˗b;Vٿ?c^T]?ĉedffԩc+i&L[K.EVVrssUbnu֨Q`o;޽[yVߍ7ФI0W߾}K]7V A`ccCȧh&JݻՆ+JuVfbbfϞVXrssU0+++v XA6<##` (ӼKoɒ%L__Y~PW JT1:u6,''͘1Cul8N:gRdǏSyVpBgk׮-51؀XΝW =-n ƤI۷oe˖˗رch֬={իd$''#00YYY+Wm٧ԨQ1Y7n\}ׯ_?888`ҥ3BCC8>|G-qʺ^|P*AlagΜafffE={0_ sttdlӦMĄuܙM>]ӧ[nϜ٘1cؤIʕ+YNNjT_dd$0`311alܸq,66bɬ~LP;",2c~cREDD0۽{7[fjB`ϟ?gvb|R1?ku$fTڠfcӧOg/fXBBB hc ͛7GVsN!T̜92 ?ߥh?߿ٳg] !eR鷨ܹsCԫWr]^T*w) cU 6DϞ=믿]N F-pI|'|CHPPgϞ=5jкuk)7_|2* R}"-6n܈1c]!eV?ի{]Jظq#LLLw) 1yd|WJKK/I&"DPPb W];w"##&MBU!رcN8}]{)ܽTTbڵ9r$ݢ$ bt &MEzj{?FFF3f ݻ8v>}[R_ мys|G?3߇1Ԛ O?o"pvvFbb"j׮'O]!J`hh[رc9s&>#'d'Ҳ<##~~~ӧOQjUL>ĥKp5k׮,Xllڴ <5,XU%a700iR2Ӳ1UV{o믿B,c̙HKKL&CӦMqYDDD[nEhh(Ν ,]7nÇ~z:JNrL+$$O.reFN`ee vÇׯ5j 44Tm2AAq} NEUZjfϞ~ׯӧ_Rv"X'PVu-Hݩ;%TR lQEDDСC"$TS-}޹sgԩS;v+plݺ֭C޽999e377ȼ+X"4T֭[Xf VE/\*bڵ+a$&&ᅦ!T׉?111-[ 99Btt4Grr2;!BC=C= L'D[T"!D(!GAE< *BQPB"x=G]Nx!%J?VVVH$駟.EgX[[]$#4zHeFǨ!GAE< *BQPB"xT"!D(!GAE< *BQPB"xT"!D(!GAE< *BQPB"xT"!D(!GAE< *BQPB"xT"!D(!wD߽{Om:777lRc]gjj$HR0D"qVVN :aÆA" ++Ky-*z*:wi,-- ,B*2ڢ;ʪRÇ" D"1BUA999ϴ\!]?{.W~}i"BE[TԼys4hРp===1@5 zzꗹ) > ԳgP~}="}6ϕ}E%PvvvhժX,ȑ#y~PP ȑ#!soc C"BAA%`C RH$BǎaaawIJ,--ѽ{w0]!t[[[DDD]9sয়~ %kYfcǎ|"1$$$ԔRcϬ\P@;)с.h"!D(!GAE< *BQP$+(o v!n/D@Ӧ@zg^mpӗLcG]Ծ=0g \ 895KCwkNRavPyz/s??x̜>gO`f{ˋ\|%Tjnϟkn^…)rLKS_Vj*l0z4wgOy%1ƾ>ثW0[[{U-YXDc'Np;u➣P0بQ)ܰ'OHT26bcruědq&ը?znؐ93@rn36f co0fg:S-ˋ1ƶl9Rtyyoؐ6w.cg0Øc2ce];swwVJdln؉E Ky 3{ܠAs1};7>8X}>ϻ|cǸijYݻGՇGIü>oq\ʒ*33ڵܰ1c|^YEQPU>g/HШ@{jvm^͟OR?}__}:qUzФI}r `h̚Z (Nk(y?}S'T톙ݑJ߽[eYСC@FPRysߍʶp.|LM+| ??dp6ܼ tsyҲeY@*/{&ŋNPwkٖ%ut4i…>`~S^…断-ay[qW:`.'ŏ/˺ $|{w=Feǜ̜~&-MRutfzf1KKnXVcAA܁Z錝;Xj4OpS aoyǡLM~V(36fcGcݹ_ 7:|)7o{:ŝ 01؆ -XX^9VV5R?NT26iԧqԫ=.˺(#:FUvP:'p}0Ptl. JI2Kް!Ō%%q͞ӥKuʅSݺܴ]26acg2Xd$w&Ą;?n\~0q/ ŋ:q۷s[.L,ɯatnʟOx8@kیu۷{mϞq'jBlԨ3yf *Ϙ3w|$VϧO6-yWsK[eDAU""Py~~~TTQ_zY!'CYYqU^wڤQȑ7 PP A^rjwBHhOۊC^\r=Ҁ={>:uzAk<|ܹb72ڶ_PI "?]ާƷ$!/ ZÜ>u'gwpkx[v mQ,Ǵ 7n78P^>ssnښk5)֔#7  u\#K^|D(>ycfl\j'GTBU=Ƶի ˻xi  *M)xӄ;?‚Wp0_?.H.ƌ,p9"X4$iiQQڵ-ؗ/fF&Ν ;w/w,+҂=a~"kÆ[y{_s?sǦ,fnW !C=ӉΡ]NtNTTܹ:"*U进r1w\~ 'D"DEE{I$ b1rssQ^= *DǨ100QIS(ɁD"NA IDATqP!4 *p,RĨQʻ4R(DXx1~wHRH$H$޽;X! *K.RiJ%޽3f "r 3(HСCq+zSNѰaC17 P0pUbqT*8x bbbо}{l[lAzz:ǣu|Bj˖-+OBުa/_F.]Ԧ ƦM{nTZ_|Lkkr~aemm_W_}UoXz2A`1^xϟLMM\.gcǎeaaa&HpAE Pӧ3}}}vʕrk׮ite֠AǼ؃ʹBRTBWAP(;355e/e\w^֤I& 滬J ]>\kr gj nnn7B%'H0l0ܿOƿ GGGҙBPP !`gWnd8x ѻwoǗ۲tQϞ=q5ՙ:`СxP>\QPT^rssѻwolG 0x`c߾}{.5k///xTK(VZ8u"##1h dgg]bxzz"$$;wĵkШQ#̙3oA4̙30zh(ZH$BXXlق}nݺXh222.B"j5kÇ?3.Gb1FP̘1+WDq1Kp(Hݻw/|||rJիcٲe C0`?滴 ظq#k|,--{n˗h֬͛G''4 H)N`Ύ/YI$v!jEJܹ3ssssNKiE%tg-~…6mpe5"#GDHH\\\0j( 6 |(๓7~!8Ljժ{ҥKy&4huw$6/DrrrЯ_? 00666|sRRR_cݻ7n T޼y=z 99W\9%餋//@JJ ~]Ѯ)jժ᯿D"A~l{޽;s:0zꅐt...X|9byoׯ_ >slܸrtޮ]0en탥%% mQ֡C߿[l.G9W\ALL ڵk+W]`PP ]b"p&U_~߰pBl۶rt#t ...$axR63]/_$ ;x ߥT7ofR}g,--rxE[TD#ϟ3f |S!?ϟǹsХKJӞJ7~*dժUD~pm˩t˗/#33]tAHH%p֖*d 27nÇѣGK*ڢ"%JqA^⻤  WWWlٲh= L777$%%]R HqF̟?'NTWi׏/^sΰǩS6uVL4 s+.QPru}899 D"Ụ ĉ2dFw2"M6ɓ'S]NҧO>|{쁗rss.PPr׾}{b۶mXd T(zWaaDEEaݘ1cD"(QݥKehQF!""+WDhhpʈ#w^޽ś^'#Kh/`,22Rt(z'&&@ѡhDIZ%K ;;olmm1l0!!C`0ab !i =j骨[[ύ  mlZ[o(GtHzeڵ ĺu0{lhf 70z4J%PVJP`ݺu?xtUtXzc޼y#FhD%7 ^͓ѓ< 41R >8~8EW,XGpܜ= <χc-.i*?gϞӧ*:&x钅lllp`(++044֭[aoocǢXtHMFJ|01 `4iiaߑɓ'uԬk.ܹsi2JTr4ujsT^^gyݻFPPpJ.][",,Lt8MBJu^xP(ԏіݻyf|ᇢ+~~~Xb-Zs2,!4.WVo)@z:Lc۶mo pJˆ#ىhD%W'j 4PϓL:xwc D(Qɕ+ЯPcPo4aɒ%>}:E7yfDFFbi4kxwdc={6"##޽{Ioa֭|NWQcG@䪪0i$!>>C x饗ЩS'DGGCFfOaƀCt4Bb˖-°ap! DDD &&y*QAZp y:P\ dg%%@`ck^xޝoRڶEcD\\j|* >ԩ'Yr0|DFF"992VD%BR㯬,>k/[[03yw~>ޣ0h k'ԺL 0A6mEEE7n^۷oXpݺuèQa4LF}Wf&cV1;v16nc|XBceeM;<3ֿ?cFF06v,co+S׮]c:t`Gf,;;y{{3CCCP(ضmDsm J(Q?1CCƬ9cj2y3c0ֶ-c|8~8kӦ >}:srrbFFF 300`>>>IW^Rt(DRF``Hn#-[[Ƭ[\o7|,--!:}t癁ۺuPEsTv.0>okd x`m_'5fr`fO5/{q_+C7n***lellI&a˖-]3gDll,RRR`PQDgJR1q#c3؞=O|Ucg0WXv| sL3X.yx0֩cNN|n7kݻu,.#,>Wv־}l۶1BQg$U222bYYYC9ԔYFt(uЈJuN[ /_^#cǏT*?gdd?X!Jmؿ?RSSaff&:_3GG`ǎ{E?|1Ofs=zI< Va 0mXnn.c>#ܹ'mA@.]s%;``$`ݺG0'OK_hܩSˎ`˧NګY>E)SRxdƮ]`ddToGPB۷cҤI"mߐ*DO>XK>jt>HI?b +>󤥙$ C~N:Eɓ044TX744D߾}qIꦛ7ok׮1eD/ , ذ?~&* ='9**cؾ^[Z|u=vZy9 OO܄ioo .}p̛7w܁CkJTq">}/߻rV_(- {W,kk~(#B!Cйs&}}ii)dN[6n܈;vhigqq1IH,7;OU-Ғ')-;xΝy ?oջ7htttV6m"""'*L?')kIZǎl@sk*`j``~1f̘+W !!Ah$:ز')'U*sR2Zj$:Q|򁁼(iU|}})|BUC9sxȑ}K2^෷ZFzU\|D)S ##ChM%P6;w5z-[ZZܼVXлwotBOJӆ c2tVT?tfQ/͘1:Gnn.mۦͰ300apA1rUp?՚6Mu| I^by-YRcƼ,COUs#""R늡C">>KUm?tAT[wϛӓ/P?>}: 񇐰Rp%DFFbݺu5dz#::{gr;w(,,?,0r6l/)Qն{70a>#&& ye~v}u{M"@BBjoٲ>|8F ///TTT`Ȑ!+++?^T-]tA^efg˟~\\v%ZϞ|Plc 9$T$zqq1JJJpq00|p 0!%???Q u0ߺm8o[v;O{ Νz1ƍ ۇիWCTTG7t}Ǚ3gPQQ!u)QU;z?ի=;w6psk4 *={Dpp0<<>())ի{SNx022e=]٫W/\pAk2HMO^xJ~vIhϩ]nzcƌvޱwzK/P(ʚZ>ana%{QL}{YEEJL> kk^Q[ǎTR"}*T?V'oBV{a?lu k_{ 6yyj'*}vJdddΝ;ӈJr%'{o^^xQ )!uGN4jud PD>6[PjeessC?nCfFuP+ܓ<֭[7$(Q|dhV>:-|112kϞB4oZZyyyꟙw<%ut] Xke|1oEk"A/mpطovv`+W>]4WUm˃"`mֵ>얖(h'%ڦNc՞O[T|Տ:ē)bPԡCTTTѣjɓ'}a+++[%xxj.]%ի@q10c[T.bjQ\lހk>B8<<{ϣ'սk_J-ڟԇ],--Q\\,Fjss.E~sc-* :cs7n_~{;v ~^T]!fϞݻիؿ?0eя?ב>FII N8Q3sر>rdii J$`ZDD󶻵Z,Л 'z?Drq>{/^ ܾ- :^|>Xlv؁I&;???dffc o)G#*MӦ5~CC!aI?՛8Q=I~yk԰z5Cy*JTw֯jIDAT֮SQ Q?>.^,$,"/fPKVR?>c DG?norrӧ?VoRZ |9rt6V*HU},,-NH#f`l5Q녊 `.\&(HOFdUinJT y->z R޽;ΟinȩŜvj|tG4"u4(Q5 A77y2ڻW=G61,\[4S&iGRDX$hi:u?/ٸu!uHYDi>;+T31"#''`v.5'wS߁cz΅ )FT=i LJmxmyg͛ZA]/p߾Μ |{Qu'%vuK:@%ps j^^l8~_y83x;X`R>jW1/%B7BJJۇkSUUJez7\%d>5moᇏ߳;~U1T;WKM WRQO8ILLzz*z={ @t8ZE#*2y_z5/sxW#9͛VM^6p<٦ĩGz]n,ERLV( % ɰ0Ft{a!`p޲F3Iٳ[Lz(885cqKg$cL)Vk?O4?-Tyׁ-NX%%|qqXy m?w66Mt=z4:u5kֈE{RٳRzϫGv֭#-o_Gv6OJ|KO>W~v^DĄI@AAAЫ)Qѣ?/u>/,((33^amGk 4%&xիC @ee%:$:fOT)H[731SSCҤJXl,cS2fdGz!!Kc xPmٲeGkdzKܙOl}VK'uGO׺|XOy,"̈#Э[7rrr`oo/ɵO*J%R@ϞϏ{΀3,(,z#GƠ|oDV[,[ oF;]ZĮah۶-~%* zO| uKK.T*ÇӺ]9/:zVIdxtR4/ /ůEJyW?ngl-Pڕ<=yr31=gpBڵ 7n܀ѳe ,b v%DE7n@׮]isss_ӧOokd:!t#GDhhP$??eeepppz$88qqq8wPٟ P{#DA ={dWJT"駟j~uEff&$DE@o&,--qFѡ<4JĒ!i3gDXXXMk_]:JTlDEEn޼N:Iv=JT1cTiqI9sFt(ORp-JT6 7[ѡ>>ׯ,zU]pm۶t1r5JT\pp0~ܼyShϟ7 צDEM0;vDXX8.\ DEa޼yظq#PYYW[)QΝrBeO>BOо}{L:BJN8mۢ{_DEXp!q!ɯ}) H(Q3^x )U8u^~eɯ[!:$88GJJd7Я_?ɮ!:dرpwww}v} _ZAbhhcӦMGRRϟGGG 8Ey)xzzֶE &ՎFΆ{9\pFFF[hzC6mڤ> Q#222l2tyyyt$)xVYVV'N`Z=2zuBH,]Jz12 4Hkl JTCT>377W=z(>+#Dٳ}}o= ???)(QڴiݽdehhRĉ'(QB]v8|0all\}m'ϣT!8r`hhB@^^֮'''%*BtajjT*VGTİaÄ-D!:O>طo a`+++6^TT'OW_!:5#r8TTT`ذaZ9_sQ"D;_u߿_+獉A=СC 5 Xz5rrrs߿ʹ \\\EɄ CDGGcjhDEH *((yзoc Z z >s!- i4N=JT٣DE=JT٣DE=JT\`͢C*JTtcŊV{oΜ9XfȚ!z ,mںfmDEi*?u{aʕZ2R#;;K,ْK.(QT*9'N޽{5T ***}vDGG_Ezz:,--_bɒ%ncӧ~7v3˗/GJJ fϞ 81cN6I DE޳s,//عs'T*f͚% smΰxb!44gFYY,,,D8i޽{#%%E JTB7o BBBrJT*lذ*E=RVVo^PZZZs,22!C`ii GGG|GRTXv- ++ ;v@vv6~@NN"##Q\\|̞= A^GΝ  ^4 B?C N8p v؁I&!D(QBd!D(QBd!D(QBd!D!23gԩSƺuuś7Z8BшbccQXX诫/z7%*BdRO]ϛnCr}TqEoyii)"##7nҥ pQ3EIHH_ >߾};]틮xWիW#//+Vrsskdeeٳ8}4ׯG~~>p=mېO\3D=ӟ L',JT٣DE=JT٣DE=JT٣DE=JT٣ cǎTrDEH 0`]%01tҥqZBC="%*BQ"ȞEA!OjFIENDB`././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/forward-chain.png0000664000175000017500000003565000000000000016541 0ustar00mgmg00000000000000PNG  IHDRdkabKGD IDATx}\?tR.Q2Zgb0|l>|̶kc0j}*W͌0DRtuz8sTNt'֭~<^A""R` H$L]DDD 2p@ 2G?~<٣2 {n}AS5\1c@~i5f2H0DLD$ d""` H$d8A7mǏ|[Q<ģz$IHҀݻ^6t(0hU?|<ģzL/0S܃bO<8eAӫeRyEE@?N.€ۇ'ޣG;)K(nDߵNoqquyyΝ4kt,>{^^ub62.sD:2խʷg^E=A17g_qzKK&(6j\4om(̙a3F <\ѡm@6ɩ!NI 0owJy~AT"Q|?*:Q}{GGEX(<ݹqǎOMUt^JqŊwο ("|ϼ+F*ߏeY[YY˾V̙i<(HGT7~I1\"/Os]m7z4p2曊Kzl~*@&;vLqĿ>b}k^1\]bt)8tO.Wc#:~\di)pbۻǕ6L+.OѾEPX^R};\") iӀ-jv>@&9{1B1=uJsaiyyy=ŲYWFtHɓGGÇv)z?JHW.W,׿ToQPOzu- "uGZc2H0DLD$ d""` H$DD"@&" ~R̙30`0qqq譼>Ȥ1c軄 ;wou{V}ZH4<~D !H$DD"@&" 2H0DLD$ d""` H$DD"@&" 2H0DLD$ d""` H$DD"@&" 2H0DLD$ d""` S^ y&z [[[}Cd$ Znxr}CT/^eH$T\~ 5qEպ[naԨQO \rrNŒ3ꊔy㳡 m۷oٳq]̚5 ވC6m\?~<._ T7;v gHR}?%zI0aff(((3|rl޼| o߆zܾ}SL ϧB/2;0#Gbƌz*`ԩƪUD2mllh"p9GGG@fQQQ.\KKK}GLZbb"`Ȑ!I&A"T-  +V` QFLL nܸŋѬY3JJJ`bT-ZHE޽{ ,@vv6vڅ(UVXf 8s bbb0axxxٳ|2@qO&MiӦz{^[ \@@ ,,Lϕ 琉DLD$ d""` H$DD"@&" 2H0DLD$ d""` H$xW28yyy(**Rשּׁ,2T :&xM2(AiiiիWUFTs ҪU+}WtX Qc Ai֬[e{%׏>0W9eQZZ:vp NNN+K*"-- 5ʈj#d285СCajj~~~ c2H d2HAAA())X^RR =TDTs TPP;;;-DZZd2*#zq!AdT*U-Jgb ^``+"NYppp@ff&?+#z1!266رc!J!J1vX142`!) ھ}qF}!** J4M:Gwd Ȥ>}.EMZZ^ϕ] /wa. 琉DLD$ d""` H$$j8y$o߮RtL[b…W[7e[NOD}Q7n\ U0I︬/&Lj>ĢEj*"'^KMMŜ9sRM$ d2(8uΞ=j*{Axx8!!!ꫯ0g=?qʂ vcǎ!++K|y&BBBW^(,,o a14lPcYVVrrrw^bɕ? D"X6{ld2^!!!(((#zq dm۶K.y&}=zTeU ۷V¢EPZZM6r=VG2ZAAH,??3ղ0/ŋ~z]Kw dҙ4L>]mV}7 Ȥ3jKJJY*WYogϞ!,, ɸs,--1}t+(((ӧq9=z41l޼ m+Wލ7ꊝ;wVk?2Lc%ye{n={3mۆ4tױd@qq1}2DosssJKKadaĈF~_t&..Caa!._F}Sb͚5D֭ajjիWcŊ8s Ν;^za…@ff&v @ѓ~\.ǣG}y8q>󃕕O/>^oooϰرcQ\\xU8|0!EL_9NY({z ~ 3f >#H$l޼055 \4d2|HJJ¶mpmCRR>VΝ;(..ۓA/Is>~w޽ www ---@)##>>>MIIIjC~~>bbbгgO 85}jDb (W$888`֬Yڏe#--Mmȑ#w^9r/_ƈ#8]A:) 2XBQQƺhӧuHNNƆ oxDa A)(..ӧնIMMŹsj|_vvv]JJJ4+j*]F^^W_9񬉪L:w]REEE= 5z#$$۷G||<=\7fffExxnݺ'OÑg"++  |]'OÇѲeK$=SzS#d""` H$DD"@&" 2H0DLD$ d""7Ikƈüy]w d@iݻwq%}aŊ3gM]tAV]2=#qH$DD"@&" 2H0DLD$ d""` H$DD"@&" 2H0DLD$ d""` H$DD"@&" 2H0DLD$ d""` zy,z90 7owްJJJW_ɱ@&'HкukC.X&&&裏jX2| daoo_'ǒdv{!00VEDQ=޹~: kkkx{{ŋu٘3g͛Yfa5k?˖-CII `ݐJؾ};mۆׯѣGx q)̘1HII7oLܺu F§~`ʕ+Ν'|WWWL =~aΜ9Zm#s%#A&~AυÇ~.Jnnn!##Cm NABVXB hq&I8eAG z*bbb 6T۾wgj6GGGL<;v@rr2A@dd$\eFF666j˧NZ /Faaj*RjqqqUāL#YfJHHp+++XJś XbbccKܰpBXZZ>1Z!qb SwȐ!QѣG+fZmͱ7o`lܸk׮?ǕVeҤIH$ T AQIDATV = Q)۵k6ZZZ*€\. Ӆ={ Zm#sUFM6ͅ?CU:Rƍ###!::Zشi`oo/Ο?/Μ97j5A'*!20=WR"t/^D tvv͛UNaqHǾ; >\aL?:MN‡~<}:?ӧO(Fe/}#2h022aggcbܹHIIL2Ezi2 C&'9d"mqLD$ d""` H$DD"@&" 2H0DLD$@ݻ7QdL&^?:M8p U햔/aD(--\.ѿJT] d2(EEEGNNNYYY!55w=#9d2(RU6 QTTT"?+" SZZM"55xjPKNIHR1 UKi NW!VZ޽{jZl.pL+88MMM1a=VDT3!?ƍh׮*"`k:tD"D"'Ø  ZPPLLL`bb }CT# -Z߿=WDTB9т_/SSS!::| LNNFqq1tR~()G+P\t +rӦMuZzDD"@&" 2H0DLD$ d5o߾m퍀jB'}ϫ^^FuK.ƛo ׿WV;/_'p ӡC`2 Æ p; r1buwww1V[5ƍ;;;@FP<~Z(i{pq,.]U?WOA7jp5lڴ իWX^Yk=ɓ'xs{)vYe<@^r9r͛7Hu['֬Y4,]K,yp}]ZjQUY$s xyyYfؠaÆHKKS{̋OD5Em-@Ν61gΜZYd~gH$ >\cݠA/jߩzaccT>""VVVx뭷2uvvvXp!ZȜ;wiii߿?v܉\7:wP;۷/>CHRر\.f̘kɓժE"[n򂗗O?;vDRRV^m۶ٳ'zyaڴipwwGJJ lقk׮=z􀗗1o<|}}ѢE ]v8w責QFaĉ8z(Ν; kwrr;#$}F'M6>{ܺus"0b4mTUܹ͛sǗ/ZꫯgϞpvvƧ~U-U7|...|uUp,2r ZޣG={ґkdd$~g  (joc;w6662d6mڄ˗ ӦMD"AÆ  6 Ƿ~ ,Y(--ŕ+WЯ_?X[[P5|lV¦M~ݺuӨaÆhժfΜ͛7Wؾ};VZ-[Vo`۶mxW_ɩ}J$L6 111Xr%fΜ Ad4hмysdggٳg#77O>bddgϞahܸV<܆PLM1Ń#d@`` p!`/|ܡC0|p9W9GDDP ==prrž={iiix PZZXYfرcJJJ(4p^~׮]tT_Y۷/H$***tUR~Z>$ dÉ'=z )) = A0b#H$1bpMRZZZDK233?5j\۲e ձ=<(t'NP]U~ٳg1cƨEm kݻ___"1d4jHMM:tף2 cǎEѠA֭[-ZnN:!++ ~-0rHbѣGG޽ѧO@aa!FmHNNFzz::t#22pwwp]XXXo߾С:wGaƍ(--E&M0vX&&&̙3hڴ):wN:!==6lP1N:=z`РAٳ'z ###,_\iUբOȑ#(--+ٳg*綟>};ҏnܺu cƌQ]&u:,, cǎU FV¬YPXXX'ܰa*ՌD"?7n`ܹ.jȑ# ոq,… uƤ;)KKKGY/{'<=={ 4,](;H{k֬qYekGDjj*!.]5%0i$>Cɱ_ѣMkr2Q21D,g8sPkӫ,;N{icC"ҥ Ѹqc\rO~-[VὟ`ʔ)j$4hо}{bx0h #11DttӍfۦx7p}nصk lmmѹsgt={FÆ Ô)SԖ?~»: K.!..N#F4R)6nXv:׮]í[0x`USRRн{w,_Du{ <(){ju|eѣGk;N鉹s⧟~ƍ!0l0]_|._u-JWQCu3vX 01rssaiiUVJ]5oزeU?m۶ZbҤI7nd2>cL>>ѣGAaܹ077WR6$$ 6r!Cw[n U 8wOdcbb޽{cjO:І]v?q)))j);`{iK;Nyʼh8=jkf8%e8WWW|':u*޹ӆ#f͚5O}xƍî]T Exx8&NH~ٸb`zzz"&&Fm222 UO~m|7mbcc㭷BDD`eemx=y٪feUu޽{#22Rmt2,HX|.ewac︺S[AƸrWjtʙ3g4F ͛ՖɁl}BXDѣGcҤIXd +[bM>>>G&MpIZ;w{ljwƎ \SSShǞ={4FNb}Uݏʟ[l-[:uXXcƌ7~sP>Э[7|￯&&&*tm`pqqɓq=?Xy,AѢE k;v?BCCUtjC1j(l޼!!!p}][0;;l߾7o_ ///\R 1>׃Q~/!4#ݻK"11-Z@aa!0J966VUuUJصkWhd|'HHHePRR[jմ@I txwsN!((HQ믿3f±cZc8=z45kcǎegg#443gD@@n*hzJe~Uޣ+V_/ǎ0%333tfͪV=bP;`ڵyf133Cnn.0l0U(?5\<"''ӦMo5,,,p=ܽ{SE;;Ngz0RvO)1>@CU 7|w+{U۷o>3ׯr]vEZZo B\\\WM۶mpB_.\ҥK1j(.6x7n ZqPvcQR?D^OLL APe鉒nq9Z -Z@```dR?F.]`gg={QQN(MOOGvv MWeccDEEh?eUزe BCC#((oqšCЭ[*{Utzu~),Y4C8q"m_wVe522RקOUgϢqpssòeTW{h׮fϞ> wPy8 Ew\FFZOVw-^ iFUwܜ9s燣GBH$9:u+WY-=Ls[w\Oߏ={9tPܸqGs~ӱw^ 2G 0x`h۶-TW /ǥK4;ݻwGjjF*~;u={V5H$pvvF^^&22۷Gn ;;;XYY(͖Ќ7VVV_TiӦ!**K?_Nz8z(rrrTw{ljw\.GddJVZSNźuT^Z'..:t(Zn_U z9sۈo'O0a\zUC`aa:NNNf͚k׮.] +Wsŝ;w!Cyݻ7Ο?;wMs+sssYYYprrB޽'''t'N^h]/{w\SzՇ@U/qG}Wc>ρYƏ;.<<\[RբN:lH z9d"LD$ d""` DWYTG""@vrr1/!"cc 7h\FDD9d""` H$L}VDDs'4~ƁIENDB`././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/generator-sample.txt0000664000175000017500000000270200000000000017305 0ustar00mgmg00000000000000Stack frames and generators =========================== Let's define a custom class >>> class Canary(object): ... pass Suppose we've a generator that uses it >>> def count_to_three(): ... tweety = Canary() ... yield 1 ... yield 2 ... yield 3 and we make it active >>> it = count_to_three() >>> next(it) 1 Now we can see that our Canary object is alive in memory >>> import objgraph >>> objgraph.count('Canary') 1 and we can see what holds it in memory >>> objgraph.show_backrefs(objgraph.by_type('Canary'), ... max_depth=7, ... filename='canary.png') # doctest: +NODES_VARY Graph written to ....dot (15 nodes) Image generated as canary.png .. figure:: canary.png :alt: [graph of objects from which the canary is reachable] :scale: 50% Or we can examine just one of the reference chains leading straight to a module. >>> objgraph.show_chain( ... objgraph.find_backref_chain(objgraph.by_type('Canary')[0], ... objgraph.is_proper_module), ... filename='canary-chain.png') Graph written to ....dot (11 nodes) Image generated as canary-chain.png .. figure:: canary-chain.png :alt: [chain of objects from a module to the canary] :scale: 50% To a first approximation, modules are garbage-collection roots, which makes the latter technique most useful. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/highlight.png0000664000175000017500000015453700000000000015772 0ustar00mgmg00000000000000PNG  IHDRYbKGD IDATxwXWҥ (XA,{}lQ1DklOL11hi>FDQF{G,( .Aظ(RuqιggQ)  L]BeBa@Ba@jcRRRXv-III.EQtؑ *,S_7n^3vB"h:ˊ]O6-- ~)V[{?m5OPƬa"Bz9֤?P:~'ꬿXݗ#l욗 XT3KvuLQ)V($dEde*-ig) @KWj'܊X;Wڇ($dEt?1[ ]15 MmnD1!cHv(͒w1yv[\8yBr Vh1Ӵ<#L F#mu|$`8{Dk ^@Xٚ?^QHOVyWp(OvˤX~ڐ 6_ljj iNxJI睯`sYo?'Q) V͉}Yrf~ Ee¤9X&!DzX4}>|qvWU]kʶ3|0l}d(*\x냫x]=@/Yj|i?gv7QHBV J79/ƌYu{]9@U[ezP;V}9D$HcEu)& Ώo,s ʞnc9H䣛X<3N `.GH g,Z%Z6N\Aۃ~vG,%N_,/v~BO Dd7ڡκcv}]{;v;p׵ik!+7gOq\ܜzGo-v{_L^ʛngevw׏ t ENci'.{j:>`.n>N1m /FXٚkngC0>f̷`ȁ# -_>8?ED |A WCcyj`kKHqݺu_BQ|F?m#;MЫX%Dyٖ.xo ցx)L\8^_:?⑫{}ZY› `KHQM\si#V̙' -_̙PȻ8a'lЛϣ&F~ceJőf`GM!;by 9/yIBy^;Dl7 :%:ռ[:>v,u&..%O.&|];)!6>΂`HH7n*! =˂vg 8ިβ;牣jX?kzcWk9[vi3 Ƿ}Oo6MB2gy{7b\9+K͙Ǜ~Cvy,b2>]@Ni)m:0_1ٗRҩu2wg[d{{[8Fe>ʗ4:M},T) {!&:-7qQ_ΏoSo#n:\с8ے8D BOd᳉̸aM6zdw>3i/=7LY^7}kz!zG6pV'nTjw'55?2)җdsABCi\\^`7XYn gn)}T:~k&Q߄At U.QJݿWӫZ^s$Zu'fGhaHg1c }־8Fڡq\mSJO,rb({4eRnΊVy^~8l]p߽NPT) E?`1lɖ%<_uf\"6`ݐw~k&Z6/gg)$YV1 гx^;Dt6?{|D@O~vt_ؗ~֘a+SM~_pE?7ig)-m:'ƾ^d`K5ٓ'p^>kmf*sKӚdgwK:-q{pN--,.^hx{A/9Ū7n7EuRVR XqS& `[)s4{?ܮ0?,1;?rY4i3ݫz Jݿ̂s XsCgv֒Yך?f^WNMbkyX2s>;LXZ;5ijs~076r9x0;t )-,{9sv[ YnywE{uCΉ?bb<WjK_ғ}:7ƒ7H!D[乥is4ɸoD:eըXg/'s/io9 4j H71%3nswOb3 i)$[ذbJޟޔjvyXr5OI-|߹2G,곍yJ 6\ֆv;C6suW={~LmI/KM_7}jv #ƾmF&l?|יzlZNt Ue1^؞>$d_6&hB!|E R4oDij IڗMVOqlI7Ս>m62@RXKg{~2\mbsDT`W]hZ}/qA[JscMC?/&. O.2gTa)ozęg`LO2?=Rqyx(ui9愗>L%RZ?TkCڂ{d672)8^mt8nqy1Bin(wdޔu7z Y=ΊV0\ގחbƔʴ?St-LsKvN#29WKsbns[?^X?fÖ GQC1^Y_Lz!Hgy {Иqw ˩PziHmY.zwޗ4-j(ڹPuc3.KO6:-2wNid\r˫^[JQv~7GcWc'8U+NO\r*Æ_Ǵ\D͟󟍟ڋ R E_ .@p7H5;Is|95<,;qÓ{sj}*!+(}_8뵟(2CZ-f۷H21VAc<c>JžcmjwJ:}b %sߣz2M5:˫E/95G$ZsJK*] ɭn>ȻƄ;Yj|[o6ݫaȠc9֤?;MOۍomƮAQslv:E!GYn6}3,5&!Pn-U-۹L5wv[N .L}J;T;Mюz_O S)RU澇J6Gcw𾼟49~uiݴ=IqDT$MmcWOvw3xK@Foy|t־G!jR8S?>`.v4 ^A5s673}{Hr}{ِecPT^8f{t.ۃ+\ё6PT*pa_XluS Y7xΘ zr\,Wwd\:R?[.Uou&,%1>/汫'*Eޥط2>Z*zM#J} {h|p5Ԍp٧rRnrQ_R̭9ި/^AjI5p[lBzϫYzP;M$K^ENHȊ|e)B3>ZĄHIЬY,mLMM)WӦǦ_Ő 9FaXXXd^GBVbё۷cffnjXhFhVW9RbӦM?ʕ+dɫr[I Qݛ &hOT*fϞMn8ucƌaر׏ǏGBVyhѢuaرXYY1g8tu%00И:Bj5ׯG,_<]]tܹsjՊ;_B}%JP^=֮]k  Y!+`߾}dѤABV'j5saҥZΝ;#cetB<5j(~:7… .ɨ$dyA3cdnZ!DQ,\ʕ+P-ZT B܄ `ذa2\ }%((ÇKDDKB|Ӹqc9BDD 6ʕ+.$d(|x@. 2UVr)cJ$d'7o :::Wiq?̌SV-:uT?&!+D>ر#W|5jdr^HdW_}EӦMѣG.$dJ5Dqvvfٳs璐BJ5kd|:tHBVQhM8.]0dbbb]N$dJbٲe$&&olI ! 5.]ٴiBBVQu֍#F0nܸ\$dE_Jw5v):$dE| ˖- B}G;$cH #**J >>^gYJJϳ`޽] 7Bk,X۹5w\OիWqww7j-ғ/E ^^^TxY&Mݝ>إH iYfΰa*Yjg!ҥKvޝ㤄fffϕR ƶmیVdxh4ٮStEPT|Wl߾@!=Y!Oɒ%GRvZ%i׮8p(KOVУG̲{FJYfqAo%dxƠAHMMYfnnN޽6RUe5mڔVZW_} Y!ѥKtQEV&M" K.{B<???͵رGxzz?{BdcڏϚ3`j/Ądz|r"""|mMBu֔,Y*+ 7xZʕ+] Y!ajjСCuFH*;;;ʊ+]NVǏŋ.CGtt4G|x{{,\rBСC4k֌ӧOSV|iSBV* ,g-<<GGl5//( 4YfK2/ ƍc2 3gBIRѿ֮]̙3_x׵ cBbܸqcǎK{BbnݺTV |iOBVQՋ[K[BbK.\r7n- Y!DӴiSؽ{ےNEViѢ{5x[RմnݚzS=z4:u2Re"?hт#!+4wz IDAT9rĠH 2d666.EB%\2O6h;ZQҦMILLT&&&PJ駟5jIII-[/Lzpuu%))=zecȥ5jp9!=YQlT*^u `=z%JhIOOԩSG3511a.]M6}v?NZ u\\l! چ(6ԩ'$sDEEltM6ˋ{jwI6mĭ[va+W͛h4!!+*Ud~ٻ}>bŊhi4N8+DRBRSS 3Xpttri&a\*T0; YQlDFFPR\=޽{@Ƽ_O_O@5MLש)UjZ=6FHHt ///''',,,W۷DWiܸ1۷gϞ\rXlmm)UL,x0؞(`X|9?fL0=j ȸYfh"Ο? ۷ޞ 6h ߵkiii:=[Q88;;tpNV+n^iϞ=:wŮ]t%''v{INܜjժQJ8pݺu#&&ZMN(S ?fƍkpuuk׮ܽ{SSS7oάY zA0-n~.JΟ?ƍYh0|p,,,HMMݻԬYYx1 2J*vZ~'<<<ҥNݝ@vKPSTwV+ߕrQNԩe] |qqq\v 8Dpp0< ..}(Q+++6mʡC $--UMPXyvxxxd[iIII,YRgٖ-[ӧ]tvPA&B<GGGOˋdϟ7nݝQFQ^Wޯ($d@7<=z-[Օƍr[[&""˗~zLLL}IBVjͧ'8|gs]tڴiC޽]6tڕ'Nd{4˾3{:ě5k=vYx~,  YQhUXnݺ36oޜҥK總y,,,ϥhX|9/^Zjt֯_Orr2%J<RJObmmMƍqppyکŭ3f m۶[nܼyüHT>g00JE>}1v)̙3إzu  !I !I !I !I !I !I !I !I !ɭE`jjƍٸqK)4F߅|DÇ]F~~~L4Mte=HȊ!-Q&Md6[dLV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBV! HBVB :::OOBV|ԸqcLͣUV8;;g>--㒐"ƍܹsh4l׫jyΟ?6¸.@d˖- WWWr"##_ɓ'ӱcG&O%/^Xݘϟ]hػw/'NB ܻw֭[S\9"##p;v䣏>bʔ)w߈JBP)%JP?Wnݺl۶Mf͚)(СC/jۡCUVEQ"""@RvoF111Q?~(,\PI&iR(}rM% @-ZdSvܩ㏊bnn\|YQO?T*JŊ(EQSy62%%%)P,--@/]v)#GTbccIIOOWEQz<|0/ կ_?_~ۿ(Jʕu'==]qssSEQ`k֭<:uRT*(JFJ&MdFQEQ4XYYe&))IoQeȑԩS@w\R)Si.V%""Bg%K*`E(gΜ) 2\ }Rppp %%Gヒq޽{h֬m6[:dD YW^9s`kk}_d٫$-Z &MQFcgg~*@<͛7FgF4M6 wwwFv_|E͉p-jԨe{{Wno߾Ԯ]cH-Xd #Fx}fғ"ȗ_~… 9>Op9>̼yشi|AtEc1?Mf9&(sۛ5k޽_Fôi^8 = DQϘl@{RGQ]d%99Y;V9beG}tA;.vӧOW<==~I?(.]Ҏ*xxx(]VtiPbccEQUꌓ+cǎU:th4%>>^^3.;~xyJjj(ҧOPN\rE'''PO%--MPhY W%cAiڴi| IN| aD?'O>gJttsN52GGGeժUʼy&L*_~v٤I$e׮]J=v)#GTƎ̛7O'cbb)S(:tP&OL2E1cɲ7o*m۶UF)'OTZh 2DYtGi?~r תB ӕq)={Tn߾߬dU) QT*3W^Ǐ8q"ܻw={0i$?~lvſ2֭3ėF駟|Ą2eЬY3X+rK# `MpQ>C~c'򈄬F/ozjiٲ%}ĉ^ʕ+Dd@#qssc….Cd€$d€$d€$d€$d€$d€$d€$d€$d€_Bƍ޽;ݻwcOOO|}}4Qɭ[oҥK133.Ȝ1@PD R{ա ={JKK#--MXVӧO#W*  Y!ѱcGMJJ  ʧDQ !+?0`pi׮]>V% ; Y!2p@RSS]gnnΠAd&YQ|H -[NBVT*AٲeiҤňCj/B_B"##,Q'x ѬXEQ]($d9w.]"**ѣG[nL2h48~8XZZi&zm# PR%N8A\\vի cǎtڕjժJv%!+?;OBB@Q:vLBDBVdw^zannN@@?)))XXX:QXI 5kdTT0~G;fD!"!+sQdIFIOOgΝFNXJMMH /@HHԪU +++^111ܿ?(v"##?"$$h@LL !!!$''?@`` [nbŊ 4Ν;V9{юE|r(vѣ=zY޹sg:wlΜ99~ԯ_ 5CzBa@Ba@Ba@Ba@Ba@Ba@Ba@r(bbbr /_&::~[-\+ҵkWW(dE!fggG9{,z?/yd.a(PͤK$XIȊb#yr+%%"""xVVVtޝRJiٲ%[lޞʟɝ;wpqqWWWm9&7/d@\]yfj֬I~xwPTO$''cffFٲe9}4=Ғqq]VXիW7y2oX'!+zݻwquueɹڏyeVVV%%%yԔ7|Ο?϶mۈcXXXǎ;^v+WvABB$** `m>o0Q [*AQV-cR(|gR pݺuٿd€$d€$d€$d€$d€$d€$d€$d€.\vIII.C<%!+ 2ep9bR SSS<<<]Ѓ(BCC #Fŋ_jE!^(Ҏ=ʕ+Yf0 9%,EQ0a͛7g.GSғE?: JzHgʔ) 6uQIȊ"i_QIȊ"Ν;̙3?777c#9 YQL:2eإ\2\ +Ww_hrx.ɊBwߥJ*3إBғʎ;غu+!^HzHMMeҤIуv!"=YQh,^7nuVc"ޤ'+ >ƏBoP>}:L6إ+2\ sαh"-Z"W'+ 'RNFaR5Ɋ- 11>(|VXL8}Ҽysc#K… >7v)B4 YQ =xӧ3i$ʖ-krxi@Oqpp`ԩ.EW"!+ᆪB eǏ租~b̙X[[:!^0ݻwsmzE֭9w. 6dȐ!.OW&p :vf͚)S RXyCzh"##F2NzgdhΞ=41cիW'(((+"H 9ufff9OOOƍ{XyKBVIOOqZiӦر#"oI 9rvY&&&ۗ={ϕ w$dQ$%%qڵXXXcUB=KŅ bMLLPT,]Ç2!򖄬0SNajj ZZ%7o}FN#!+ڐUոcWn҄S2&+رc`ffF*U8|($dESSNгgO;F2e\<#$$D133W/<2eʳctSgg #55~_X#=YWD9˵kplwsWBVJ,lj$7}ƕ+uȣGiR`TG"B=M턞ޞǷORr OBVdPk9q:^:i:˝+XzF;k Uazv[G D$BKmaM_IK؆OtW3Mxr_gqj$D2nsH“{YitK=Tf=l.soY^|=^9<1!^q_C.Ѥ&s%dG7qdK S-mKKݳ\?vw]UG\6p*W{8{,\p.WȻgI}@|]JUiI \޷G؀G7 @s?н{}Nmwa8M$%G}8i:vn^T[;|BT&8zE\\1|ؗ' OcNawqPJ+B%Ő{WkmLLմ磷Ts\.-G,YV(Vn48/ QxɘBBBBBBP[y%ϳ?W^'[R5\;+.z>}K\.5:7H=(>WQd9"pؐ2:j7?&luQ3o&# IDAT}"&=-=?&anؖw!xT_AQҹqxs<bETEl]*P,KhOykv致z,5{g|ޯ^5nGRc#6$DM㰲wy}א7fn[*s.)Ș[Ʃ,;k3(QK9Ե :RXp.OkH~ d\ڷ;'vj̬lIMeϏCHN«ډ AZr5:A<*wͣsnwt0Nl?fbTq[6qtG%'P~OnsFN|I۱/UHv|ݝĘpjm9l5i=.ST9W>5?-*w}LľoPNw*w+Ry}3pAdY..>.jsK1qk&SyvB=m/IxrQAo,fVߋ GJB^mE?Fa |v~iR^gceT;{_F44WkLml-Kd܃6<~geovl.Tn9Lu\~9Sjb,.NⵃSc:HOO➥zsF&53H*J:[/{3;R&1&Ck&/{/t . uTl&5'Ы25;`Rq/>![ĘvENJ 2."I\;z=_1-jߺq)Ua@] O` EyF3`ğ GC: Mq;jHVS\#k뫧qq FV,}n)c]֍s[Ѵ$ {YO3qB`eSo1xzN Uth3p6u=Kq; ~`Qe^FCN5.O KK1ܹ A2s8y6FNj,J;'* XH`~ZJj 6#X/TEm=+~~r5ZmT>[oĔka '14l?6Ipl,2>{//!Zȭhċ&Rqǧqibe3eUUF@(HFM\ng>u).Y#_vzC +p Osܹy3U!8d8<õëqtpnf=e_ ㊸;?+U9W~qesKsK)vN#]/`2ccSz>/3.Ucd$ɍyꎤL4r rKd[3a,/j{]U`[WCnDpPjg)T٨1ȭ;?SV+der9\`sS[U5ߊ>Vͽߌ?^:wkyo]ُ;haY ܼni짨߼{ujdžg@UKsKf@D_ipoA-71Gg2C1}/z2O,O; mw!C==9ڷKv#cb@|BH8gt-yWعx J.7VQnr_1eUUJ}z GZ4kx4j6MG]?#^?˧@S\.G?' 0'wӲWŖ+UABGɳ1b)Z!d15BQ_!dGP4ċsxΡ ,(ظq#WZ=[0' ٷ :zݐKǔv.H; +kr=ec3ȼq Wd&^@^ QxJi| ga%~2##pj|̼q gq?utOs}{óI<l'7=q'6 #,yPڹ8 g&"ԘȺFQ9'N?'rtq|[<}gn =4^[Ш ˸K%,e$n;< 2/U󽮟UAvjk8M8\~}QsFEhn~裺/EO;=F)6l Q3#cر߇Bt{܏.Bwpv3 %7Ys8tk-k1cJ>HU'RLK /Zi2 YE|7e_@C\&Z{C.jCVb{OG*$/v#"CHB Y"" 1d$T鉯SfD+sSBYr!Bs[>1G=DkذR>ʅlݡє0QEd2_M$"C%"CHB Y"" 1d$Đ%"CHB Y"" 1d$Đ%"CHB Y"" 1d$Đ%"CHB Y"" 1d$Đ%"CHB Y"" 1d$Đ%"CHB Y"" 1d$Đ:!++%=,Y",Z]vΝ;cΜ9fx YX={6 y{{ݤk<"X w1XyfÔ)Sp,KJJ!Cj] =dQT*>Cdff* Z6m¶m l2\t ...8z(z "##ₙ3gbzz(D@H_ZV<bԩB ! B}fddyB!j &MZV!Ċ+_,mOTѣѣ%Gd1VZ{d@4i׮]ӷsss3x_ݻwʕ+KN6 VVVիW= 0dblݺдiSY4KEDDˬ3HQ&Ix Y8@vvI]"K%QzsNXhذagFSU!K7߄B[oݻwHNNrssyyyy 7nD~tR̟?3gĠA>>>HNNQƐ%cȑơCо}{ GNN>c͛7W_OƨQ{Xj1lmm ljL!]]2 3fK!z K?dƎ LVW\kڮ&^EVdj d$Đ%"CHB Y"" 1d$Đ%"CHB Y"" 1d$Đ%"CHB Y"" 1dtnnnOw闵h˖-,Cv9߿;w\:WqL0q,Dd6m 88ܔej?"l Y2ɓP(*\'ЦM4o޼"\ Y2ĉj+\P(0eʔZȲ1d$5BHH/Vcǚ*"Ő%M<ܸB@nРA3UEddqU|ҤI\ cȒ<==Yd:7c-Qm`4it: aaapww7sUD!KdĈ#YVkE Yz x'!`mmC$"{1w||| @۶mn:scƍR4w)c F1w:uN:e2qttĈ#]=uFK/N::aڴiG-%"CHB Y"" 1d$Đ%"CHB Y2JAAK x,UJVcǎ8w_+W}h޼9oMtv? yd2߿+W?... XzpL>H 0@?<== {n\|C?G>}:7o^;Y(ɒ޹sޟnnne ={L:G/RRRj&!KzG.]2q-[\O'O(bȒ!˗/CR!** YYYT@QQ0d888ɓϰw^_Ѷm[+hgFd> Y o |7xwpU4l}Azz: e;wk.` Err2dff矇 `ԨQƉ'jL}IH2s|`ڴiǘ1c] Y%GDDbI!KD$!,DDbI!KD$! !v\t .\@ff&ϟo8QC =N<|W]0drNvs=8P8?Q0dI*vBjj~^ &8}4Ο? 0k׮f̘Zp\~?___}Xv-4iF;v`ٲe5׮!z`. >СC`~.!VZP3BT"00Ǐ{g8,Y/^+y!..A~-1b;:t0̑.,w\v G#GʭF$Z֭HMM 43 E~~>vލ01}jDf%U8?6RYn=n߾mlʔ)oȑ#Ģf%3ر7nܨ}qqq eee~=Μ9u!''3g΄rrrqFv/_/"##i&aϞ=HOOرCyyyXp!o]xID_u2 "cq/":!KD$!,DDbI!KD$!,DD]͛7c.L#fϞw%ٰat mڴAΝ]C/]Bd2f͚ůUcDDbI!KD$!,DDbI!KD$!,DDbI!KD$!,DDbI!KD$!,DDbI!KD$!,DDbI!KD$!,Pή6D5!KsΘ3g?s h4mC$%,YoooW^Kj+\oeeW_}/_ ]QY7o6pΝJ-d<%"CԩS1cÇ:uŋGgAHH_j~zL:z?Fŋc9s&lll JLLĀP\p\0`\]]ѳgO8qB.;;sܹs1{lg%_~_j?7@ƍ޽{aÆDdd$w}ś\.Gnnn"2 j ;(>@Njm۶ [nB!t:,lmm'ݻwӧ\ѲeK.t:BaÆ5P5=Z=ZT-Dxxh֬At:-JB ۲e1L&B toSZV!Vή\"JӧODrr_1g~ʺwYPP 222 իWOK,ZV\pAGpՈ{?d2BRN<-[Ba77dȐ nݺAm۶{XXXr\_OOOkccc~p>|dоtȑDMx IDAT#*e˖fBNgggWPC\\`NBPTӧOǑ#GO>Ĥki+ ENN >>[.ť5jڵk_|{E=b <,dVlO GFFoqZ.]±c?ܹs+ eS$&&?b-=bMsvQQMѺ-ZAAAسg~7hZ̟?σ,dH1F :B+bQ\\|gŚ5kĻ+999pBѤI?۷Ç+WhO999e>>>Bl0Nċ/(„VUV`\^ݻwjZ!Ĉ#1otܹsYdv^^^NUV?\_O?/5k(**wC}ӧO/ 0''G̙3Gٳg9s?dY\\ӧ:ugϞ=z&M?xw~ę3g Uƍ… +" &jE:deB3Qd21fI_f ot:o>̚5 lK?O||V.ݺuC``#2O|:t`ɒ%MB|8TebȒggge* &L0SED!K&S*3fп3VEd@ƏJ$tǍW]D*,=޽{^zJ ƌc抈,CBɓ~~~ݻ+"L|WGk2w| cmmmtR4lܥ#![G|7h֬<<<]|sc`Ϟ=233q9={Vmc̝;-[Ĕ)S$#ه;:wG"//U4"z0 ه\E{\]DT%ET= Yҫh***֭[888gAÆ Q\\ǏHKKSO=xWVzj\zxWﯯyx3p8\@zU\]Bڵ+^~e|gXp! T*Ç͛'||'8w?Dll,V\iPGeE<%ƌFGGcؿuر#ׯpqqAv}6~i@ƍꊘ>6x`FuC T4׽bbb_ɰ)f̘o 8{CTgqLVTTT e 2F,lxCR?4h۷W{[7.a>J6y+$$>>>ظq#;occz"l Y2ĉh*\gee#F޾"\ Y2ɠAT:F'rED!K&Q*=z4˭sqqAXX"\ Y2ل V Y[[c/ѣ!K&ӧ<== j?LY.,L.cĉG>>>ٳ"L Yz ǏX[[cҤIdf0d遄@PAWCL&3<hڴ)BBB\e*՝7n_FQQ9:$//x^Q]F*ǎ֭[Ѡ@sCu[خ>xU-#,3dKuMmADë_5w f1Y"" 1d$Đ%"CHB Y"" 1dV s]YpJGЍswn]wS xO(SFԾp!Fϣa&oG)F??fT2o\ϯ x$j~0xw@NJ zUA"75BW4QŐ}DY:<B{<7m3XoRޠZQXѣZ}e G\'Nn|yrD1GO&ȚJU]{B&S@U!5BWsj\-TYsNVU`ЏW"/oE W?_#Yg@( /*l)ǮJivwe—H܇KAU!ttdB vд#!pР3Q['tOd@7؜O{`WN} nuގ>XvB.BԾ L, QEy9{kn2"J}Gzhw̵kPqG4>wwDŝ8Sعx3  gQ˸VO^c\- Sݴ ScyO=Qa>.DE3jЦݐxAanĥoŧd2lwj 7h38Pڹ hKL\.D]HO/H=L 6f@m +{%`yy6 /3X*p{W|f ]%"CHB Y"" 1d$Đ%"CHB}RʿJJ;7]αf>z6i}gܼ3Ytw=MJn+X' '7֕p @Qn:Q&uH~uCމGCϱÑ&NAQOp!GpnϡaA; ՃV٦$] ͐x.ށh,X:_[p+ n!Սjzh&FӘOoF\v}SJ5{$j6l?> H;;=aǏpl@)[$[J&W DF|oMl=w nէV[\?fol\<yhsQɾ} <26n7#=AYs[8'ĆwA&!7-~Ǒ5C]cg^€* xfoo cG=Pu=}mw*|=82=6̤fLee&^mU+{'yȦ'ErdsKyu38Z鹥T۱;TYm5$[~RD)ɿsv6OςPٱ8/ѨӰ1HhyaA@hvWΥ>drv0t.l]'|o۲Y1 W ?3 :qImgk nb6}PKoEn݂FFP7fi򌪹0IiqSih)N?T$B]:{[9TdCQ^fpf3N ] {uV]+y퇔 XFʅl~f2}T.ȾC6n(̹mtPڗȽUA SŨ#}>ž%eflw7˻EǟG}c,cRߋghMOj$݂}+qMBGޛ8-e̶K!y4GށGv:-Rb"≗UV]kG~CuBFYCp; 9)1u©M2JCnZo N^(Ⱥdt|=0SPnH+J-Fʵm}qv+ [aZށ$GV]44~;/xVzxTmwW`ĝ܄ǟG{PuQ|D֭H8kGoZ{Ic[>/U3Prt߰q{Sz Gqi76zN#2^81~G􁟡).@n܈_HRg7/…~OSa߻F E(=o"n ֶtػG籟22n nW:T'^WɛS0x e̶vq@!/#g7Ka{X8"׻O=VJ;\"l3W3Ҿofp۲/|[Eu+-4byrIm<&Z9M@`qͽw(%ZKŝ;5j[szY U9֪z[~A=&#fD!#{zO2TM VJ;4 7u<1.l3 ȭgQVӘOʽ1WOnZ WRAv/҇)Om Nt*@Nj, kUp n~-q<3nw_Pj 27q:v~5 7m3MlsKʔwc).7kuŝ?u`4!%!XqTavɬ˄!/=.>8M4Jqnk^H k}r9 d+3VJt@]!+wSLoU|^D,~6@/?uӌzZܹyGּm~w.o빟* dF.p>SwӮ8lvd-jKsKʔ @DYjpc~fo,tJk(u!L?#}/4h;2)׎,O=B+Vu:7o_ŝOMqAv+P}ROiq'n#%Wvj{W:z?Z{1GίЪRldw/+QYv[aG*@™HmDQn2/Ԓ휽P(*Ȇ(񧑝 pF9{ՏK}xb&bC`qu(1GסUg3!3Rs MMĕ~Opoxv2f8;tڒA3#}}mqB밶ug@Qm=6 iqFAmeY)jڸ-wLug@hE8i>ǟ7iS?} [OzYcoGc0hΎΡ ,(ظqlujmπ GwŞ@vtq'.y M{78<;RbIwUA6bÝH\; :r5\YѸzW\?nЪۢ7윽m /#"%]#dB52f@8( g6#Iܺz q.6nhc2dr[UZ۸t)׎G~?3lckG+wcY6H~i4\iѰػՏw`X#d&]Bɍ=d2$^؁͂{qwIvΩZc1fNj,^'*ʅ6M#/=/2/`' IDATϑ{6J{7bC8Yk 5JivNMǍs[ors MBGEGzog^jv;aca^kCѣGH5eÆ Y]2!|f~z;CӃB9PczsCT~]9bzzS: S={Q Qj% A%6 JD$-kW^Mn<} Y {^1wDd&%"CHB Y"" 1d$Đ%"P &LD5{qo)ƦM՚vQz43fB׮Tǎo+1 ݫK.w"K1Y"" 1d$Đ%"CHB Y"" 1d$Đ%"CHB Y"" 1d$Đ%"CHB Y"" 1d$Đ%"CHB Y"" 1d$Đ%"CHB Y"" 1d$Đ%"CHB Y]aȒ***¢EеkWxxxܹ3̙cʈǐ%ekkٳg#:::`7M/11 p7o68L2!K$ 2Zܥ#!KER?Dff&\]]R_ji&l۶ qqq8p˖-åK₣Gbx뭷/ 22...9s&/_nG"AT DxxxjO}]cDDbI!KD$!,DDbȒQ]QĐJT*x0h u3fҥKTQJ)J77n܀N3XgggKMM,Unnn駘|8NV^5kbΜ91bnܸgggO>Err2Ϟ=/?s -[sPgKT(BE) ,X]tu)+|||8U9V,gOHF Y""1ddĐ%"CHF Y""1ddO|aϞ=Å p9DEEaƍZm7i$4i}ɖaСN8Dk.Efe~wq~.7z%ET8 Y5W~saaax1m4Ԯ]iii8u_<}Cʕ+aggs"##֭C`` WsQ#$$VB]v0553C8\@:Xرc@c~.!{t gO?R> 044DÆ qQ 7oFPPfΜ .`…Xv-n߾իWk1w\ܹs'N WWWATDؓ% ڌ޼yÇs~:ڶm+Maccc-[Ȟ&,, #GԩS666 Gll,{n 4| Јt!K^+/AAApttĎ; {˾?X6c ,^WÇ1}tiQ=Q*TDDD ---׺8Aֹsglݺ͛7ǝ;w0e8p%,i'={X۶mCjհj*|7PؼysK 2.m]vVn݊%K7oƪUгgO@ff&d9r;݋"..ХKrxD%C r O>Ů]p޽|ۧ嚿+999\Xz5ڷok֬All,k!&&FӧOq%?O>lڴ سg"""4x||<&N_~VBf0|y$"qRs| "mq/"R!KD$#,DD2bɈ!KD$#,DD2]JK.!))IeQ0dKjժa޽ػwK){C u yR(*+pLHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"Cʄ"iCTTj Z_|9:t耊+>++mĐ666ZOJz}}}L:nʷ u]ы[&&&Clllmakk–GT`Ɉ!Kv%L4 UVETT KKKl7oޔ%%%aѢE7nZh]JU*|}}1vXtAF~ÇɓaddB!}(44;#7n500Fqi]||<<==1k,L>ݺuӥ^ƍ5+VHT*N<> GǎQF 00ݺuÜ9s RĢAP$ Xn077Ă DHH8p ڶm+BVѣG i[777agg'B<\...R+W R)B]VR@̙3G 5W3g ???aajj* ŝ;wDBBpvv_MddpvvjB!/eiiiٳXK,G&LAFj!EcB>>nݺV044Bqi ϯ}IۼBPt!Dv[JBR011&--MZrJ@L0A̞=[o۶mϋ^^,ϟkT J7nܐ."[wBkkkddd.^ @daݻwmB-W[R)kkk\mp ={`aa>guOA:^Jb033ZldXZZj_*xu$#99fffT*n޼yR &LܿK,)еTR 4j(W++BoРAhҤ Lcǎ6m o*ؓbѠAbҥf͚|STs|r5kV\=zH=֜mrz94MNo]-^8z(v JyqP '@ oLf͚tRG!T"t.U?^رC̙3GI Z '''eqAqYqmiV!V*i BԫWOcTV)S777RDrrhذZƸiDvDffB bݻ6668xM+(!DhӦMh9Nb͟?_ ///iٌ3DJJxׯP'NB'))I̚5KK ???aggdY X|O?bҥ2&9"+t"&L L"/_ Sӧ OOOpBesTlR\zUQF͛79sHǞ6mrs(ϟ/>ѯ_?ѣaQYyC >>>2d,߱cgj5q xxx ::ZR+yJ 믿8RDjжm[Ԯ][i':s K:$ŋ_b,H+ Y*oߎ>;v@*Uо}{ 4W\;Pn]]HZ.k׮uDž,DD2bɈ!KD$#,DD2bɈ!KD$#,DD2jIkv† 4UPK,ue닻<!KZvN:ky9$#GƍW  YZƍQ^<ΑÇcUD%C dP(иqcsUD%C dȑPTyØ1c"!KRfMhJe_JC*!K6z\zzzh۶-WJ&,ذa\>jԨbcRڢSNe B!KodԨQP}}}FU< Yz#z*J*G Yz#޽;  зo_]DT"q}]B[t]ccc 6 .9l),]K.ҥK.#sss 8PeP9ǐ-%l2tMץ M6-|,DD2bɈ!KD$#,DD2bR?Çc˖-.TcR.ظq# ߿_cݨQ奣ʈJ,RV-|yX",--ӧO,R!Ky222sU0a/("*uZEdd$N*sbOVyabXf ЬY3$''c޽x!h"VN[ɒVJ%Zj3gQZ>c <ׯBG'bڵTΝ‰t=YZ^'bbb;wBV?w<>#Gƍl24o˖-L6 FFFc!5Bz=B9 iӦ!Ct] p9#=Y""1ddĐ%"CHF Y""1ddĐ%"ouXEEEgϞEdd$nԨQh޼9<<0\]Xh4LJJ ~W3T?~OFxx8FK-BFFpMԬY-TÇl24jƙ3gx3p*8\@yۇĉ@c.![t ,Ν;P("99FFFhܸ1:`cǎuM|_˗k1c ?:vqE҄=YҠkװ~߿?׺˗/C^:hmڴ#44ƍԭ[+Vĭ[4aÇaT'Ken݂]C$2 \W>p0*KT`))) CjjjuEqQY%8W/hy!~Bu& 2.m3y^cǎQ6mڄo7֬Ye˖ 'rdeewN{ռaD C x".] qΝ|ۧ9su`ӦMԩ?+V &&K,?5kH=<Xf k.i76㫔_9H[㋈cɈ!KD$#,DD2bɈ!KD$#,xRdسg `ȖӧOGhhehݺtؒVZhժ bȖ+Vu yR(W1Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y"")BEPa]VcYHHlmmaff&-S. 2+e+IϞ=C@@@III߫T*pimȑP(lqSED%C䄷~AR0lذbdcR3Je޿6J[FՋ*!K2l0\1c!Kbgg;BOO/:BA*!K6z\Y===t*UQUD%C ރjFQED%C =zZ### 0@UL Yz#F>t>}h|ꋈ1d,9RL Yz#߿? :du ڵ iiiJ@&Mj4֭u]FرcuQ RuT >;wuB IDAT*Wfeen)b:y/ ddĐ%"CHF Y""1ddĐ%"CEFJK V[\7ذ[vpA/CDZt GV#<*hFݦ±EﰥLǭkaD\E0Jd!o@\\RcCh3 ~¦7 X30Bî#>>PhR![N[3zSkE:1L,8[_ rğabi!1:DZ3WPG -Lq/8C_ez8of&Cԃ:+qARMzyGzr, M@fF~ғxl= 6,VxgbT@KTؓ%i-@tU\kam2Ӓp`ɻ72C_~F<}vFFJp+wn3h,kkf˔,DD2bɈ!KD$#,DD2*![\sKe⣤T$ń cMw:ٲ6Pgxr^u^w]a-[ K=Eح(Tv C+z#.,}<FPD>8uf:ڎ^wI1Fny_Bt|+<B7삦}gR:~J\#Q$DŽ+pg2vvj7jU\xrָ FsՕ레~b YPQW4TQ+;®i6ʾ'gn[G:B'!Jnnbbi# EZCrl*T-\{9}枂52RoQG'E~Z'.62S02G_Fԃ{ϸ_aW2Ӓq{*Om-t{z+Nm̴$8\=I1ls_p3l7Fj3e#$dždoSkl S}T2|qLP=oz^}fA3ۑw?ޕ^Es$^Dx\rQZsKej??+"=9m|HNA˾P\?=Rʟ jl>Glx }GW]|Ʋ`jRʟ ~FMFpd{uG8FHKF m@U-malQ A'r՜x|qj\󖙖UOF wƮœ~xzl:ЦPge;q" ˘jBz5;t@VF*ٮj+`UYx|m?klrL([p3xF*;ȼ""nFL'"%.j8ëp[e@MۚtHcx ,^hS).잃=s!:d%iʭH{ _܃H|ms(=sKisqwpqlD_uxg"Tr|BBĝxt/?תT93ƒ``bg/Fh> ݉;04ĿNG?"3cCMFZ'9i*sb I.홇SC+|vzX< U`U.qYHM¿N3h!rmʀ]:<Ƌm"]\=;yMuWLMD]g/")[=KykV5H5[w-B]ױۼum={gq:\? .'~$d3Ӓp6[dt]&3sp寅h^r斪r 005CaZ \Ǭ $> ָU_R{LUegUr.9T$E98}OwjwOo߸k74#aliAPo3X;[=goabiʀckAU@oiԸ1G]&K .,fH}|r80TP;5v[_[WԃPeYjci_phE/mko~?@'6;XUF]1Z=o}\G/mCC@um=h#^~Dufv?OT}|ntx@+sKis_M~ =}#*3 |g#oڎ^ [~]= t_f%f8J=j1>J= !a񿟩Bcy2jU&@˺W 2RAu@Ww\c>ڎBZ &+#F֨\A7BKwAX⭞3`d^v~;~B]1Z?oy\OK{ƹCgRAAQNz<ë7-aZ@QyUMKFFj*To a`d^T/ X޴.Fl-qu') PHQHM@ H*+BU}XUvFCIJ $ ?C^h3b+p6`Rz% /pgpl0՛tW?:J}#$훨:wϖB ϛְvp%2zI=PºJ}T ς/K9zB~,}5p!mg\@/:6ΏEv+7'=)kaDo h 1:V` 'b _ BĨ0PUVz *kg`y6W\TzFO 7;B# y{]yѤ'TAA珯-y-ut]jUUuZ Z| iS?!+#Umi[Jc'9 ZoTOŚ7и1c\K^g}(PZz?oB;4"R^=jh \]JOƓ~*x[ǐ}r^Zn8j UalaFC/Jpl}YbA7mW7ZZGD‘ULOF!hګSyRWV-[=f??e;4tsi[Jc^ɱ6֣JNpv_WOVz ^؍GWol Qf_,obe< MF\ғcqi=+0~L+TAVm?LK[Vϥς/h)Pxv}v|| +VC\Sged|GtW}?BF|}X¾Nn5Q!!n5)HK|5Im(ː:MUPeܯñ46@ϛ65:Ff֨v_[@K{sۑpi>*hׁmE5apj9s(B닡Cb솘B\}t',-pwsn)*1IfZn17 -аTi4?1OnJsKE C庮H@=[=Ь\[T1hs술S: Y0TJ}CXTrDw'C߱mm`e_g&džG_#9UVw -l݉^ h/ťܦZ[ \k*96CzV8ӻg`fS QAm7P(>t8B<CK3xƘu#aSR0OݸBC^Gdoe2,o+HzmJ{n]VHz hzRwNy_J=45*MƸ{A7 )j&v\נyzpA +3 [ RO5mR[m^ ߀042%ץ^qj8d_ߒ50d.YCG5T]yHXrd^QQql2k+Ff}op ^ Y96' <ڌZ.u]#̚D^.tcDD2bɈ!KD$#,=巪'.,p2]mժ 7!ڽ{7Znի*I*Orl͚5o* <<<勇H%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐ%"CHF Y""1ddĐR!..N%,XiiiXx1ڴi+jkժ<==uTTbcsj:{{{hEYVu]ѫ[c̘18}tQGZ Y*\...B!2335jPTB!6m$?S3=ы,,ٓǎסP(k׆ݻ'PvWƑ#Gpm(r}Cc:uh, 9jժI 0n89$*^E%Fpp0 >>@=4zD%CJÇ ]-/ָ6$$w** !K%ƌ33gȑ#HMMx 11={6*T]vڵk1ozkkbbR 0FFFyST9rd1WDT1d@зo_Zgbb޽{*!K6bdffj,344Ā`jjJ&,X=`ii,###FQED%C C TW Э[7VET21d >Cwذabر#*U {`Ȑ!:dbѣUVEǎu\QwĴi24BI566ڵkQF ]BCѼysTREץHLLL5jDhطoF͐%cȖ"~!2Jʕ+"%"CHF Y""1ddĐ%"CsM, C򕞞+WW^_ƺ=z`:`R0ydܿjZcm /J~^*U5\]<~SN_Ux Y]DDFDeC4dff~@ll,iJpQlmmzj(Jر3f̀3<<"܈Qc0dcif ޽{ѣh߾=nܸ}~+~^ +++TPAc0dI+/gݺu5kh{.~Bkʕprrݻ~zT*,]%z٣Gdmj4jذ!~puuŽ{pUlٲkYYY4STlܸGFŊѯ_?̚5 ժU{OJ>=dٓ-IDAT=9sȞ9vÆ ȷ}JJJse``ݻwoXn,,,3,Y@8qO<,Y ذabbbdO1޽{wXsE6mqFy$*.^f͚z UJp_:QQQѽ{wَÞ,K/^B@˖-e=Cʥ/vڰ8 Y"*.\VZ~,;YYY8wCHNBlllHfQo>4j5k֔X Y"*wۇ>}˱DTܺu >da߾}X'J }}}NS@{u] B4h:u嘼AL)qqDFF꺌\ iFץhCϞ=u]0N۷SldO EPTj=oŋ%r!66;>b=.C(J 6Xː%2OR ÇjТ_DTx!>>طo```rؓ%ɓ'1uTtU`Q2ydcɒ%.E"*n݊C̙3055u9d Ō3駟uֺ.GCJt 45j5ypj&L@pp0._ ccc] CJua׮]8|0Wr"*.^?_~%}]]/,:=BѡC|7.DTDEEwE5@OOO%CJdJ{-Q!KeB|||KRaذax<[[[],(Z/_:bŊyzm*ѣG{nԮ][%i!K%}' **:u*nݺo*<<'O Pnܸ@۷Dž uĬY0}tt ӧOz7n8nBBVX!-ST8y$>38::"<<;vD5@t ś'J%Q!0}tO駟п]Q!֭X` D۶mBj1zh$m&D||Bϟ EjrJT*EttBk Cj"9s`~@j3sL'6l LMMsHHH믿΢VZ"66V!xe,--M={V bɒ%ȑ#b„ "11Q4h@Z-_~"22(~ eJff3f۶mu9ƐB |||Dݺu5GV {{{ahh(@_퓶y9d݅BB Zn- PJ%BR abbMZZlʕ0a={ 5߶m驱Yϟ?hWR%@xyy J%nܸ!lsR;vL PxB5222dμA5z>m۶B uwssVTJ"555W###9oAoܸg,,,4 ])UWI_fff@˖- KKK[={ .nݺǏK..H$#99fffT*U7oT &ǒ%K t-m~UTABB $$5ʪ4h4i)SرcpuuŦM0~Bﻴ A>}'NA.Ȱ'KŢAHMMҥK5b͚5nRsa?0k֬"zhh(GR5rsNo;--Mj[Bx/3=;wBRa޼y~ӧѲeKٳe*`Y B*U"==]KcǏ;vsnnnҸdBB V*cIlٲE V'NѲS1ΝOޝE]qh\25:jxY!"G9fL"1^4NxĒQZcڨAтyP"aymi3 $RI-݅c?`5~yoԩSdVrKX+W|Fȑ#jqǙ:u*]t!33_|QHf':y$6l0^h2 9se˖d< Gvvv(X`III\d8p nnnJR:0Aee%3f@ӱ~z"##|Ot{%%+,Vٸq1D+O̙3{{{[:9] hsUUU̔)S Bի - ۊdmۼ{j̙3g:|dm@1|*++'""C]zY !ZȨQp}d%+h]vxblmmIIIaJGHB4KNNcǎ%,, &+RBTTT#''͛7ӭ[7Y49] x$Ν;h4_3k,hRd/^D=p\q }! qFfh4;wVXұlu(L6o<ܹXßOzy"E8uQQQ>}0VZE^ed/LopG]]uuu8qIEK1gFMMM GEJ0YPP^䨭%441%mŋӻwoz=+I uܙ~{'(玠FàA8rk֬?^h톔hSrΝ&ST$Ya^UUU|Ӈ۷Kaa!/k׮JkW—hM>~)FS S]r׳i&T*K.wQh햬dE0mڴ&Oxzz+(J<ٳ'lܸr>)X3)Ν;3}t0{l̉'/8<+CEOAAAcxyy)H/##uqAh4>0YɊ 30`)XG~ Lrrr1cBdEL6::uDxx‰:˗/rJFaĈ={{ꫯ*Óņ (((o߾ '8 zM6~\]];w.+OGVfΜ``RIUU 8cRRR֭[)--O>@{XVCRQj nʾ}e,\Îٶ&ա(..f…JGiOOO,Oi锕)U ILLDrIJJbtExD!饗^⭷R:0۷oVٓHBCCT:h)Y!,@AA۶moڵk7QTJ %+B.\~KJJ x{{KHHjGdx^w}Ǟ={_psscʔ)$&&2rH 3III!)),z)SذaÆ S:03)Y!ƍgt:j/_k&Y;)YѤk׮q h4JDZ YYYsΝ;&L'((Hvꠤdټy33QF駟*2ܽ{~t?pvv_gɒ%(S(LJV𘛛&֥Khx~:餤p1"$$;v /`k+wMzE{55;w.GmX:tcǎ3tP.]Z[6+%%+̢ɓ'S__tfy&>|ÇS\\L׮]aڵjztLa%dIIKKСCs(Fðaè%>>˗/L^^DFFOpdffHOO'77JѣY` :T&ԩ~~~ӯ_?0^JZZ666RSSCtt4V{Yzz=?3HLL )SRdMYQQꫯ࣏>Jz._Ln!&&@ycvHJV;qqq̟?hvͺuprrR ݃t:7+>>>DEEː!C0;yh &p)ƌùs D* T숍*Xx1RⱐvZˁؾ};ZxðE%$$$j7o}Q,ؤdEn߾ ?c|8s'''z= `ҤI̚5dJJJ1bѤsgϞeΝg?xqppnٳyꩧ4i-2 J$** 7/$;;ϯnr׿guT*~GXll۶ ''']Ɗ+رct:JKK{زe %%%>> class Node(object): ... def __init__(self, *neighbours): ... self.neighbours = list(neighbours) >>> a = Node() >>> b = Node(a) >>> c = Node(b) >>> d = Node(c) >>> a.neighbours.append(d) >>> import objgraph >>> objgraph.show_backrefs(a, max_depth=15, ... extra_ignore=[id(locals())], ... highlight=lambda x: isinstance(x, Node), ... filename='highlight.png') Graph written to ....dot (12 nodes) Image generated as highlight.png .. figure:: highlight.png :scale: 50% ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/index.txt0000664000175000017500000001341600000000000015153 0ustar00mgmg00000000000000.. include:: ../README.rst :end-before: .. _history: .. currentmodule:: objgraph Quick start ----------- Try this in a Python shell: >>> x = [] >>> y = [x, [x], dict(x=x)] >>> import objgraph >>> objgraph.show_refs([y], filename='sample-graph.png') Graph written to ....dot (... nodes) Image generated as sample-graph.png (If you've installed ``xdot``, omit the filename argument to get the interactive viewer.) You should see a graph like this: .. figure:: sample-graph.png :alt: [graph of objects reachable from y] If you prefer to handle your own file output, you can provide a file object to the ``output`` parameter of ``show_refs`` and ``show_backrefs`` instead of a filename. The contents of this file will contain the graph source in DOT format. Backreferences -------------- Now try >>> objgraph.show_backrefs([x], filename='sample-backref-graph.png') ... # doctest: +NODES_VARY Graph written to ....dot (8 nodes) Image generated as sample-backref-graph.png and you'll see .. figure:: sample-backref-graph.png :alt: [graph of objects from which y is reachable] :scale: 50% Memory leak example ------------------- The original purpose of :mod:`objgraph` was to help me find memory leaks. The idea was to pick an object in memory that shouldn't be there and then see what references are keeping it alive. To get a quick overview of the objects in memory, use the imaginatively-named :func:`show_most_common_types`: >>> objgraph.show_most_common_types() # doctest: +RANDOM_OUTPUT tuple 5224 function 1329 wrapper_descriptor 967 dict 790 builtin_function_or_method 658 method_descriptor 340 weakref 322 list 168 member_descriptor 167 type 163 But that's looking for a small needle in a large haystack. Can we limit our haystack to objects that were created recently? Perhaps. Let's define a function that "leaks" memory >>> class MyBigFatObject(object): ... pass ... >>> def computate_something(_cache={}): ... _cache[42] = dict(foo=MyBigFatObject(), ... bar=MyBigFatObject()) ... # a very explicit and easy-to-find "leak" but oh well ... x = MyBigFatObject() # this one doesn't leak We take a snapshot of all the objects counts that are alive before we call our function >>> objgraph.show_growth(limit=3) # doctest: +RANDOM_OUTPUT tuple 5228 +5228 function 1330 +1330 wrapper_descriptor 967 +967 and see what changes after we call it >>> computate_something() >>> objgraph.show_growth() # doctest: +RANDOM_OUTPUT MyBigFatObject 2 +2 dict 797 +1 It's easy to see :class:`MyBigFatObject` instances that appeared and were not freed. I can pick one of them at random and trace the reference chain back to one of the garbage collector's roots. For simplicity's sake let's assume all of the roots are modules. ``objgraph`` provides a function, :func:`~objgraph.is_proper_module`, to check this. If you've any examples where that isn't true, I'd love to hear about them (although see :ref:`leaking-objects`). >>> import random >>> objgraph.show_chain( ... objgraph.find_backref_chain( ... random.choice(objgraph.by_type('MyBigFatObject')), ... objgraph.is_proper_module), ... filename='chain.png') Graph written to ...dot (13 nodes) Image generated as chain.png .. figure:: chain.png :alt: [chain of references from a module to a MyBigFatObject instance] :scale: 50% It is perhaps surprising to find :mod:`linecache` at the end of that chain (apparently :mod:`doctest` monkey-patches it), but the important things -- :func:`computate_something` and its cache dictionary -- are in there. There are other tools, perhaps better suited for memory leak hunting: `heapy `_, `Dozer `_. .. _leaking-objects: Reference counting bugs ----------------------- Bugs in C-level reference counting may leave objects in memory that do not have any other objects pointing at them. You can find these by calling :func:`get_leaking_objects`, but you'll have to filter out legitimate GC roots from them, and there are a *lot* of those: >>> roots = objgraph.get_leaking_objects() >>> len(roots) # doctest: +RANDOM_OUTPUT 4621 >>> objgraph.show_most_common_types(objects=roots) ... # doctest: +RANDOM_OUTPUT tuple 4333 dict 171 list 74 instancemethod 4 listiterator 2 MemoryError 1 Sub 1 RuntimeError 1 Param 1 Add 1 >>> objgraph.show_refs(roots[:3], refcounts=True, filename='roots.png') ... # doctest: +NODES_VARY Graph written to ...dot (19 nodes) Image generated as roots.png .. figure:: roots.png :alt: [GC roots and potentially leaked objects] :scale: 25% API Documentation ----------------- .. toctree:: :maxdepth: 2 objgraph More examples, that also double as tests ---------------------------------------- .. toctree:: :maxdepth: 2 references extra-info highlighting uncollectable generator-sample chain quoting .. include:: ../README.rst :start-after: .. _history: :end-before: .. _devel: And here's the change log .. toctree:: :maxdepth: 2 CHANGES .. include:: ../README.rst :start-after: .. _devel: For more information, see :ref:`hacking`. .. toctree:: :hidden: HACKING .. Indices and tables .. ------------------ .. .. * :ref:`genindex` .. * :ref:`modindex` .. * :ref:`search` ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/objgraph.txt0000664000175000017500000000322500000000000015635 0ustar00mgmg00000000000000:mod:`objgraph` =============== .. automodule:: objgraph .. currentmodule:: objgraph Statistics ---------- .. autofunction:: count(typename[, objects]) .. autofunction:: typestats([objects, shortnames=True]) .. autofunction:: most_common_types([limit=10, objects, shortnames=True]) .. autofunction:: show_most_common_types([limit=10, objects, shortnames=True, file=sys.stdout]) .. autofunction:: growth([limit=10, peak_stats={}, shortnames=True, filter=None]) .. autofunction:: show_growth([limit=10, peak_stats={}, shortnames=True, file=sys.stdout, filter=None]) .. autofunction:: get_new_ids([skip_update=False, limit=10, sortby='deltas', shortnames=True, file=sys.stdout]) Locating and Filtering Objects ------------------------------ .. autofunction:: get_leaking_objects([objects]) .. autofunction:: by_type(typename[, objects]) .. autofunction:: at .. autofunction:: at_addrs(address_set) .. autofunction:: is_proper_module(obj) Traversing and Displaying Object Graphs --------------------------------------- .. autofunction:: find_ref_chain(obj, predicate[, max_depth=20, extra_ignore=()]) .. autofunction:: find_backref_chain(obj, predicate[, max_depth=20, extra_ignore=()]) .. autofunction:: show_chain(chain[, ..., highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True]) .. autofunction:: show_backrefs(objs[, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True]) .. autofunction:: show_refs(objs[, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True]) ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/quoting.txt0000664000175000017500000000065200000000000015530 0ustar00mgmg00000000000000Quoting unsafe characters ------------------------- Let's make sure our string quoting function can handle *anything*: >>> import objgraph >>> all_the_chars = dict((chr(i), i) for i in range(256)) >>> objgraph.show_refs(all_the_chars, too_many=600, ... filename='all-the-chars.dot') Graph written to all-the-chars.dot (... nodes) Trust me, you do not want to see the resulting image. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/refcounts.png0000664000175000017500000005326700000000000016031 0ustar00mgmg00000000000000PNG  IHDR,bKGD IDATxwXS7!%S, nn- ZWEmjnVEkkmWi{ N )e0Å'99='BAN\M$bH,+zG,=z@S@4hP5 E'Ot8P Ə?GR 7T0`MŐX IŐX IŐX Ix7jվ}#Ft҅"""8@ wޕ+Wbq{vww_fM~~~ZZX,nժD"յ֞:ujVVV Ξ=P(߇ 03!!e˖IIIH$lܸ1ÇWc xm{qLL̉'ӿ+"p8ӧO3fի+׳NDDķ~\8ٳ_|n޼WOss  RSSɓ^Νh PF.+oۗlPءCC$^Wdee>|rѕ?.ϧߛʕ+Jnn.uڕ 7nRϙ3}G%"cd2mmf͚%$$=zI:::͚5Dmڴ =y$s_f]WWwȑsϬ?\[[{ԨQcǎ߿H$vڥNﷷ>}z\\܀N:uȑO #:D$egg7mڔlRPP/߿ӦM]tٶmֲeZh}K.M:ã9ٳm۶`Bwї_~x~޽{|>?((D_ǯ[N*}ٳ~׺u+W޽;,,l͚5GH$k%5a9i׮ R>MD"Ȉlll*ڿsr(88x޼yO?f{{{8~~~)))˖-۸q#˝4iӀIjxOi P$̙-WnԨ7|#ɓÆ 333c :4&&?<~xnnn=CN4>~];1޽{)))ƍ;wn>}&O,Ō59"(==7nܢE 5uu"bb577766uVԄ52`"\nD"H$RW^UQXXhѢq-X >>^. ¯Z&eee͟?ڴi...'Nwsr;vݻ7YXXL:޽{111D$JYfyzzv%,,lӦM򷡡-[._lllw^":t{.^HDÆ stt<~8s$Nǎ;v,jlΞ=3":pkf ]tҥܹs̙Ӯ]7oرKP({~~~-Z|۷ߺuo^~k׮.Yl*\ݻw۷o_lr]WWӳsΖOܲe ϟ6mZVnZR27nannv|})&nnnzTzA$q==!C9RWWgΜQs}d ɛ7oDdllwm޼y˖-[nU(3gNRRRXXǎ{ ^/MLLVXP(lll&M*T*2dׯ_PPP޽Ri2DY`A}}Μ9իW-6mrٳg/^)Yrrݻ؋%bSf͚-[4k֬vٲeOUL mm-[uJ}={pBH_쳴UVm۶W^ZZZj>5$Ut^ -ʚj;ñXpa7׽*2ʽJNٳ͛7ˊC̻!11q۶mӧOܹs]l!ZhTTb-6cƌ ݾ}{f&Lex+'s ޡC Q;13<#hh*vJFFO?=~'9sʨ!9cƌb5${1lذk׮1?T֐466ӧSC2$$iݺuEdƍ>}jooߪU+扣FxP(}ٳՐ,L&S9S XUTO%w%!<NT*>ùs:[vrrb믿ƌfBCVSL?̏G\.sp]ԩSw>mڴ6m0I+N+9i} f@ׅwCkժU;QQQ'NhժϗH$Νqss vqqstt400pwwٳsxx?L&~Csssw%JܹӸq-[o^ E?nwq̘1|>_,3wZ[[wر}{a=?裞={C$ر#//ڵ+,,|iAxzz@ eungg7lذmgggl)JsС^^^̈⼽{AD:::߿yfɩ[lx%fTt= ŋ̷g...ٯ_.k҈T(AdܸqϞ=:t({A9),,LNN.\ټy#F 4(''GGGÇo߾vZEi&m߾}|ɡC;D_۷o6m2jl7٠C`1$qC`1$qC`1$qC`R~vڏ"'wuܸqE:~xn5 ???MS Pq8 X`1$qC`1$qC`1$qC`1$qC`1$qC`1$qC`1$qC`1$qC`1$qC`1$qC`1$qC`1$qC*t 8TFAA5k<==7nصk׀ F!Ce.\ٳgr\̬&%%dh O[YZZ 3gΔ)Sܾ}&Ch@ġyfذa2LӁHPbxYYY&&&bX$1e2ɓ'ϝ;w-"###CCCGx9::x֬Y{P Bt P8NPP_E( dggwAի֭[d2-ոq֭[JRooo++_~>}zȑiS#hp$:tիW[#aoH⠮?Zlh׮]#";;;殶ij)JH(233PsA]1ŋmٹsg"Zf,Ǐ3Ri -Zx˗/_v-%%^zED߿'\"ꫯLMMO81`]v-_|֬YDdmm@uuڵkmڴ3fL6mܹӾ}3g]mf``+V$%%:t֮]<**) NO1:I)zIĴiFT{S :r$Ú8!8!8!8!8!8) @ (zW$)|MW1.\uֲINNxa9spp(뢯\.ѱj$^7hYbNZ@B֘1cj?$.H ĉe2Y<>011HHP-ѣG(&Nx 7#F.QOOoذa xC1aDG>HyW,O0A@@o(|Ǚ lHPuH b1qƕz! xennNDbO@5@o@&OLD^^^>PkܹscbbjmwBx<^m.ڵiӦU짖 ͜9ǧ&zU 54mظjffV N@HLL4hбcjsk^Ϟ=5E ZtiuuU ~:ǚ8!8!8!U~~C),#Joݺn:f]Zh].]pzꥯ߶m[ss󜜜ϟ?{L(Ξ=iBDׯ@}ΎJ>>> qL{vssp8x4$qxz}v_i5jHOO Bտ133+/',,,CD111Cʹ{_jժ'Nj:aΞ=陑ᅬ3K.x4$qnԨQu*gee;vl֬Y*pŗTۀ ֲ###.\Go@;~xn6m8p֭.]( SC& ŸY$i:<@p4EBaR-[400`.5 6L&zj~~L&c. NDr<22266V ̜9$ݻwSSSuuu]]]K..\ׯ"31ȑ#ÇߪU+?}vȐ!>>>o߾=rikk?yݻwsy?ŋ'Κ5͛7gϞevP(N>s8Wb=!!A*tT8 <|˗c>M7n,##yupp/ eN\n-46׬Y3 }}-[Q^ם3Ӹqc"jԨgff2nԨћ7o>|â{3`P Ih3EyEF~)OAܹs-E y[vZPP/JryіJŮB;7o,--.\X._ЩStr 0'f2//Рmٲ|:::衰P (qa(1PGTTT-$q`>?ܖvvvDtuY ""]F`'Np8֭[?uEKXYYI$7o*ϟ +*TSXwޑQsrr(33qNѣmo޼4i}Z]3e(q2LT*%"\ # Շ^?,hz.XgSN%%%D4uԾ}2 \bb"bjU*3\N򛬻SQjKcRSSO޻wNJnnnE+K}>yE/GSGtرÇg ޺uKͧW"""ZnݴiSl׮R(n݊2j?l׮]ѻR4**j٥6>}ŋ{Q%blQ$qxڵ+--I&C qpp(֬X͒u5K-XgϞdo^jU.]]d2Ǐo޼թS'5] ]pd2YZZU)5+U䤩z*㣢5$ IDATx%;/V~ˤkiiifVVVLs?^|iaaÌԩp8ꏽT}ܹs/_tvvqƓ'OܱcNJ}qY_,]޽{wܹzg yUPPиqlQ,@BBO>}B000055Xb6,|bj0Ç ,Hjo"PXXx 6={eɒ%GVfpJ > 6lر;wWr%'MES\UV+9zhX|}qNNNXXذa&L_Bc/6bSamm=eKKT>ݻ3ftرdr=}ZJ1:::zZxã6lpԩ5U Kő8 BCCC"jڴ!CܹS*NSQ>QD$򂃃{1h mmhUEEE?~ٳk׮%?"Vzƍ]2-5jԯ_cǎ]~Pʥ*fBVj x5_Fbb:}9;;edd0J411Q*Z]cg|??ݻwݻk׮;V"DGGϙ3ܖZZZ:uرcLL͛77oܵkQF7|\sWSuDY@OOёJTq`$QF?~?|ȑ#ZH$*((.6 jǝatBBOcKUp%&X M_Bg"zzzǻV؉ƍjtkbbI&666IIIYYY%38ձ:XNa H>#,5IP 77sl299yϞ=߯h5cܹsӧO PER&m=9qEWWWʥ*fꓦW-ʚjB466 o]K)*99ȑ#7nLNN8qiT4kuDYU*}+Hqʿ*OTv횹Ǐ//]Tj%KO8iӦP:jqwllr s⁓KUpY?|5R؋ݽy󦫫OZZ˗U,X,uwwWLP|;w3gO]]]~):XG),еk7o7DEE5jԨw%[I|"sN F"sN׮] O>]7l366:th~޽{+WׯG*zyyEDDwؑ9E!44YfݻwDT.U1åNꪧŦ]EoBӧ-*%*⪥U_vs555-9o޼aNzۭ֭[Zn͜frRo~…69rĉu֪U4{oܬTrڵ{eTTTJJJZZĉ EDb񅅅VVVFFF/_\.5++/_4665jyf͚eddܽ{WPb{{'OϷϟ(,,U=+W\ݢEݻŹ988H$֭[5nܸSNaaao߾}򥾾~KCCCf&R's-oܸEDeuݻ}}}CCÒ-344Drmll޽|J[n߾}ɩؓSRR<<<7OѩbH,$bH,$bHl[69rs ٸq'P*^nݺUGڵrLJsA[n߅uԩdIj$5N(.^800gݕ+5رccǎE6`#C366޻w/Sm۶tD8Ԓ޽{?~>㏇^n'T8==߹s'..m۶w*B֭[G}嗟y>}J-jB ^dɃ ڷoaeu1$qИm[n={d@ &xy=}CK.UVyu 988\|y;ww#` $q8Δ)S"##<==gΜXIkkSN=z?h׮ݕ+W4@]$ug 0hР)Sdeei:" I"SSӽ{7npuu=uꔦ#ġKOOtDu8i۷oqӧO۴io>MGP  ѣGgNLLtDu8s痢9;;oذA.k:(C6i߾ݻwWXr޽{j:" CQ^\tiAAmHn-Ztҁnܸj8s񬨨(ww~͜9 C=ѤI'O>}ŋ6 C;hР!Ceddh:"$ s+,,m۶ݥYFBFMx~RS"hɒ%\.wذaIII5ٳgQ֭U4H$}^j" Rf}}^^^ݺu.빾BzΝ;mڴ166޻w\.8fffuIwm`` Hѣz^r s=zx̙ӧO/^Toj6]ׄ;wx<SNyxxŔWB\/!CjժpHԮ] 6d2MUG%$$p8MGt]vwݼyʕ+O>}5P(nnll|AX^P(ﴴbqddd۶m/_njjl`077͛73ҥX,޼yP(444AW̬YRSSg͚ED6mjԨU1𼼼122844tы/rϟ?_dI6mvѮ]=בɩ4P^x\HPl۶fdd(]vт ? 999NNN+Wd999hB (֭[ŋ/]g}}}>3Bbff,ُ92--\8Ud1ZK$N4I&) ӧ B%{Vԁɩġ!{mԨQ۶mU|w4x`d4"֭Qeꫯ(%%E/BDxAAжmۈO>Q(DuVLSPX-_o޼bccb~R({ٷoBd<dϊ:09uġ!p8֞3gD*w]P;w 8d`"*awDܢ5j=}~G xxxD"##*Vk׈Ύٮ=m4fe̙~~~۷o_zuaaT*-sONMCy.]:zɓ'ݯ^ZV˗~'K.]nʕ+K6rDbeeED%3ϣG={OU[R1L"*۷o20*>95 I:__Ȏ;8pʔ)YYY%dȻwnܸ?XtVf'sHJJ2ۙ>"Zfӕ+W~wL|j\-Q1Ν;њ5k?NDӦMp8DĜ/(E1rjs3gZ[[O?tƍLrW(DԼyofΜ9#GLHH3I|ٲeDpv}k&MM:UyzɁLMM۵kw֭ݻw4(,,X:( @Cvř3g_ߟ>1|")))ׯ__`AJcƎlF@qo?ӧO;;;+ uQq4?݌aV@&@)ׯ_;vі-[ "<@AÆ 9rرcMG 8@011ٻw7={tPPg,//oݴiS=Jwʕׯ_3߿w^ pppPhPH5"44t+VXhQ4H$11y@yBD_4C+VXW^ѥ6KOOg*վ?I$D"JRD4rHD$PS,Yr}Tھ}K ^|٬Y7a„b(1Evj9$qq~sc+O>D,oݺU#'&̬v>?n8cIxy=y¢GD?;w&MzQ-G5a„Ǐ`&@d۷o_|]bb"S*x<Ǐk3=zhkk6)8=ZZZ .|P(,}T*MNN8qb-Tyzz'N "H-,,,--9 DI"_7nH8ɓ`-uP[jS˽pk-wwwVZ={U#qZiĉiii[6mmmI&ڮZ BqELSo8r@ Jɓ`R jmP-jIMM}Վ;ƏommMD<O[[[F*~T*p8_X\q[nݸq#33kiiѩSF];xxxoݺuG.HuELL۷o޼y…,MS7o(XI9vرcg͚ekk[;{diii666;" B:\' }W| bH,$bH,$b8;^mԨQ+55Ν;^^^.i I>G u߿]v}YUzٳ'?~=߿Ν;K,i߾=IJJywNuT.KD_~e+wޙ1B__u̙rرcU TS*$$^ &3>|HDSPx<СC+SCCâsvؑpYp ‘8[H$*P($^ (/$kbbBDzzzU*II۲M6Dt!(o߾~:s[&S///D .\:!\ݻ >~ѣ/^ׯhp$Vkٲ9sgϞ]jqb6T(6mӧW_}u.;|H]]]\o``x{^z׮];vPeٲeϞ=1cg}ֳgښG,VPP`hhءCǏkii͞=h66x"ɓݻ3<<<299yĉDԲeK33SANN}||Ok***jׯwss;zKmYf1111͛7_ݻw/,J5zEtuuw1cƌ* Ԇ$V{ :to_E;mAAAэ*n۷?ܩSgϞ}ΝhP9Hl%Jik)R^y慅V>Ɋ/m߾}ժUr<00=@ (88AKmY&f=~u]t)00pO-e e'̣ccǎ1-ׯQFM4ACqbFpN<ٳɓ'G%9tЙ3gܹ-[ޱc֭[oݺڳgϕ+Wdee1%RSS߿/RSSh߾}}ѕ+W޾}KDG6lP(1cwvvvϟ_sр&@Sjlج.XN`1$qC`1$qC`1$qC`1$q/63gh: $q:VKKt 5^!=Cd6š8!8!8!8!8!8!0 TIDAT8!8!8!8!8!8!84@9ܹSXXO?9;;k::I1 ;;;77?~#[N۹s-3119uꔦés&uZBBtu8M(,]t… Zp@ P(mmmGmdd<+77ロ6mZΝ ^*Lvƍ7o<%%˫iӦYYYvΚ5+///55u֬Yf-R>K^^͛M6]_^.WtM ^PP999\ْԢEFѷ~9"޽B'Oa5p@KKKPX֎ uuuhݺu/_OrrrTtBD[fnt5V1D2pI&d2Bo>":}tEXː$ND)))ʍ (VZ)rW(o.yhxYջsrr"LN&q-ﳬl޼bccbO?U1| 244Tݻ7QUicbbFD...QQQ %"333h~eڵkDdgg<=mڴ X+o[YYqqq"FLVIMT$/^Tڄ$bֈIIID4p@]\\7lؠ?ThwR-:wLDk֬a$ǏWkGPh:аcǎ;5;;;<<ښ͛7nx͛'$$rf-6%%ڶmŋ?_~111;qℑݵh">>^"x<"eu"utt^z}5LWWW@зo1cƤw܇2K$&&fٲeDpvUj z,_iҤԩSTtUGH>G6`#@-66V+8k X IŐX IŐX IŐX IŐX IŐX Ip)Zj֬Y „www壟~رc5T8@մiS[.]nݺڌ*) ԴiӴztʔ) TXgg9N֭cbbj?$4Pmڴi۶-S,(---8@5e--be2ĉ5TSf͚M\.saaa *G }nݸÙp8R8!8!8!P@I*wojܸ6]R@@MK9u+RFԥ CizspD)8:x]J-]?)꣏裏ԍ{wS1T+;̕jpGh\vPwwٓƌ!"Q|<͝K66ԪUm?S(+ K+5I~+Wh>۷KyòVjirMk,$bXNzA(,gTCjˣ?$'}HLu&YR :p|}i w̢=%0->}ӓJITfqwAQUqo!5HlQ0GSQLCW RLYtF|ࠢp2gԦ8L$1M |@<\Gug9հdfBGz99wb\1o cƠsg3p[ZW"? pu-j D0׳Kcbti|q0I]k"$+*U\v4 ܼY_iˎJr0&&rZ];ܸQLOw*%'H{ 6'NpDqNJZBEZU7PPP`SJ$*'OR4{7┚K) 9-;[=WTU4&x1 K^h fovF:tPw 1ѵ3T\"s 8}uw, .$u+G\p,rr GFƍCF*+mtx bhj5 F655X2c?D}]F$'clOa6шuCש&LKʕ DV\ N~K$ntJu5W`@8>^qBQ,/N^XYIޝ7pzv6mx,XT6g<LzI ѯt:,\NRkהyd(8x-{,iӡ(+ nahm<;DE!4TW!4ו- 1q"}-+*sU Ǐct8~va> 3[EDEw\%π@$'@Sp^δш~:U-äIX^?x&YQL@@ D׮m.}+=^{ &N]Yn:ԁIsZVT\U?q0x0jj8r&9H.`$%WVrRvF|Dm-c@2#H}[$i63-z2aj4`J YUkרK/qZ.XhԐSO}{$;˗]heggjDU{EBTT_Kiih/6۷o_D@,Z8pG3'GWwB~=nFW;nNmsa՚5U+V0?_\i]_}))u3ѣ46~! 6%?S_ϼ<&$bu5 ȠŋeÃ9a8}:Ҹ|]|'Ren1ׯ ٥ ~~fjvlj9`bn.Z7\hܴIIb\D ۵LM23 fs~Mogp5,)#b /5Ű 8t(gfl,33mѪr&&21LLTVb` 9{6 zi'/FTDVq\^pE C7wvHZDBB;w?Ûh ÇuHOMx>>>9'.yLydy&Mx?r+Zc#3>hA\hLhA\y&=$#%ċA\"H%ċA\"H)y:tHpGD .yĻ5D"qɓ'[#H$/FΉK$#D"x12K$qɷCIENDB`././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/references.txt0000664000175000017500000000255100000000000016163 0ustar00mgmg00000000000000Too many references ------------------- Objects that have too many references are truncated >>> import objgraph >>> objgraph.show_refs([list(range(7))], too_many=5, filename='too-many.png') Graph written to ....dot (6 nodes) Image generated as too-many.png .. figure:: too-many.png The same sort of thing applies to backreferences >>> moo = 'moo' >>> refs_to_moo = [[moo] for n in range(42)] >>> objgraph.show_backrefs([moo], too_many=5, max_depth=1, filename='42.png') Graph written to ....dot (6 nodes) Image generated as 42.png .. figure:: 42.png Reference counts ---------------- You can enable reference counts. The number of arrows pointing to an object should match the number in square brackets, usually, but there can be exceptions. E.g. objects internal to objgraph's implementation may inflate the reference count somewhat. >>> import sys >>> one_reference = object() >>> objgraph.show_backrefs([one_reference], refcounts=True, ... filename='refcounts.png') # doctest: +NODES_VARY Graph written to ....dot (5 nodes) Image generated as refcounts.png .. figure:: refcounts.png We see two references to the ``one_reference`` object: the one not shown comes from the list passed to show_backrefs. I think the extra references to the frame object and locals dict come from the interpreter internals. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/roots.png0000664000175000017500000051214000000000000015155 0ustar00mgmg00000000000000PNG  IHDR!#cbKGD IDATxydU_{TUT=}UcC-N#.3bQGmlFgmGmQ)UHQQZd̬*̌}?~{KVu^xE{4 6=F#T@ l  :t7[l:K/o[]wvFz^vglrrFX/I1jz yFn^~o~Ro[F V-6k_گ}k-wWU-6/FM!F؆jګ_l7[VRVo֫jƸꪫNB#6F͈Qk˻_65Pi[65Pi[65Pi6Lf`K! `nMJrM+==ϬߑnX=zc>yK%ayevVDcwC<xVS@3m׼FgV~4FK($_/7,3+dǎ=rDFGm06&˿_ȇ>$_ ޽|{S+uBqr?I+; 6`S~IY.דO_/?imV]w׾&ᰈȗ,.?IB DiFGNѣrR-c?e*{~)E 6`(#%rY^_ɷ-.O>)?H>/7H=x|CH[*>^|@nYv! `s~!?.rYnYYFGnC./)_x<r-OeWgTW?+rr_28n[nTvFCxfiy1xǥP`tJ9|+ɯt=26&?3[_(<"^ȟ_b9l.Fy$7iGNi3뮓|DB[w@DD}3|fµ[uΝO  op%}?gWW~(! 4a~V"y׻/EW~dFGoMT'ED٥y""48=]yҗ%dtB qJ`# `{`t6B |Tr/ bѽX, d2ryqqAj jZ.kVn% ׻CPwwwzD6Xo}ldJb\^r%*^[O4 CT8i(HaWT* -G ηl\.W[% YXXT*<OpWW)>FѰ4 ibW:i4<ϕW^y?X0#(Czf݇cFppP(M?Vr,bX(ܬGh5G%J|>AܤaX+ݑZ\._j4T*nXtgoVmNBT\M6V6 vǮ3oj:??+Mnd2i;%%:&%ɤeZmH$^>Ͻ>MzZF@>% CPww{}ST-[}aڕi**D-&6;ߍ]7 4ZV׵^j5mFZ.+!X]]]z] @]|>mJ4]н"c c$BsLq|#t㴚u44 #cM$qmcxxz:)/#J`^7czK4j}~~^=ͩV]]]'ϛ}+U^P(FMsm4b=<b5 PY[f) hdM;wCŎʶNjtR!͝A'eZs=OZt{}ؾYMS5鎎#/=Oq}tJ` 0ӦC\;Naf;'˶Mzvor>/JS$Ic4_ڹE"@ 3tBI x@iltZ3hCT*Ǐr\,uwmlivznңtJi3EUVy<ĚUDZ:I(FeR(sBP(A ^WO~`0oijr+zX\2Dvw<1^o(]]]Phnnngk)O=%wa67;kOF#(;kbAq'1c&~,8D8Ŏ&TUaGZD]ĸUbcl htT*MOOBPV4zTZ\\fS."JDrT𨎂h4fLB\^x9&l^aP[RWWmB!,:zoѕ:VWJ!FCF5vxBA[j|Ys[,50h-lvT*zrlӏe.5W6[W y4-`'2ZUPh0M5_R)6$ڌFnSϼiu2Z1)zM?qckz5ߑ~АVcSGGGlKZ}XM,G&%[*ܟU.G3nZFij2ϯa6v\FÒ^lp8lqZCV]ժnٮnkzۼ^3xkˌחQϧr0̐i3@<@a{舩iޱwIaw7]v k+VAjFC#Xd~~T*JZ{ ǤRh (BRi4jUSuhkS&M М#ڭH$|>nH$LWWW8eG;Ƒ.b%BaaaP(xE +Ӟ|.l2T*zG'wa*D<O4|pX+q׫3"wI9!:il5ِ;EqUWu ED;?#G{NzoFoz| ;#/||~(@ f>i^0de.{^HjYv̎Q];j622bjQ,y;*g.hRۏ=q^m^ۡFoKֹ/ ST2e-ha+FL$n`NZϲ`ЄAŊH, :wK~=}wBq46GaLDJ2zw`0X.EST:1e&q uBzbX(T*Z C)A' bXVbX,JbqaaU;S1LB Dk@?k&i5Aeo%Gwcs(AZ/ V*P(çu^bsu>b&u 1=&B]ډk$n0=d%X fL-*젚 ١ 3-PD vg2#q.DS4F^ נD" }>f6`9 4]===Z}ANK9s60NBb>r\nnnnaaaaaAZ|^ShyVEG%1D"p؜v=D¤_qTبTDtz||ȑ#޵kWGMr'T_˧_z<' c3/~yLͽ`fйL,)Cs/wמ L,Dсю3ilffK'E2ZdlLsїɲ΢r:Z.,,h۫V:hj5 B5stR.|> G334@tG F@ /i`0iT⚚:C4Tfdj^SNh/D=Yrkqe\Z\\yh|V`r/ LB!ͺ'XH$ݭW< % -}L&u@*OO&P(S0.c333ǎW!D"W%_LNnD`QtCkv>TkUiWٸiSqm֯GYռt,Y×Ҵ˚s׍pp-qt$L - "MO %MoOCUuX\o BأmKi͖ˍt}Mlz;ΞYfB2f|>!2LZ-JlnnNOb^d2>O϶(֡bQbe-)aɊ*^ Lk䉎^7 E"͔礻;wp,3] B:NӚ<бXpA]ϟ3çgax̑#G:=?s/)/SS2:*Gw#>(٬|+?Y2¨J=7ҾV.A:ky KM;3oSq>1w!Bw`R+>e`ED̥KC(Ns׫©TJ+wuu%IߟH$ѨvLZqA[l[v< ffft&flv~~^ >kb jĎr^;5wwwG"X,ǣh"=j4SSSZQcbbѣG8| qӛ_׽N>O3D ]_ 4.c":\2 A3 ˢ3Ž066{i(T1w/9BfL[r/lW5*a%dX4@ZDN@g\.{䓹\wp8FJ$(v"ȎD"x< EQmiX,B} 1333111555555995J?44488wޑwK]w׾&evOڠiڍ(3F9Rۻ T89;A86;>]\yEDkܹbj3j{M4uԐ83Akruq^H{Mj&+cG;4c;y9;;k\Úkr 9j^:+C:wwA1IAe7?{G.c= <~}Ywww9Y`61JYV(?ubV/JRiaaѣrP(r㟫j\ցZmܴ5z^AЅx<]]]`0 j  ~41X, #Y IDATرCD4۱cG(4hdrmfkZ#Ͷ*qssppt:====333;;;55533sA]֊s׳i~UDD+ H""< wL կnypFMowT[; _]~TD58KGˬvءVI2}q[F+4aKM4AD-5[a>M\t飴N/ʦkttכJ扨jRIE_u\|RV_C;U;,ZZrJ%cD-MWǏ |>9VtZZXk~04_M2DɤЎoMac_w4fNLLLNNv袋talllhhkY7Ç;ߑ]yD%=*_.'o`0Q9ߙ3;G% ؟;*ah qe5bi8st򉙅Fަ fBYXĤMȞdb1&j;j5L̆2-a*+f"D#{R ujo>cQVCPTV^WŮEQES!Z`FV̴RAj}iFeJbhQ>l'_COj 1'vttTlBz2Le~~>dYgVX-Ql gGA]D"TJWe}c&&&鴉#/ܜyѡT*5<<|CCCMHtTiOzY^_Evsqt·s/']a QKlp'wdBd29IOp7SW|;;Zp͈ŴązO%IϧHOO~?arǻRFY8!r9]q-]\X,p8Sݻue24CL$fu'߹\.=ztbb1^(CSԅ^hidz?Vsb.ʛ,Ǐ\~k^sfvsd6E f+j2LVf^Z9R!2hl122⮐*D PzEL 7OwT|Kw j]\Pk. >ql_>|rYgbQESd8K]ЎVNOohɤgH$PH;}>߶mQC43S}ӆx;iɤ=xdZMmvyIO_DBVDDӟ'dRnE;O婧dNWXo{{A{SzH䢋\olVbS[4lj2g9*ah#s$i8' 9 ci-5!<9(嘙NZKf}r0]´iV„hvS;jX2MW'5 gO<-N/ Ep:!d;v upuxD"D SoT*'GF=!:i Z Atmizzc~iG[mS{caaN5Z0^tfW2X<Y[D^֩n:kr+ SSSc&''''';6;;k CCC^zi࠾70Oz]>fH`yNs;9.cd:kXX‘ AkNșrvtqO$v GG K3:Q92;#TƶLϲg7QG۶+8}8ڰ}g9Z}: *rԏY=Tc ݺhmh ^n3rզ*L\A|eLffژ݊ 9Zn` f,E>a2ZR?~\DtZ]j>VrT*5 =NZ]g׺>/BzkC^K4)XZCK:tU9 G1wVPT?H$ɤUP+WM G6U4z{{M1ܪFtV[fCDnE~X.ysK_nh;dN9&o1jYe] Nb4-}ALڱk>_r4^Wb1E+dNX<սNl31ݲzLGuly7X LyY-U1L \mvǨ...Ë/U˵U׶#a]C{cX(bڝ=1hrC1uGVg%`0eFQ43TR)Z۱j===)̝Ff<9xĄ011a.z"83gxxxllL#:T._Wt#g-<\&|77qyfwP }s^&OɅ'֘38}36ۿ\.<KẌ́(`5S4n٘ҘPeEQZe-L&J۴܅d]x撙'1aG:;b7ݲ,# lZw[1mX is-S!ѓrOtiԓmRەi&u@6KmZ2uxicVQ3'dL&Lt:mq |#-TJudR+g|1==.NLL^Wg  ׊[ꪥ76Oeny{-o{6~"rUW7=7A.P9G|- Vom.(0I^~wjv%rd5%RjysVL:{3X 띘k};f33̌lZ c̈h{hݴ^}1U|3c̒h^9?? B^/P.F\vji47u/-tOnͰFlCWWm5)1c+˳rڱc;E[<]<, E-eT@h:yzZ^ /k3i+`w7iYFv2E VyMB;XW6t뭳9*[t*(\~6Q=l%btfLfe-al);ՉX-)%1b.kyH$FuYKbD"P(H$p(ڊt(C.ӂ:ڪ1XUگlA$)TJ:2jP(T<OVT*z/T*|>_,(|C`0L&T*^5ȚdA|G=|Ą.6`pxxxΝvٹs. R>OxGe]6>'o{Mm4mޛ{{ߓ/w5:*G1rYe_-uɃҶ`ρ#ss/?vvഖd4=4< iShATw:jk}&zhOkhOf6Fy8h9cR&Jk"f>v3]K&<.L$ 2'n23'w sw ]lkdb>r&aG B!ɔJ% SJ6W!HtuuEQ3(tuu%I=d2 aFQb* vp߬'|6N^Lrp; {zzNjr[!SSxNu>ZzsitZ&'宻P/|Ag]2UW]ݼW| *֚„iKfif@r73#k^Af0M4{izFCPy:WN/ӖEN=q(=pؐ߾pر驩ٙlq,e}i'y䑃>=^VLʣ>򳟕?Sy׻QoLLȉHw+\xlBN7ut֐FCzxqm>єK&^WRhP'T軺Fu_ hVlJf2_ؓpkri3z{.V'3̉n&SEс:Ŝv~5s̔* sB3j5>7HmfMD"P(Hb"Z~F*ڜ1q=ŮʣwG=1,2m,& gFIӇ7eWY#H]pLf1OOp2L$={tI+͔mP(=zرcǎ6[၁ݻw/wرBD{bJ$}$׿^Փ*m,iSFEkC٨TK_ /ΓS@v{pbƼ5`*L{*hgg oU1:e``]:]uyMNz e5#[&̀^Mڴj,YUd׷\Yi1mw hM&M͟ s@ 6CdFJFԉcfnf3zn{Ӷ hcЖMN iijqiټ^o(j4ڐt.H^zJErh4,ᨄaF/FӪhVMMM*Ѿfh~] M l{+RivvvzzZki;vlzzڬ]ܹ.j<)5&''Eqccc_|^iFGGhX\~| /y|tuM7?kW2yGMc Qi6v#jN&)J\N"hl6}ܦ(jZbfrfbL&@,ʢZ#w]vp0%;ܠ[| S0@T* fV+/h4&''=MP@ooo޽o3|>o4},..l6 >Nk$,jVO$H<"Ν;6yS~XM})BnҞe~e^X,>|ȑ#~ꩧ=:>>~ȑGjVDBȾ}^ڵkdddddDsW r';Lw逐J~h 6OϲzBGʳ,}hS~wkyrr/~y=~(⚾e3u萼R, 7'>؂!4&@.#a%(L}{/;QnմfFӽVA vcO&CCCܦN]6f#hZ¾Y̽`17}[Vta!fݞMܹSSFodi #:96Ӓ34ctMsu׽0 8ז.waKg)_ay: 1c͓ ein"Ӫw2E[63נ մ+Xt_}Vk};/|>_( 'j.ǣ%1*J jFbϺZ VhO'H0\\]V ]nkǎncccKrܑ#GL {!NC=ڳgυ^fFOrZ]ȑ#npp~e]o߾_uܜ%%ƭʕW>jkdS&-G 3L>T`~~^yMds\XԜbQ7hUW%HD `hN@S$hBbOȲh/pvj_v;j5K~P1g[khWvkdF.To^M(Ng\.=AM [IR&Ď;g&wvحoL4BA E0tG;.ݴIk^cx 󧫫+Hh ̤YVsss҅9]օWx۫/o133szT8vn v=22sNjuz}ZZ# ]p]vٟ_pg}:l y;:ތٷO ~zC(|M7'w)_߿iG_ IDAT?< ӣ@|>ix )gRӭe2Kd.J8 榦;v Ԕk;888::zy/ܹs$UvZi4=G}^{\p?x<?ԧ>җt%11!"r["|Y2?/JqRFqͬȱ+y1YQIM95I aY{eXM]\v &s*oVw44.>a]kRx]֤r׽ ;uMAҬ|Z>&])dX?gfh)ta cPea{4~!jx{ڐ܃~ >/TX,Ӽ^V¨F^ r\VjRT*rYku "bٴύbfX=[kxІ>s\.Tf\.N낮фo 'd2Vdd2Ƣh<wx<J233Ӵ~Yoxۑx!?Cv Bt!N5Z'j4%˙PY<D"fazh@T;7I]í.}01ZfYGɯ52OP|DGdn&7l6RSGD^Kmu53Vrgk.Nrl6!tYi]xq`0hOh:%% {ދn?V'4...J%GUyگlAvT*eqtp\z~ر63`0j޳gOӡ DjSO=b&jzLK.*OZ~_\.J]|ů~/䒝;w'?w;?Ͽ|gfٱC^*ǥPn7Qg6pݶno?.&d 'M68Lp3~ެZ4:M1lb"+ø95Vƌ%+ӷydCD_3gFb7D{怛Is7raeL;ɼoRH46}}}_[þy5|:MjAS!یiM 3]s͂wY.mi[Aŋ6o-8H/͌- zG:hJZVVkច韏N`D ^RoU6TвfMӒB:q id2k.8]a $xEP3t~__If iy6m~a-aJk {߿+۷opwy?ϖ[ϯ{}|{r5rLO;q-;5m|VX1zi ٬EPES-Dd$ H$LfFpX;}te*2a~h'f`qwՍB~6GXS՘OǏ׮@]h. D"H$O8sd2ioH$60L0??_(4CMPX;ɤ>|9=66YD"ݭ}UgaaazzzzzzffffffjjjvvvnnNq䣉'邮 `k(ڙnW԰drϞ=ccc]vC$egff_&''E3θ / .8iGCSD?_+%뮓я˧?-o||ros+Gwm%LM'?yjS""{|ˡC""7,o|ܜ7̌E}jω5} ^|Fv~Ό2ium.+Jr-Jtڬ/˹\άjDK3xKAwzMjvE nUBCfbߥ?V@3B?A˦gxKݲ4=w7~| (]=묳קB]iYɓxqM4Sw*&VS< 14pIh4M iXJ_l i nJ{^/k 9O}{|{}9eȍ7^'}36 @;l(|[lòlАf-tj\.''We"b˙fdx0kog81cc/;~ӽ&]3sǭBRbNBP__D5m'7ieO 䨓av4̝2 d2M Ѕk;aN-RuaAXҒYԚ.vgQj>OMx F\d2 SSSRiaaA5QJ*HB!iD`0Y  E"$ ZmZm6s uL*zw4(R`>oV' q/AHtW,Q.㸧zOyꩧ;p?=e|    X;@>% fl6L&a(s22L.d2~6`0tuujV ,Xd}X]ZKگ/}Y?(HF$x<Ȟڣ-a gac!N VH$"r9`{fS,xA=Hcj]]]:][ɠhry+.MDGHӱX,Fh4!݈*D6AK$>ovv`0833(Dvtvww\.t:{zznGXvѣG;666g2պwޡZV*'O?~9vm}[H˾~?Tr=}S]      b[%7pE` m3rQ/ߑEQߑA4 Q̦yL1OeQ `8Z8k^Ţ/dåPH~F Y짋_2΀b٘- {C1׎~qBN e6HFP(H$y$6%bDPf,M*hyhdѨdA 3 "5G>gBmfd2bwhn;RgFC# 뻻 3l63{IV`v֘^{޳sN~رc˖-_pD\sU*J(PY6:ٲCC&AAAFj`$ 1fgF`j 3Zf?tٗ_TEX]Xf )Eu[H_k?QVlLubiD"P|A(DaCitGCraZ8\TbeeQ `4Ep8 H blvjn߾nl6jXNbQTDeX,NOOONNNNNNMMM.* q2ر<x<}}}'Q.Ϟ=K/⋧N:sL\6{'?yu]{.$.{ϖJTo     Vp|:NRX "^JRNT*RQtl6RjZVTj4N'˙h t^ ]P 'o~ f4DV%(~'XD ϠFP!/A 1#6 ҆k (w1e֭0˲2|wXb2X%gC`a6/*R>#Vjیrܼdkfs}N,J Ql633333~,iZ #~fvv;XkQ(N:5:: w@ 300|fpp;'gyȑ#rnmΝ70:Ž2woEN._>AAAAAARP,-Y%Ҵ8C:eVK$1ar YNrm pb "B U3NS([l? '6 H_HZ3mҐgL8tF(4 7$x_p᳋~.$ h\͛7# nd$qfD">yPD^^/@5mlF#| EG>*$G"P(4ɯNjNhCCCvbXVj-T*uii .?Z}v{2k((JG믿^.{{{ooj^DCi   !R)PhZ O{{{[x.A!b1 T*U.RN,:q,0@Pf lHz=V>5<>,d&p* &g~~>"] _(d2=D豇O"r=77bngI[n=pMJR&tn@=d !\LLL={HӘd;r*&003LFbӸX1LV byT*P#_cb:\.2̲;Sgc.;l~}b/QT*e?#~i=|# Xh8 il6yn(ą y@03b. 5M^L&T*zhpp56B2g6w+AAAAZqdiJ&jZr^H\.˫ժJT*RZJB HJRRd2(:i& Xi, Ri&̠ [,r*a/H V ‡U_(^`V|٬'\n~~>L|>d|>hp 1 *JTӃӬa[\.ϰ bx^f!~MR[h0G ^߲ezXNe˘jrǏ?vV[z~ꗞgff~?替~6#$U nIDAAAAAADG`)P`LśIr35|\>;b#!|̎ddm @e. 3L@kin}q Ŏl,{Ȃ)q7t@Xv^ ᶄm#Ep?h~i!Ad|sz ~ pn)mcHR) z{BlSǯTTȖ1?D"bˈ7ixF&AcnU*Vtz^.WF6v|>?77'm5vnjhFZD"H$ A~#F(۷[VYVp8/Zﷵ IDATNNN2; XkD"ѦM^޻sNv 3;;_rddرc@@P >|xxxJ  Xc$ d<~k|c Np8 ^CۯV|/-l,kf ܎900X`ᑴA*Ű'E"4r{X,6fb櫯je{Fd\ ׇL&d8t:N' =hCFT]]]FzFjhjZ-F4T*q)aQV _/D"0.x)o۶nu{L&:mLx#Hz{{DR^oOOZtbǏg@@":th```۶m뾡> hl]}5cswݵ=#    .;xyv 3"rlX^N' j\.JbT*a0J=-ml1A4BAPDN ,q2_o0jR 54{6%Hd2"v"Z4(ZFQ-Z Y (gb :d2!d2mڴ jL!NNNF4 R ( Ft:z¨jgϞƹs*ʕW^900C 6[z|駟~'OtooVJX6oqܟ9s v      bYaH'T * R-(s9cbP+ cdbnT0=baq$>xBH&KĪEX݅@knS!Ht X10aDT*T*-xAA'[1 "GNQdl;`=08k 6B/F[f(/EKLl oOo4D}l4<-b_T*JR `Z̐Frg\.3rZ[dv NŠq^_oA|LaC6o|" ? _ 3330 tvڹsݱc͛;;J~ߌݻwc\)bMCJsAAI"!#7`[0l{{{u:\.W*XxPjx<5)(*Ӭc?=t:T*56M`R &Fo Ju:[q!B6F`)MB!MaP4ЀDOOO?(mv@``XT٘2G0e,YY%ł`0Pᙙp8^nCb. al6;)R:jHR5p:V#E> qD"M/ #C P{e̙Nw    hš-vrd2j(i.eإRI&ir,(. B?U`b ˣآ$ آh4b[V]F V\V_Q)Hl6⥯o݂2h!n:qN<*X;sΝ;ObsN`.\J+^wرsN׋۹S*= w_\.oڴo馛E$BNAAl X,L~FRP`Fj4J%vjT*DZfK|NN,7#R ;IF Ev$ECTW^yng!#VDp:ƞt:-ؓdt&I6V(s`^Z``mD1X,L( óPMd28gm۶xrl֑6bQ.}>SSS@8Xp86mۻgϞ޾!TVz-j;w\.l뮻3]H{X" ;vZ;9vEAAA>z8 ?77cX2bl#Ng|>܋D)J-ZP`V*2s fzE5Ơ[~ibPVck۱X mo3J%dMzFQ(r\.KZwl6L&qgϞUF6ŢjJRX$UhjzZ$V+Dc*J()ۂ%LfXX޻w/+X~J8Jejjj||T E 4 3NАu:.kW~ꫯqX}{w```-2j#G}ى;;bJ~?:3t:nh֕AAAAAA&!DD!1-3=}H 3n |3 7d*& }aXH˅)ozzzzz߆qzv8pvv)d D"{z&X,;tUW]LNNۿۏ7|nwy7 64AAAAAAND&y &ybp8X0 h~a0ܠ({l-UК` *['\+ڗ_1ϷOӎ>hSs_sMXV0J„#SfE_3`P #)r+acFFJe4vZf'VS!٩~,x; jD$CHl7TF#JG4ĈhD3hbF.ma4lq7\OY,vA~-[|xxxxkB׋ BBoAAĆ# 2Ѩbh'IhgLdZq\VOFT*RIH$\&ĥB30k`\ nZn\4L&X,j"~^k8elX0 ݽeyYmJ%7>>1A߲?Vuݘ޿u:xh6mFą  2& jz_|ĉ/ٳgkW\wÇٳծ4RG?ze2UW]tG8pӽXOq"W.s?70]uGFAAAA>P'#`[d2d2Lf2T*H$PZ( |2bZm^"H,r\)JNV5 BWTAL&]@ jJR(r\,K$.a22l3RTX,rǿDm6zVh4jmx ~{ſTRYh ryOO+[ڹsBU K6`a^w֭X,kkatR(N:5666::zر@ 300pС!SO=ĉ&鮻zLJ`c|饗NwdI<$q\3ͬ3g3g={MVSAAAAANL1Z.YV@>*܂ lV(Ll-kḠ彜&A,<1mb}@z $xM h-mN0+X" [G(A60DƵC`inQYL&xKTT*٬Vw&9ř6Rje3zfYӱuHTT,uRT:N&DA*,&Ԣ{Z~ODT*`08555;;;;;;==L (.cqtvwwwww\.hnNKYD3Ǚr W*Rcq\d̙3ccc79}tTvލ5G\~}- ٟSv~uP(op~G]o#.p{p8w7AAA~d2|>Ja}3LH6(ߙp|PB\._[b\ΖGrRNR *rl6ɤVI V9t: '#OOO" L&d H$JbqVjjRN;VB/YMkp)LP( F"`0F4ǑdZVbl6fXn[,r\XTI,qE&nrX.K"8qɓ'OHk.ݾb︪x7jZ$?#l߾=ZV}+_:     XHCZ`E c J`Q.4Wg040`Pu`n1c CpBX$ZC"Tms ,^}7a>9dPH Y8C^5^llbm&MD( 75"1FT[6("HxDbdqE,#01ڲHjA0 Jzo5iV\f@hBR i4jZh4ARjhCa^` EZ -24/5]]]&0l3V?Dbvvžr9݌-J&;`;vعs' i:v)?<5^{Jzo&Ų2xꩧK?U\.J MǗc7x{SO]6  0k0H$d2 }\.7?????_.+JC,C`Z0Z`0X,`6Q0Īo @  Bp8!BA fWXBC"bU \LN b^?zj^!@\>offv 1D"# #0ՠ85Zmbbb&mFH$/@@T]ruDZ}'}w}_җz{{9rȑȑ#sݝ?/|attn}Wt3OʽVs}} 8# ,   _3Ӣb8 "8X r\(b} ڨ^7Et:z&;wtl(J&t:HR)T_"5NF^QcuXFCCTg%S*gP(&vBZN. Qbd~}R;S1;;[(8D6mbF|G"TշzoH$ڱc_ݻwkNy'xwB?|[n2}|s|+֍U۹빑"u|   XaP} VL&<> 7|*fB4<9cJ\.h4X!DrR` ': b 5cX H$FqզX,VՆgJr\P( JM&f3&5ڨj@͂%XlJl ud2955555599[`jj*G*:Nxnx<===fLMM=ztlllttӥR}/ꪥj{'xgR 7p=W y`IJEav5h4^Q(?}r𓁹Ŝ-`a0sQCEYbĚGm;=m=؊}Eܫo!0̨?! aiAfxf OR 5gP6ڥP(aC`0D"~oRvZ6pl64bti$ӀJ+J#;?sddBZ@5Bpm+?Ν;;{A_Νz{;ANAAWTB`fo͆H$JbW("켷jNX+rӧO?҈FxNM&!ngϞ62277/wy{:ݣwJ6@\~'z C;u9ym@{Nw    -B!/h6ihv.:jkZZIqbq~~X,rt:fdU\n6[,:AE*J2L$d2@*J$LFpi'KTj4V Պ>*&_{HFJ2555~333b8DzN0dc SNayll,tuu]{X}t\r?'&&?я}n{vY=NT*˿˃>N/_K<K/qNq[rAAAAAOi#X,fYxf!̞JrghиGR{Z-!|!Zt: T*jܻaqe bUw({6E[kSFi\ : b-E DZM$yǰ W`pXM_1 2L`DF\!^1T*d Nu3XQpL&kCBqf4{"t:T*5 ) LƎj2Lp n+~b4(־&Rj6X0mUE\FÁrDbٚU|T*1p8B5"H ߔj4im6Z.vn=r |M%~̙ .D^q`a#3*J?o܅/;qxAAAAAv<06rx.65|m6qFs΀*7q<;!Al@G ?N! I} ?̡6-1GC߂K^"A] b#ЦbqKZhBC">!93[dsLwaR-vb_Z7Hd2@*J$l6ͦd2fsD" r  ZZ%AѠm4jJjz;u:NS#V'Z-o!G3 rP$t`?y~fo64Ξ= k !( f5P( px*5۷^)>O/~1<<r  X- X,gFj,ٶ5 J\.D"0cX4VZVʷ`[łz_ |~nn\p,D"xk-N8d;nt:LSDC*8N!g``J^ODGgΜ7+H$ꞞJ011 /]ӥR/n߿x<#CCCQSV7cYÇ򓟔H$[(ܭv7AAAqѠ-L4-\&BfST>d2tP(Rl6$p0)zJP(  BRt:Bh4ZVPC\.l6\.oaQ~A\d2J,H6_.ArQ_VkZ>f f2֚TfCmR,B`0 `0 p ` ǩjiۭVl6tZVt:Ga=Q.+H?|uJ[ ©S|ر@ 300044488r*ʯ~'xgDwy>}eUtX[ֆ^hOx;}_/AAAAA+_Gv5 |ݶxbM[x<?h:îI0{, dZ~ml]hCIEB8doCl@u[o?F׏ [ 2W sha!v{b2X*o4`{XwzG*vOV{Wq\.CCCN|+_y衇|{}!V;AA`ӗht:=f`1YV$&&.jVӯJ,J',l&pnH*ZV X x<~g\.JbZJ%!ZlvvoݺnvL⟕X{BiχS<1yx8NHkZ6111^.R+;jx^M״rǏ;vllllll,( l200\&_ÿ/暯z:m#|߿+~vGfnhtW   j_qlPٳ OW~9\F;_LY֩/_pS/kZ\F0nnnHX,SY,fZXWEp?AC2pxvvp;vFi蟁0t8*L;jT#"ER\.rXGbW_rVoݻw<'|rvvvppc]wEz:-XN@|wRr%{ۿۿ:     : vt\= C"//ǫڑ-jR)_GE2mf(K d lX,_"Z#,|g 2p6 ""VT]]]DhT+jC%z`\+bҝ0O%u Fۆrv,u6܆ǬT*PH\\@F#jfEҟXT*A?CtX[O CLe6 bqffBHC$9xh6:q6L+ vH|w:L( 455fddѣpXz^ӽ[!{~O    %\1`{L&_f/r,8ᖡjZ^tZ{ U*hDbl$ Bh4aD(SQ*l6l6ٌ6VbP(Vk%=%jEaL&D"gY&c*Y$AmK(b4>kRܱc@QL5%8q'Nrv}޽{ݷoߞ={6Zؾ;_~]v}+_քT*wgϞ}衇9o߾o|}{;ݣswhBAAAFPl6H$H$l.e.ó\3dJRRaMSTjZNRT*`@C׳L b DXs㐾LFM2w_5f 3D"3MB3KR dV+krAC")x뻻,\.rMXr@ 0`?Z}vQc Q,_z饱cǎX{A˵oZ.}~o5wO|b߾}Fz|?޽{}o=Z>ɟpgp6v7AAAAAl0o`!/o!x AǗ$Kے>A4$LJT*МH$04e Fx<7KZhDt:Xe`EbPh4bD_2_Afx<:N d2N$T*92x7{ Nեja1e4,jr^G<.FV x[t:L&LjCh#z=$4 _tN N4 CG>5A,#R)fsnfRZhh43 DL&x q̙ .Jl۶ v0W<,0>>.8wZ*v+O~|#~;bm@NAAԔL&1S-քIF<gnYҲvFc4[3Ng0T;20+ƴ)?`-]*\.Fmhr\/JdzBࢡjn7IQKZNNN2I 8 RTnڴI l+ˇYLT+Rx<mxiT*7|'N8T*߿}۷iӦN3LLL<կ~;8fք8q<߾ꪫ:ݣU@̅\C]P+9{DAAA,'d2bRd2l+\&hfFPT̀U*(-rLf2X,677Fo9lzh4L&`dXU@1D" lY"آQ[u J|>AKcō2vNnA,"6P6pjrvt:m6[ww7vfbdٷ~%;jDBYkp8|cǎklb۷2~wvvog8m'O~_|熇owGD=rqZ     dJˇU:-ގn#Z }F# $ $k/gž.X@ _㰰jx s]y` xKX/ V3pc7\psa3>ih:wjN;NPb|z)EŝX?S .틤!"b\.OOOU7!^/zƙP?i\*^qQ0]P( px*5w2W9?}ӟNm?!bt?6.AAĚZ1NpEf-^|>P(F#*#H4 BpoVP(,fjhl~bU1??WB~h`_(q'H<[nz]]]ZbjjѣcccO.J}}}7pMm۶ǎ@ CkwwC=t=dNwXCN`ddsܛoyw|tV+_*w0vs5cG{CAAIpH&v*sF*JR/hן s0P:N*JeKϮ̧F '!X.;D"l2L&E bJyf4t\=U0  m|c R~?~^T*P(l6n;BX )J@`ff& |`0833qH$B"6ht|||bbSSSӸQJ===} ӳbK/aرc@@,޽{ppp```hh^gyb>뒵FFF>ϟ>};xG7oV7~7tW    }"VL=?#C>/2cEI7Fk~#T8.8o?!lQ'K X\ [ E'^XT AH$p˝db"@R)8nq^@DkZ\z 9]]]::n˱_Vc_ɯhM.KRt:Jqf{:h4 r;L ĺT*E"gH$FIJttsQ @պnsQ~oJo3; kbq__ӀNް`ZW^s\OO?n{ IDATpt7|>Gk,vVS;ݛ 9mA10ɟL$S'NןSZm{`ӝe Z {`E"P&ڔBkXh_j2S8E>&MLL0Wpwe}.4G\ @… .\v||< YUM6a&te"[O?f۶m|i2tY2&r|Ϟ=p\ xu:C=\.wSKa9mpWV~GVk;H$ǹ'   K$UٵnX rVJǪiw|-n_|p\n6˝1O6d]d2bY<}[Z? B0,kctnnAf9Na@ET|D~! HRO]B0994Xsbnڴ۾nTK'=zرccccZ65LޝGUw;flZ`c-%"IM66MKY P–$6o9!m`c 0-,Y%fFk}{~z3F+~?n۶mu'jVßgNs``|1i:?|/,,vm>(3,cvb1d+!B!Bz}8&u#}7zF*sPݞ^0J%GhJ_h~*[px2_>GӀ _$!+OO5_6b *+i,wP>~ڵ׿bzy[&I!Z0d6 Q8$闄dT*z} X' ns\y<MZ :hZFu:l F1@mQKT.sDb~~~G:GXVjXVkSSbX,:nM^id2yFƹs 3777AFssRd㨦ɩ9P뻺:jii`W<C7Qջw&W^y%FЅ᧞z?!o{C>1id2G>(EQw]w݅!ڱ&sc7!B!T=P(b1 . \X, x,It*J"HRDhCC**JF[**? J$@|>/{x)B!Ċ[FCKnB,*;ZlaPX{vUgkN& 'Pğ^/"t nwl!f,P%L&Sccl6 `0FɄGffK jE&GFF`rq8+oǎ\U,~'|o~jU4idٟF~{~ݻ;je7!B!Bh= ௰V>}@ ŗVPՌ`0fcaIӉD"e}l$$ DڨT,ȿR 7% &8U{ڠ jT_Tާj/B5RpCfԧRh4JX,JE"ˁF* ÉD"JB\PD"X pRL&D 2 >aOHP(ýZ-PVj[Rk=C|>xT*QTOR(J<_NsQhH zF R46H$2:: q`ffJ$.ũ㥖~Y>Bƶm۸\.\_߯ÅP+{0i!BLx\P4j&v3\< |I1J{Asii 3\.zr|>YF^WWZ`0@rg@Nkhh` 9. #4.xxK*l6 Cp5pvvt8RDhU y,oXr.> f3g^P8y7h*7@ /p\.wqRN}Z7i~^hhhxovZPzqQ+_`7!B!t0,a$dDQ w 4bX$)}(H$d2,:p1 !&X,,|/7W>JbEeT^!CQT*/rtBAx $s͑)sssd(gZ[[[[ZZ`8w|#GSJ"vt:_G?ч~vZr7jՆNx^zꩧ\}nPv6>~#jho{B!B!V>LJj#( 6cewϑZQ *eKRWa7) S 3L(fh]*ܿ,d`(J5B!d( ؇~8i|DÃT%Bh#%h4͆B!O\~Cߧ¿R>\T*pO^jF6|TF>2MϳYIn_F |QnܖJTB9-l6lr\0\`HRJT*KnĩfPv|E 8a;$+Tj4u:^ollt`0hZ؎6D"qY7NʅN°`]YTjhh5N:U(owH$lwpx<ȑ#xI]L@!jYل*2,Rb Yd2Ƚߥ?e\n6udI!T B#Gzꪫ(B!Zbd V2~Th|>_VN^nq~%mUT*Vh4jZh4NGjZUؒL&23a(*]&H`1 KR< j9s\ʨOnХnn/..:t:(,d2h4fبz;bA5QMMM%^òayhhruwwCFWWW}}=+}[ZZ/|/}KַnF\~j iÇ?Zܻw/[/BmFmJ+B!B!f [p\LFj-rU%BT < TKk/V>cϲd|h_H+P!)V+9/*$M(QWUM.z+,Gx. k ++WQhK˭`THD"_*D D5)lsFANR|@tJq2m6Ӏh EQT]]]KK =QbyBpIHN&OOZ^v׻h4~F6$L@!6BUHy:&H((LoTҍr|%AA d2aBKNUefC2tH $jl9av;$j|a6Z-d\d\(JT_,oT6hI坝]]]J"8T6---Pߤ.˽O<jZ;j#iLLL#r =ڰah [ B!B!кl$h4͆BL&x& Bl RH$fp:N$X,B rR)ǃ2RT, Br9TΕd<OT|D"H|>;d2@ @j^jU07f2p8 gp8dh"H`NX,Nȉ?qQG}}jiBT*'T*T.BT*H06JZ_ P(H$pZP3iB\.H$BPPBp+JP(j TC<BD"H$0c#˝>,HRh.=uhBRYQ%˅azM9RY^\6 x;"rsf)r؂s}f>4rU4j}FC5x^x<.v-a0FN3L:`0FTsA^J9L&CQBغu+)[ގVhnny߯T*oƁV{aR??joog;h¤ Bee33S:r&HmҋJi$ _nznx^(pOQT}}Vj]՚L&V _ڵZNp8>j^$z~?hnbZhZFZV:N@q bIR\" E{{;= U$Zu333.XdOjkk3uuul&ƅrR__ !m#͹!$Iq #>@Ǝ;0y+r!~?VNZJǏ߿#G>|Wݣ 9jj?a!BjK&2`DR^P*HB,MX[\e>~KG~?lj<@'a^8jJRKKKaJ1V0A](KK]LJe[[?4BhH&^c~?r!h4L&b4d2"TV>ldQpJ^2l*l###0r꺻sWWW}}=ݤ[o /կ~pK<믿~W:tcGS6KPB!#!B! B8dƥ26V["%-)[n} TD"L& 8X,P(D"44 q`7t+K.|\G1$HRD"J%d,r SWD>gwic"+o*&m+ʨcBT*%$49"WY,eԝcl BxTRre3 JfX e2_!6c|>_VWXϫPr &K?-mrV+iKm͋FSSSiΝUb 9fii^{-k\qaƒnG=z/g;hä Bh5AʥB\XPsf7vxNu8p`:^:NFVk0 i rJ1c ])^'WHܜf-KssssssSSSsssKKKsshij Z]e+\[& 5e.k|||rrr|||bbbrrpPں;;;!o-wӧsFq*oƣ>:11wݩR{I`ppp߾}7tӡC0}-O?R;wB!Py||!6^ptBVS^Ѩ>z<pݾǍA:NP<Ţ庄uuuႳ862Hl6av;)p8H@ 0Fh4fb2f`w.M:v:caan;Nh8G9H}8KU8===Csܹh4J`0xJ߄~ObbxϞ=0k.^vG6/~sϝ:uj``஻җ'*ɤ ߿ѣ"VwPGSO?MTB!Bb `& )yOJ't:MDl6 8TBl./GTx<-d2'% '\>~^jX.F+)8l捪b@NM@hX!x#v~]0_/}̺:`̍/=xGT(nr6.`-9^/RtZ2  J-...Bǎ :՞P(t:n0${T rLndԬ#R__I4rhdU*t'O۷Cݻ% o˿^le T8Lz+0i!l6Kπvle&Ӏ¥}o'B.zry-Kd,T*5[N2(YV֔띙R0=WRlٲ]ղeT8\+d2EKpWбc{b׷{.Ǎ7?~ĉolhmjEQB7ܿ׿c?FۿQC/ i" ɪ'rJBP*JRP"V% %<O0f!3M( BTpr6l6hI@DPbf0x KDaB,AND fCh mg<2 -[P Zvk ɓ'FFFggg)ٱcG___gg:}?O~w};&RI`ppp߾}7tӡCZ[[Q8rQ B!B!֩x/H Eʯ B-bH$J X,J`"4 ' D"FaZ] D"J%d2@ 7RnJEv8( \N\a IDAT* 63@K&e (}|Z]@ |C"TAX+A? WaXC/(I\.jMkVP'q`aa!յ0jf)LlHN&V_u]`-x~7|_2}YPSԗvWj&m ڌ \Rh3 fd 4#\.ݾ}{__ߞ={ك';{gCڵUC 'mL&k=CD;xd2۝~3j TB!Z, ~20. B!z J a\0-H$V:Gj\ "zNefi&BU^/لF X)!>IRACVӷKRjfvCI5FA\e,b68Rj#~yF&;ngٲS, !~?<<<44tX,&vرsNv _xᅗ^z)k_wv6Oڠ(P(w8_{1L[s^/g?KAB!Bm4t:\BiTʮċzUƲULK$s0$ JLF*H$ϗ}pDIq8!HR)χz"H.|950upáǓd$Fd2=!YgGVTp\p,H$!ɤRP(>R `Tl0 B [`)G6:],(PTSBD0o>XPZV(l=;`,a#%llX+(+Q%/2@Lfgg!]C P*7x@kk+۽)>}^{[obַ(zR0i!P:eGuRJc EӹvUxRlll4 &IәfNg2zdZpB,EKKKtT*A 6ĂP(t9FWa$j`*ZkNsrrrjjjrrrbbbjjfyPގQR1Vpj(x~l6hnᆾm۶q\X#N8qn߳g=OX_~'Bw{P>OmBQ_"voB!X"XvLhHx@ @_&j5`dfWP(3JCܸ\j-揋+flv}aaaaaf-,,8Nr2 fl6[Vb2؈gE>}),Y H_ ގ!( 'O(gǎ}}}9D*l,4G D2 ñX,LFQ8-qHЁD4FD"}XX, T*D2 o$ gIRzZ@ XJBBP4bP(gH$RRX,JphbRU~D"eobuuu* 14pB%Jjo BzcAP>x< z`V9=?XZFSSSd9ECb!)Vh-,..[P lvvV \s5qW׳|޽O=}v_P BZ"QRBP(WPkǗIŃ\.@20ÓRj`bVQ("E蕡n7|y.hZ-T"mNjjFQuuu>KFgffgff `cqq^FF[[b hM3gЋ\@P($.$>>666:::>>>>>~X,FQFٺukwwwoooww֭[u:۝݌l6ѣG&''|OO7Uwԩ} ܹ'`GնI6{g{9裏~k_۸nssT,F]v@!BR$IXDaܥ BGrBR)A_wP(%##񲃘Er̈,dNXt\d 9`[,d.ho<|>'A}ffkXVlX, ǓBP(nЀDyh,-->Rz&l6yҤɩ o9>ѱ$Ͽ{|_+u$Bi4lw!B!D*Zv2D"d6iDt:DoA\T BX,L&H$BPP@ lR)j6A /D"R3Z;LTN$Pd2 S cJDGrP^(rD"'RQ_RPud2_)r|Z.YyRN_C6J23ȏr8B~T*!;`T(P\i4B.T*a)J<0Dv{UlptnuuulłcT*566F4x뛚H:_g4r-Fgggo{lwWr=|g/v`Bjf>ʹvv}qqt:EALHRH4L&h4FŢx< I[z,-1P(L&SUcҮPD1===55v)X,mmm\ Ek~ujF.I.PZ,DU Ϝ9s̙ѱ?*?t:FרX,~GV=44rx<ޮ] ]cΝ>֦|7ܶmM6U7x3SO=}m>RoEpB!TF#Li/,sdG!W]2q׻z=4\.!u!hh4BxccV5 Aj4 Fh-iIQv9u1d˦]6DӘEq8QQ.s\dE t"þEI$&H"b'Ʉѧv'&& ZٳSSSBX֎lԄӢhhd2*jݻw޳gϮ]R)}8>СC?Z}[K6͖~3<@?{ųqmNWB߳B!BhuDd2"H2d"`Ṫ/dKه%%E"!@ PT4B!ͅ`2L_ 6bu\l,Pj*+q觷,>iP(D"p,bB!HbL&d"Oa7!:2VE@(2S.]heSsJ?!&Nr8V ,+D=edb-rZº<<цC/H TP{4EQV$sTYP׬]XXo"Pl6|{]ѣG!]ӹ\ __jpر/| _Wӟb3ZEBhb@ XZF:&UWWpJj!w2JCCPQVӿ]^.fXhF3^M&TˤhEp8 @^DŸ i*d2SSSgϞ={T" E.:;;;;;;::, E?u\:y< 2njtĉz^HWo&#<_馛8۝b&L'Nؿ~zlh3_:qz] - BKDBP( H1(JRR4 BIzc19d2/$5^gy_t>x<;͙xW^yG[ѦQ,R/L Ssl!B!f $ゕk-[__%Z'BP"xX,Rkmmew˩S_lwL@!T ĿܥPu:]k( X^eY^6Kd755ѿC5 kY,zjglMモ'O|O>d{{;=BSR,e2B!T={5Ewa6cPANACe2bQaBUQ,a@G(EQ|>l6323JS4Pe(sss8Y2!5Z x|bbqܑI8 rБd2 v;j*0Ѐ7!髡1=zh6Uջwh+R"O<䓯h|'pTwI`||Gyw}Сk!:yz~jB!BUA6|+O(m ! qjZTP_yuZ'|W8!0NTV8y"J(=3Tg~xWWN w,w%ICC}R1[P0>|Z.qb %qALمlケMV4XlrrlAEHC Xt: \.@p5@W\k_#haBmFLfK'`0,ЯxJ Ɔov}aaf-,,vp8\.erzfh2b.J$q>{^mz~#!RTzFjzVj`0@x'''Ϟ=;999==m99{zzI?UWTc~T*EQ\.d25RSSl˕]\.t:m6nаlv=PrfsSS9蚛VlƅOhu gώOLL|oj:;;;:::::Z[[VP(>Mgggy<ޮ] ]cΝXBСC^~eDriaf?<Fo8p`+z{vB!L&C23 I(p$+H`De, !(8EM4\fYכf ^tx! U I e24~?Y6 C_\.g Q+H]p8 GP0(BN֟'Ek'NOOT*ra߇Bcǎ ?~<*k5vUcYB__|H$r}yNeatM ifoB!B K!G"d2I6diOIFcT*tԵRDPBr5: (Ћx<g8Iv( 7}:577Z-DEQ`d2ǎYݻ7ߤpA Zb<\ -.9i@fm6}58iӓ p0Pdh E) d ^(466r(D===łP5 }EnxvwwL&6#}ĉ8NMMr9V{UWsǎeǏCG-300wWHRIEg}_, ;&m^z'{=܃ף~˩/~_ BmTH%m(o!Yd2Iy*Aڥzht: n =)H$& 4Joq1BR(r:d1M]Z7>P(t2 D"j$EH6fϓbP(J(616gp>Y?&kdLv嗓0===F΢ lll 5&''<ꪯgk_m6{Gu?L`( o׿{L׳)Iv;M}_%voB!Bhcdvcccx A Db``p [,>|_Q=FձݕځI!T%tAO(B!VS69~XDq2 EQba41 π6#E.1c3 "]9WW[*n۶hmmZ [m+ erꢿ9l"/ڌ2 Tcwi0;HbY$7+Z߶mۺۄR?Ϧ|;wuWCCCg&m<~^ݻGח}/h~;B!IJbɠf]Ro B%HrL&J)J6D"hLJ}\`Z0:i6 d ȑ#333<@uz6bˍiu}}Nc b28{l [l)d pXPTUy:H$Ξ=K&M9Tpյt)zMcc#@kdVm6A s56P'NȈ $Z3Lcc#}\[޽ݻ2ll6{~;`FYL^{wq9'm<=MC8Ϝ9s.EQ ]vYoo/V:BtT̙3N=}ӧ0˷m۶m۶+BѰST^"}ݡ> F(qr5\~X=r?{キj36Og?>x-v'eToKKPHUB!ХUC"Al BD"Lx /bUYSӟf W_}v__SQA,{嗟|I>s=dBx?<avVUپH ^&E!Bml6Bx<H;d2i" 'e/ DT*%X,%bX,T*hX {FB!J7u-֧|>D"xp8 `@ 8H$LP(i JɩC.6к8ᨏbP30CڌRH[*ir8?@ CB!WXGp8 bT A5L.ŘB8px=:::55|>ߺukOOOwwwss:%I ΆN> cccccc.򞞞;v+ ;6/{\.W]]]wwwoo/Kwa4&$ ;vw=qD&?_y啧zr}طolr6Qٙ3g{_СCl+vS=G]u!Zc$"%IXmh4L&c\@*)HB;T*P(`vH$Bb3" v~@.P(PL&bijjX,І vjSH$¤ Daq\xh\V$ɉt:ۻ;;;l}*2LKKKuqկ %)ru#^HdzzzN'$jp\ZP'NLH$BQTcc# ۍ\|_w}_E 'O [׷>X;\??,>|-bQOŏ~}BX,v߿׮]+yddd^juDLڸ 3?0 ػwz#V29WMq&ok"/z%B!DRpMۤ8~0ؤ D"D"!.6ldjomZjץ҂E z= EmՀ3*_x(>V/l5Zr]Y~,Q__VY.??g  ۽KdX(&wFP,laܒ440 bKX#qa۳,EQa֭fL&|n Lw߅tӧOroq``nh4lw]w䭷`/aBGeX,VPe2BP(.T6^%Pܹs amͯ [;vQPmf~|>d:FjVk4&qN333LtuuAhԅ]]]MgI$})uAB%W\Aޜ=`>:y$NMM Ų}+n_],va;wꫥR)DLb78x޽{8Vg6ܟw{w7?l+r|>wcǨ瞣ޝ7]?ei6ݷM"ĉ̨EQ@P6EAEpwdxW+"`6mӽi4M6MӴY1IK)m?]?$rsYyn 4bPool&/0X #$$$00%  N0 \׀d@\jLG$rv\A&D6}vIbQT#DhtttEFFzЀ)p'mGuF?8$ruvl6RlrW4`Z B.WTTf$IzzX,͛|c]gshfϟ5fyݲeZ>p |}}nצX, blw56F^sϭ\<[zjt4B=8ML'7TXhhć2L5}}}E_____3 D^OxkbNӡO\w.B5  C7Bm~CCCCBByf'ŢFO]!0c ا3jzX%600@~`HHf$QUz{{G!X,P($g޸O1`63 *cyNwLL ^wܳ4\. J<\.ollB$''itt .L&smd2LOu {饗y晓'OT P 0% oDGEE]Tq@!\|aix?>>^*\rVM WTK.7tQ> L}Å6w&wB0##3n֖38 $$$33S&رC"D":NucVUUUYYYUUUUUUSS388Hbcc~ጌ DNguuu5===s̑H$ׯJЋN rGkj <yyyT7 >ۿUUս{ԩT[fs}wH$k֬ٻwoxx8M]axp1F#:~vJKC4 t< / 7s)U@,l_a~V=N<"944'Nx< ;i!H5jjjD \`X%L&CX,<~i"Iaohhl6ѵį+V8Gu,588(ˉ%0dRT"̤1~Sy,lu:ϟ?_\\|۷////''g577oڴ믿~:Au&[kkkTTԘ|C'mknڴ矿ϟ Pݮ0?b1 v&M@r=?b2Uk#"<茹[pv®Sjj73xh4rl.G.O{1BSy,F(`v:NkDS__Q 1<3L8zʥ{bJ }fi4J٩R4M{{;r8L&S(EDD| wԁg9DD#$wMDk̤S[[۷~[XXxYFPPPgLEuݹso 17`hS݈i 6f^ۋL&SOO^ o0FfsB:d2 FpppTT`2!!!t:dP:N&탩L(zk 999lMBBBBBɤ㩺z˖-W^1 t:W_mlldXǎKOO?qDuu5\~_P]]ݎ;RRR^L[Ν/l68N٩St:Vh'|||\.r999\.内s\0l6_^^^QQqU˅gdd<)))S^n؍Z!ŲneXL&~w}w!?S*Bh``wީb2.\}v///} W>SK.=qÇ`޽'O|'v99wa{ /-[ѣhV[RBh4Bl }}}Ăd2xapp`0 )CxPhhhxxx`` AAA 0 L4ܬT*Jekk+>T*}¢بk 4&7|ںm۶M6EFF~ᇃ۷o/))DJ x{{[,={cgwS'.t41Jш<O$3<O arӀbU(CCC>>>xeRRRRSSSRR #c0VWWoݺ$==W^;w.$N<tr=(ǟ`mmm> edd1?HNooo#ISSSccJSl6.|r"Q#** :O@!|jz(b;$X, T78cǎ]td~}2򕖖O|Mssٳg ޶t: 狊.\P[[㓙qGGGS)f?@ ꫯ.]:2 }GÎ9k׮7s=QV믿끁N9rn{ܶqz+1L"|ϟ߹s… N IDATe2+7q'pvԩS~~4{觟о}hhH[񚾾>`0U<`0L&ׇLx9&&F"X,|u<=88x`!h055.pwq «<-m>u0'SW 1Un?b0xmx< wg ,a0FsX.3Kajz"j0E ˴Z-?zbB( r8kq8|@ 0!F?ZޮV5 qe OKK 8]#""~%d[[[ɉr\V#h4ڐv)[ ܐ~[oݺuL&̄,3~={lذLMMhBۨntEx!F;DDxq/0xyIc2Q(x  4!_Z"#4m{wڕZdիW FKNNŏDvjx^&*wFfوҊ 'H2xTyF;qF^+$$dɒ%|FkllLNNxO'!!!l;S z׮]_,[lq:b2rssjkk#GDގ^^ZQQQWWg_̌3Occciii5z7---''';;;'''33sD28}=Cr?~qqՆ ?hLld}Bfvm?Hr8W\),,,**tF ϗdRMgϞݵkWqqo~̛7o|zmf<'w}3oq!oo۷o޼y\w|>bӉ¨n 0 vww9FHb>脄?OׯoiiZd2Rػw/Bf11G(pf өVs?(8T}"y~)/<R.WUUr|R)$$$%%HHMMMLLICP(o.ɚmf*++E"؎ 丿p0 GQ]{G}T./]ܹsc=~2c LL2!q}AAA9N_.WTTTUUUUUUVVjZPttX,NOOH$iiibxZk۶mp8oƍnz5bp8!# M~љSTTT\\\TTT^^n2|E `▻u)]v=zZm4cB}Gs:ݛ6mھ}{FF V_r0¶ Bn+-73}`>UUU+Vx&D??ʽYlF/ n` ƞrfF___OOj__x:eqa`\cee|;%o0rW1=rppO.O<սp?.0.$j%Rܷ%țxF .9 2Fpl6[WW _m13fOT_;R,!P_mYֶ6ԄK;&&OUsik`s:DRpLKKH$xX,NLLȥb={kvT*d2-Bөn 7?ҥK{W_}L+N'z!TfZ fnOL>`0"##G(:琦2"Z ʒ^MuKLJK7RTTtWzjFFxO D\=zO>Y[[Z'O\|\.o5 ?ҥKyyysYnիiLezʕ+8ZP{yyHRD"RP( P[[eL>k %''~t YUWWK$z .[T _Z^ndjjjΜ9sٳgvtt.Zh…0}z)++۱cGaa… !HT" ;ٌGp/L&B7:::!fxNˋ削RTuXXbF޽^~᧟~Z,a_%vF>l6kڎVեV Fw%ny<-!Q]]/J%$N*I$?c1ē^{-[<#_v w344 GcУzLڰ^^^恁1? MQ}}}D \V_Lfbb" ShjjzjeeeeeիWdzɤwݿA??.@0o޼ ./|.?C#l`_en`rQZZZvv6χ.jO>ɓ'߿0pmƃ>|2KN^Fضy饗(6nf̓p8N:cǎUV߿N81¦2^Z{/JH5L!`05u+_weȠ[5\Y|q %.O܂tgXF` w}}}`0c3[Flvy___20?e 1: 33zb2c3u`c Y,V:;;O,wvvC|}}y<|>Yxp8#2ͦT*]"4Kb/K x Ҁ`z뫨 WmllELYtt .L&PtRLVPP@3Iiimvw~GPY7O 2-L`zzz\PP rXX8rl 0BL&۱c pҍ k{DH|`o$;v:twsNejt \37m$HfU0e9j#0AAA?̋hehЈX,^x{cv[N81i̙3?sggg@@ܹs}х Q@p Ş={>~A&MM @!s78p`Æ ޽{W\9~N' G7jh 3ltz@tÅg6 r9!oBM&@MMMӯutt ?>>>Dd^^^50s ǯB. R(x!DӉ.\!t&t.`W} l6z=qNۛs͛[8B%"TC.[ր(# ֋˗oٲ7ڣzyyx<$cG FT*nG'$$Z*ᚈ<l@#JY2`7|~FcFim` ]tHPL&s+W,(([?I|w_}ݓ0pu箻rGyZ6|73Pkʕsω'7nܽ{Dt,_5~SϏ~/x04ѣ(, 6Le5u^_>`Zp8-\sMNhh{W@ۆjjt[; #tQ06===xN^Ǘ]]]x\. fsIHH ɷlUN'.C^haaaDNlllvvK.}0fi5_D h#R! 罽%L&[v-=Jw}WXX?wuu1G傩n@wqG~~~c닶n$m0,F(U@>gKD_ûRpLeDbIR ==]"}8022Ϗ&Ou{offc=?{&\ n?w{y6|0 *ʥ';TINN^x1q:%ZCP1zf`z!T__5W3!!**ꡇ|t<_^^uuuFFJ$kJҙU5\2 s̑J3ZG+V\t>x饗LRʕ+8h4Xo}ΝYYYqfhhhصkשSҾ˥Kz,3f\TTԻᄏy{w}yyyupƑ5k%BhQZ=fDwS [x{{s8bYP gUlp8ZZZ౛^^^8EڃD t---iii@b2cgw i4vFR:;;5VU]]] AJJ 0@lnn&B5JKK,WJJD"Yr%DTb;=|nlGe˖lᑉ E#`Y k0BOOO0Fct/B!"d2L&qNX0.݂ |h[ Vy Do9X,u?44466֥+`0[`<ӂl`0 o<Wpׇ: w z5LyL&^j NE,zF<$((r\r\./LZ7".J:f !4:::z==bB!^ѤRi||<kL<,.VB4-...>>^*>$>>>** ===455.Zh۶m2,33jJrɒ%"?uP:gXpVhj5^jD!Bd\.wܹ<,rkX$vJeMMMuuBST!//Ht]w%''D"H w.,,x={f_ܷoOuu?yfDիi4ڝwމ!Ӊ 仹_UVFQ*jZRutttvvvuuutttuuuuu9|π>,XB' |>TUNB())xbiiիW7o,JӡBH,{ʾUV? wV2>t:̙/!6_tiW} 5 ?䥗^Z|ڵke2s=wH&lzj5UUUV7999##F{QLV]Rχ]zղe"##r%/^qǏSft &dɒC޾o߾> &&NJ+J`ş~ vرh"L+dddjy{b UcߡGsNh4 >h)F|bB |>Yj<̃NK$u֥x<;0 wzwq$/4̕+W^ 3r:s?'3] 644K&(JIII 0 LMyKխv=888++K*]V"$%%1 K1^UU/D"K'g,gh lU鬮....***..Ν+J7oޜ? ^n|~i@p[oupݱ #|G뮻vڵk׮ |wm3wz3#~cǎ5kּ+=;Sk׮G}tF*y-haaaJ* ɫ- ,S H`xL:W7DBi+IHpJ FzzD"db&;NCCCΝvT*]rL&7o^HH ;_~%TT9NgZښ<5cI bt:[[[kjjryMMMUUUmmm__B$''"()) js.[SSIMM=sLZZZ}}5kn/~ C(^p!33!f ٳgkjjvڥjPx-򨸸:"T*U{{{GGG[[W5 ،p\qb}rZGk^9sHRTȭX,{-Bf?裂 .,_h4644$$$Xvڵjժo222zzz/^bŊK.:uwqv0/9r>h6lxwO>hѢIG֨l!!!YYY999iiiS+W.]t˗/9N>;gΜ\>Ou3p8p=|n>lEEEZZLMMMJJy~ IDAT&5,XPPP ]c|N8}իWOrt̸y4O>&%f'|jŊ/Rll?g.SVNBϣ~H 0 &IVwvvdiW02 '3|>9?~a0!xfOOB((((555>>V&44VRCCC"HP F#7wl6ܹs{{{/]7o\ZZz̙+Wao iii>şMlJ]Tj4JեRh4@  22刈08Y^Z~MUUbMMMH$iiiiiipc0,YR[[lܸqcCCw}5#H_Fws?GQ]322N#BZ6^^^c=~2cBlD"DO TfXryEEEeeիW+++5 BgffffffdddddHk׮pFߗX>`0"""pOjjp?C#l`GEE26JKK/]hBCC 󳲲`֮֘Yt߾}۶mӻd#m{8ܺhѢfp8,YRVVO?eggQVf0?>>!4˝3r3#~oާ~?^xX,~gqMt~^VK$f}TL3(trd2<dx;`Z0u x\%;}`XPo Kh]l00vӃFĽ쏷7yWq؁q,LR?Ax?""VRp80$)FS4X,P(t_P1p8WlooDž;;;V%ATTt/H3h#whllE8QO|CI,++Ο??00q]wd Q@@~Lh"""n iq300ىkݧD$BFDDBf\]]e[[jNNNH$RRR (Y2hիWkڶ_=::'8{߲e<B'Nضmۆ 8:~SO=oTUU޽;77>w#3=zgEmڴiժUxta0Z[[ۮ!51TÉSākjWJJ -J)d؍ k={syyyhh#غu+B詧ڷoNt/ѣG> 55u޼y5233Wr&y|M:ϯZj7fMp8N:}ݻ&{a13ٌڐHDu;L fURjgitttKp\\\(xyq8555Dpc0x~\r=>>~˖-x=^h4z}6m2U{Z>:pF{~߈g{ icTUU۷>?|pAAM>pʹ"z{6l&O__(3 4.tKb iappp~e%IyARSSBH́ŋ%%%%%%}}}~~~YYYs͝;wH$򢺙`Ϝ9?O~~~/[򂂂n g}}}/ocǎrLHژ8oƋ/ڱcǦM` hr{qխ0l6ZV*J"u:O@@@dd$q@ Yp*p8ZZZ~!DE"1^݄`G MсGA_ ::cTBxx8Q2\ 痞NDk$9RYWWW__/ZZZV+B$&&&%%D$d2n5qʕ+W4559N%acF׌5̙NugիW۷o۶m 5K@D+..޹sgQQL&;zhzz:-?(;9BBn ^^ݍ/rvxTPP *?4OX5.DrKBL Aӑ7 sy xFo0/444D~/9V'י[A;0Ujj4N麺ZNjFzjr92x</PdeWZ?F2xM'?A.7tjgC\655*,F 6e||<^`#fhMMM<,Fs YOOO5x… qFff&!?o=sLff&͙vb'\$m0V8殮.|6/q0J$(++{M\T"TC"DEE2ã555)))ޘBUˉxfrZv8!___P+Pܐ&%%%׺e\zfٌ_xfϟ?Ά1߶m[DDϟ?^O Qj\>^Hژ۶m+V ^9!z{Qa!*-EQhX(=Nrl6p8xcEl Ffu\7Rf4zw1q= *opCpߞI>>><%r/00pm.\Che\mkX,t:] TA.;^Ǖ=. Fdd$Uݗb4J8 Iӣ}G*.^x[9 /9r^ߴiSO=rnICR߿㉉{VLo}EP<0F܌GẺ\.7222** CćB!/` 4Z[[jEX,DB `&ZPkkk[[l2B4-,, ᳙pN NW^^~ʕrBalvvvvfffVVVfffjj*3W^%2rycc#0X.\IDk$%%Qeɒ%?Þ={vt:/_/8p@$Qݺ)GT9s*znOMMc nLh?}כ6m:tLm ic8SNm߾cժUT7 L.T]+өz=.v5<5Og`\.A,i;IFH02 ՟HpY```7AThn@ɄK >>>xwI"bL& cXT*M?\m}___.;\U} fFy9ĂZ!:zs@@ PHBƑfS*A*[M iO0  &i b1Iz`dʕ+8]QQQwqL&[p@ `ڿ}N:l22ӕ,׮6b[[[]JfCX_y`xeij5Beff;NbX(RX08\hoo87Koo Ο?_\\|E"Joy͝;7""6h4^;%%jdggggg3 +RYRRRRRrŲ2d2sssΝ/arfhoo .\(R) l6_xum߾6(IgΝ{aZ]@Vu+ze[A+!D BP)\:(((Mdd$ׁ`0444(<^1"0j#Y]]]z\.3g!JX,-z6MPC5q흜LĀR]i <h 8W;4;}^D,YzjH4!;wΝFI$ϟ?5&ɓ'qQ@Hژdĉ{16lؽ{7NQ`<|1/T`ztQ7KՒoq8Ct:.G 8 ` l6[WWK=\qC!Wucv>X65Boӗb98;/@:13=T0!E#**I)LV N^A1Wp'wNSVA.qJJ<it0᪰$5|//X"N`zhii]XXxVd2,Y"d2 kmݺĉ=m@ɌFc]]]}}}}}BE'&&D$He;!+++euudDiii$---..u1L4rOF1$x$P@m c6j5FKMM-((/((c`tww^xyyoT*MNNC` t.\hEEh _Z(2^;w܂LLu$q8'Ox`@@O>uVa-Z[wߡ+KuSl W%cL///@0\|( 4et$||6Cp|xx<e0fkZ@t8pK "΁qHp|(c0gf3?FBBBa{D{ `joos{@`*3Jr9\T`BcNGEEy`0Bq1!22?%.\5x)O>8xΝ;n ?H3D___EE9؈C5RSS3`Ngss3ރ奥 ?-- )bdZ[[H뛛- BN'$$$EDD ٳ%%%F1 ͅ)`rfRqqqSSBFcP LANSP/KUUf˛7o޼y233a6rәϛ7/$$It:?}<vJIIQ$mP𩧞\bÇ!/DAAhB`Ll6[SSS}}KLL'Fm8;f<'jaWL&%N/10Nguu5q.`0HI rN)wllH$JNNNNNƑ`T7LIMM0LzEEEVU,C UΟ?7|#T iW^yرcBgyGnӉ|-^Ҩn 8UZFh4x+ IDATX0 KU򉫸>L`ZVFD뻺pvȽχX#I  P>FDs58 06Dl6___A$glr@FL&pGpN#w,M'x:(8 rɌ.E#<<RshJCRT*Z٩R4 ֈpC\ 1-Bt:]$gh$Mp3p+W8Μ\",///88i[l͛_~e@L&Nkmm䤤$<6!!ꗁMTVVPꆆ@pn!|}}n,GkkBǹ---80dC5խ3_KKٳg n-S333-ŋDE:r͛!͙3'<s iRԩS;wTTVڿ?ϧQ:+VEGfDQa0Z򊍍wPx$'j455)JC)B!MX,r^0!???"ۉf)n7>u.]kvٕ+W_>b`d0i&\(d2YggnwwwOLL:Հ)rTF\\Ţ^Ҕhpm1 \QQQ]] U* lMMMT 'p8Bއbߊ9SChuu(*%Ill,5ɓgΜx\GwuN?MV^yŋ]A;}˖-F'شiOݼHK Y:BȹX,NhܬP(t:!#>>&%%AK\KFhR1… DŽx l1<[x'$0Z˘2@ ù(h~0555Bkklr999N0@f9N*+((0>>>t׈!… ׯd#< QUUqƢݻwgee]Njk7ILBݼSB5 ?r<Zcx<*K!>@EL) 1lS1 !~~~|>? 'v``'!tmvJ>8nO|}}#"".qL" 1ZSF Њw@}B.bhӟ2 \>l]Ob\eR4p'BsfllKRa R),+:::,, Xz]jU(+4fԂ5*Q#666** 5N>rB\._tX,˹^Kw6ӁC333a+|5zT ZZZf[\\\ZZZZZZJJJzzzll,ɤX4rԤP(l6\'%%%'''%%FPPjJť:M(cz啕%...''';;;''G( 䄨~^bb#yLќ:u www@Ɗ+!UWWoذh;wϧ"4&m8?p׮]=3CΦ̙3lD"Q~~>ko566O>={9¤ gc8A9!xT*LJJА:!!ҠnR(rAB^|>"t :CAPXֈX B0""2_v{MM *--UTp#Hrrrpknn^vmOO[r dX>۷?/@TKw!cL5&H󩖗[abL\nWT3å6d^f4 &.;P0=""b#!622{v8)AAA;!ft:V6OՁ@` :!m+44400ƗBFQVSY0K,1RxBBBBtX,ݎT ,+::z,pׇ50 4h!B[BBZ MdXΜ9- fttmVXXl2.Kwh+V%%%!!!t.# .0i.~…Z֨4@;^`0!5srQ.744455zBHhhhjjjE 9ӧOnBa5lZuuu}ބb8)) "d2Ο?o]P(.b9w\YYYQQQYYLdHGuttlݺ111v{L&EINrÆ N*,,ܳgH$"t:?' tBchhA&dF"724 X湉 L8kmdd8Yl"WgX:;;[[[ EKKKKKKkkkoonwww_pa|||h777F777[օ J$`Dh.LO1'991/>>ݝzt:ݹs`jtL)@NhbbfŜ?~tt4((hŊ0/+==s\7|8p ::r3¤ gf4?={B^z饧z {K:~t; F!\ĄFw}}}FVC[)LfHH4n|>`BZֱ3JU'44ㅄx>>QQQ똨]3X@i:Md2cbbZ32284Ǫ!]B^;"##. t9TWWf///H$.Dbr9VB333Asf555Q] d2Y[[db0 .0bldMGGlj'`w{{;D["] !@*P89ӧOCF]]` Zd ddff]#-Snc05*j۶m#""nݺ~z|*0iuuuk֬ٽ{E93g?dt|~AݤZ-$j@? . O *m3nb)))-^VmnnnnnnmmmiiQ(&b$$$$''SQQQtf---S.T*e2466QWhj\S`^V}}l0@",Wd4?/ܲe˖-[J ] &m8={ʃ>h/@y\VBȹA+̾>R[CSl>ráOnxx8dlB.h4T*hMPM-  CAXXǃ *\ׂۛ0)Dh@l&&&`O*g:+3~xz+ZeŒZ NH R4p(@ՙL 0>IkA]KԷS3 d텣GT*ʞZ |>r"##|~xx8|]>NvӀ===px؋.F4R*}]QQQiiJ(((tLۃbYvmqq?Jw9L@KVWVV:$pܜ*$ 11#FcMM d###T;*X=h\000@K(555%%],BS)3gΔ755B .]tҨ( Dc_$wa2IIIG@,'%%'8rN3{B! ]0)1]9Vk׮?w۶m1{ϵ`ܸ҆qcww<}vG30IYII!!!t) *#\. BBCCY6GhlNj&l흔DEݤDDDrQ*J&9Q5L L&@Nnrj{zzR]><l&*L&L&///@x <6=ZB iii~9+LVVVl6;''fdee] vmmmk׮.AN 6\Rܱc'|hѢW_}u͚5 $ϓoBf٠5:Q Ǜϱ/^@@!tFGG{zz.s``d23aaaAAA !6 0hf3[얋 LpsGfsOOeN4/gHRa{ $$9x>>ehh>Чlg:Ŋ3Xۀᘉ 4::Z__k3A[[Cq",//] =_~ɓ'/^Lw-4L@W @XR Frr2!BP{L&g2qqqtW泎TZ__/JRi{{n9-X]TTTRRV!Z3??_"4ϟ?_^^^^^~9Vpbqnn%KrssrZEJ޽yyyK, b?ǏYYYp|ɒ%ݻw_~Gƻ 00O>z{{id6?ӭ[?//E!׿Ib"u \jU(ԃ? ө)))8K եP( BhjjtooDHLLLNNs{v; EE===77 &%%%&&&$${]2B399YSSSQQqܹnBHtttNNNNNNvvX,hT'u&kkkkjj`bmssf YYY5::,' IDAT2lt /WPPx>3?Ϗ~qZXD*NK#gc6GHאJ%&&fժU˗/ @tSۼyoyȑBkA`iJNV3 P.!g188XSSSWW---V;==](fddddd4{ZmEEl6{xx@ k#'h\P(X,VFFƲe˖/_^PP7Ь())> " bD"@.ittr5JKK+**F#_dI^^^nnH$ޅ N8qSNŭ\rժU˗/Y >7ްX,7n|' ygyKkxxRzU1 {ݟ~?O$hOK!l6d:x!JGFFX,֢ERRRRSSSSS.Bd2YSSScccSS4X IIITFtt4dX]]LM9ddj2>D5jkkM&oNNNnnŋCCCYa;::P \Ң멹(TFdd$ͦ^fdHxaaat%Ҳ~??l\?>xw܉wХ'ڌ}ٷzk.AWrƍ'O,,,|b1!JN$K] B!+.di8~YTGriScN;88899 {DEE]7nPPFȥ8#0 w <<WI#了JOF``'/!tCPW Ӄ4 ,> `3}\}Bۃsl6jx<8ĉwr6v"uḦ6, 山!!!8YbZ8 X … 5bccqrNՐqܹ[o;g_y{G$Q?|_x/b4ֆ+ɤz`@ee%kTUU촴,HOOǐfkjjda ka,vAj* xBG R9'NT*|Hp.gQVVP(233%IAAA~~>EBNnr-Hsrr{3;rHQQQqqFwuWaae˸\.!W211{['|. ]}=S3e2s_*o^~~y>@Wf#goo"] BIJR*ZC&L&??LP( FhLLLd2===fb%&&RmA\\EFBP(d2Yss\.okk3̈́(HINN`EJtsMzFpgJdz8illh4@ɾtЬYIRpD"QvvvvvvVVV\\&!g666vܹ⊊  Sb$Ijj*>pu_ߎW֭[駟s=4_AAٳgm6b0|O<1UUTTaÆ5kڵ+>>sѣ䮻C!'ױa!dB+Gh~3&|5t 2!Y"L&Ej:lj4 {r8>O!Lp Bh4:0hZR 9|-ooojx0P |fiZZT*$קhN. !!!02@ghhhHH!t.7!$MgH`B:41&~k2!~~~69DV{zzJ$HdXtn^EEE+W>|-BOz}=tWƙ3ܔK0iBV5, III\<66d2C&55ߟJѼe2RT*JL&sѢEm~*]t 4ǩp ^b h"Ӛ7ZD"^Bo%%%EEEz5X,|Ν;u:ݟ{.$$еxԲ GL&oC=4Ukk߿_ +k׮ԞCCCsYr1$> n&T6)))5kwwb3+e"x{{CV"ȵLWWWMxJEχtt|Wl6466766644tvvv.:k(tk,nmm5G(3YXaKutt8q&ƴggg{x\. jzu8?<~}3!! ۿ>:c҆F 5ܴiSggE(ì χBۛѬXvCf3xW7nܸcǎ;w>'"0<j(T\اB=D A]'۫V{zz4MooVU*0DR{BS숈.;}XZ( Np>V4<<<=`4יE`m\ZV*p6h4VKgpVgprf6S4rf$4h fXT4E=ȵLbh}.\r[n%88_ @ xAqww"c&"I7 XSSS]]M",\P""@찃ett&ᑚ*233Bazz:9Dބmmm6-<<\$D"P(.366?|䚌F|3_|񩧞Bs5kl۶M ])a CppĄ Ɓ~_UNiӦx`۶maaa/k6Y,Oyyyrr2ݕ"WC & #+!!!Z&%%X,+EhȁFL499f%'''&&dk䢆d2L&kll卍Z`@SSSSRR|>Ţjmmm'St3g@u}}l ˃v~~~7`266VWWGe&,X☫ȵX,&d2 MdddTFFFajA]]`)((b0j5+`gd]ׯKy$W688w?((h˖-> LKKknnZl6["=zooL#B뻻T,>Y???>Orlwf ۔r[f;Wjф[TTcL1["ƺf<%pX,Vtt yДa2?<<|1 r]Qcubf###!W7>>۫T*'TWTTTDDDDDDTTχ<QH;__ߴ4qqq9ɴwĵk^=zXxzztBPx###aaaS~`0ȵ`Ƽ288xܹgVUUdgg䤤]&B7@[[O?o_ïPf[[[v{PPH$"H$2^9B*T*>ڰl;%%%11LJJgΜo~T*7x2{LbՔJ6M(e^^ÙMf㏧O>{Gvv6l]#)L^{m׮]N_qlg /p伩h4cǎ=zĉ111VZjՊ+i.V*//X,&GgϞ]v͛-͆u}TZ8!t:Lqu~ݻ-ˣ>;P܂***-kɑ#dJ잃3UUU@E!DӽׯOMMT*!o5r``ى))) ..R#EMSmmm 444--M @M]]< J{zz<ٳeee Vb<099 g/0S>>>TFjj*>0EÏ=ؽ{]/SSۉCtX, O> aRjD"jjAxx8"zl޼_Z?r555]Xf8pU}˖-HKKK-%_}DW` !!Ϗ<yyA!䒬VkWW׌/2{zll<`0:;;wOTTԌ1===}dU*Ռ![- Ǜ"fsOOO^0K5ǰ=捡tҿ1! o 䢦 WмdXT*UwwcFOOOooN}<==####"""##4|~PP#z=Ùz2PpC$''CSxlRu뚛bqUUe9~8loog2T|&E>xgE qr)r!vB(///+++//W(v=::://5B!vChܽ{={,KXXRh4ϟͪT*,דYeXryuuummmmmT*,+))ItQff/ݕ"4^zi߾}.d2ٔ}v{MM \ X_|yHHfIRH()))(++ gK9VQQq_pfyzzK%vww9s5ZZZ,KLLLAAHJJf7zܹG=zkٲewymOwuȅMNNu]?#Aa`ΝV<4:}ڵ_|%`0۷ﭷvSa111Ν r!'NsvwwlWxb.Kwfr<##q0mǎ'w}?A:tg?%yӦMǏ7 6?ڐȷߒ] B!5<<|…&͟ IDATR- !{QBfS[OibE&BhOOό s'''a7__߈4<<<}kcX/:R:|eZ5 JRR^Fh=}}}|~hh(r\.XrQp_>Pgz/(@uߟr[X`ABB”o޽{_~M6]_dT"5Oi@FerrW^y7 je2:nJT\\ m6VX,6/^`]#t=l6ۢEf&`X,-22rkC` v{eeeNNεzӧKKK C@@@~~X,H$999بWv?FFF5<f?NХd UUUSm{{{gffRoKuFy>}j`0JeXX!r5GV.[]'uvv_ܦɒh"pYb ;K"tyO=ԗ_~bt\؆D"x떖T*"^8lF](C={v||\$^VY5k>|xzd4 d ~wy4n,\촴boooZ CNjsy||  !!!!/֟$7Ŏ .H$p# NsJ9hiiZ^^^Br5qxGئM>C&  cxxxX.˩KlR)vOX,;m6[mm XB#n_|yYY'”{ sYru}իot:3ӟ4Y3|WnJKU!'++kfgz)}lvddcl+6B*))j{GFFz{{g L&h"읍ЬR*׿?}(Nce:$\Mu,]u}}}}}}pV:Cj F|>N{@[hAj4PX_Tj450ƗK'NIHHFgpS:Cu F)aaaxaۏ=7gfrCSqpO1H%~;Ff/y+u88 8- !$,ƌ;ȥ׿noowly_25 Cxxի % Dȥ:t{L1y_|188 5:J~[};ȠYIsDW+Ժ)p\n >s SV#`2IIIBxO>}˗_/VHרc٩YYY&LOOȅ gyfL&q9.|g-ɓ'n[o5++ Ԡ+199m۶{O>OiֿG}1 foߞ oϏzzzu$3NZ~}dddUU8qđ#G{ٲe3&"tmv/rƦ*nnnV04y> hZz<<G? , LR%%%0qddN hTWW/ONNVVVS 222_|qOl6bp8]vOK3\.wxxoEIGGGSm,`0oO?=UyhJL~krtBn?rȎ;VXqYTeT*꼂dNM}Y* ^}s'n?3u>6Gh477ٳ?X,%%%'L`Lf_{nذaݳfC~ЇP~؇dR)pb?xؔ YVy}FN7{G.j=x;rgh4RZTdnj*t'lffomcdd1K6J$q-wm4NrRRd2i4^`ABB,OyѢEsb}fy˖-o&p\fW\lvnn.t;yh>YlYYYc2777+4ֆn$~;ii!%%$>jf&m̝]vko^fpII '//Meggc`yn޼?d2Sκq>>>ДfEDDzrH$y<]e#c0^}շz`;wKj* Q]]j69P(ڢar]ownepٟstU֯_iZKvL׀4[o0???99dqMj?od2=<<9NNNNAAA~~%K0]c1L7o~7۾AEEEeee"hw}7~YSO۷7Ν;x9+ ͽSNz뭄wwzOA4*//˻nnnk׮/]2׿'--$0jr uuu?pmm-\vtt\jgeeefS!#tUd2SO=u)5=YQ&544\pba%jO6l022bZ=<< Õ|Q2LRB$jynG=ĔY"߿`%K,Y#'QSSWTT]]]QQQNw9*ZbځHKK&c;vlX6j0Z[[v;vBWQ&&&o߾w^BxG̸Hqq1L>5 .H$066vn GG-ZH;6yzz{ソnc=SNr-tWn۷ܹs6`|Wկ*4믉7 aBj~7۷oonn[(-jkk?8665cACY`AddΘaaaAAA7!b9p;Z[[a4`2 u4ПEUUիzaeX _nݺkk91u8 7!.GӽĄje2w5Զljz`-==cl-:::vx PSS# R/!G]-L&g}ꫯBvD")))?822)O , HΘ~c^B X,j۶m~=zhpc殟_\\cl|<@O>ٲeAF`577´K LEk=4)744L_L^d t 4/gddP{gǎ4fyqd@Ǥ9?<* >GL~onrc{ssj$??[nϟ{Wt0Hh lNaL&c[jT:66hܺuo1=߈j04 gyfL&ΊFFFl6ȅP}&''//lM智kvvv'&_CNLL8qȑ#O˖-ػE i)ETP"( >"{FU eZZhnqM6;hr{s9{rAZJDb^y'NH`2׷oތ5Delf/Z/0bzIkDsٳgeT"bٻw3ff̍qBDFFݛC|())Olf5 W׮] DDD`B'.XÇ oemmmjjeՃ<$$W'deeM8ҥKZN{M6y.]3wÇ+X,ÇG3K0%%E򞞞={T.ѱcG\`[S__bŊ+Vتl;ӣG@?sĉ=R~*,,޽{ JKKY1\.֭[޽YX3wٻwrbK/4a„C&V ?<yzz˚d2wwF뙩bX\.7>>B3}_uEEBPiE\[↹rڵׯ r\ZNNNPP_:AP/˖-r U~/_|ܹ~Q&=|PK莙[n}cX*xOF{g\]]plwK\.W5 ?>l0im]\\\N+l\EEźu֭[W]]zࠠ-(JsrrO \.7887qj`&D"WZUYYzCo[ʅ4+x Յ4G02l˖-yQQQ  /lӳc:t`E!V^xbrM~ L|8iҤ-QID" wAJr믿V1?~x^?~dXܭ[~{ذa40r<iڵk>dg>-\0***333==Ν;wr[ r/5kI VAWf&G#FPdq `lRD\.ҥKtRJJJrrիW+++Y,VN}NNN} ~ڵ_~X,d{xE-Yg`RSSg͚:oX,VFFFpp[ ~s΃ bƥIb ˗/_|9i]]绻GL <ʕ+e2YKMM3hРG...&,6X]v) ;;;Xo;K^׷hj2gڵW^,**""6-$ cw:4111::E i$s.(.||[ ˦~y HT]]-Onnnڵ c~T 𫯾M͕H$O]2(PW&n`R޽{/_~-fI@tlec`ARRR,Y→:X'N|嗗.]x Bu .ODB0774P&~~~>(((Xr͛T=zHP6X,___GDD 6L5pj`΄B7|ìȫ~ //6TA.0s СCݻwIp$ɨQÙE5<<}ֿ)S^g֬Y2,YqF6dJ3_p8mѺwݵkW4XtwgX@#9JڴiSc6nLD۰an4|~MMs=׿?|>*4Cji UN(((7n\bbzre2À+%rJHHHLRk!jkkkkkTG9ڴicИB|@yy F/B*ȿqɓ/^HM3 ˓111111ݻw 'իOܒb)X)SDFF~gG ӳr9 WPQQgL2eРAk׮]n]MMkA@@@PPPpppppp``oVRRbgg, ѣGnbjْnذaʔ)6\B0%%Eb999oraaa24}Vw8 5u9Z 0a,]qq7 EVV֤I.\p&L0;?l\aaaqqqmmmCCSl6ŒuK.|7nXoo Ii\k׮sVUUiV8iҤ &DFF2k BJU*+++((hhh`֫JbX,) B٥K唽78{lDDDwe}o\reرM.Xmn۶gm^hU UVV+;̃J eie!W/նNmmnʕ.=Ih IDAT+gϞdsC}葝=h %I^횩HR("% )JwaS^1$ wqqֲ7cFB_~G.kjJlvϞ='L~J\!ܹSWWnj+b1zfۗ7}]sDB1KΘ1#!!hjW_EFF>3MҠ_@D=*--D"Hq\F0ҫWɓ'6xÇ߹sC)++p8*};I;" L[ gko]eeQn- ,OFF{NN56|A߾}ODX gg眜"Ҟ<o̘1oNZo&g2̵ oo&NԩӲe˘e|||Tj =z֭[G),JMM2[\s=7bf_{{{H˕ꚓP(+Xpa=|}}S4+##/''G(>q`=z d 5µ&Hd2p8g̘fMBD^"07l%&rrTE-V^^^]]C_Ph` Sl2j>}zɒ%K.]|9i|6̆> TZTT_PPSTT l\/^ϛoq/LJƞ?^:|>GRH$ UUU̿UUUO=ѣM]`r@_{@4)66V",X`,K\ BVhUUUU2gSYY߬cP´SNݽ{7s|>H\,F xBXSR)UW!JT4ŋ>SZBDRR_fC 򂂂fgg߿?''\.nhhhhhϵb|0f4)<;a(f@sonCC$IVVe6hǝЎg-=:8h\f\] _5!e>} %86jr͟??55U*r8>eHf+6Y'be0lkTVVkZ(8&Lw=ӟ9i/BN4=:uԧ~; T̙ezo޼ID+mwEX{D=ep-^sΝ驩W^MOOg"5D}oHebѝ6m:::j֧9]},~kH$ȑ@7nЙ3Կ*Mt(?'n)JϜ9cX8.B())a(,,ѣG( /\f^]?4ͤR  d"kXX ףG[n)h ǏoX._4b NS.. @1ƴܯr/_Ff+}aQ(EEE999w 5he6l6˕H$.Mb;;;#̹5YMMMmmKKD\_j*4bgg~U(`رC233B`%Υxz-37uiLcĈsINN>{lrrP(r,K"nLUN04@0toɧOfRT i`bO4uIx<^ttttt ^z1f LJJJM]^'$ٳR͜={pz/D\.3ׯ M]R0.3W\IzL( SWW^sww1cG]x)))bXbB5ua8NDDDDD[oXSS[XX_XX[VV&rrr0)+Avvvvv޽{֭겲2OOOӕݻweee%%%UVVJ۷op\"駟BaUUUMMMuuuMMMeeeeeeUUUuuP( "H*>x+msuɓid6"" ǁ իW+T!ggg߻w۹ 7aQ999(V^TTDD999Xix}L,`@\.{ݻw={6ݿ?99ܹsO~mm ƠIII wޭdòӧO>}H.gff* //cG9T,u… .$&&WUU`bm۶m۶KfFE˥ hSI?҆a999uԩSNOrPfR@ oxuuuee%h1}j>o"ѣM]kQ[KԱ~ܼH7(*}{177({?z$EKܣG=z( ߏ0a@/tҥKE"MU*0GG& ݻG^^X,R(hͥ;3i98q"K6q$"T6l~gy3fQuu oQmm-6&& ƏOD%%%Xfְ숈)SQqq F\k̙DTRRhL*Ih&H `l60[AAA.svv.ѣS4p ݸA2YCR)DBsQZ|%22X){{///S*̙C$ҥKBr9\NTWg"F6mp7m ".{c`lH yxx`b.Vƶo;7RLF;v@dmH|СC{3~ZԘO/Yڲ 5ghNaɧvʄ e}]D0>%4øqt48ADBKɦ+09YX:)`qh)CNBk[GvvڵTJ'OR߾TVfT*~KBr@D@cH DB:zX,xV*5kH&3zk4Oll,3fK~:vZC]pGX?&%%-X 22b={Dd᧟~:|fffbbA_ڵ *ײ˗/_xxӦMfJ6Ho޼ЫWSݻ7999==Yڲ@F3ZFu@@O8QTT:f̘b1k3WWWo޼ͭjڴid9GL&ۿDYIjӦM7[D\TT6=z߾}rЯ˖-JZ2"۷+*YV&;wv1i$;;~ĉeeeV±)^{m׮]Җ2bjZ֭9rdnnc>ӺaÆ>X,kGݸqc||H$Z|y]]]+w؈!l)߾ lԚ(ή>}͛? BױI:ڔVvIgJOVedff~q$&HKH QrrdPkmb?Z޷~h YZ]Y #x"]C$͍K )hS@ 46ïJ70!$?o 4A+5Z j0\ğy͚5۶mСCyyȑ#/_}Ke۴+mDBԳ'%$P(>L<رc"{e; Q`PBBhf3,#G6lZBW` .]p8|ˋ899-_sέܡ*"}AتkeݻwoݺucƌXCC2#tMi;T*UWW'%%5yS  i uy֭#rJiX[&]2aC$v~m*#hA!>L%)wJ70$*DaЩ, K`PSh)TvA<>>ڴiCDW\! [ '-XL6:Hz4 X,V_m]#rQ@! 9! V Usg:t.^X"".H&˗%eLFqqy*++[\{nٛ7o.((P}6%%%!!G.,j}UfvvvR/ꢁ5C^5  }%%%fRZRRBZiiiDrO>P(Z\`YTTb[0nVZA 4HuO"$&&_ $YlA?nêDP(o>fu] iiIi^7@a(*AihfioA!>LЦXǻbЃJKW t#0T04|.))BaIIITTa``,:ޅM;x|R)UVRb2XcKBr@D@cH DBՆfуN_~N&.lڰj q^֭ԩD"ٷo_||''zܹiiiΝt҂۷hg]]ݳ>{޽{?~ĉ̳;yyyaaaSNeq̝;^}|͟5gΜ۷oG'N U諪_ڵqƙ3gΜ9qիWM>k׮$"Ht{999͚5m۶=$ۅBD"ʧ߮];jwpp?oܸѷoѣG7*֭[]v 6hyUi޼yDTSSc6-J߿6aGG2H`Ur9s Fbٳg/\PTTo]O>ihhn޼'27y(..ꫯ222-ZDhQ|COK kaX~g="JtBZBӓ-777HTVV|ĂX+:!WUiV%C 8IOHK[w4ݽG>$f1krtiRX4` iͰ! ۡP(ߟoIcɖY MB!>L@ m 02#MǕK0$?X(#Oeۤ C}NQGK?g͚ԩocǎʹc)Ik@QI_ǎ5ތ"6X,R(H.'d2^hLh5_$=]FE&M)ssso߾ѫO6m9rd>}H=x<Ϙ1%Br@D@cH DBhrFMN))TRB{3ϐ^K_9H+m|'| ˫w6o1ofΜID555޲e˖-[ڴiܦ!==:u4sŋϞ={۶mOc,Ktta~;99-Xʕ+aaaDԮ]W^y֭[=sw+VHҡC.]tΝBȑ# 7n\IIɪUfϞLo;w^z!!!D4gΜ_vj!'?#oo,+??S B}sttT?E<<<>c6}UV{yy5*@ ޽%K 7Z{}]"7mԂZ 4___BˬϏXl͛G9Ç/[h„ ׯoHs06+cǎ͛7/;;{k֬4Eٶm4q0+eFzzzCC{GZ̡YYYW^}嗙_p8D$WԢcƌ)((oOsθ={ѣ9fT}W*f?sHtرٳggggϛ7oիW^ǎSAeyOKd2 ^fMٲu֖}/Qvԩf|bҫ6`FUUڇU322d2s!/"-m݋/L4mO- p8M,.b6-Oh Y؎C}w'Npuum߾5k|͙3gW?uʠmF{6m ǦtJ%,mud{{{w>(00-Z ` -Z4cƌiӦ1c`ߴ0fB͘554К5z/ C{ >\K޽[%B;wlҮ];D(oyw D 9D(<4BX)Tm0 gT\NZ㟳+FEEP(3=b?~O߿_n޼ܛ.cTyyyD^zr޽{l6 28;;Ύ̝ٛݻw1?O0/طoߴiZ\4SRRիWsܡC쀀"ѣy{{7ڷoᑙl%Il˭[Hsܹ344TS kbX&"Lϟ?͑cƌ?m^zʕ+l6M6zxF{1aݺu{Yp!u߹rc陛;a"jA,h2"##4gˮ]MւŖ:bqRR͛Zj0K:I:W5Q"VUU8qbz?x)ҦdJM] $ e1/r~6̼gׯ_ggg|[nDݲC˄vرcjQQ\.J'O㏙?VWWK$O1[2܉(66vTfffhhh4&ϟ'"YKDZ~_v \+0L|类_ND$]v%fe&M`gggggP''e˖XiZ5 %7NNN999cÏf1;e!@Y1t|rUKfXِx/]t…}VWWQLL 5ۯ~6A,-L{ QS@hSЦylJ?X.!v* \G}'JsR7n̟?>5k־}|ᅬ}Xב`Zh@Mc#yoUFVB! 9 "D 1Jj!#>>ݤ*-- |w|jODBX\.oֻ`Y[[UUUDۅhzLWXX|ÃZ`DKY "#-Q%@Y1h,;wO62}SNٳG˫# ͂Br@D@cH DB07FZicǎ֭[t\.߼y3x5sZt̏H$wa~ N:@G[nDm۶}Woݺf͚#Gj˗X{ǴrṲH-O׫.Ç7]ѥKԟҲ";w*۞„f+ȅ [QLLL ^JKKwz'X(ˁ%ʴq0+K.O8b15ڦQYnƍ]v4hP+arLٳ'1)DB:P6Dʬl1IXab DϟlVmt$s殉j1!!!IEpp0%%%߿%/EZ-_#F3iӧO_b[oܚJnASYZjB3)/&ǕK0$?XNeP$WS-0~KR"rDΜa,EGI0'h@c#z?~MTuY@@rQx i(Rk9p@\\?zj___"jӦMiiݻw۷oOo,+8.ܶm[ee#z;yW_=x޽{?S|;v `6P(MOOAMM effzzz2rfիWCBBFܕSl6;00p%%%>y_|j2f̘3g|w^^^F5LP0/<+Hxdakvܙܮ]WWW???{_ w5A6 05DЦM#3ؔ+`0c,5zNH"L-u0~Kׯ_ONN~饗+**^uI`,9 ㉣"Z2P؈;iҤ>l;v$zbGZufͅBr@D@cH DB07K*qơC}]P[[{YE999GDD޽;11jkk=<rȬHooo//ݻw++)駟n޼YSS奬jkΞ=KDl6C?sBB544tڕmz-Ç>|8--MS\r&_gϞ/b rvvI2o~ذaM#G oi}X1,}1\b&cэ66a>dXnf눮#ȣ&?SêЭ]3>"-->N;TDDdƽJ#_2hBz9z"Tzԩ'O矿Ç9ݱc'vs@EmY⫁-ckXai+m `MFbtxC0,y* 3C|,sVuf9Eh)R蝾mG^^^ǎ>yd߾}'Oc}䭎04Ct:"Y.O"(2*BDME TqFiiŋ899w۷or!7Z\<` ;W1s|`d: %cjvͬ`iihzCbnaGʓ(lWiCˑoWUU1M\./--MMM]~jꢙ,a|g)#U-p$0dam۶e˖f{{{?FxuYJhT0z6LMѥï7/$XJV c)f9i8ZS!9( ǐ@+ V(,,\vg~빹gϞ (T]]I$S:2ZuK-CUM86!ƕPUmG+;Zi3۱?V_p&aф#HKkqt \gUgwqvIM&&:lhviyy]F!o٠ׯǏ EVV޽{/^lWG6 L#ؑXFrVuavyAAAoM6M%#D۶m+--%UV >K.O|: XPl A 8BC AZ ]DRipbdjj#nM,VGF?0oѣ+þcӧ_?Xv}֙h٦ŋo۶->>m۶uwwѣǒ%Kp*s6 lFx@Ц4 m X a ѠBgޢa,IIb߱s^YyEgf \h @@rQx i(RVL^_pFH;U grv6~ڴiMտAxAUCD=z~yʕyyDdߡlC^ϯx۶2乚6#G^{)oDW ڵ?l. ݽkT͛D$LLT>(Wߒ~~%wX1t^dB!)!+W*,>?gbLcܹ.AhS6lF @+%4 9iSDo2$/"#-&_tfŅf5r!!|*gWhAh(م6kiO.ge+rA۶y])R"⺹U%&f  "R(4>E˛زL!8]X\,f;9Ɋ'N/ _JL*Y 6/yHϺfWb 0%6O~}P?dkߞ~u#+h׮"rܙyłk֭׿R¾ȑ3g'mn/7sرǎUlסB3 ݉ȾS'"5ػ&O}$M%\ZYhٴeӦ̓'WZ>]\LuKd~IOFi[/igߐGt<*S$z*8} M{Л=>qƍ ~A)4o+!n%Dž;/hu']/555yY^^^ooW_惂@H; wWx 3 9v^|`o@} B]䀀0"rDi @(ลD@ +Wb~oJg.]zW8&޺umt:?V6Y_}٢g}V\MO8w^yƏpBgKeE[VB}/++K7>3}!qe2 (a .Al 8PQH)%͊8l -"ܯwϼ"_;aˠ5|PxS2a w0! )ĹO {4= 1“_)oNDj7nܲeKOOO^^ Yyة?,nQR/ZՎ!݄(Hxm~`w|_D[BICza6wqAVښ} 78'xرcVܴiFasoz=s* BdڲeͧhݛQ^^y͇_Ν;Z/x뭷o˗3?+h4~yyy<̄ j6{oZML V>N?&&}IIIkjo(0LOBK! | 9sw3-#w߀#y< i ~QE 5ck׮--- 2e?<! ~Q 5|:KHG9F8`xBr,ޡ߳U2!dVKf#G% i 4R%D !Xmbw&n^9=F@@@sshFil:w4+|^|m۶|kR$Вm۶;wyW/SRy6l0L^lLEIbWAAAsٸq#V.Ilwbv;O>qg+s7^C,l>&9։^e&Y'R. $JqͿ{l8;E5g(@!ֹ[#."/vl*":f#jNn{cK$·z… wuΜ9յpBQ'N`oU_]̚5n/bww-B?n󩯾7㏇:k֬sν-Nkt:˲ ڵ?* /+kɒ%.څdZLxFL裏Θ1 |7.+i4` H*Pg֮]kK{.<7,! (ɓ'ׯ_||x %xBrD>0 HҀ# 0lB[ ǡ9@! BJ@0 \Ӏ @t͚5UUU(~Vl7A``Zw8b g_wGqq{񂠠 FMZuDJꫯ=کepl(ˊĮ*T!ccc}!pβ<9qePluDR>g{ X6In"%`hS%θ=gͰpF MgK5%]$H$}\+ Ng( wndcySn"έAY)(&7FD³ :%2:k׮ߵx)T׋S455[n̙[nwmooXӧWZu≠kY'|255^5kSO=B>sZ6OBvI'>|زVvu7wɽky/v---}Fv&)Y /Q$l`ӦMLI~ ~G|h3 +i@XA?@QWa rggg^^,ۃ4OY(,,|Ǎ7bĈ{.""ѣΖeHu?mYة?䩦"b jwbHx+aW ykIZ:n9%K|4$$dճg޸qcwwb# }'~f~m4s,믷y޽{Mf͋-bJmֶ՟wuu_^T TUUedd̛7/22] ~退+W6?x⌌%K} uByKi?8p~뭷5k֔j^LܹszqqN{gC56^^DzW&*.5f9//x˗մ|:i?̙3}: ,q6'ֽQ ކ>$ ><>NcFJE2RMi)Ȓ;}Nz3+3J}ё#Go0~m}iؑsӠ5㽃ڹs_׾sUT?+l2NTׂ;fgٕI\핱{ԹT)vv!^ qBB< Q,kKL*{L&Ӟ={,^VYr*|p]Mnn֭[͛7[o뮻\p 9Pr]/O[ㄐ$7ɓ'Gͧcǎ%7jQSEш6lط~;w܇z{vwwW:}tqqqaag}пYc9s&##_wvT& !k׮-//_jar2MxڛH 2KBBMLLLOO8‘6HA~ͱG_/(<@< cW| `2>'|[ouXlx l%(DAX4(3 rq<>؟l~@ >(J;iH#@T E@SVkZ]]m2 gqKgEJ Q7_~;oWTT< .5+W6m?PTx>HceҥO~?:ujŊY888}~޼y_~y``k%wsŽ{ƍg^j.]j9cKxGBCC=/B~~󻺺o);;[n6lXDD3<A:tV馛l?{;掎//{~꧞zS5556OGG펖l%L2fҥVZf a^ws=*++.\XWWg2¾VBj|gO<|zo~w+]Bl Cɮ4ɴdɒsxn3gj8<<|Μ9̏ަ(?6l믿뫪BCCkkkWZDD۝;233wU]]-[СC/o]^^zjb Cm߾}ҥ+V(//7 Tz}ze^-; #G---۷oꩧ^z饲+WϧƜꀰD؜@p~rXR%xdMǩjHFJ1)8umC_;t="_9% n_|Ś5k/^tEB<_$l$Ψ_}C;ŝ<>&B:::N<.Zh̘1ֱ7lzvpJ]׈XN- ; ;x7XT7p|S*]oI+o,u2n9J&,,lΜ96mZhѾ}7xCǝzw>anƝ qWK~k>vX'N=#X=j{aÆ= ,`'|ꫯ}?믿W'NBF[o[O=ӧ]UIBȅ :;;mⓜ "7(((`~CwĽ@{Q,]HҀ Nby :;Y)Gb(?Q`~3)޽{| 6|'۷o7 ֔|:G9F0l((@XY<o3r9_-D X.k#@XYOp<^S\p[:ظ@qET-:::lrw>#AAA'NعsΝ;-_VTT4e{ !DTFEE9lRcǎMJJ[&Mо}^y啐ٳgϜ93<<vm[`Æ 3gΤ?Λ7/˿ p;ضmۏ?x=z߾}/^ ?p렠 ގJrʔ)=U[[իlٲl2OmڴiSZZ,{]f-ٝByVZ駟._ܲlkkk>g)JBȌ3T*ͯl ǏYi.\(,,\~=moFV!q˖-6 gpIHHs='9sVuRaJ+JFC^BȰa苝~XT&''GEEUTT=Ts4OAuc٫eزҢP(͛GINN+//'ﰓF,+hNY:K VdM:{HFJ-ئT6( .uϬȻ9~yRHH6CT[Gjlw}-[6mڴ|rBΝ;o^H*QܻtWf}X*T)d>OIhpٲeY#1_fsXX!dڴiofqq1q!!F/a %|;6efظ~E'ֱۏm+ueg/3f)|S'}6J+j}?ӹsvmO?ӵ '%bs6 !,/ !|Zb4}E\vellhڲeJZ`xW\m۶[o˚賙o_~͛7tMn\|9׿C|$|XTs/^<9>Ci4@8r|*loooy>kg^CUp wt:]aa5kV\p7sB@p6 |֔t ( H[0 eap@Q`_PΎ9>wuuL@ I.xZU@Q@ \NFb(`_xvU \p[rT|@qE 0ƒ%K^yիWܹCxxxYY^߰aÿ9sfWWז-[:;;#ݙt4r5lذÇ/skǏ'Xɥ'n߾nkjj2Lv9sΝ;{92vێ@]z5S]f-ٝBxUWZn_㙽jꫯ!IIIǀndƪ1ثBi܎9BlU5QFw}|ɒ%K/SBɭ=Q[[K;[t[+ʘ=8T\˓c٫eO}syv9gI.-CrL >ߔ YGR)Hˀ8ul6sz(3JV۔B,SwZ&a *Sڧs4tf̘1;}! v )|S'}6%'?Y2DrL IDAT0||]R>|xII 8Ⓡz96uuu񁄄ï8p 99Y)|S%%%˖-[dInnE6ncy#[o]z5ǭ"##U*ĉ !gΜqa+pפB|#|$< L2s0`ؐiErM~9`8CC?mBrrhU% Di` 4pmQ 6Eg RrcsJq=9\s5֭ή~cǎ`4-_fs?--m*Hz뭟|Ijj%K~~ڶzo +|pw:uO?]`W__9s&99{VxnGh6Sɬ%\X}KWO&{F/^tjiڅݍOL&S}}}RR_K C]k*kc٫esHýuo9G.-C!Ɔ^op|LaaTl#>xSKSwZ\MHv\C9~挒 M#葃Ms5͛6m*++̴wA] 1I%oYl7\a ކ اDOhۉʼyy^{^v?>|LCB_|aqR{Y.\~O9ޝq s ML iSœbIRC"o9~J޾rŊs̩|W9\ ~WNgS*]/6œ~- }Lo@x|?5\裏|wmoo |饗!۷oF Rj@նfcLL !$44ԅ&x"D`_L8۵k룢f̘p|{˴A8U2dmVQQoΚ58% %w*d- O]qVW]v!_S1 w憐d^B&}JNxR{?~_Oñ@{Q^e i`Ҁ~mr|*ܽ{wNG۴iw1܉2 U8{ лb\l !+~xZS& 逈> ҀӀV# 6$r%Y.c3r vH4+Q@Di4p9 <2Ȇ( DEg x>EtqJqc_]A!d3gΌkW\nݺ욚ҿ/SN 6q'NTWWwuuB^f#|ppLPRƠ7o۶m|0o޼تmB=kΝ{/b/rرwqa$J9s|~zBȄ t:]XXZf^î{ۑ>k2hRϙ3Y)Rix{ˬ%s`B衷#**N6y[nj!h4wnoo6m_y£ʏUcWicƌٳgϚ5kǍW\\L4^Yn݌3KBȥYzzz8бcr4Z/Oe͙g3ʹZ !ܫϧ~ R8p>%}J}͖PSSu֢gBIOO:V/^|i䣏>;lnS]w]KKKEEEAAA||O?ɮ^޽;,,颹㥗^klgsWiYYYO޲e˿+"111%%%33{9~Y'Ltep 쪶.'{y饗FC9qDQQH>*[[[׭[W\\3f̘m۶f8jԨ;v㏄0 q={BF7oL[K___>c {(wSafsZSd^-wz*![lk_=_~%R9|Nחur>G'>裻+33xoۜoa}CƆ^oÉ4R%`\GH)k)|-qCsa}=ST6l`yȐ!7p?x{3JFqǏÆ Git:]ll,0akA9|͖W8յX_1IGa2]|[neƌ\*󎳟 $Pl>%}Jēu"o9J^0**jŊӧO1<$^3̭L8144t۶m~nB%~vvb嬫[dI}}/b&T' \U!#V  %1x/&<\4s  9DB~ϗ!Rӳf͚Boq >O \{?ʕ+-[6qDb.g%FJ%D̑% (W_}5::] gD{4?O~Ν;gΜ`^jB :!@TDJZY1bϾ /ڄ4K~!QD (B2@.!.X`N=20o޼y ] /1Dz -bYlR sdlc9w-p7~iK@:!@TDJZph| i! (B@AHR6@0HC z! ]"t3]* Z]]]SS#tA0+Ν?&''3ndddZ6 gΜ:cRjull8rȔ)S!AAAiii:Nz@զ ]LૹΫQ}Igg'!$$$DU*!$77WF,̙wwwWWW9sͮ] ;-xrT* / /6`R<t9wF㑹pT?}QC9sxd9~ޟakmmmMZ^~Z600p֭wy'@(C*}- Ng~7jkk;vן={&11QhZVk+7s?Y*xuTWW[>&zz9777==wNII @GKYH!§N 8C k^\4H lf~0~ࠀSl Ȱ,`0L&BH||k,BH(֟ikkkiiiiiinn>B iK Bonh8 ,O!x R7oRıw[;1ZZZkI8T*Uhhh\\\BBB\\\|||PP$g"DɓyyygΜ #Vu EI0~#,^X肀[ꪘNfpz.+5jo|x!q>X IDAT ϟoii466 dVg^OLLL|S%,!a(|3~ !%HWT̴.hkkjll4 UfdddddjxС䭳(???///??-::z999999BlS(6m={W\pa߾}MMM999999jZ2uvvVVVrXX [rгLyPSSC QLOAjj*F:jZZZZRRRZZJIMM;+1+=͛.XPP@3cƌ=z4dff l6 ̉f˓BHIIa8[}F̴-===dT]]m2ȥ{Xt2###==]R ]|O,///,,oT#F)7!C]F0L2z-,,0LFΦڑ#G]L4 2=Z'ߠI85 & .^R^^n2,'ޘ4iRjj LUgϞ=t3[Xee@BB„ 5F(tIuuu԰ghhh%DDDt:8 a _뫯g߭ϞcĈB>La4mk'O,tf߿IO8C'O &&Hh$Ttdddh4kii9 Guud"@L:::?Ng(--=qD___ll,sѣG# 3mL2ORRRb0Je]I;'jZ=lyyFQ*zD3866Va #h4NuÅ.> ڰ,zk&!!A2̴ B7UϯR*YYYtv.LR ]L5PWWGGCMMMMMͅ  z=zz:& pMMML 'OZ0cƌa&5jR <̴:v8uT__sZcܸqQQQB]GGɓ'3jӫܣΞQ#---((Hla adjDXwa4|p|1??NqС zܬ,ܰ0H={v޽XTTՕpW?>22R2ƚ5<{{{ ! "%%EZCׇ ]|Z___[[[__@{hh4:.--Mhڔ4Z'lj``c.^1~xzɓ' ]RffsiiiiiiII W BHjj*3WffN L&SSSSmmmCCC}}=njj$kZV뵗J%LFIgni0!*=Sզ2Bcǎщ7_NqUW]FyLB1̤S!((htƩZ-t@wtVqDZBLlXWWW__O'hhhhhh顯 h4Z6555---55Uh4Zx`MM s_~%00p='N9Mf/3Fqqq{{{PPرcd]tj _NASSS?!$,,Li4t5ID3mS[[sM{nI8!n* aVUUGo>^VVT*GIo;Nv.t3ms;Ǐ'''O:ಲÅ.#G6@Vq _V[x3 ڮ.ZM?5Xj] Ikll,) `Ĉ$ѣL/t1+0X:{C  &L`1b>uvvZ1fRL1"@`V ̴wlllljj`Fc5Z1bDdd ÇӉ7{zzRRR&MD'ޘ4in+ ̴Uˣ]3 !!!QjZ2O n4kXa "f5MM }YllI8RSSSRRJk -tl6f_r''' ]L ̴ B5j3NC[M4@N0hllld۪Ɏ=u:]@@500PQQo߾q^}IIIB@b0gRz*,,7Ul7.00Pb]p5]N!:=ZLrq}}}---Vo, eqqqVou:]ddk ~'N(d21o{pgff ]Lpf+]]]ǎcN 8q"sX7n\TT%pm: >>ia p&,,,==]{ }ht:]XX}}}t⍬,R)t3m5??0??aaaSLΞ4iRjje0LMMMS3M?J655`VZ^t:N z !j ځ7U*k BEEE%%%111ٗ5 43mȘl.--l:` L4ZcȑB i3m_ cKVzŋGo8pǏo ]F1L.0LGS=WUU)QFуNvv6n 3---tZJfR~Դ4%tF ̵S__o0 C}}}ccccc#e__}YxxVjZNKKKIIIKKKNN- K95vXf. sfXPPLQ\\ޮRF333ccc.)HROOOCCJCCCCCCmmmSS4""Bզi4Ng &&F5̴^qY ` H_ChҴZFjZ622R,UUUщ7fsFFFNNѣ e̴Sss={EEE]]]qqqSL͝\XXHm2 J2+++''ή!ti6? >BBHIIL>&&& `敉iii)))Jccc%:w\@@#7Å.&L288X^^hURRb0 ŨQ23350p0Lt. 洲mmmeQQQt" 2s966VU̴"ЀI8***=󫪪iSNB03g۷ήqiӦ5&L!tJ7F#}MLLСC65MppmmmTBBBbccTv-rҪ*J+LHH~3mYWWױcǘCSBCC'NMg;vltt%qꪩ'[[[{{{ !J299\B_L pXd2BFtWޞNQPPۛM'޸˃.#wa s===(@b0'M pF2MMMuuu uuuuuuuuu555MMMRjҴZmJJBz%6VRR@l6ӓɓSRR.&a 0ͥ`0BRRR^:ȑ#q%!L&K-okk/ OOOg_6@.\P___[[H444лvvvׄt:ZMoRSSҒJ}:ƞ={'L@o~5$$$]FLo-Wi*++zUW]ED6qİ0 EozLQI]]]cc#sgD:3Njj:00PU<Ǐ3oTTT ҉7ųGf<3mZ]R9t*33366V0:;;kkkI5Z[[{{{ ! "%%\jػgo]wg]I&jl]ֶ,e'rn`tSB;2Sh; 0PB C'2i%@dǖֲe{-)F-i/gZbj?t+ɎGޯ?Μz$}k쮟s$m6hTt_cV(---"x#~}t;h>22R*DFOO=HfNSܽ{w8W0Dowi1fN*wx-//!TJz}>_sss~EQk4>>. lazN8Ap+%ÇB[jۺukUUѕubL,b;55H$ ԤjkkKUUe)kF`Jzӧv+{[[ZZl6S`C.Ν߻w~666]#pHT*FFFy;JNnZ.\tR9SSS|^ UUu\677:'&&ԍ .ܹ3 ^nt턤 )ccciKDkb1)D7R7秧ԔУ5h&x.Ybt; p32@gEǙ3gŢrV4{;lhD,K{{h.]#pH1;;{Aq~]\\lll-Wz{{E1F`[XXx+UӨٲe˚i f5M4-&X,D44-ˉUUU^|>EQTU|@@p;XA,qpTfmݺ5T呴@KKKGCN>Nݻh;v444])Rh4JoD~ wn7؄Hr5s8Ξ=$9Z[[VpSba=x#ͪ Dƞ={X/96pr$fsGG}aX.؀|<9{EZdR%477477VSUUe$jlvnnh:inX:t\+Vyk phTon>44H$VmDF0ܽ{6L`}!ifr9Op8Iz{{SOWWW{{;Ԋ qm:fbXMM͖-[VeַHDٳXLtFÁәLF nnnsoiiQl6cg󣣣i6mΝ}}}5F`%6p{9s+"z=zMMMw}Hعsg}}5ATz7W=zʬA}r;nt:"~cE&>p"grj2 MH=#$I.ڷokId2J8>qbiooS~ѕ|~jjjReںfkj-JVprrrjj*ϋa{}i[ZZnwhtppPoJ%UUE/ltIX8X,f+گ]#p*ˉD"LOO@paaA 677777*:CP6[!Ϟ=[(HvWo[Ν;qD1֩oٳGUUn56H$5&&& Bmmmwwu֪*+p;֙EXlzz:///aNYQmii|---jcg6 60ř饥%1Lp~Çbj p:ZZZ:zNE7vIXN<9St`z___(ڵkWmm5tZX,[lY'~p;6l6ǣѨi333bx<ߘȪ*|>Ȳ^555Ƴx1D?\.WWWG(ң5v`tWP4M7bH$fffX]]HsTU|>Hvf;== 9sv˖-4֛D"qa=x#|^4Fld$mRԩSNjw/~;wlF #gϞ]^`A IDATrr2N1&IQ54TU[&cN+ԔAU$˥\L}>K\P{=z󵵵z(ڳg0Rzͣ\.G"H$rIqzb$y޽{Vbͫ\.b7+fY1fTxUU][UUet푴':tH44LPHۭVeT>Z3K JCCÝw޹:K(|ٳg >(W2x#b1.B{2F6D"qa=]cbbP(ڵKhoo5R`+ȗ3Na^Nt:FXT<?g21IQ@ o+?p8---=zTo +2kfFEWwqԩrj袽{|>@n_bqllLxI8L;C ~J hyyYӴ*'h4*nL$boEQUU ^7|696U[^^NRzx<.^`v]QUl6=`CL[[[__2LF׈INlvxxXp,3==="]# uttX,nbx̙54h6jjjlٲf㩪2v7V:FtZ'#dP(]..KoɊf\2Ǐ_466V*`0 .$6p[YZZ:z~v=}t.s85 m߾J^\4M& =EClcX:#vq"2Nd i`lvnnnψJeϧ(,^WȲj87h Dbrccc0 ]50IXr$Op8IzݫGkl۶03jD" I=Y0͊6eŵzv8FDgib;33H$ E?b(%TWW; R(x .߇B`0htX_Hp,UUUPH^~5"OMMAq+z-Q,˖-[+ն(~~(7J&ѻk+w~p\z;q@>_422r…;vԍ`0c2qk#Ʉa=ZĉfC?=vuu \7+ރbt:-L&GMGt; rVoİ5?rZ[[ꌝEp8,7rzg^nt0IXS\D"'&& DlOOOOMMeWܹs XlffFlt:ŋ@ 477Bzf ;dP(].׊zj q檪P\&!iJ$Obf׮]zƶm۸ X-MOO@D6#m6[KKkŎv8`3#ib"kġi333DBolZ}>(^o z~_Q> Ο??22"7~_l;w?,]# @tsss,1444??p8lP(XCX1d2Kp陙y}X(l6p:.//:|iVu۶mzḁH-S,MDkb1IںS pܹxCV-6JVtѷSSSu+zۖf\LNN ###RIUUOQU.w~gy׻%].24jRiddD?LNNJwf߹s'OXH_[3N#Jr91!x֦& R)L&IчWb1qd2'˲,^y<YE7z<bT ވD"e˖-]w%˲ev2==/C|c$_8jnn62l,KKKG`Orv}l퍍FW  N"?#LFQM+yMӖHɤnWUuE(nع6t:f~>p\ɡd2p"pamW_۹sAFSO=쳗NRbd׿x;vlii{ B{QUI!ssszoկt; lKKKco2-}?;;L&K, zWDqȲd쌀M+NR4YGl Ѩ?88822R*TU[UUetXۋ/#j>=!%jH$pbbP(Ȳ]jkk.Bp5bX:f[3HCUUópidR&hm-˲"ϧ6t8#v!拎p^l[n UeYs:C9"pӹ\no߾2ZysLF4L&+w4Ml6,"HCY}>fcg e2D"Q*Hñf|>b\ct:]SSk.q=455]#W.x<+nO~RD:CCCv}Ϟ=PH<~5ⶑL&D4u؉333LF 튢UU"@Y$ImQb?kjjVpȕ XhxEQEeYo=˲Ǜab866&"$Immm}}}" d2]f}*444$I+RiddDkb{=v]]]mtXŢizxu!^NLOO' n|EEssmnnVEleY6v"nT*Ho\yL& -Py].%7N*˪.ڷo5L?w2LF,ъ'fsGGH~JyLшFlV\UU| ^@P(x<ǣѨib+n?>AUU׫(H>Ov# ԍp8f+7r _rfЇ>Xكܽ{] r,*[Tn)Epzvd2kp333xƱ:PQlऀ[ܹs'N_466V**7`[[eZ 777v5MX,VK\ؠGkLLL Ꞟ=ZcΝFWbiiI\L&5Mb'%/WUUɲEeY\-&vTUeYejtGƗNW75M+bnwݕmn*[o\.UUM&GGG_yMӬVmD{w]fQ*E+w}irÇaL&Sggg(vz^lBR)П, Ҳfx,MMMMMMG8)fX\\3FWqEJҩS}r||X,z_!wU[[ktx Νb̈m"SX,N#=(~_Q"@uu\ Ry4t:+/@kZ 6t:}I=xԩSrYUE{|FysAt=[ƓO>nb866?"X«|VNśP.^3DBӴX,H$*?/˲|ʲ((,|>'˲n7p.٢Ѩr044EٳgO(w8FعnkLQ?J%9 BPWWtXr IDATd2i=?^k8{C=X-JFFFӧOr;v{\.+U(R5S4l6[KK}R4IDD"d2F5M}cczeYUպ:###"TjvwwBx`=[?55FW4UYZj)J喦*f.!n+ |Ũyᶳ4>>g ///766EfJ +s=ѱ6r$D"X9zzzhm۶,D"f_yjey }_`#ir*Z9ʝ|>w8W4777448\Ɂqԩrjطo!=8I҆i@8>vҒP(pSYQyJObdRR)~r;&JfggSL&N핋#555MMM,{<$eYnp8/[|~bb"|ȅ v)ֹ;*lL&#"]ĉ&3 fgg'YMf+hL&ϟ?w:GQY3x<^ɲLY.v|υL&fɓ'*[Kp8 E17f mmmmmmO<$I /\P[[-7n`lvxxXDX,&:B'xjmM秦VgTfY1U{EoӲ`o9,ɤ+IN'''p:.bs5o*6- ATZ(H{.Jl[*п7U<Bt޽[,vuuܹJ2l24MXJŢ-"0CFutt z^ommNS$1\jfu G$FUp\+r8*wn̰߿_JF*<_$Ijkk]]]&~K,mɓp8y F׸e_TQyjՓ,'OKŖOt:GbJ%Ѿ\[qѣGōzrD^sxn7=7$*7[h~:HXm۶===555֌]XfHD,*gϞ{, vuu[\ؼ;wnfff'd2)RcǎCq nS\6`H+B8*ws>p!vľsٴD1<<۫o\yӇ={={g}G/5{߀FGG]Oo=\pK,3===}}}mPGGblF|~jjjE~Fo8[eD02̚Wbp8\W傦󱤲aHɓHD$UUKed׍LѰ@R,Y.!zttt\fL&Y^쌍陙y}ު]B~sssCC͟FOHx!ܹs555v >`UUU.$)K/~?7<&{ﭮ޾}{MM/\SSs…?}\.G"7==zz!!I׿7xcOԧ>U.O8pI>_C??OOO덙~TcQ&''%I|wg?P(SSSsM6D.MXiXL4MӢѨiDbnnNZ^ܼgDW؜N鼒Nz&tzrrRjwX ^|cU__/s믿o|f ۷o׃7:;;f?>7e7͊V~G"G};XCr^zI^rj/˿/~]% Bt޽; =]]];vڃkS*3 zsc[[ۚJi"i8NWKR2L&]~2M&D7J&TJo6eYx<,{^׻zn߿_dfd?xgVkCCCPb8=={{/˲|Uq~~V%q?$I|+_J(z%Izg>566JtС_|//~O?=??| Hdه~X8{3g$I qN:N0M>я fT*鷗J7:t!M,KWW~3ٷo_GGUu𹭭NY7aonntww+zzgr KөT*Jͭޞ:uW_[XXv=Yur UUU`0 >$ q=x[kkk`WWW(###Vubb|Gz4jUd2/\SO鋧K?x<׳~XT*W]bqllL;F"Q}_j:䷐R-UL&8y<wsQSSxL&Sv_7GFFbt.;U~KKK}}M:p8?OIt'|2B($=/W+|#7C)^};vݻw?/~W#GH$555$Ix*[{LNN?Dڮ+b?ψd}>Oܹf]կ]\yFUUUss~- [CX'IJw#Z bdjjjttTܢiX9%K|r\ZQ,Ϝ9sI /l[.ڽ{wuuuy 饗^z饧zm=V^G?f.B&D" +t!FGG%I*JfyddRITjddDK>}:Y,P(Gk)id2+3+AhjjںueYevdz^X `r:NBKTG:$R|>||P(|#w[[[?p~~;N\e^7xCFqhX裏>j2DNC$ٻw :;;%I!BɓO=5144}ɓ6t&}k-D:FWaZ[[[ 4fu^~؅ DLMM;vL_p\.%\9۞bikkkkk{{#nF>qպm۶P($cǎ?Ad+BCCC zm۶b [HpIq\^{b/k\fMU*aMǏGyȑ#/BPx;qG??CY?~ĉ'|?3g<ϻ;C\.700J|߭([%HtRSS$TUuxxۿ211z׭&}r21$lqܹ+ ҰX,^W<@#].sX[ZZdX377\屲#~/7oۑ#G9rɤj- +P(R??җ//wu:cWZE$k_K$lkk_=p@ww鼥}s_r\rstcǎh fݨb֛\.7;;{&IQr[[ "4$m.oƑgggggg5MK$oАisssxx<,>OeY=O1Lj&nLe=+%LZ,/r]]#<"Iݻ+e6%Ijmm?x`P8p<0?? /'> />,Ko}>)~zO>{nq(XxOz^EQE1v:#/ɑN'''N<W+p\ud2ywyc=&nW/~MW.Omp?뜜CH 䑤 B+ ,˃"Zֱj3˸Suwtgv_L̶NݙvT⺢݊eXȃFh 9B/C\u!`~}kw}"Bsss[o=|O'x&Mt&|'|ԁ{Ϟ=o3g΄ Fu>gFh񊊊߸ʺ33G1%id%s/Σ|E4~vr14UUU|YYY@={DdW\Q]]=yɓ'WWWWWWGGry;/]t֭ k׮ !ڵk…x|̙EEETjQƉ'6nܸe˖ ܹsΝ4s̏|׮]~_TTT|wxaaa'??v֭x~ӳgϞ||)** !8pwmnn~}ݦ>g7x7>|83iTVVM2eLUU?Ru#!tvvymmmCr iVVVL&?fAMMMNNN2,j®_~ƍ3f̸W\NkpѢE!ɓ'|_P__kE5||Tjof,?۲g}bT^zRT*| G痔̛7WVVVRRwp\2 ':5# 3HÇw]>7***QaÆŋk -Z}UV655]GQEtKa֬Y7n[lI$W}-DoRO8 ~K___vt栽=sONNNyyy`ŋGhjĉg\s/;uԑ#GA(H`ߘ[<ĉ2EEEE&믿~BNNNNNNOOϱcvyaBܾ6mZ=ܵ^J(g-+tccc481Ƭ'mtuu#&Ϧw%L7vʔ)?3&???["\deeeee幗uvvf|0GKK޽{C02qЍp ,//O$_O7ё(>3<3wG}>ߧ kٲel2wɓ'-^b!ܮt:=f̧̘#ɥ6m<sĉL ʯ~SN&__^{!Io9s.lڻwwgX'3L&W^}gKr\K2~jkk!4-cǎ;vluuG1$СC{.tWQPPI18//q,b.ƍwW^uUWٷ?Oi-++;p@1v˜1cݛw[RR絝ӧO2eϞ=---ѻ,~7nzuvvG0GIR/D"Q\\\RR1cFf\ZZZ2Hnn'T9#IJ~~~~~~UUٳ϶әer455544־-yyyC8 䨮|Jѣqwww᭷׿裏>[\\|^[rNQQo~ɕ+WSNNZ^^ӳyUVE߿y ]]]/ԩS͛DRt̄  ݽo߾:7_~9L>~%={}ᇭѠә'O^paYYYUUUYYYyyy.)db;;;gxH47qdJKKtK/LWWWggg2/[em%IDATp2ci={vSSSKKKUUUɓ!u ^~˻ꪫ֯_o744<Ӄ3K2vq^hiigH}p6[\\iO2eC~m&Nx[ i b3LĉQ}:JFQ&G;?яƍ|7nlll|Kyy4?ꫯ!?~H&!u=w޷o߬Y܏|uEYYd-ZŶmrp o|7ΝI`_ע'DOOGy' 8Hpo?>X,1 f.|]y>uFvZ7_|q'NL=رcGX?x?&Ɂ!9(O+Vd&'Lp}}仆8r믿H$DbآE-Zt/ú;6mtȑ܁aH&%Kx㍏=o}aoپ}YFr|Ω !tM+G?yaƍ---D" >,l<-UUUg{I9uTSSӔ)S.iFN%%%'O8~k֬ $mx<}7mڴnnXbEiii2Ûޮ~xȧ]]]!t:??Ǐ3ՎT*[o:u|ﭭ|W_}uӦM7o>~x~~~wwɓ'nj3G:93d"ϝ;o{챷~~YtZϷׯ߽{ƍ_wM&݃W& hIkoo4iM7t7\jT^TTqe滻;v,aÆE]q{lTJVii+Bx<>o޼y=}}}voiӦ3. t:Gx|lk /|/%B.q6>+ĸqαk__a?r3җv\:::zꩁlp> iӛ6mb}}}Xre~~~fAkk /O4_bMMMƶ?~С[ouҤI!;pٳ/_cǎּ{K_Rv1 i}ܹsÆ W^|y<k֬)++kll|뭷{_ԩSgFSWW?>f̘[n[oWo߾5;vXl-G*}N8B9s|_~衇bؓO>?;n˿|{ 7 l! \wu!YfɓM.6J]s5eAA 7ܰ~W_}>\jU"! 7o^vmMMM!;wܹs'755R?裱X,PWWǧNzpq-]t֭ k׮ !ڵk…x|̙EEETj999!'Nlܸq˖- ,:s>u$m|477rss33QF4b6BfzZZZBQxF<Ȑ?S! &D999 .6pI(((XhWZUXXtGE=(f#0k֬7:tlV`ij]):%Ngf Byyyg..,, !?~|WWW:<ԩB*.Q˖-زe'OoknnVl2u¾}23!3fѣ!C+**zzz6oޜimmݶm[uuuW_tccc4v4 )0YTT4۷o۶m…gԩS!S 5lhZ|ycc֭[,XPXXBضmW\dɒ̚SN;v``aƌ-3g+ӦMkkk{]v566>W_}ln>.єL&ơ7o/K/4nܸuEg_լY~ӟ>?|qq׿X,6!999֭5kݻ_|'Nu]=М9sZ[[;3fLoN$Y3(Y^^>} ɓ'O}؏Bcǎ.'Lp}_uuuuuuX1ag__̙sk&X"3y~+0*.,26:;;C.Ҳ}Yf%lB"eL2gΜ… ]%zᇇ|BFuvdܹswsϭYfڴi.PTTqe滻_zcǎ6lܜ(Ȳ+W\2U\Zo9?f̘_BgI\$mpyAD LilllrIv %D5c..@kjjjڱcGUTT,[,U ֌lW .l#"i˃ .ɳ$?IENDB`././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/sample-backref-graph.png0000664000175000017500000011123200000000000017757 0ustar00mgmg00000000000000PNG  IHDRBѥjbKGD IDATxy\UadRAPrTryȡRfi}fYzJ139 犀9ѣڟYkMa ;k """b-JDDDf)p̂ HIIF<""e3ÇڡH1˕ZcZ#2͍GyaH1˕Я_RFD,ZjQDDHDDDl!YJDDDf)DHDDDl!Y#$r@O6m8t&+Ϯ]X~=fXۼys}]_14lؐ4N83իWёcrb=JOdd$K,… L&ڶmO<2e 'O,VPCʗ+Wr^yݙ6mZۛ;.GDDIMM --Ͳ0 vɤIptt7ߤB vL'''.]z]zիWq"ĉ (;ve͛ *r֬YClllogƤXsȂ puueذadddH:u8u ,ڵk@WPPu!))ƍҥK-P=7ٙPzuKyg϶ ժUqqa8p Æ VZ$%%2cƌ )IHJJʕ+Ԯ]>6ȍ?'~!?&L %%7xx>S àO>};w&gyE)Sxw7nɼkTTz 0ɉ 2j(\$HD(b3C ϏkZ'$$pB^z%'00z 0ذaDDDM4{t=׺vލ'ߟ+V0o޼sDD(b@J8uM6 999v@V=c'͍$%%tR:vH~ظq}%22UVInر#۷orC^ ڵk >///4oޜ]ҩS'4iݻ/r<9##M6NPP#00k׮1c ӹ~:۶mˋ H||<_}%ֲeKLzpuu l9fff&;vzlْ@9se.c=FNX";v$))?d^J-HMMWrW8|0C% ڡH13ٷ-bذa[j*.\HppCbI"""bR"$"""6K,%B"""bR"TNZ;V꿼H~JҁڅCa2X"ڵc6͛7w?LÆ IKKĉ8;;Szu;v)%mڴiDDD0gΜ"i۶- 6u6m#ӧO+k5ꫯ;v,jO71LٓVZq*ẂؼyC2Tɒ%Kp:նm[x ̔)S8ydB :t_rJ.\+;ӦM )r W^-qf3˗/gРA|Wq*u q3&Lť(8ktԞn6l0zń vnnnL>OOOVXQԐE)ƍ3zhߩYΝ;4i曖J'''.]jIrUV^}lj/'N,жSLawt|,-Y72Ltڕ-[X=ÇgڵW\vu1f݋?%L&ڴiԩSXb|2LJA[<vk֬!66ӳeUE=SlNzeHJ=u {{{8cP})t"R>И]veTV 60}tΞ=[2BCCy d@aÆ#uԩS,XkB QNhܸ1aaa,] u;s0`իW7{lp]Z7nё2l0xjժERR>,3f8vvvtЁ6mkF۶miӦ mڴ^瞣E[qwwڵk8::=Uuo޽O?Cҹsg~6nܘgy[A*hiӆmRB*Uij>;v 00￟'2qDU /@ff-ۅ3۷u|rƍǥKOprraÆ9sO?s Rw^ ȷ]~]gԞȚ/NӦMr e]n[^g# A={6O>$;w;3f(Tĕ+W]O>;fϞL6mpuuޞ7xu2}tf͚ůرci۶mo2xg >㥗^0 yKkF7osa׮]899pB kF~_УG*Ucڵ+UTᡇb֬Y|3Xb ۛ3g?fTRO8ӧSԨQ7x#/- s+HYݻw[go|z… ٷom_t҅Zj+?o-[dԩL<|[qXv]tLU{ʪwwww琝xf˞C{k-"{~^|ERSSڵkINN2322pvv`Ȑ!vZ.\K/Dpp0SOa6l ##BI&tޝݻZݻݝb ͛cSAmqqq\t5jXz.^ȕ+WGhтrgϞܹs8>S>c{=֮]˙3g ,fiiiDFF֭ի߿ѣG߶]|Dʕ+۷^:K,oުʮ],ǰsN3(<J>)ӠRJr ?n/r@TTSNXo` >.]dY }|N>m՜/_|'xnݺ1sB'ȷ&))+?^*HGaɒ% :/PdYy>*Hq5TD5nGA꿸X׮]ٹsgP{’XPj֮]˳> >s-Z` ʾr `{'\\\H.BCC0aA|뎏};up$~#.._~GG"UeTAEq+HW{ͯ988ЩSbyNynOsn?,r|"Rh>3x 8 /_MPPPnwttd̘1űzjPACUZz6ё#G:u8zFJtt4NNN <8Zjѯ_?qbccy7裏cԨQmo(Nٿ|)H&,,ӧSNFټέ ew]qXJ|tcAslӬY3sؤbvcΜ9/^C=d@]bE|A.\X8Hdrよ,YBÆ \hZZ'W&11f͚JӦM ~ҼysvJNhҤ w/!Mpww'((zȵkט1c\~m۶E  $>>*I˖-]ቈH)qv"₏9XP8q1cưu ODDJ!;C~Ȱv(""RJffL˗Tf$ .]ի9q[l 99p<== cРA̝;?OOOz)fΜi"0aX;hѢ;.+33޽{SfM[L&ǎQFddd˗QFDEENPP|w1k,ƍ0`&ɲ]#$6gÆ 8p@WGlWr}oDEEaguoc=]t)DHlªUhРAM$)ƍYe#?xI)""LϋM8q ҥK9zDDP"$6!'hݺuگu97tI/^l;==ҦDHl?yW߸~:7n$66cǎpU]믿NʕYd ={dƌ3\]]ٳgC !22zӧO {gs";y)yGHʴŋc2|Oq[1*>/eСC!u=#$"""6K,%B"""bR"$"""6K,%B"""bR"$"""6K,%B"""b1)30͖;>>޲ WWRMDD'7DJm6vJff-ctԩ"LCcR&ԫW֯_#[DH???wCуիbd""R)2cԨQdԨQw#$eFbb"UV1aFNNN\xRLDD+IA߾}qtt̵ё~) bDHʔ#Gkyzz:#GBD""RihLʔIJJʱ͍/lDD}Ю];^jΎ w^]d%G= 2~6mڰvZ"##ѣJl\&M,m = 0+sNٻw/< 6srY|A ٳg-ìԪUpEy爉aܹ9r#GSOʕ+-i֬Cd21{lW)c#$b޽=z &X-R qqqn$ʑ#GxW,j ;;;֭[z' w%ԩCJm۶TX йsgKbŊh2&ɥKڵ+իW͍qO:޽{ٻwo?N&MJEPI;rcǀ/lnݺ$”r*]UX1vڑBhh(ׯ_'==\)2.^h;&&^~:)!R@JJJKNNk$R\N8'|7={B Rnjj*9e1S"$"{Åگf͚lڴ)9to}HQ,YDFmUXy/\@XX-"KCcR*tBxx8 s=DGGKL$wٷob{\zFdMMLLٳT^:'(eBFIJ IDATFFgKOO;KNN&%%SNqKeLL 9fe4i76l !!sEN>mi"R6GHJE͚5y'a޼yL6'OGv툏'55M6ȶmprr矧Yf\p~-_B> 9z\x 6Y=۷o'&& 6XfW^Mlle}W^믿ºu,=zÇs֭[Grr2۷ouV'iӦDDDzj]ËmMDɸ>`ȑ#]a4nܘEH"yGGG/_κuܹ3m۶Ҥ\Q"$Eg {ƌ?jժR^<$<<(?~<{… 8;;l2 d=ڶm.]ܹsЯ_?Ul&""RNΝYb 64֬YCtt4UV%88K.\`ʕԬY nJHHHp`l޼˗/ӪU+ Wm6lqvv&##ٜ6n܈d"##<`UƎ;8wDGG@׮]t]!k_y77H^`ٲe=zU2d˱ R/ٳ^GҤI΁ӧ-[3έ eNn}vZhmִiS&O̮]ضm6l}tww\;v 2||? D I:u ZjOOY8w\ѠA˵kѣr0X|9͚5cСdI@A*hd&33ZjvۛUPΝ;ꫯ|?L\\\mSSS~嚊u"IHHݝmPvm|A.\ȶm2dHdSػw/{͵4i憿?\t]Y_&nnn(#))dBCCر#{ѱ'_DDDxbԩڵ˷wk޽=z &X&{yyQJN\\ڵF=Xh6mݝ#G+Xiժvvvԭ[7cǵL&<== ..xJ*hDpp0_~%_5ڵ+$dv6{{{ZjE˖-dL6v1p@ gsD%BR$...>ׯݯ w/\rŋ9 8ŋj*ǀa$RRRzyCH\_7gvou:uʒl8ޞ֭[{\6yL&\\\,FPfMv^(kٲe9zox"vvv9zod2QZ58}4/_α^IMITZh ð|YTX;!)T1͹̼f͚Qzu/_ѣG9s&<-˲mRNl·~Kj֭{oӒ}=,Ͼٙd 3~~~ Zצ Rvi.]ӓ  0|'GO6 ///&NXΜ9Ö-[8x jbȑ4mڴ1JۥHHOOٳeIIIEio___ؼysm.\@XXX#7O<>Jff&kM :I&Q~},YLXXXOٿ>oY=?QQQ9g?ߟ5kiӦw--uݵTz)hܼy3 2o*+kYQ˺;ԩSsSjU 롉K ѣ?7fOǭHIP"$EҮ];T͛-_ѥK|˞@yDJwww-IU&MfÆ ,Y}믿rJK@v_9Nn`޶m%ik޼9...TT5Qxzzҷo_^{5ڴiÆ :u*t;;;~9BZZǎ#112ח¨S:t{p!fϞMXX+˖-QF@Ѯ뭮'6W{^Qz)Hмys4hϖ-[8~7ndʔ)^έ eNDtt4_|~-ˌ;{'aHBBB믿r<>A^!!!!BkѼycggG-8z(ryF-!i&NJ˖-o+W_ѼysTbY~16oLll,899E^֯_СC (>"c2ۼ`9rC+̟?ƍhѢ)_CɓZ*J6m/^,wɓ'pB#)Bs|Ė1r(>>+Vod.]TJQX!r(CZo *D. R"$"""6K,%B"""bR"$"""6K :tɓ'[;FI>_C$ڒWlǏgϞ=̚?>+Vk׮oٙVZQ^9GƧ~ZbS±'(()%B"i&F=?]tvHR -ZİatrLsD {Ӿ}{zɓIKKvX""rPJX`s/s;vaP"$RHcƌ?l6ӲeK͛gDDAƍ 駟fرsk%""DH*TԩSYn۶mcKDD Aٳ' ]BFFP"$R Vʕ+㏙:u*z"&&am()&& &gh֬ .vX""r JDY@@vb̘1 >1cƐdDD$JDJ3ӧOgٲe/nݚ}Y;,!4p@"""S۷> 33aDHf>z-ٳgDHTdO ԩShтիW[;,DHnݚ={0h ~aƏOrrYJDJ;_5-bŴmۖZ;,DHJ R ڵcaDDl!+]66m"$$'#p%k%"b3X=&Mb֭>a+JD0BBB #00[Z;,rC]G߿ݻ3ydҬ]O]ۛ˗3g :w̱cJ=ϳpB}BPmwR_wqE6JD2cƌaݤҲeKϟ_jǎ_Ç~(>|Gt//d͚57xnݺѾ}{"##o}Q8X"w#%B"w&Mc~iƌØ1cvZwڴi222J(W_K/˩^:W^>E`܍ܥ*TԩSYv-ׯYfl߾ď\}VZєԨQ*U?L۶mo_Q8X"w%B"w^z~ڵ+!!!dffZ;rԩSL&k!"ȝaʕ|L4-[?PFBc~)wӓo6k> sy1̈́soRr矼Kܹf͚1m4Kʟɋ/H6m0L6 Y#멧"99sSOV R_|WIXX W_ΎÇ3i$7nӧ9}49-Ze~Er%<d2RSS ?v7~`3cĉa/JIIlg0 6O?5222 EbPPAkڴi`DEEY֛fcΜ9˗ 03g|aaԫWpppQW,!rŅӧ?/ЦM:ta^J^zOhh(@.]]B8YwfK/Ѷm[mwƍYe#?el3}tLBjj*<-ԯHa)) Dxx8k>D7|Yf'2yd}~|9yd徾xzzo6~~~ 2}g:uĜ9s twץK8rHlݺy 4_WsժUc͚5|[<={6m322gǎ|G,[ɓ'cooo=ٽHN> ܺ7){zw}֯_Ϗ?HFFofO.Pjݺ5U7&'Od(III{%)#$"ͰaHJJe˖O?&  JDӓ3w\̙CNnP?!e̘1njDD!=z~ZhA= JDnDHD ۛ?ᣏ>SN?~a%B"R(cƌ? %%!!)&Mc=ƨQ3f ׮]vX""DHDٙӧvZ֯_O vX""`Dֻwo?N.]?z-Yׯ1?={R^RMDJ5&"0 >s&MDǎQ*cd2YIKKcܸq|VQDMD$Ą ?pX"Νˮ]J1{Gppp --4IOO%B"R^vň#0`cƌ!9996+0`W\R1|m*WL޽K)")iJDع0}t~g~Znx"#F ..[3xTz'''WJD 4}C:u*Æ #110HOOgѢE|w{{{FSf3>h)G%"%IEĥ@ffedŅ+E?۷ocǎyQO1yZDnˑA֝Yiii >L}ԬY3r'''F$HQ"$"%.99|ק{n>R*o&ѣGӰH1)qǏo~{{{hӦM)ECѼy6l_eDGHDJTDDf"==ۚL&{1RSSK!5k֌ƍ[5jUcab DR svvv:utL233|2))) Obb"7o&3305k-oDddd~V\ҥK0rIzjz!zQ1L4o$)_DEEj*V\Ihh(aDJJ ժU#** OOO׶m[vͧ~ʋ/h8D( G}=É']Oω;s f)SYww|] IDATwŕZ y g…C\P"$"eFݭ]A"GϋR"$"""6K,%B"""bR"$"6ڵkADD$w} ʱnܸq̘1JHiR"$"6ɉÇ=g+WãP]p8RDHDlV \r|G.p9gϞ%$$#Ң'K܁ .0q\J"rwP"$"6#--s璘;iiiXgff￳}vΞ=k'9~8DDDХKF5k8y$nnn|GL8Z'"EDHDlBff&?_d2q̙//uּ[Ԯ]zkF*U?Xb~!uaر̚5*U(  )vZw}dFc/^ݻw?bg52(({{{KDD(}v +Qvr-;Iʶw^|||,۷oI)n:ݜb_Lj)Z!.&ini4vQVH5cDai$"E~՜sx񸜛U1>DjOQp=@AAAޗHKK<E+++ӧk_]aHLLsyy)Hݸ4FD |Ç#44-ZoW"''6mڠSĉ~$&&"//nnnxn޼f͚!'')))ԩ8?  gAEpp0ڵk bر|2:w ooodffl@&!""Cjj*֮],,Z2 TZeDP(AD [LL FcǎE+:t_}o5X,BDDD`Q"DDDD 5X,BDDD`N;i!"Z?3\\\M:!!!HD_ADZ 6mZc|{6m ss*eeeUy"jXH+%$$wk*%K*T<",BDur96l؀x7֭[z,Wfy"j8XH^saӦM8q">j'qa8q } SSS,[ }|LL 3gDǎQTT#GɓѣrJXZZbѢE())Ahh(_kkk,Z6669RSS[[[b˖-uD7,MDZ3fʕ+sN֭ïZ`oo8&M,A ˗/ [zzz={6 Jѽ{w$$$ 55&&&Ǎ70o<9sK,AHHn޼*9-Zd`pqqAqq~[D2""fjjI&qX|9~ :כr+W >>/EFF^xNMCdd$zd!66QNANNmccblذkRSS}z(XYY!((DT{,BDu֯_+V 55P\\˗cǎ}{ <ЬY3 %% +++DFFo xzzJKKz!::xyyVBbb":uCCCcŊ8z(N< ,^&&&x!6mw%%%{֬Yɓ'#!!͛7chܸ1OOOKc,XX\pATD$4!""%JJJ4.z˗ "DDDYYY̟?[nEJJHh,BDDJCO1b:v^TD$4!""%r9=~zddd"DD\.dF&M-["((HH8,BDDJ49s&~G#GDj,BDDP(*wpwwҥKUv "z5!""%$J|爋ùsTz"zzz*/Bxwߩ:DT=!""%$Z>۷֭[*EH u,cٲe*EH u!D_Fzzz~'4j~mrlڴ RQQQ*GXPWǣUVXre'LYf @>}I&%.c""RBEs?TynΜ9dXbEc6llDEH u!񁱱1BCC<޲eKL2rLP 11jFXPw266Ƨ~ #CEnߋH') Kc͛~ w;a""RBS|hӦ VX!v""DDa͚5;Na""RBf`ʔ)077? v""DD!LO?VǏŎC3XДO=O?Eyy9ë<'NH)ahh\rTjܸ1|}}%%%v&LcСb#J,BDDJENR̙3QTT~7-[P^^j\V"m"DD1@$ϔ!:: ƒp̙@P޽{bF$J,BDDJTB;w-&M7o<!c""RBPpp0RRRr\k$ Q)IEhǎa144ݻw՘H7)IEI&HLLme3BDu"DD&!YJHH@ǎRH)iEZhG}/!\Tqi1!""% ahhO-Z~ e{jE5#TڵkW ݿ_TDډEZe˖HLLkVYJJJ+r2""DDT M.B`eeD4ox"QmHS{Pjj*/P">,[ GnTz=U4hlllĎA Q5ϱeZPPڮ*|6m$v j X!D*//G~dR/R UCQU ?;Q54iGTE,BDE7f"q,BDDc""F&MB!vZy!<(i<!"j4neee(((;JbXx1<7uTH3UI&Uc6661c6m ss%T,""DDT m,B J> &h H3+6E\.v"c""FE9Ir>|'N@FFF>Tزe o>˖-?pi5qqqͭ||ѢEHNNOcҤI y,BDD/+*Xnn.m6rL2EDE%tPEDcs΅L&Cpp0|||PTTE%*UECdd$zd!66VXDj"DD4LTTrW>_^^.b:"`""z <|PRTT())|bbb*K^ajjVZ5k+6(X^e˖1j޽{Xz5 33[nEVVوAAA#((={_ T*Ebbh? :!"Ԫ"Ժuk̞=gϮi0mڴ*;vq<==驒D3BDD/m3BDT;,BDD/ѲeKW[CDE%,--؉tKlb""z!"M,BDD/all SSS!""DD -[9BDD Go޼ׯ_10m44n:u*zӧ))vc""zux-DEE?L&͛{n'N ##!!!طoRSSajje˖oAzz:b̙ر#p>/ &&&E$.B6m425jTq>} \.Я_?DFFW^HNNbcc=.!Zl)j8;;/b ** VVV B@@r9=.Հ5޽kmٲ(((#$$^^^}Th֬rrrYBdd$[߿ 'l̮({~&)&&)ZjUqQ X[[mF(??111 Ż L4 ݻw=EEEdgg#&&^^^ŪUN:Xb='O/ >|M6233rdff֬Yɓ'#!!͛7chܸ1OOOt۷ػw/5j>}ĤcԨQ\&DD5t]X[[~qeƌ|29Μ9wFJJ ;w0j(\~֭H{jM6055ErrQM"T9s&ܹ_UmG~ѣGc֬YQuXjK.:3#T"=z $$D%ylmmq)GTW,BDDеkWܾ}eeebG0c l޼*dffo7rssUr- ,BDDеkWhWmfPǣI&XzR=3uT:tϟΞ=Q"DDT ]tD".67DQQ=₋/k׮۷/֬YQ"DDT fffx״~t]|'xl٢TUh燉'PץEv3Bu#F%G髣믈3\!"ZҥN̙/Tjxyy… Jx뭷}v]tQ-uW^;Fui z-mVB۶mqQL<>O&Aoܿ_(uVץ f®]ԾLӨ  f "DDTKݻwό >ڵSRquvv6pAQrc""%KKKhBD"!&f???]yyy&9[[[>}@```~&jX7kĎQg( DEE ̰uV,__~% GQhi!P&M0i$ZJH$5k:$888ˢ!"DDTݻwǵk״v)F"<4}mٳGTSq vZ#`""ݻ#??iiibGйsgxxxy4j___L8O>;i0!":x7@k 5 IDAT#rYҥKW_Qڵ {쁳3n߾-v,P,BDDuдiSnZk Y 7|'ŋ044DϞ=c#b""}BH"ӧOƍ5O9r$,Xrca""#mP{*L0fffXf`c 4ꨨ(Z ;i!":իWjԨN%%%+ &ĉHOO=?.v$,BDDudggbܸqC(&t-`֭+=zprrO&!"֭pEԚ*P֭1rH\RqӨ.ׄXݺuӘ׆{*|g8<~7Riٳg+WD"DDT={sѧO9`Uy\xm۶#"""ĎDj"DDT=z`YfaΝ?U2Zh8̛7>>>EqqرHMX>ĝ;wĎR+,B#F@֭UӨm''')rT?,BDD`ggDR9+t% 8C kkkDGGjO>ڵk\CU*N600@޽o>#Ճ9ڷo_Yz聝;wW\ qAL8QG3BRDFFҶm[9rƍOq,BDDԳg*311ATT޽ 777 >]t1T]6m & 88XQLV4jׇ0XIن޽{c8s DJV=U!3g^^0a?4ɓbG"S=V9O.#%%֘8q} I{*t ҚWΝo}"00PH$ !"zrppB@RRRc} \z/11#<(pe_KSyرcn#8)"DDTOZB6m*ЩS1c~~~Xl9"rBYw}Tzux4ÇW^;q9l߾C A- HM4\.7֯_/rg_EH"`ƌذarrrTz-uywp%X[[O>زeؑXЫW/$%%aĈƏ?X7|BG?1(iX4ikKi׿0n8DXT,BDDǟF*fQ1eTY8zΝضm*v,%!""ld,B0c dggViȐ!p$ zx#Q- yh׮!UЦM >r=uk׮=x`Zj^W QǏGAAرoXҴiShEc TFC׮];=EH@}ъo(ki MbDGGb۷/.]+++111bGEH@8sڗjK"daaqaʕ #Qgx`""#>|[n#Ta֬YuV;|Q޽{bjXdgg###ȴX{*t h8=zĎ` vvv8}Q^J̥ fq 24ÇC@@@Z*,BDDsttdOOOt_G@@hI&a͚5e0tPFf,BDDstt˗QXX(vjiBH$OX 6 :t7K Q߼y={ę3gĎ` 8Q@"TXX'OFll,r9 QC""DD"θx"~C7!""ѣp *Bu=Pq߿*"_檻3OKDѻwoA>} J5j6!T1cΝ;/|­iӦ077xYYYBk0lll0c >h=`""Rccck6!022BӦM_x<00&L80Y"J>^'K+v%vJR$"M,BDDjꊥKhٲq4ScD~~>PZZr9>'N ##rJQQv܉۷o׮]C߾}1vX۷055Ųe/֏3 -JKKek=8;;@c kr̝;YYY0uT 6 999Ӄ=␛ yH9nݺ `֬Y>>(**jEH\]]q*K=b"TqRAAAޗHKK<N~^z!99~~~;VXzzz8vQ4YYYN>]*222XgMyuQTTrW>iEHaggcX>!44gϞEqq1Ν;W9(,,<}0qD!11gƎ;˗O>f͚!'')))"dگ{%%%>@LL =z߿?LMMѪU+yXM#ĎQ-Ѯ];,\cǎ˗ѹsgx{{#33dgg#&&2 ׯRSSvZdeeaѢEd___H*3DT3իغu+^˃֯_ _5ͼB;QC{n 6 <@&MDoK,% *N\\\uV5J%~Nu3BDDjַo_H$ iYƍC1!"!""QhyB,B.\@~~h8#D"DD$ WWWʓ"D"DD$ tM1!"!"" 4]EEH4x"EJKKUzl/o7uT0Y"!""B*СC\_3B-Z@߾}Ǐ}M6yDz~EH$&&&pttEj@L00UQݱ~Q-eee߿>>>}:\\\P\\_h3BDD"200+0m4_[ӊP=,W\A||.]'''iHOOǸq:unܸQe\c۶m9r$LTZM+`""ـW_j!Dܸq666ذaCƑd/I ]\#"ـ#?^U9BSdddryׯ"##ѫW/$''WWi`""-ԾOHSgS^^^mllP\\ Djj*o^kEEE AAA\.Gxxx%r?X4Y x6PYfAJJ VVVķ~#<<AAA.BQ9N{>_LLLSSSjժ?EH騃:b @ff&lق[nU"DGGxu111(((/R)<;)88=~Xx1LLLCU^7)) OFff&`͚5ۑؼy3yyy={믿V/Ix?^$Q<_͈HhӦ 0h \3 ۶mõkjzD߿lݺFRSxЭ[7.i!"U`"" `"R3!"" /";;[-c"b""nnn000Cr=!"!""aff-iDBa""  r-i௿&tٳ#˱`1FѣGaee%v,"DDLkR@ӦME#bȐ!XbV^kת{2!"" ֨Q#;*')E?~<p888ŋHLLԩSŎX48Po M)Bqqq{.lݺNNNŋ$v$"DD<<<#>}Zq 'z C߾}ѵkWQs3f OEbjDD666طoP"_a޽駟D cԨQHJJƍ1vX#5(""*'$fZ~=5k#FALO=pq i?t\T*ڗaݺu8qb~dڵpuuEnpYىAb""/bݻ $钒 ,޽{ѬY3c5X,BDDZnnn_W"~cǎ\_ w܁3n݊;w" bjX~AXE(55qqq #󉉉Gaa!Μ9!C"DD5 |=zT1#n:hÆ SAo߾8ut"v$XDѭ[7 63BXv-&O 1n8,\m6"DDE,>!1О={_qqqسgϟD"v,!""-2x`ܾ}7od<1PXXѡC^Wߏ޽{.\ؑ,BDDZ ͚5Þ={OE(%%MrСCom۶bǢ`""""^{ jaذaod2c+i///;v ov [[[\r&&&HNN1qDBTTѾ}{={={;C̚5 qqqh޼رH,BDDZ ׯ_GJJJPXXX<<<`mm]X޽1|9svvv*~}eff7n͛tR"DD&M`޽uCEÇ_ȼ\.GJJ 1qD}rN:{{{ )) G; EHKbL&Sؚ5kжm[xzzVyðaWb*PWpssN:_]H,BDDZGœ'O~U!22~aSN!)) cƌ;l29rD%9jӧ8q"M۷oرHEXСCQVVVY!UnޱcW>}v 2-ZD"4irX~J_wy{ݻ1ʜ$ B!v""UVشiS߻e7ruuE&Mk.VCa̘1hժv؁N:Ԁ3BDDZ{ӗA.TL׮]ѣG{8qKP"DD |$&&FFF >k+B;_~%BBBeԈEH˵k=zL& l*,,Ddd$>ci_3o߆:L:UH$(՘7vڅnrQPP)S6ѻwod2$%%o߾bG"aÆ޽{8{lާ0 <ZlLr,Xȑ#;@DDTvvvh߾=vbiLW㈋d#:pӧpYKHAXt;#͛cBnAaa!>z%r,X>>ǣEb" "DD#U"$ČPXXѲezU_>?`ƍXt) -^Wooo95ԖPKc.\Spz#$18~8z!v$`""!.d2v]KRH$z/];w{ƩH;ٳgYXt1XeyL.8y H$Jzi?`ƍ2ehKKK닏?طo,,,DBڅKcDD:~~~ؽ{7ۇUUUS]%KtIWW^{ ˅fLkk+Ga֬Y8czwMnn.< 'OT $"2̵PUUսv=/99,W^y%챎~? ++/.~IS]]͎;سgOwYt)lڴJF$1) s=7n7@AEEE̋/{&ZZZƭ\xϯ*Ǐ3fP[[K]]1k~DDƍy} { {f㥗^M=\>GV+%%%zj:;;?~͛Gvv6n'N5D@AHD$.XVoܹ}^=숐ngԩ8pStq\x<\zM6u"=)đ***zOɓCGRR999={v2339rHw+W s`۹s'{:" B""qfݺuL} B+W5VXXo=f#%%*'9={;w ]ODDba߾}3;X,^ -[2"7o^}|טjnS[[?Q^˗rZ-ƍvjON)ġ4⋐sD ??ݎb'dرBBUUO=Tn߾.hP M8rg_WDAHD$NM6{/_!))߻n~mˋΆBaτ Xv-=2a„)MWEDXii)| G ΝKzz:mmm\KKKN=܃&55E9sf m*"2yn25kG SBMMMdgg[oEn>ϩ?~|O^~}~455 ȵDQb,X e N3%HbiIX B"""DDD$a)HR $".]6ov%"1GAHD$âEa͚%#DD٣Ꮵ~_--SH EDȑkjnFXDbv%"NSc""JX f ?sf {cmmjU I4II p!Ll_ZX_  |v^"@#B""(-wp>TTH$N($"w'}AI L2 !!1 =N3`ϞhW%2DDؼ4ʂ=&2HDD7mn^]`ۇ/ Bj*df=/7 !!xv]k77 [>vzլ */7߄8tȜeY8tFw GDp8r%Ã_24"$""" KAHDDD$,!IX B"""DDD$a)H²Eu(p̚Kӧ̙u)2 )ĺ Μ4Wx ƛotжzEMIJfLr%?55n]sc$$!Xv}Yf}v}B~~pcUQi'NqBS[}Be%,[f C[Z<傿/^s̱sX}`X9?ٳ0g Sov9~=YVkp{5B""E il $h.ILۆ PV>v64ɦmz5, 5RRʕfG&xq()` U[ uӟ#)IJj>wvݞ)oGM _p2;fFp&N4禧aFԌ/S_ ׮N#Go B"",0Joj^ǎ=S8N)fd_~~w_`]|b-)1ip'DDbٔ)50E om88`\d ΰ:sXsi[|w $2U"36o8vđ#Ϗ>L]w}V OE]ZZ)y,4,R$vN^LB!v.Ubc ƍ89uL&TVBDxEEh$SaX,pw2kAR0 55CJ-F2FOﳗ<"X$Hd AG_1ܙ&Y =[[8rn]з/\ QQ ҉p-$$2@uݻv^?TA"S%޾ؽ?aaؼV;;҂S贼EFuwwW#= A:HdA"CtD $2 σ\. PRl/$2o`&qƏC,ίڞIuN"" !RS,ίDF2WkT{ܗ4]RHv2J7ܯ.kkx@ aӧgO1^''/mj9Z%&& _ر֫?&#}էDXf槗V^ ثWֵ+bX>֭XYoVV]]|̓D m|sl^L[G$jVdii2JbVuvƄB |MA"CtD $2 !H A:3V)[  :>R9Cآ+DcccZZZCC#Oxݻwg͚L%#F==VEr)L ҳg/^R!!O?~ܩS_HΎ]~Ғnseaaa[l9s ex n޼innN9xzz޺uk…VVV|HF0yyyǏohhHIIQAٳgРAӧOHH޽{7vX ÒmNhhh;vdժU4DFo޼MKK333ۜV077<&sW Cvvvzڵݻm\LLAn߾><>>^;U{.X#a"\~BN:EEEݸq#$$՛+WtiƌuuuTKtߩS,bE"k񚚚klli D0|QFtΝ;b6xlvXXÇCd V9}/ i1 ' SNo޼!B$28vɌI aȐ!vvvDY$'G___Q(2 Y,Vxx8!!Bpp0JEa?XZ"((`lذnC0r̟?_Țe c֭t EaXTTHNNV$2;6_aT 6n`0O!AȲ9Npp2 IvZ&yA a뫯Gk@"5kְ'Nm Yii?p HdD˖-=EE6t ð`+Ŋ#a %KhhhmK(̘1CHdP(\hօ 趥%ha #==]]d s־x"ݶ"0QZdgMIIۖ֡]d7oԶduuu3fHLLx񢝝ƌy"1cƍ7ǎK9͛7_v-55M:jjjO~޽ׯ3ns666NNN7nlS)5?K HW2eϯ\2x` iӦy_ KZbR͛7ǎfkk+oBRRF||8ؘd_bݴiϯ"2d`ى}˗t&/۶mceGd0999X`0FY||G:Lg#+3L5*H_\R)2H4`&)HX,V)`ԨQ7"bhݻ\nYY< >}*[C^^) fyxxb΢E FDD\IT;MH cbLS\\,bM0n0>}ȳ U EvQL&SGGѣGt6%ud2ڬ #))՜j8]7CbUWW߾}b2$~fg̘A=8_mdddYW<TJp|||޾}KmBSS#l6MH%44SN-gS+1afs 6O.f t >yرo[ٳnӔٳѩۜ:uĉ[ΣV":t(dX,?lu$o/!͛G-b [#ZWóg>|FFF&M1b͎jo߾ǏW9jРAw;x eWSNՍm)H>>Rt*_|all|֭(.555N޶m[.UXX#jGN/tU݅?+++Fz Yӻe7BCCCDDDEEmhh/ E"QJJ۷ Fmms޾}qyzz&&&رϏ<;UhiiRdccSRRիJ2L$Y^zɒ%ӦM+))$imm}ҥR Kvv?jժ)S޺u i;(^|m]]JҐ!CX,Ǐ.]411ٳx#yo߾EEEѣP\\uȑ:tkiiҥK9xTS{ BCC(&&Iv@ (// 2dȦM@z _A2po9:A}%޽{>\w.]$2뜺:D$2HbD=Z!! ! HpK&*Q\\~]wr.YdРA˗/W!5CL)8umܸqR"墮 ӡfJ&*>]#颮:q*77XCDk)pot Kh}iee%HȤ\ԛzyFWWwʕ}MMMsNQQ={CBB^xaff/>;}6}KD]JKycsN{{_L&W p8~]z5''GGG',,,33~JOO~ePPn#P0˗MO$wla-Ӥ$ɭc]D__Ĉ`dd?w\QqwQϯJ'Wd2477?~xgbtuusss/׬Y%%%^ZD *++ 7ckjj s(U}wi/}ѣG_WE&F777v(R9w5۷A_OR.cƌ155زe˗? $W_+] }uΝ#G6MWPd>ܽ{7EGGggg7S[[+.鍮4v7n۷tÆ :::|>RTT{Ϝ9SXX'Ot{W):H_{5% 8y򤗗Wyy%䅁 w8 Aw5 Aeee&Ly Aiii"NU$2$''߿[n2"! 99c1RRR$21 {{2%"Ԕ?8*!j+rUjj;QD6rH*#ݻfRxffׯݻbIB}_=x𠦦fر(g_%%%Cs'&&FG_|RMB܇ƍ-ik2mms ӧ+BgR\p@-2066Xlݶj,!!aĉ-EC ܹs'ݶ ,--m-gSm֮]{Ym! ٕ+W0 8qb٨K6?۷oΝҜ;@F(^>MQ '00vڴijy􄪍d&Mj5Zf>}pҤIñ:j"KJJ*))l5Z :w_RR2g9TMd'N3fVs… k֬"Q)UVV3Z #""rR";{lccٳɬ>.5k˗/WZիW)SmN8JETlp===超TGdW^úȃ:`>|zԩRGJGTGdgΜ֖~PgƩS8Δ)S8YXXA\d```p7oxyybTDd)))Ϟ=[bE_dW_;wݶ(l"qƅQ={^Uj{ )}]VV֊+,,,ʨ"""\9sTd8񇛛۬Y^zE-mv ,X@fTX"oj|嗓&M*..ۜA߿?`hkkDfΜپ.;;q[É z葘ɓKmKWd=JLL\ve;*::ĉݶȋH$b2iv5xV=eAE'N?E.h矘իW+VhOvvEz=zhiEhbbX;޽iԩo޼ۖVKdeeeZjb5ttXǏL:q%Pdk".{Ŋ Մ/ZHzwMUu@_^^O?)S 'z#GcGGGG???333j^d۶m[|RQbH6J"-[0sɼZUUeii٫W,*mcXQQQTk..[RRd=Hd,]TWWѣG2X#G9rb FLL eUVV/WKi;rɓ'5:|kצ>>ʮL&;w>|^^T۷O6ȑ#Ϟ=۰ae&Q,vYWTpM&&--MSSOrΝ3g3ײe˘LfJJ 5TUU@BBm|}}U!ɚ gΜqqq֭~|׮]E"kxx8P9p8żzdCZCG2khh!iG6$ׯ_s8D#Y+lڴi3g|fP6o}&N$V`0߿ԩSy<]fP#'On޼& uX,֌3jkkiYfԨQnnnVD&ϟ?;X(իWSRR6oLxHdbiiysmڴY]]ݲe˦O7^yvn+!!!}?>M-}]|ʑƢE233/^lff C 7m׻wo2Geپ}ׯ)kT/dTHd d2B-@#""nDͽ-݉Y$2D ͞4iHRRիVWW'sd2ڦ Դ\M-`?~{!77J}ihhxxx(\W/$ڻwTTTa֬Y@a EGG7]UUE=ʓѭ[7|>_jVb4]x9XΝ;^1 #z CIDAT'e<_mnbBCCsΒ*\fxA&eبQM~h))5e\k2+\… %e0m&`0֮]РaC.\ tR__O1ү_?k*"ʥK$խ8ϗb544\._iDV__ߵkWms8ooo,!P'5=ihh(VgCCdG-^M$-aksc? _N%W\b$9.ۦHooojSSST/^_}||6Ca344lll2tpp`0&XUGmۯ_?|K.4gii|=O>p߽{ ?z6E>400߿Q.]JF_"uwwo(KKKwNA[幹M̞߯=;55䤺:??\#AqqyJ B>߭[7Z|]lleh֟lܹ׮RڵH !$2U!'''<<|Æ III%Kh!/2|{G*QOOOi)4FEOժU:uBB$ܾ}_ZZZ644DGG'%%%&&رϏnNNNxOM0\E"źw^iiÇKbɷ/LKāB/_nkk[WW0Rd֭[999I9#^z~#F9s=6ND/nGCȦMp.\o߾znUp"ڐf-- oo69 u"0`ʕ+-,,CCC,\=Կyl60!!זfJIIy~;tPq*"'O䔇-Sʝ~MMMlll~~7otuuW\٧O;wٳ߿>$$ŋffffMPJHַo_066^`QQQ)..&Σ.K$Fʝ_sð;w믇f2ի999:::aaa?Szzz@@@pp˗/%J6"@~|1̞=;$$#G444 Rݣ%]eidӧO&%%In+Ǐؘ#(??^haa).""Fٓ.HW^PUU%NߨΙ4779666MKiiiI[ġqm"0Ǐ]tb |1O8MOlB8 8ӸE6}>|]v=<|f;::S\onn^WWwq񥜜3gδ՞P="8pŨQnܸ[Z,!##;A\\[Rcƌ155زe˗wb__|BW_y2P "{Ydd0ѣIn?Jsfr ;v7WZZa>%PTT{Ϝ9=y$~Wj@>|@tD $2 !H A:HdA"COO>MQdb9TÃBtJ/^T} н{q)_۷o%+ԕaÆ}#Cd5tD )l WIENDB`././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414948.0 objgraph-3.5.0/docs/too-many.png0000664000175000017500000003340500000000000015554 0ustar00mgmg00000000000000PNG  IHDR=hJbKGD IDATxiXS0YYA5E{^mKuj;Xh[jV-j- * eBöA($a>p~ kD" BrBB~BH`B!$O!P$%%SRSS a0}_¼Brf|>(>!$g|~TTH̷y !<BH`B!$O0o!'B[! -B55|Cu/y !;w`& G<9a_O]Lυy !ѣa׮O ~$:O!z?)-RR)B**@WqBBO :/i~=()Ak+@u5Bd6yѠ:;/`F06rtB!ԇSkk#{ ag "[!ўz? ZZy !Ћ-\990u*dg:Da,B7߀=$&±c ƍbe[!::?lmhk{pnXtt >[)-JJ`2ؽ**o*+ahi?6m5k`$Oo55r4H$K"z4-**jѢET2$Go!'B[! -BB!yy ! vx EBhpuvv֒S]]]MMMjjjt}}}}}}333777򽁁1c^p|hn;@_3׮AZڳޓXX{LB`dhhhhhhmmMr8W鋓 ⴴǔ ի.v FHprz|Xvf[BHq\LrN7222333113fLfffpuHT^^NPTIIIww7ٍ5j̙v ;HH _ƍ`l8iDg0m0PT0a,[::׮%X;[? p_]]fѳf"( <3̼|rXv>48z}d`M07!,  3ɏ£Gz5l jj{ Oü'eeeeee[f{{ؼ*+as_'OxOUqln X^=aB GS8K555N711:uտ4ȇT~^~~~vvvAAxF9yѢENNNί3L ''ҥKIII)))V zg 3 %v[JسVo>pu.^Uz?--y\HL>v킕+A_`xX`$ػuM$Ζ!rZZZJVQQ!MF/ //////???//tuu@3d0DIIIIIIɍSN2eɓ_!WhE F2B{BH:qf*--(@dȑ#( $'r葥I,ED7n$&&&&&fddYXX̘1#""ܨK+<[!Bq8RaH[[f!!!#eiiLgP(,--}v^^^nn۷.INӧO'T dgg]|NWWdڵdH!BCNWW)@WVV#F =Ǔ̊DrS|w6ltrr3fԢz SRR555'M3L77_ÇrBi(SSS{{{{{ lllB]]]/G&_~رί?_.]tŤ<6vإKN:n߾Ãqr9y !VXXsQIII:NNN-z CRCR| .\z*dz:uƍ'Ok󑁕iӦg:88=zTgd-@ (//ݻw^cpp$oA7oܼy͛<]]]77%K=MW|A@@`_===/LLLg͚% ¼kii}NxG!IyĬ_:;;}¶6%%%GGGkzxx ƪjllLLLKLLҚ>}w}'qqq۶mKKKNHH`2ҹülijj{nAAzΝRqjèQ`}vvv7n޼ICBB`CMNN&]7oD"wwٳgJmH$:qĖ-[rrrX,VJJt.-/p1B$E;RŤ&n@zQ22ep\q*77㩫;(wwwuuu#}0әL`߲K ;w[p᧟~#i4ur|>_.~a'11y1o!$%wO.(( c}$E Ryѣ^3) Ǐ/鬝zyMMM kURR=m4&I*+.?ݻlҥׯwqqpp$ѣ & 𭉉\\nKqE9Nߺu3`BhPd=;wݻrqfffTLT&&&=Z" Ϟ=r]\\uvv8p`5k^?q^pa޼yl6zF(ydQ^^FVVVITGR/fffffffggx#F7nܸqƍNtIWӦM b2ܼ{;Zd灜yhk ̙v׀y WQSSsu_QQQKK 'srr5j zEEE$Q]~=''S__ˋdq |Cjŝ>}͛t:ߟb͞=[-=zh޽?_v?Pk~~{ڵ;v#-^=''d)2%cDEzG'n޼ޮ?qD2)`bccO>}ʕZЊbM2ex])RUUuC1UVZj'Rݻwڵ[l s&[F7gwss}^v----555//Y]]}ܸq~~~2{Zq8:22rĈ|[o5vxZلy !l}vss3Nuqq3f\O,o w vvv^^^Ǐrww|w…ss3gTJ޽{_uTT_||_aÆ;v߿?44t`,0orrry<Y`JzTjjjTG222ӯ^ndd$NT^^^%Z)))M4dX,gSƍgϞϖ,Y27;Bի8pȑ=¼P(s玸P~~~UU) -/OWWWVV##꾾dˋIt^rLwn``3d\~}gΜqwwꫯ _reLLLLL ,[Hnq}vkk+y#NT Hƃn߾FGT988f}}3gN>}6773f̘1cĉv.^6a„?b Ҽ>lٲg %d-pTx< &3q̞*555RїH$JKK;}t\\\AAvppٳL""Ӥ . Ԣl6;==ܹs^^^w'JJd!-$,2Ν;d%Ào5Kׯ\z5##IGG{ĉ&L)wQF͛7bx׊ E۷oϚ5+,,lබΞ=+`8d^N D♙YYYrܸq ,psssssr2>---%%Ux;wvtt뭘>|s鴴4.G$|cǶo~ݥKFFFEf̘QUU8ؗMB2FMمI|USS0P(IMM%c=gUM8q6ssrrbfΜ)믣+""p8K, N r R6ҥ0vT/~8QݻwQKɆWՕJrյkZ[['OLr4w~<\.… dEYYgϞ'_ :::۷gϞеk׎9R:p8 … 2;R:0o!.-4l02@~УG.^HrDfUTQ]]3{l9 쩩iϞ=?S{{U֭[7P[b&idd'&[HSȎ---?GGGELSkkkrr+WRRR7|||}}}pdggGUTTlvPPL Қ5k>i;m4[[3ghkkKҲ \ׯ_zXXXb dkASlmmMII|+WE"o+إ ??믿n޼$R}޽>XvSkf̘u)y50owݺuBb_tI. =*???믿Nocc0yɓ'Qhmm=uTLLLRRRWW7͞;w,oy/w ?yQ6mڴ`jSٶxݺu۷omm9s@FV:zքd߾iӦ/Q4eaaat:Fyxx^:::Qcccdd$RSSSQQaXT5X,Ҹqbcc{uVy(* üzˋXlQRRLWVVR8pfzzz ,ؿQQա ={tAUCCq k׮b^^^BD"hJJJ?Ձy ɚȕ+WUD***&LXn݉'>|HutSQQf ummm6q}Ct+%%% e˖EGG766Rz*'&$$PaaaJJJ:g=zDuݻ)))W\p8>>>o񆿿M~sNW)<ǏĈ aL&S]]^\\ԶPjժ_~eHm[0o !\.7%%Lhkk ӵcJK"kIJMMrƍ#J!pN81s ̜9SQ߻8cX,)l5/|>Ŋ'N8qĬYG`Rp ''ʕ+W\IMMmll444$I& ) .\HLLp8'O&J,IPYYyĉtmm9s,X 00P۾Hky<|pڴi\.711QYCRxSL}4N`` Ś>}mBO>~x||<X,,ؗIDATWggv _n[ [@` q FNSSSBB8WiiiM>=,,lY喙:>>>>>>11ޞb(z# O<CVΙ3'&&FQ]=SGGǾ};.vZo rlhl:Q=SRx***L&s֭YYY<!RRR()ص;66f+++"L YBp}}}]]z#ꭥjGݺu׷^x L8tŋI)<33˗=z(.^frkw=sLgg'աQ.[LWWFFDDQ=z(,,LKKhϞ=---TGl| _^LFFi) L1`ޢLgg >1cg͚wނCÇ#""X,={Bywޗ_~igg_|E^^AQj{:ni&HtE s\SJ-ip8ʸ>XZZƶRx<^BBի4,TFֈR}ĈWNIIM(pBCCUUU"##墳RRRw&yk7n|d7|9d?HVNNNYYYCYx"Uݿ/9D"?NIIy><|MMM;v짟~].\2ӯ ammm>͟9vXɳܹF#""ri[hd2`ԩ/(,XзLт(* ü%'c%VTTsN:b~rIK.c Ȉ̂SD_M>lݺ֭[i\\)me˖^/]xX,g,HӫL(Ng0έ[n `ޒGQUU%VUUU{-f$5uBCCI7|"K ,,FQmm^Ӻz_211RJ$utt̟?_iecc#[<:o_:uNwbcc}}}i4V=f"脇+T)0$࡛Z[[,Y_$%1QjE fΜsF={V(^_233kjjj<=={IIIqFhhFc2C?Ce[l˖-S^H$nܸAFؽ{R OcR^^tuu=֢\=z޽{sssΝpxwaXGEEӳ>o޼ :sӧWUUj#G+VC}ϟO?_xzz=OnnnMMA}z|ؼvmtek 7oJ7'[ы/CP{I/^s2i3g̝;W:nݺ;v<<>4MKK뙯jw~FOO~]=6o,8URRҗ_~ ǎ{P( ={)pO?t;M:_}ȑ#oP( } ---[C(v\xq>_Ç7m$y0nyt)_=%%XB>ז|777ry(++|!TTTRzr劔cL&Fc0=GM G.-\}Eg3)zQUU,hooҷhll@B' 2=::%;/44TMMM]]]CCCEEEGGGYYYKKKUUuذaÇg0T+U.~FOO_ԅOK Y ̙C]LC$oT ؔX˾CQ a55?7)55aLJN}ފ^jkk;#d>aKLUQ6 Jڶm۲RUUW_ ~82G2lɰ}$y]L&A<,]Ju4svV~ q>aH#$ʰh3ITG0yK(^|իUUU?CjjjzzիW>}l++ 6?x@CCcǎׯԨdd>aHh  puC(:LG<==KKKKpppشiSgg?f͚ܹs˗/_df`H#d>OTp\Dͥ,cď}Pߙ4P__###==wv G2lɰ}$S (@R>>/V4iʰ}$ G2l4$"R$#G>aH#Ejnvvvx,*骏1xC)>aH#Bܼu>zhuu5ommmp.2KTWd>aHh=7^xqjj* Om_d>aHѰxOfCdB!$-Rí9!bACZƌ YOB5)Qq#-'y30]_/3sGjJJb;:~ۮ]sv֚4{ӹs}_dbEoє ,њ4]}۱>d+MEѩS4%C|6_m8uJmJ!:ny9hٴ<]Q01=r3F̟Q%9Yj^?rϞGjap:llQP-'\n#abRեbHdmlƌ18!B)UkkPRYR^(TRW #G @YG999od~c#Hܗzѣg9Lte==5aWFϳ󎨻).B)u3W5;; 4ƍ-[l7߬ܵKRc|cL{BPKT{ sr"W|gߛ]+{f߾j|oqT.;i$sssjYTGuӧ|8F_Ū#GEGE=9OQȞ/un?#Oo= Ƴg6)[]]]kjjjXX[C܉'#~b6l@a<24yMwݿAAa|||{=mmmB0&&&..zɒ%SLBMjkk戈'&&{!F 6$tΝS)**|뭷Ԏ?а}vknn?>;::fϞMu\[۶m+((ؿ?&O>o<iXdKvvvxx|999T%++>:~8-BAξtĉu' ˗/3f֬YT%sD"ob &WHHHχ|>7<իWzyyikkQzx000 ---yݥ 0a򲳳;wŊT%[N81uT iB_]jUpp0ձȊcz绸P ze\=zUJKK7nܸf͚ÇJ?Yj*hkk;y<8bNNNT"Ӓnݺell,̙S~􂃃  ~hhh,_>SNQhnn[hՁ:wwׯ[qΝgΜ:"#'@r7n8(--~$/88`;wN>ᔕ*++MhjjZ[[/XO>sQ_g̘Au ('DdBGGեSRRե:Yw.ƛoiffc$#%%`:~aH^Sy !qx !<BH`B!$O?XkBIENDB`././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/docs/uncollectable.txt0000664000175000017500000000234000000000000016652 0ustar00mgmg00000000000000Uncollectable garbage --------------------- Objects that have a ``__del__`` method cannot be collected by the garbage collector if they participate in a cycle, prior to Python 3.4. >>> class Nondestructible(list): ... def __del__(self): ... pass >>> x = Nondestructible() >>> y = [] >>> z = [] >>> x.append(y) >>> y.append(z) >>> z.append(x) When you remove all other references to these, they end up in ``gc.garbage``. >>> import objgraph >>> del x, y, z >>> import gc >>> _ = gc.collect() >>> len(gc.garbage) 1 We highlight these objects by showing the existence of a ``__del__``. >>> objgraph.show_backrefs(objgraph.by_type('Nondestructible'), ... filename='finalizers.png') # doctest: +NODES_VARY Graph written to ....dot (8 nodes) Image generated as finalizers.png .. figure:: finalizers.png Note that classes that *define* a ``__del__`` method do not have this indicator >>> objgraph.show_refs(Nondestructible, max_depth=1, ... filename='class-with-finalizers.png') Graph written to ....dot (5 nodes) Image generated as class-with-finalizers.png .. figure:: class-with-finalizers.png ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1602414965.9142513 objgraph-3.5.0/objgraph.egg-info/0000775000175000017500000000000000000000000015634 5ustar00mgmg00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414965.0 objgraph-3.5.0/objgraph.egg-info/PKG-INFO0000664000175000017500000003537500000000000016746 0ustar00mgmg00000000000000Metadata-Version: 1.1 Name: objgraph Version: 3.5.0 Summary: Draws Python object reference graphs with graphviz Home-page: https://mg.pov.lt/objgraph/ Author: Marius Gedminas Author-email: marius@gedmin.as License: MIT Description: Python Object Graphs ==================== .. image:: https://travis-ci.org/mgedmin/objgraph.svg?branch=master :target: https://travis-ci.org/mgedmin/objgraph :alt: Build Status .. image:: https://ci.appveyor.com/api/projects/status/github/mgedmin/objgraph?branch=master&svg=true :target: https://ci.appveyor.com/project/mgedmin/objgraph :alt: Build Status (Windows) .. image:: https://coveralls.io/repos/mgedmin/objgraph/badge.svg?branch=master :target: https://coveralls.io/r/mgedmin/objgraph?branch=master :alt: Test Coverage .. image:: https://readthedocs.org/projects/objgraph/badge/?version=latest :target: https://readthedocs.org/projects/objgraph/?badge=latest :alt: Documentation Status ``objgraph`` is a module that lets you visually explore Python object graphs. You'll need `graphviz `_ if you want to draw the pretty graphs. I recommend `xdot `_ for interactive use. ``pip install xdot`` should suffice; objgraph will automatically look for it in your ``PATH``. Installation and Documentation ------------------------------ ``pip install objgraph`` or `download it from PyPI `_. Documentation lives at https://mg.pov.lt/objgraph. .. _history: History ------- I've developed a set of functions that eventually became objgraph when I was hunting for memory leaks in a Python program. The whole story -- with illustrated examples -- is in this series of blog posts: * `Hunting memory leaks in Python `_ * `Python object graphs `_ * `Object graphs with graphviz `_ .. _devel: Support and Development ----------------------- The source code can be found in this Git repository: https://github.com/mgedmin/objgraph. To check it out, use ``git clone https://github.com/mgedmin/objgraph``. Report bugs at https://github.com/mgedmin/objgraph/issues. Changes ======= 3.5.0 (2020-10-11) ------------------ - Do not require ``mock`` for the test suite on Python 3; use unittest.mock instead. - 100% test coverage for each version of Python rather than combined, using ``coverage-python-version``. - Add the optional ``extra_node_attrs`` parameter to ``show_backrefs`` and ``show_backrefs`` - Fix IPython/Jupyter inline graph support code that would kick in even if you explicitly passed a filename='foo.png' argument to ``show_refs``/``show_backrefs``. See `issue 47 `_. - Add support for Python 3.8. - Drop support for Python 3.5. 3.4.1 (2019-04-23) ------------------ - Add support for Python 3.7. - Drop support for Python 3.3 and 3.4. 3.4.0 (2018-02-13) ------------------ - New functions: `get_new_ids`, `at_addrs`. Contributed by Justin Black in `PR 36 `_. 3.3.0 (2017-12-28) ------------------ - New function: `growth`. 3.2.0 (2017-12-20) ------------------ - New ``filter`` argument for `typestats`, `most_common_types`, `show_most_common_types`, `show_growth`. - Show lambda functions in a more human-friendly way. 3.1.2 (2017-11-27) ------------------ - Correct UTF-8 mojibake in the changelog and switch all links to HTTPS. 3.1.1 (2017-10-30) ------------------ - Add support for Python 3.6. - Replace bare ``except:`` in ``safe_repr()`` with ``except Exception:``. 3.1.0 (2016-12-07) ------------------ - Support displaying graphs inline in IPython/Jupyter notebooks (`issue 28 `). 3.0.1 (2016-09-17) ------------------ - The ``file`` argument of `show_most_common_types` and `show_growth` now defaults to ``None`` instead of ``sys.stdout``. ``None`` is interpreted to be the same as ``sys.stdout``, which means the right stdout will be used if you change it at runtime (which happens, in doctests). 3.0.0 (2016-04-13) ------------------ - `show_most_common_types` and `show_growth` now accept a ``file`` argument if you want to redirect the output elsewhere. Fixes `issue 24 `_. Contributed by "d-sun-d". - Don't trust ``__class__`` to be accurate and ``__name__`` to be a string. Fixes errors in some convoluted corner cases when mocks are involved. Contributed by Andrew Shannon Brown in `PR 26 `_. - Drop support for Python 2.4, 2.5, and 2.6. - Drop support for Python 3.1 and 3.2. - Add support for Python 3.5. 2.0.1 (2015-07-28) ------------------ - Avoid creating reference cycles between the stack frame and the local ``objects`` variable in `by_type`, `count`, and `typestats`. Fixes `issue 22 `_. Contributed by Erik Bray. 2.0.0 (2015-04-18) ------------------ - `show_refs` and `show_backrefs` now accept a file-like object (via the new ``output`` argument) as an alternative to a filename. - Made internal helper methods private. This includes `find_chain`, `show_graph`, `obj_node_id`, `obj_label`, `quote`, `long_typename`, `safe_repr`, `short_repr`, `gradient`, `edge_label`, and `_program_in_path`. - Correctly determine the name of old-style classes in `count`, `by_type`, and graph drawing functions. Fixes `issue 16 `_. Contributed by Mike Lambert. 1.8.1 (2014-05-15) ------------------ - Do not expect file objects to have an ``encoding`` attribute. Makes objgraph compatible with Eventlet's monkey-patching. Fixes `issue 6 `_. Contributed by Jakub Stasiak. 1.8.0 (2014-02-13) ------------------ - Moved to GitHub. - Python 3.4 support (`LP#1270872 `_). - New function: `is_proper_module`. - New ``shortnames`` argument for `typestats`, `most_common_types`, `show_most_common_types`, `show_growth`, `show_refs`, and `show_backrefs`. `count` and `by_type` accept fully-qualified type names now. Fixes `issue 4 `_. 1.7.2 (2012-10-23) ------------------ - Bugfix: setup.py sdist was broken on Python 2.7 (UnicodeDecodeError in tarfile). - The ``filename`` argument for `show_refs` and `show_backrefs` now allows arbitrary image formats, not just PNG. Patch by `Riccardo Murri `_. - Temporary dot files are now named `objgraph-*.dot` instead of `tmp*.dot`. - Python 3.3 support: no code changes, but some tests started failing because the new and improved dictionary implementation no longer holds references to str objects used as dict keys. - Added a tox.ini for convenient multi-Python testing. 1.7.1 (2011-12-11) ------------------ - Bugfix: non-ASCII characters in object representations would break graph generation on Python 3.x, in some locales (e.g. with LC_ALL=C). Reported and fixed by `Stefano Rivera `_. - Bugfix: setup.py was broken on Python 3.x - Bugfix: dot.exe/xdot.exe were not found on Windows (`LP#767239 `_). - Documentation updates: document the forgotten `find_ref_chain`, update `show_chain` prototype. 1.7.0 (2011-03-11) ------------------ - New function: `find_ref_chain`. - New ``backrefs`` argument for `show_chain`. - New function: `get_leaking_objects`, based on `a blog post by Kristján Valur `_. - New ``objects`` argument for `count`, `typestats`, `most_common_types`, `show_most_common_types`, and `by_type`. - Edges pointing to function attributes such as __defaults__ or __globals__ are now labeled. - Edge labels that are not simple strings now show the type. - Bugfix: '\0' and other unsafe characters used in a dictionary key could break graph generation. - Bugfix: show_refs(..., filename='graph.dot') would then go to complain about unrecognized file types and then produce a png. 1.6.0 (2010-12-18) ------------------ - Python 3 support, thanks to Stefano Rivera (fixes `LP#687601 `_). - Removed weird weakref special-casing. 1.5.1 (2010-12-09) ------------------ - Avoid test failures in uncollectable-garbage.txt (fixes `LP#686731 `_). - Added HACKING.txt (later renamed to HACKING.rst). 1.5.0 (2010-12-05) ------------------ - Show frame objects as well (fixes `LP#361704 `_). - New functions: `show_growth`, `show_chain`. - `find_backref_chain` returns ``[obj]`` instead of ``None`` when a chain could not be found. This makes ``show_chain(find_backref_chain(...), ...)`` not break. - Show how many references were skipped from the output of `show_refs`/`show_backrefs` by specifying ``too_many``. - Make `show_refs` descend into modules. - Do not highlight classes that define a ``__del__``, highlight only instances of those classes. - Option to show reference counts in `show_refs`/`show_backrefs`. - Add `Sphinx `_ documentation and a PyPI long description. 1.4.0 (2010-11-03) ------------------ - Compatibility with Python 2.4 and 2.5 (``tempfile.NamedTemporaryFile`` has no ``delete`` argument). - New function: `most_common_types`. 1.3.1 (2010-07-17) ------------------ - Rebuild an sdist with no missing files (fixes `LP#606604 `_). - Added MANIFEST.in and a Makefile to check that setup.py sdist generates source distributions with no files missing. 1.3 (2010-07-13) ---------------- - Highlight objects with a ``__del__`` method. - Fixes `LP#483411 `_: suggest always passing ``[obj]`` to `show_refs`, `show_backrefs`, since obj might be a list/tuple. - Fixes `LP#514422 `_: `show_refs`, `show_backrefs` don't create files in the current working directory any more. Instead they accept a filename argument, which can be a .dot file or a .png file. If None or not specified, those functions will try to spawn xdot as before. - New extra_info argument to graph-generating functions (patch by Thouis Jones, `LP#558914 `_). - setup.py should work with distutils now (`LP#604430 `_, thanks to Randy Heydon). 1.2 (2009-03-25) ---------------- - Project website, public source repository, uploaded to PyPI. - No code changes. 1.1 (2008-09-10) ---------------- - New function: `show_refs` for showing forward references. - New functions: `typestats` and `show_most_common_types`. - Object boxes are less crammed with useless information (such as IDs). - Spawns `xdot `_ if it is available. 1.0 (2008-06-14) ---------------- - First public release. Keywords: object graph visualization graphviz garbage collection Platform: UNKNOWN Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414965.0 objgraph-3.5.0/objgraph.egg-info/SOURCES.txt0000664000175000017500000000165600000000000017530 0ustar00mgmg00000000000000.coveragerc .gitattributes .gitignore .travis.yml CHANGES.rst HACKING.rst LICENSE MANIFEST.in Makefile README.rst appveyor.yml objgraph.py other-requirements.txt release.mk setup.cfg setup.py tests.py tox.ini docs/42.png docs/CHANGES.txt docs/HACKING.txt docs/all-the-chars.dot docs/canary-chain.png docs/canary.png docs/chain.png docs/chain.txt docs/class-with-finalizers.png docs/conf.py docs/extra-info.png docs/extra-info.txt docs/finalizers.png docs/forward-chain.png docs/generator-sample.txt docs/highlight.png docs/highlighting.txt docs/index.txt docs/objgraph.txt docs/quoting.txt docs/refcounts.png docs/references.txt docs/roots.png docs/sample-backref-graph.png docs/sample-graph.png docs/too-many.png docs/uncollectable.txt docs/_static/mg.css objgraph.egg-info/PKG-INFO objgraph.egg-info/SOURCES.txt objgraph.egg-info/dependency_links.txt objgraph.egg-info/requires.txt objgraph.egg-info/top_level.txt objgraph.egg-info/zip-safe././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414965.0 objgraph-3.5.0/objgraph.egg-info/dependency_links.txt0000664000175000017500000000000100000000000021702 0ustar00mgmg00000000000000 ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414965.0 objgraph-3.5.0/objgraph.egg-info/requires.txt0000664000175000017500000000001100000000000020224 0ustar00mgmg00000000000000graphviz ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414965.0 objgraph-3.5.0/objgraph.egg-info/top_level.txt0000664000175000017500000000001100000000000020356 0ustar00mgmg00000000000000objgraph ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602175369.0 objgraph-3.5.0/objgraph.egg-info/zip-safe0000664000175000017500000000000100000000000017264 0ustar00mgmg00000000000000 ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414435.0 objgraph-3.5.0/objgraph.py0000775000175000017500000012500600000000000014523 0ustar00mgmg00000000000000""" Tools for drawing Python object reference graphs with graphviz. You can find documentation online at https://mg.pov.lt/objgraph/ Copyright (c) 2008-2017 Marius Gedminas and contributors Released under the MIT licence. """ # 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. from __future__ import print_function import codecs import collections import gc import re import inspect import types import operator import os import subprocess import tempfile import sys import itertools try: # Python 2.x compatibility from StringIO import StringIO except ImportError: # pragma: PY3 from io import StringIO try: from types import InstanceType except ImportError: # pragma: PY3 # Python 3.x compatibility InstanceType = None __author__ = "Marius Gedminas (marius@gedmin.as)" __copyright__ = "Copyright (c) 2008-2017 Marius Gedminas and contributors" __license__ = "MIT" __version__ = '3.5.0' __date__ = '2020-10-11' try: basestring except NameError: # pragma: PY3 # Python 3.x compatibility basestring = str try: iteritems = dict.iteritems except AttributeError: # pragma: PY3 # Python 3.x compatibility iteritems = dict.items IS_INTERACTIVE = False try: # pragma: nocover import graphviz if 'TerminalInteractiveShell' not in get_ipython().__class__.__name__: # So far I know two shells where it's inappropriate to use inline # graphics, because they're text only: # - ipython uses a TerminalInteractiveShell # - pycharm's console uses PyDevTerminalInteractiveShell IS_INTERACTIVE = True except (NameError, ImportError): pass def _isinstance(object, classinfo): """Return whether an object is an instance of a class or its subclass. Differs from the builtin isinstance() implementation in that it does not depend on the ``__class__`` attribute which is proxied by mock.Mock(spec=...). """ return issubclass(type(object), classinfo) def count(typename, objects=None): """Count objects tracked by the garbage collector with a given class name. The class name can optionally be fully qualified. Example: >>> count('dict') 42 >>> count('mymodule.MyClass') 2 .. note:: The Python garbage collector does not track simple objects like int or str. See https://docs.python.org/3/library/gc.html#gc.is_tracked for more information. Instead of looking through all objects tracked by the GC, you may specify your own collection, e.g. >>> count('MyClass', get_leaking_objects()) 3 See also: :func:`get_leaking_objects`. .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 Accepts fully-qualified type names (i.e. 'package.module.ClassName') as well as short type names (i.e. 'ClassName'). """ if objects is None: objects = gc.get_objects() try: if '.' in typename: return sum(1 for o in objects if _long_typename(o) == typename) else: return sum(1 for o in objects if _short_typename(o) == typename) finally: del objects # clear cyclic references to frame def typestats(objects=None, shortnames=True, filter=None): """Count the number of instances for each type tracked by the GC. Note that the GC does not track simple objects like int or str. Note that classes with the same name but defined in different modules will be lumped together if ``shortnames`` is True. If ``filter`` is specified, it should be a function taking one argument and returning a boolean. Objects for which ``filter(obj)`` returns ``False`` will be ignored. Example: >>> typestats() {'list': 12041, 'tuple': 10245, ...} >>> typestats(get_leaking_objects()) {'MemoryError': 1, 'tuple': 2795, 'RuntimeError': 1, 'list': 47, ...} .. versionadded:: 1.1 .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 3.1.3 New parameter: ``filter``. """ if objects is None: objects = gc.get_objects() try: if shortnames: typename = _short_typename else: typename = _long_typename stats = {} for o in objects: if filter and not filter(o): continue n = typename(o) stats[n] = stats.get(n, 0) + 1 return stats finally: del objects # clear cyclic references to frame def most_common_types(limit=10, objects=None, shortnames=True, filter=None): """Count the names of types with the most instances. Returns a list of (type_name, count), sorted most-frequent-first. Limits the return value to at most ``limit`` items. You may set ``limit`` to None to avoid that. If ``filter`` is specified, it should be a function taking one argument and returning a boolean. Objects for which ``filter(obj)`` returns ``False`` will be ignored. The caveats documented in :func:`typestats` apply. Example: >>> most_common_types(limit=2) [('list', 12041), ('tuple', 10245)] .. versionadded:: 1.4 .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 3.1.3 New parameter: ``filter``. """ stats = sorted( typestats(objects, shortnames=shortnames, filter=filter).items(), key=operator.itemgetter(1), reverse=True) if limit: stats = stats[:limit] return stats def show_most_common_types( limit=10, objects=None, shortnames=True, file=None, filter=None): """Print the table of types of most common instances. If ``filter`` is specified, it should be a function taking one argument and returning a boolean. Objects for which ``filter(obj)`` returns ``False`` will be ignored. The caveats documented in :func:`typestats` apply. Example: >>> show_most_common_types(limit=5) tuple 8959 function 2442 wrapper_descriptor 1048 dict 953 builtin_function_or_method 800 .. versionadded:: 1.1 .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 3.0 New parameter: ``file``. .. versionchanged:: 3.1.3 New parameter: ``filter``. """ if file is None: file = sys.stdout stats = most_common_types(limit, objects, shortnames=shortnames, filter=filter) width = max(len(name) for name, count in stats) for name, count in stats: file.write('%-*s %i\n' % (width, name, count)) def growth(limit=10, peak_stats={}, shortnames=True, filter=None): """Count the increase in peak object since last call. Returns a list of (type_name, total_count, increase_delta), descending order by increase_delta. Limits the output to ``limit`` largest deltas. You may set ``limit`` to None to see all of them. Uses and updates ``peak_stats``, a dictionary from type names to previously seen peak object counts. Usually you don't need to pay attention to this argument. If ``filter`` is specified, it should be a function taking one argument and returning a boolean. Objects for which ``filter(obj)`` returns ``False`` will be ignored. The caveats documented in :func:`typestats` apply. Example: >>> growth(2) [(tuple, 12282, 10), (dict, 1922, 7)] .. versionadded:: 3.3.0 """ gc.collect() stats = typestats(shortnames=shortnames, filter=filter) deltas = {} for name, count in iteritems(stats): old_count = peak_stats.get(name, 0) if count > old_count: deltas[name] = count - old_count peak_stats[name] = count deltas = sorted(deltas.items(), key=operator.itemgetter(1), reverse=True) if limit: deltas = deltas[:limit] return [(name, stats[name], delta) for name, delta in deltas] def show_growth(limit=10, peak_stats=None, shortnames=True, file=None, filter=None): """Show the increase in peak object counts since last call. if ``peak_stats`` is None, peak object counts will recorded in func `growth`, and your can record the counts by yourself with set ``peak_stats`` to a dictionary. The caveats documented in :func:`growth` apply. Example: >>> show_growth() wrapper_descriptor 970 +14 tuple 12282 +10 dict 1922 +7 ... .. versionadded:: 1.5 .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 2.1 New parameter: ``file``. .. versionchanged:: 3.1.3 New parameter: ``filter``. """ if peak_stats is None: result = growth(limit, shortnames=shortnames, filter=filter) else: result = growth(limit, peak_stats, shortnames, filter) if result: if file is None: file = sys.stdout width = max(len(name) for name, _, _ in result) for name, count, delta in result: file.write('%-*s%9d %+9d\n' % (width, name, count, delta)) def get_new_ids(skip_update=False, limit=10, sortby='deltas', shortnames=None, file=None, _state={}): """Find and display new objects allocated since last call. Shows the increase in object counts since last call to this function and returns the memory address ids for new objects. Returns a dictionary mapping object type names to sets of object IDs that have been created since the last time this function was called. ``skip_update`` (bool): If True, returns the same dictionary that was returned during the previous call without updating the internal state or examining the objects currently in memory. ``limit`` (int): The maximum number of rows that you want to print data for. Use 0 to suppress the printing. Use None to print everything. ``sortby`` (str): This is the column that you want to sort by in descending order. Possible values are: 'old', 'current', 'new', 'deltas' ``shortnames`` (bool): If True, classes with the same name but defined in different modules will be lumped together. If False, all type names will be qualified with the module name. If None (default), ``get_new_ids`` will remember the value from previous calls, so it's enough to prime this once. By default the primed value is True. ``_state`` (dict): Stores old, current, and new_ids in memory. It is used by the function to store the internal state between calls. Never pass in this argument unless you know what you're doing. The caveats documented in :func:`growth` apply. When one gets new_ids from :func:`get_new_ids`, one can use :func:`at_addrs` to get a list of those objects. Then one can iterate over the new objects, print out what they are, and call :func:`show_backrefs` or :func:`show_chain` to see where they are referenced. Example: >>> _ = get_new_ids() # store current objects in _state >>> _ = get_new_ids() # current_ids become old_ids in _state >>> a = [0, 1, 2] # list we don't know about >>> b = [3, 4, 5] # list we don't know about >>> new_ids = get_new_ids(limit=3) # we see new lists ====================================================================== Type Old_ids Current_ids New_ids Count_Deltas ====================================================================== list 324 326 +3 +2 dict 1125 1125 +0 +0 wrapper_descriptor 1001 1001 +0 +0 ====================================================================== >>> new_lists = at_addrs(new_ids['list']) >>> a in new_lists True >>> b in new_lists True .. versionadded:: 3.4 """ if not _state: _state['old'] = collections.defaultdict(set) _state['current'] = collections.defaultdict(set) _state['new'] = collections.defaultdict(set) _state['shortnames'] = True new_ids = _state['new'] if skip_update: return new_ids old_ids = _state['old'] current_ids = _state['current'] if shortnames is None: shortnames = _state['shortnames'] else: _state['shortnames'] = shortnames gc.collect() objects = gc.get_objects() for class_name in old_ids: old_ids[class_name].clear() for class_name, ids_set in current_ids.items(): old_ids[class_name].update(ids_set) for class_name in current_ids: current_ids[class_name].clear() for o in objects: if shortnames: class_name = _short_typename(o) else: class_name = _long_typename(o) id_number = id(o) current_ids[class_name].add(id_number) for class_name in new_ids: new_ids[class_name].clear() rows = [] keys_to_remove = [] for class_name in current_ids: num_old = len(old_ids[class_name]) num_current = len(current_ids[class_name]) if num_old == 0 and num_current == 0: # remove the key from our dicts if we don't have any old or # current class_name objects keys_to_remove.append(class_name) continue new_ids_set = current_ids[class_name] - old_ids[class_name] new_ids[class_name].update(new_ids_set) num_new = len(new_ids_set) num_delta = num_current - num_old row = (class_name, num_old, num_current, num_new, num_delta) rows.append(row) for key in keys_to_remove: del old_ids[key] del current_ids[key] del new_ids[key] index_by_sortby = {'old': 1, 'current': 2, 'new': 3, 'deltas': 4} rows.sort(key=operator.itemgetter(index_by_sortby[sortby], 0), reverse=True) if limit is not None: rows = rows[:limit] if not rows: return new_ids if file is None: file = sys.stdout width = max(len(row[0]) for row in rows) print('='*(width+13*4), file=file) print('%-*s%13s%13s%13s%13s' % (width, 'Type', 'Old_ids', 'Current_ids', 'New_ids', 'Count_Deltas'), file=file) print('='*(width+13*4), file=file) for row_class, old, current, new, delta in rows: print('%-*s%13d%13d%+13d%+13d' % (width, row_class, old, current, new, delta), file=file) print('='*(width+13*4), file=file) return new_ids def get_leaking_objects(objects=None): """Return objects that do not have any referents. These could indicate reference-counting bugs in C code. Or they could be legitimate. Note that the GC does not track simple objects like int or str. .. versionadded:: 1.7 """ if objects is None: gc.collect() objects = gc.get_objects() try: ids = set(id(i) for i in objects) for i in objects: ids.difference_update(id(j) for j in gc.get_referents(i)) # this then is our set of objects without referrers return [i for i in objects if id(i) in ids] finally: del objects, i # clear cyclic references to frame def by_type(typename, objects=None): """Return objects tracked by the garbage collector with a given class name. Example: >>> by_type('MyClass') [] Note that the GC does not track simple objects like int or str. .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 Accepts fully-qualified type names (i.e. 'package.module.ClassName') as well as short type names (i.e. 'ClassName'). """ if objects is None: objects = gc.get_objects() try: if '.' in typename: return [o for o in objects if _long_typename(o) == typename] else: return [o for o in objects if _short_typename(o) == typename] finally: del objects # clear cyclic references to frame def at(addr): """Return an object at a given memory address. The reverse of id(obj): >>> at(id(obj)) is obj True Note that this function does not work on objects that are not tracked by the GC (e.g. ints or strings). """ for o in gc.get_objects(): if id(o) == addr: return o return None def at_addrs(address_set): """Return a list of objects for a given set of memory addresses. The reverse of [id(obj1), id(obj2), ...]. Note that objects are returned in an arbitrary order. When one gets ``new_ids`` from :func:`get_new_ids`, one can use this function to get a list of those objects. Then one can iterate over the new objects, print out what they are, and call :func:`show_backrefs` or :func:`show_chain` to see where they are referenced. >>> a = [0, 1, 2] >>> new_ids = get_new_ids() >>> new_lists = at_addrs(new_ids['list']) >>> a in new_lists True Note that this function does not work on objects that are not tracked by the GC (e.g. ints or strings). .. versionadded:: 3.4 """ res = [] for o in gc.get_objects(): if id(o) in address_set: res.append(o) return res def find_ref_chain(obj, predicate, max_depth=20, extra_ignore=()): """Find a shortest chain of references leading from obj. The end of the chain will be some object that matches your predicate. ``predicate`` is a function taking one argument and returning a boolean. ``max_depth`` limits the search depth. ``extra_ignore`` can be a list of object IDs to exclude those objects from your search. Example: >>> find_ref_chain(obj, lambda x: isinstance(x, MyClass)) [obj, ..., ] Returns ``[obj]`` if such a chain could not be found. .. versionadded:: 1.7 """ return _find_chain(obj, predicate, gc.get_referents, max_depth=max_depth, extra_ignore=extra_ignore)[::-1] def find_backref_chain(obj, predicate, max_depth=20, extra_ignore=()): """Find a shortest chain of references leading to obj. The start of the chain will be some object that matches your predicate. ``predicate`` is a function taking one argument and returning a boolean. ``max_depth`` limits the search depth. ``extra_ignore`` can be a list of object IDs to exclude those objects from your search. Example: >>> find_backref_chain(obj, is_proper_module) [, ..., obj] Returns ``[obj]`` if such a chain could not be found. .. versionchanged:: 1.5 Returns ``obj`` instead of ``None`` when a chain could not be found. """ return _find_chain(obj, predicate, gc.get_referrers, max_depth=max_depth, extra_ignore=extra_ignore) def show_backrefs(objs, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True, output=None, extra_node_attrs=None): """Generate an object reference graph ending at ``objs``. The graph will show you what objects refer to ``objs``, directly and indirectly. ``objs`` can be a single object, or it can be a list of objects. If unsure, wrap the single object in a new list. ``filename`` if specified, can be the name of a .dot or a image file, whose extension indicates the desired output format; note that output to a specific format is entirely handled by GraphViz: if the desired format is not supported, you just get the .dot file. If ``filename`` and ``output`` are not specified, ``show_backrefs`` will try to display the graph inline (if you're using IPython), otherwise it'll try to produce a .dot file and spawn a viewer (xdot). If xdot is not available, ``show_backrefs`` will convert the .dot file to a .png and print its name. ``output`` if specified, the GraphViz output will be written to this file object. ``output`` and ``filename`` should not both be specified. Use ``max_depth`` and ``too_many`` to limit the depth and breadth of the graph. Use ``filter`` (a predicate) and ``extra_ignore`` (a list of object IDs) to remove undesired objects from the graph. Use ``highlight`` (a predicate) to highlight certain graph nodes in blue. Use ``extra_info`` (a function taking one argument and returning a string) to report extra information for objects. Use ``extra_node_attrs`` (a function taking the current object as argument, returning a dict of strings) to add extra attributes to the nodes. See https://www.graphviz.org/doc/info/attrs.html for a list of possible node attributes. Specify ``refcounts=True`` if you want to see reference counts. These will mostly match the number of arrows pointing to an object, but can be different for various reasons. Specify ``shortnames=False`` if you want to see fully-qualified type names ('package.module.ClassName'). By default you get to see only the class name part. Examples: >>> show_backrefs(obj) >>> show_backrefs([obj1, obj2]) >>> show_backrefs(obj, max_depth=5) >>> show_backrefs(obj, filter=lambda x: not inspect.isclass(x)) >>> show_backrefs(obj, highlight=inspect.isclass) >>> show_backrefs(obj, extra_ignore=[id(locals())]) >>> show_backrefs(obj, extra_node_attrs=lambda x: dict(URL=str(id(x)))) .. versionchanged:: 1.3 New parameters: ``filename``, ``extra_info``. .. versionchanged:: 1.5 New parameter: ``refcounts``. .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 2.0 New parameter: ``output``. .. versionchanged:: 3.5 New parameter: ``extra_node_attrs``. """ # For show_backrefs(), it makes sense to stop when reaching a # module because you'll end up in sys.modules and explode the # graph with useless clutter. That's why we're specifying # cull_func here, but not in show_graph(). return _show_graph(objs, max_depth=max_depth, extra_ignore=extra_ignore, filter=filter, too_many=too_many, highlight=highlight, edge_func=gc.get_referrers, swap_source_target=False, filename=filename, output=output, extra_info=extra_info, refcounts=refcounts, shortnames=shortnames, cull_func=is_proper_module, extra_node_attrs=extra_node_attrs) def show_refs(objs, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True, output=None, extra_node_attrs=None): """Generate an object reference graph starting at ``objs``. The graph will show you what objects are reachable from ``objs``, directly and indirectly. ``objs`` can be a single object, or it can be a list of objects. If unsure, wrap the single object in a new list. ``filename`` if specified, can be the name of a .dot or a image file, whose extension indicates the desired output format; note that output to a specific format is entirely handled by GraphViz: if the desired format is not supported, you just get the .dot file. If ``filename`` and ``output`` is not specified, ``show_refs`` will try to display the graph inline (if you're using IPython), otherwise it'll try to produce a .dot file and spawn a viewer (xdot). If xdot is not available, ``show_refs`` will convert the .dot file to a .png and print its name. ``output`` if specified, the GraphViz output will be written to this file object. ``output`` and ``filename`` should not both be specified. Use ``max_depth`` and ``too_many`` to limit the depth and breadth of the graph. Use ``filter`` (a predicate) and ``extra_ignore`` (a list of object IDs) to remove undesired objects from the graph. Use ``highlight`` (a predicate) to highlight certain graph nodes in blue. Use ``extra_info`` (a function returning a string) to report extra information for objects. Use ``extra_node_attrs`` (a function taking the current object as argument, returning a dict of strings) to add extra attributes to the nodes. See https://www.graphviz.org/doc/info/attrs.html for a list of possible node attributes. Specify ``refcounts=True`` if you want to see reference counts. Examples: >>> show_refs(obj) >>> show_refs([obj1, obj2]) >>> show_refs(obj, max_depth=5) >>> show_refs(obj, filter=lambda x: not inspect.isclass(x)) >>> show_refs(obj, highlight=inspect.isclass) >>> show_refs(obj, extra_ignore=[id(locals())]) >>> show_refs(obj, extra_node_attrs=lambda x: dict(URL=str(id(x)))) .. versionadded:: 1.1 .. versionchanged:: 1.3 New parameters: ``filename``, ``extra_info``. .. versionchanged:: 1.5 Follows references from module objects instead of stopping. New parameter: ``refcounts``. .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 2.0 New parameter: ``output``. .. versionchanged:: 3.5 New parameter: ``extra_node_attrs``. """ return _show_graph(objs, max_depth=max_depth, extra_ignore=extra_ignore, filter=filter, too_many=too_many, highlight=highlight, edge_func=gc.get_referents, swap_source_target=True, filename=filename, extra_info=extra_info, refcounts=refcounts, shortnames=shortnames, output=output, extra_node_attrs=extra_node_attrs) def show_chain(*chains, **kw): """Show a chain (or several chains) of object references. Useful in combination with :func:`find_ref_chain` or :func:`find_backref_chain`, e.g. >>> show_chain(find_backref_chain(obj, is_proper_module)) You can specify if you want that chain traced backwards or forwards by passing a ``backrefs`` keyword argument, e.g. >>> show_chain(find_ref_chain(obj, is_proper_module), ... backrefs=False) Ideally this shouldn't matter, but for some objects :func:`gc.get_referrers` and :func:`gc.get_referents` are not perfectly symmetrical. You can specify ``highlight``, ``extra_info``, ``refcounts``, ``shortnames``, ``filename`` or ``output`` arguments like for :func:`show_backrefs` or :func:`show_refs`. .. versionadded:: 1.5 .. versionchanged:: 1.7 New parameter: ``backrefs``. .. versionchanged:: 2.0 New parameter: ``output``. """ backrefs = kw.pop('backrefs', True) chains = [chain for chain in chains if chain] # remove empty ones def in_chains(x, ids=set(map(id, itertools.chain(*chains)))): return id(x) in ids max_depth = max(map(len, chains)) - 1 if backrefs: show_backrefs([chain[-1] for chain in chains], max_depth=max_depth, filter=in_chains, **kw) else: show_refs([chain[0] for chain in chains], max_depth=max_depth, filter=in_chains, **kw) def is_proper_module(obj): """ Returns ``True`` if ``obj`` can be treated like a garbage collector root. That is, if ``obj`` is a module that is in ``sys.modules``. >>> import types >>> is_proper_module([]) False >>> is_proper_module(types) True >>> is_proper_module(types.ModuleType('foo')) False .. versionadded:: 1.8 """ return ( inspect.ismodule(obj) and obj is sys.modules.get(getattr(obj, '__name__', None)) ) # # Internal helpers # def _find_chain(obj, predicate, edge_func, max_depth=20, extra_ignore=()): queue = [obj] depth = {id(obj): 0} parent = {id(obj): None} ignore = set(extra_ignore) ignore.add(id(extra_ignore)) ignore.add(id(queue)) ignore.add(id(depth)) ignore.add(id(parent)) ignore.add(id(ignore)) ignore.add(id(sys._getframe())) # this function ignore.add(id(sys._getframe(1))) # find_chain/find_backref_chain gc.collect() while queue: target = queue.pop(0) if predicate(target): chain = [target] while parent[id(target)] is not None: target = parent[id(target)] chain.append(target) return chain tdepth = depth[id(target)] if tdepth < max_depth: referrers = edge_func(target) ignore.add(id(referrers)) for source in referrers: if id(source) in ignore: continue if id(source) not in depth: depth[id(source)] = tdepth + 1 parent[id(source)] = target queue.append(source) return [obj] # not found def _show_graph(objs, edge_func, swap_source_target, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True, output=None, cull_func=None, extra_node_attrs=None): if not _isinstance(objs, (list, tuple)): objs = [objs] is_interactive = False if filename and output: raise ValueError('Cannot specify both output and filename.') elif output: f = output elif filename and filename.endswith('.dot'): f = codecs.open(filename, 'w', encoding='utf-8') dot_filename = filename elif IS_INTERACTIVE and not filename: is_interactive = True f = StringIO() else: fd, dot_filename = tempfile.mkstemp(prefix='objgraph-', suffix='.dot', text=True) f = os.fdopen(fd, "w") if getattr(f, 'encoding', None): # pragma: PY3 # Python 3 will wrap the file in the user's preferred encoding # Re-wrap it for utf-8 import io f = io.TextIOWrapper(f.detach(), 'utf-8') f.write('digraph ObjectGraph {\n' ' node[shape=box, style=filled, fillcolor=white];\n') queue = [] depth = {} ignore = set(extra_ignore) ignore.add(id(objs)) ignore.add(id(extra_ignore)) ignore.add(id(queue)) ignore.add(id(depth)) ignore.add(id(ignore)) ignore.add(id(sys._getframe())) # this function ignore.add(id(sys._getframe().f_locals)) ignore.add(id(sys._getframe(1))) # show_refs/show_backrefs ignore.add(id(sys._getframe(1).f_locals)) for obj in objs: f.write(' %s[fontcolor=red];\n' % (_obj_node_id(obj))) depth[id(obj)] = 0 queue.append(obj) del obj gc.collect() nodes = 0 while queue: nodes += 1 # The names "source" and "target" are reversed here because # originally there was just show_backrefs() and we were # traversing the reference graph backwards. target = queue.pop(0) tdepth = depth[id(target)] f.write(' %s[label="%s"%s];\n' % (_obj_node_id(target), _obj_label(target, extra_info, refcounts, shortnames), _obj_attrs(target, extra_node_attrs))) h, s, v = _gradient((0, 0, 1), (0, 0, .3), tdepth, max_depth) if inspect.ismodule(target): h = .3 s = 1 if highlight and highlight(target): h = .6 s = .6 v = 0.5 + v * 0.5 f.write(' %s[fillcolor="%g,%g,%g"];\n' % (_obj_node_id(target), h, s, v)) if v < 0.5: f.write(' %s[fontcolor=white];\n' % (_obj_node_id(target))) if hasattr(getattr(target, '__class__', None), '__del__'): f.write(' %s->%s_has_a_del[color=red,style=dotted,' 'len=0.25,weight=10];\n' % (_obj_node_id(target), _obj_node_id(target))) f.write(' %s_has_a_del[label="__del__",shape=doublecircle,' 'height=0.25,color=red,fillcolor="0,.5,1",fontsize=6];\n' % (_obj_node_id(target))) if tdepth >= max_depth: continue if cull_func is not None and cull_func(target): continue neighbours = edge_func(target) ignore.add(id(neighbours)) n = 0 skipped = 0 for source in neighbours: if id(source) in ignore: continue if filter and not filter(source): continue if n >= too_many: skipped += 1 continue if swap_source_target: srcnode, tgtnode = target, source else: srcnode, tgtnode = source, target elabel = _edge_label(srcnode, tgtnode, shortnames) f.write(' %s -> %s%s;\n' % (_obj_node_id(srcnode), _obj_node_id(tgtnode), elabel)) if id(source) not in depth: depth[id(source)] = tdepth + 1 queue.append(source) n += 1 del source del neighbours if skipped > 0: h, s, v = _gradient((0, 1, 1), (0, 1, .3), tdepth + 1, max_depth) if swap_source_target: label = "%d more references" % skipped edge = "%s->too_many_%s" % (_obj_node_id(target), _obj_node_id(target)) else: label = "%d more backreferences" % skipped edge = "too_many_%s->%s" % (_obj_node_id(target), _obj_node_id(target)) f.write(' %s[color=red,style=dotted,len=0.25,weight=10];\n' % edge) f.write(' too_many_%s[label="%s",shape=box,height=0.25,' 'color=red,fillcolor="%g,%g,%g",fontsize=6];\n' % (_obj_node_id(target), label, h, s, v)) f.write(' too_many_%s[fontcolor=white];\n' % (_obj_node_id(target))) f.write("}\n") if output: return if is_interactive: return graphviz.Source(f.getvalue()) else: # The file should only be closed if this function was in charge of # opening the file. f.close() print("Graph written to %s (%d nodes)" % (dot_filename, nodes)) _present_graph(dot_filename, filename) def _present_graph(dot_filename, filename=None): """Present a .dot file to the user in the requested fashion. If ``filename`` is provided, runs ``dot`` to convert the .dot file into the desired format, determined by the filename extension. If ``filename`` is not provided, tries to launch ``xdot``, a graphical .dot file viewer. If ``xdot`` is not present on the system, converts the graph to a PNG. """ if filename == dot_filename: # nothing to do, the user asked for a .dot file and got it return if not filename and _program_in_path('xdot'): print("Spawning graph viewer (xdot)") subprocess.Popen(['xdot', dot_filename], close_fds=True) elif _program_in_path('dot'): if not filename: print("Graph viewer (xdot) not found, generating a png instead") filename = dot_filename[:-4] + '.png' stem, ext = os.path.splitext(filename) cmd = ['dot', '-T' + ext[1:], '-o' + filename, dot_filename] dot = subprocess.Popen(cmd, close_fds=False) dot.wait() if dot.returncode != 0: # XXX: shouldn't this go to stderr or a log? print('dot failed (exit code %d) while executing "%s"' % (dot.returncode, ' '.join(cmd))) else: print("Image generated as %s" % filename) else: if not filename: print("Graph viewer (xdot) and image renderer (dot) not found," " not doing anything else") else: print("Image renderer (dot) not found, not doing anything else") def _obj_node_id(obj): return ('o%d' % id(obj)).replace('-', '_') def _obj_attrs(obj, extra_node_attrs): if extra_node_attrs is not None: attrs = extra_node_attrs(obj) return ", " + ", ".join('%s="%s"' % (name, _quote(value)) for name, value in sorted(iteritems(attrs)) if value is not None) else: return "" def _obj_label(obj, extra_info=None, refcounts=False, shortnames=True): if shortnames: label = [_short_typename(obj)] else: label = [_long_typename(obj)] if refcounts: label[0] += ' [%d]' % (sys.getrefcount(obj) - 4) # Why -4? To ignore the references coming from # obj_label's frame (obj) # show_graph's frame (target variable) # sys.getrefcount()'s argument # something else that doesn't show up in gc.get_referrers() label.append(_safe_repr(obj)) if extra_info: label.append(str(extra_info(obj))) return _quote('\n'.join(label)) def _quote(s): return (s.replace("\\", "\\\\") .replace("\"", "\\\"") .replace("\n", "\\n") .replace("\0", "\\\\0")) def _get_obj_type(obj): objtype = type(obj) if type(obj) == InstanceType: # pragma: PY2 -- no old-style classes on PY3 objtype = obj.__class__ return objtype def _short_typename(obj): return _get_obj_type(obj).__name__ def _long_typename(obj): objtype = _get_obj_type(obj) name = objtype.__name__ module = getattr(objtype, '__module__', None) if module: return '%s.%s' % (module, name) else: return name def _safe_repr(obj): try: return _short_repr(obj) except Exception: return '(unrepresentable)' def _name_or_repr(value): try: result = value.__name__ except AttributeError: result = repr(value)[:40] if _isinstance(result, basestring): return result else: return repr(value)[:40] def _short_repr(obj): if _isinstance(obj, (type, types.ModuleType, types.BuiltinMethodType, types.BuiltinFunctionType)): return _name_or_repr(obj) if _isinstance(obj, types.MethodType): name = _name_or_repr(obj.__func__) if obj.__self__: return name + ' (bound)' else: # pragma: PY2 -- no unbound methods on Python 3 return name # NB: types.LambdaType is an alias for types.FunctionType! if _isinstance(obj, types.LambdaType) and obj.__name__ == '': return 'lambda: %s:%s' % (os.path.basename(obj.__code__.co_filename), obj.__code__.co_firstlineno) if _isinstance(obj, types.FrameType): return '%s:%s' % (obj.f_code.co_filename, obj.f_lineno) if _isinstance(obj, (tuple, list, dict, set)): return '%d items' % len(obj) return repr(obj)[:40] def _gradient(start_color, end_color, depth, max_depth): if max_depth == 0: # avoid division by zero return start_color h1, s1, v1 = start_color h2, s2, v2 = end_color f = float(depth) / max_depth h = h1 * (1-f) + h2 * f s = s1 * (1-f) + s2 * f v = v1 * (1-f) + v2 * f return h, s, v def _edge_label(source, target, shortnames=True): if (_isinstance(target, dict) and target is getattr(source, '__dict__', None)): return ' [label="__dict__",weight=10]' if _isinstance(source, types.FrameType): if target is source.f_locals: return ' [label="f_locals",weight=10]' if target is source.f_globals: return ' [label="f_globals",weight=10]' if _isinstance(source, types.MethodType): try: if target is source.__self__: return ' [label="__self__",weight=10]' if target is source.__func__: return ' [label="__func__",weight=10]' except AttributeError: # pragma: nocover # Python < 2.6 compatibility if target is source.im_self: return ' [label="im_self",weight=10]' if target is source.im_func: return ' [label="im_func",weight=10]' if _isinstance(source, types.FunctionType): for k in dir(source): if target is getattr(source, k): return ' [label="%s",weight=10]' % _quote(k) if _isinstance(source, dict): for k, v in iteritems(source): if v is target: if _isinstance(k, basestring) and _is_identifier(k): return ' [label="%s",weight=2]' % _quote(k) else: if shortnames: tn = _short_typename(k) else: tn = _long_typename(k) return ' [label="%s"]' % _quote(tn + "\n" + _safe_repr(k)) return '' _is_identifier = re.compile('[a-zA-Z_][a-zA-Z_0-9]*$').match def _program_in_path(program): # XXX: Consider using distutils.spawn.find_executable or shutil.which path = os.environ.get("PATH", os.defpath).split(os.pathsep) path = [os.path.join(dir, program) for dir in path] path = [True for file in path if os.path.isfile(file) or os.path.isfile(file + '.exe')] return bool(path) ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/other-requirements.txt0000664000175000017500000000001100000000000016741 0ustar00mgmg00000000000000graphviz ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602413644.0 objgraph-3.5.0/release.mk0000664000175000017500000001243100000000000014320 0ustar00mgmg00000000000000# release.mk version 2.0 (2020-10-11) # # Helpful Makefile rules for releasing Python packages. # https://github.com/mgedmin/python-project-skel # You might want to change these FILE_WITH_VERSION ?= setup.py FILE_WITH_CHANGELOG ?= CHANGES.rst CHANGELOG_DATE_FORMAT ?= %Y-%m-%d CHANGELOG_FORMAT ?= $(changelog_ver) ($(changelog_date)) DISTCHECK_DIFF_OPTS ?= $(DISTCHECK_DIFF_DEFAULT_OPTS) # These should be fine PYTHON ?= python3 PYPI_PUBLISH ?= rm -rf dist && $(PYTHON) setup.py -q sdist bdist_wheel && twine check dist/* && twine upload dist/* LATEST_RELEASE_MK_URL = https://raw.githubusercontent.com/mgedmin/python-project-skel/master/release.mk DISTCHECK_DIFF_DEFAULT_OPTS = -x PKG-INFO -x setup.cfg -x '*.egg-info' -x .github -I'^\#' # These should be fine, as long as you use Git VCS_GET_LATEST ?= git pull VCS_STATUS ?= git status --porcelain VCS_EXPORT ?= git archive --format=tar --prefix=tmp/tree/ HEAD | tar -xf - VCS_TAG ?= git tag -s $(changelog_ver) -m \"Release $(changelog_ver)\" VCS_COMMIT_AND_PUSH ?= git commit -av -m "Post-release version bump" && git push && git push --tags # These are internal implementation details changelog_ver = `$(PYTHON) setup.py --version` changelog_date = `LC_ALL=C date +'$(CHANGELOG_DATE_FORMAT)'` # Tweaking the look of 'make help'; most of these are awk literals and need the quotes HELP_INDENT = "" HELP_PREFIX = "make " HELP_WIDTH = 24 HELP_SEPARATOR = " \# " HELP_SECTION_SEP = "\n" .PHONY: help help: @grep -Eh -e '^[a-zA-Z0-9_ -]+:.*?##: .*$$' -e '^##:' $(MAKEFILE_LIST) \ | awk 'BEGIN {FS = "(^|:[^#]*)##: "; section=""}; \ /^##:/ {printf "%s%s\n%s", section, $$2, $(HELP_SECTION_SEP); section=$(HELP_SECTION_SEP)} \ /^[^#]/ {printf "%s\033[36m%-$(HELP_WIDTH)s\033[0m%s%s\n", \ $(HELP_INDENT), $(HELP_PREFIX) $$1, $(HELP_SEPARATOR), $$2}' .PHONY: dist dist: $(PYTHON) setup.py -q sdist bdist_wheel # Provide a default 'make check' to be the same as 'make test', since that's # what 80% of my projects use, but make it possible to override. Now # overriding Make rules is painful, so instead of a regular rule definition # you'll have to override the check_recipe macro. .PHONY: check check: $(check_recipe) ifndef check_recipe define check_recipe = @$(MAKE) test endef endif .PHONY: distcheck distcheck: distcheck-vcs distcheck-sdist .PHONY: distcheck-vcs distcheck-vcs: ifndef FORCE # Bit of a chicken-and-egg here, but if the tree is unclean, make # distcheck-sdist will fail. @test -z "`$(VCS_STATUS) 2>&1`" || { echo; echo "Your working tree is not clean:" 1>&2; $(VCS_STATUS) 1>&2; exit 1; } endif # NB: do not use $(MAKE) in rules with multiple shell commands joined by && # because then make -n distcheck will actually run those instead of just # printing what it does # TBH this could (and probably should) be replaced by check-manifest .PHONY: distcheck-sdist distcheck-sdist: dist pkg_and_version=`$(PYTHON) setup.py --name`-`$(PYTHON) setup.py --version` && \ rm -rf tmp && \ mkdir tmp && \ $(VCS_EXPORT) && \ cd tmp && \ tar -xzf ../dist/$$pkg_and_version.tar.gz && \ diff -ur $$pkg_and_version tree $(DISTCHECK_DIFF_OPTS) && \ cd $$pkg_and_version && \ make dist check && \ cd .. && \ mkdir one two && \ cd one && \ tar -xzf ../../dist/$$pkg_and_version.tar.gz && \ cd ../two/ && \ tar -xzf ../$$pkg_and_version/dist/$$pkg_and_version.tar.gz && \ cd .. && \ diff -ur one two -x SOURCES.txt -I'^#:' && \ cd .. && \ rm -rf tmp && \ echo "sdist seems to be ok" .PHONY: check-latest-rules check-latest-rules: ifndef FORCE @curl -s $(LATEST_RELEASE_MK_URL) | cmp -s release.mk || { printf "\nYour release.mk does not match the latest version at\n$(LATEST_RELEASE_MK_URL)\n\n" 1>&2; exit 1; } endif .PHONY: check-latest-version check-latest-version: $(VCS_GET_LATEST) .PHONY: check-version-number check-version-number: @$(PYTHON) setup.py --version | grep -qv dev || { \ echo "Please remove the 'dev' suffix from the version number in $(FILE_WITH_VERSION)"; exit 1; } .PHONY: check-long-description check-long-description: @$(PYTHON) setup.py --long-description | rst2html --exit-status=2 > /dev/null .PHONY: check-changelog check-changelog: @ver_and_date="$(CHANGELOG_FORMAT)" && \ grep -q "^$$ver_and_date$$" $(FILE_WITH_CHANGELOG) || { \ echo "$(FILE_WITH_CHANGELOG) has no entry for $$ver_and_date"; exit 1; } # NB: the Makefile that includes release.mk may want to add additional # dependencies to the releasechecklist target, but I want 'make distcheck' to # happen last, so that's why I put it into the recipe and not at the end of the # list of dependencies. .PHONY: releasechecklist releasechecklist: check-latest-rules check-latest-version check-version-number check-long-description check-changelog $(MAKE) distcheck .PHONY: release release: releasechecklist do-release ##: prepare a new PyPI release .PHONY: do-release do-release: $(release_recipe) ifndef release_recipe define release_recipe = # I'm chicken so I won't actually do these things yet @echo "Please run" @echo @echo " $(PYPI_PUBLISH)" @echo " $(VCS_TAG)" @echo @echo "Please increment the version number in $(FILE_WITH_VERSION)" @echo "and add a new empty entry at the top of the changelog in $(FILE_WITH_CHANGELOG), then" @echo @echo ' $(VCS_COMMIT_AND_PUSH)' @echo endef endif ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1602414965.9142513 objgraph-3.5.0/setup.cfg0000664000175000017500000000042500000000000014170 0ustar00mgmg00000000000000[flake8] exclude = .tox,build,dist,docs/conf.py doctests = yes builtins = obj, obj1, obj2, MyClass ignore = E226,W503 [zest.releaser] python-file-with-version = objgraph.py [bdist_wheel] universal = 1 [metadata] license_file = LICENSE [egg_info] tag_build = tag_date = 0 ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602175284.0 objgraph-3.5.0/setup.py0000775000175000017500000000507600000000000014073 0ustar00mgmg00000000000000#!/usr/bin/python import doctest import io import os import re import sys import unittest from setuptools import setup def read(filename): with io.open(filename, encoding='UTF-8') as f: return f.read() def unsphinx(text): # remove Sphinx extensions used in CHANGES.rst from reStructuredText # so that it can be handled by plain docutils return (text.replace(':func:', '') .replace('.. currentmodule:: objgraph', '')) def get_version(): r = re.compile('''^__version__ = ["'](.+)["']$''') for line in read('objgraph.py').splitlines(): m = r.match(line) if m: # our read() returns unicode; coerce it back into str, or # python2.7 setup.py sdist will try to mix a unicode filename with # the byte stream of the .tar file return str(m.group(1)) raise AssertionError('Could not determine version number from objgraph.py') def get_description(): readme = read('README.rst') changelog = read('CHANGES.rst') description = unsphinx(readme + '\n\n\n' + changelog) return description def build_images(doctests=()): import tests if not doctests: doctests = tests.find_doctests() suite = doctest.DocFileSuite(optionflags=doctest.ELLIPSIS, checker=tests.IgnoreNodeCountChecker(), *doctests) os.chdir('docs') result = unittest.TextTestRunner().run(suite) if not result.wasSuccessful(): sys.exit(1) if len(sys.argv) > 1 and sys.argv[1] == '--build-images': build_images(sys.argv[2:]) sys.exit(0) setup( name='objgraph', version=get_version(), author='Marius Gedminas', author_email='marius@gedmin.as', url='https://mg.pov.lt/objgraph/', license='MIT', description='Draws Python object reference graphs with graphviz', long_description=get_description(), classifiers=[ 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', ], keywords='object graph visualization graphviz garbage collection', py_modules=['objgraph'], install_requires=[ 'graphviz', # just for ipython support currently ], tests_require=['mock;python_version=="2.7"'], test_suite='tests.test_suite', zip_safe=True, ) ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602174289.0 objgraph-3.5.0/tests.py0000775000175000017500000005746300000000000014104 0ustar00mgmg00000000000000#!/usr/bin/python import doctest import gc import glob import os import re import shutil import string import sys import tempfile import textwrap import types import unittest # setuptools imports `imp`, which triggers a DeprecationWarning starting with # Python 3.4 in the middle of my pristine test suite. But if I do the import # upfront, there's no warning. I cannot explain this, I'm just happy there's # no warning. import setuptools # noqa try: from unittest import mock except ImportError: import mock import objgraph try: from cStringIO import StringIO except ImportError: from io import StringIO try: from unittest import skipIf except ImportError: def skipIf(condition, reason): def wrapper(fn): if condition: def empty_test(case): pass empty_test.__doc__ = '%s skipped because %s' % ( fn.__name__, reason) return empty_test return fn return wrapper def format(text, **kwargs): template = string.Template(text) return template.substitute(kwargs) class CompatibilityMixin(object): # Python 2.7 .. 3.1 has assertRegexpMatches but not assertRegex # Python <= 2.6 has neither # Python >= 3.2 has both and emits deprecation warnings if you use # assertRegexpMatches. if not hasattr(unittest.TestCase, 'assertRegex'): if hasattr(unittest.TestCase, 'assertRegexpMatches'): # This is needed for Python 3.1: let's reuse the existing # function because our replacement doesn't work on Python 3 assertRegex = unittest.TestCase.assertRegexpMatches else: def assertRegex(self, text, expected_regexp, msg=None): if isinstance(expected_regexp, basestring): # noqa expected_regexp = re.compile(expected_regexp) if not expected_regexp.search(text): msg = msg or "Regexp didn't match" msg = '%s: %r not found in %r' % (msg, expected_regexp.pattern, text) raise self.failureException(msg) class GarbageCollectedMixin(object): """A mixin for test cases that garbage collects before running.""" def setUp(self): super(GarbageCollectedMixin, self).setUp() gc.collect() def tearDown(self): super(GarbageCollectedMixin, self).tearDown() gc.enable() class CaptureMixin(object): """A mixing that captures sys.stdout""" def setUp(self): super(CaptureMixin, self).setUp() self.real_stdout = sys.stdout sys.stdout = StringIO() def tearDown(self): sys.stdout = self.real_stdout super(CaptureMixin, self).tearDown() def assertOutput(self, output): self.assertEqual(sys.stdout.getvalue(), textwrap.dedent(output.lstrip('\n'))) class TemporaryDirectoryMixin(object): """A mixin that sets up a temporary directory""" def setUp(self): super(TemporaryDirectoryMixin, self).setUp() self.prevdir = os.getcwd() self.tmpdir = tempfile.mkdtemp(prefix='test-objgraph-') os.chdir(self.tmpdir) def tearDown(self): os.chdir(self.prevdir) shutil.rmtree(self.tmpdir) super(TemporaryDirectoryMixin, self).tearDown() # Unit tests SINGLE_ELEMENT_OUTPUT = textwrap.dedent('''\ digraph ObjectGraph { node[shape=box, style=filled, fillcolor=white]; ${label_a}[fontcolor=red]; ${label_a}[label="TestObject\\nTestObject(A)"]; ${label_a}[fillcolor="0,0,1"]; } ''') SINGLE_ELEMENT_OUTPUT_WITH_ATTR = textwrap.dedent('''\ digraph ObjectGraph { node[shape=box, style=filled, fillcolor=white]; ${label_a}[fontcolor=red]; ${label_a}[label="TestObject\\nTestObject(A)", x="y"]; ${label_a}[fillcolor="0,0,1"]; } ''') TWO_ELEMENT_OUTPUT = textwrap.dedent('''\ digraph ObjectGraph { node[shape=box, style=filled, fillcolor=white]; ${label_a}[fontcolor=red]; ${label_a}[label="TestObject\\nTestObject(A)"]; ${label_a}[fillcolor="0,0,1"]; ${label_b} -> ${label_a}; ${label_b}[label="TestObject\\nTestObject(B)"]; ${label_b}[fillcolor="0,0,0.766667"]; } ''') class TestObject: _objs = {} def __init__(self, name): self.name = name def __repr__(self): return 'TestObject(%s)' % self.name @classmethod def get(cls, name): if name in cls._objs: return cls._objs[name] obj = TestObject(name) cls._objs[name] = obj return obj def edge_function(chain_map=None): """Given a mapping of src name -> dst name or src name -> [dst names] returns an edge_function. The default edge_function is empty.""" if not chain_map: chain_map = {} def helper(src): if src.name not in chain_map: return [] dst_names = chain_map[src.name] if not isinstance(dst_names, (list, tuple)): dst_names = [dst_names] return [TestObject.get(dst_name) for dst_name in dst_names] return helper class ShowGraphTest(unittest.TestCase): """Tests for the show_graph function.""" def test_basic_file_output(self): obj = TestObject.get("A") output = StringIO() objgraph._show_graph([obj], edge_function(), False, output=output, shortnames=True) output_value = output.getvalue() label = objgraph._obj_node_id(obj) self.assertEqual(output_value, format(SINGLE_ELEMENT_OUTPUT, label_a=label)) def test_with_extra_node_attrs(self): obj = TestObject.get("A") output = StringIO() objgraph._show_graph([obj], edge_function(), False, output=output, shortnames=True, extra_node_attrs=lambda o: {'x': 'y'}) output_value = output.getvalue() label = objgraph._obj_node_id(obj) self.assertEqual(output_value, format(SINGLE_ELEMENT_OUTPUT_WITH_ATTR, label_a=label)) def test_filename_and_output(self): output = StringIO() self.assertRaises(ValueError, objgraph._show_graph, [], edge_function(), False, filename='filename', output=output) def test_simple_chain(self): edge_fn = edge_function({'A': 'B'}) output = StringIO() objgraph._show_graph([TestObject.get("A")], edge_fn, False, output=output, shortnames=True) output_value = output.getvalue() label_a = objgraph._obj_node_id(TestObject.get("A")) label_b = objgraph._obj_node_id(TestObject.get("B")) self.assertEqual(output_value, format(TWO_ELEMENT_OUTPUT, label_a=label_a, label_b=label_b)) def test_cull_func(self): edge_fn = edge_function({'A': 'B', 'B': 'C'}) output = StringIO() objgraph._show_graph([TestObject.get("A")], edge_fn, False, output=output, shortnames=True, cull_func=lambda obj: obj.name == 'B') output_value = output.getvalue() label_a = objgraph._obj_node_id(TestObject.get("A")) label_b = objgraph._obj_node_id(TestObject.get("B")) self.assertEqual(output_value, format(TWO_ELEMENT_OUTPUT, label_a=label_a, label_b=label_b)) @mock.patch('objgraph.IS_INTERACTIVE', True) @mock.patch('objgraph.graphviz', create=True) def test_ipython(self, mock_graphviz): mock_graphviz.Source = lambda x: x res = objgraph._show_graph([TestObject.get("A")], edge_function(), False) self.assertTrue(res.startswith('digraph')) class FindChainTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the find_chain function.""" def test_no_chain(self): a = object() self.assertEqual( [a], objgraph._find_chain(a, lambda x: False, gc.get_referrers)) class CountTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the count function.""" def test_long_type_names(self): x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa y = type('MyClass', (), {'__module__': 'other'})() # noqa self.assertEqual(2, objgraph.count('MyClass')) self.assertEqual(1, objgraph.count('mymodule.MyClass')) def test_no_new_reference_cycles(self): # Similar to https://github.com/mgedmin/objgraph/pull/22 but for # count() gc.disable() x = type('MyClass', (), {})() before = len(gc.get_referrers(x)) objgraph.count('MyClass') after = len(gc.get_referrers(x)) self.assertEqual(before, after) class TypestatsTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the typestats function.""" def test_long_type_names(self): x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa stats = objgraph.typestats(shortnames=False) self.assertEqual(1, stats['mymodule.MyClass']) def test_no_new_reference_cycles(self): # Similar to https://github.com/mgedmin/objgraph/pull/22 but for # typestats() gc.disable() x = type('MyClass', (), {})() before = len(gc.get_referrers(x)) objgraph.typestats() after = len(gc.get_referrers(x)) self.assertEqual(before, after) class TypestatsFilterArguTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the typestats function, especially for augument ``filter`` which is added at version 3.1.3""" def test_without_filter(self): MyClass = type('MyClass', (), {'__module__': 'mymodule'}) # noqa x, y = MyClass(), MyClass() x.magic_attr = True y.magic_attr = False stats = objgraph.typestats(shortnames=False) self.assertEqual(2, stats['mymodule.MyClass']) def test_with_filter(self): MyClass = type('MyClass', (), {'__module__': 'mymodule'}) # noqa x, y = MyClass(), MyClass() x.magic_attr = True y.magic_attr = False stats = objgraph.typestats( shortnames=False, filter=lambda e: isinstance(e, MyClass) and e.magic_attr) self.assertEqual(1, stats['mymodule.MyClass']) class GrowthTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the growth function.""" def test_growth(self): objgraph.growth(limit=None) x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa growth_info = objgraph.growth(limit=None) cared = [record for record in growth_info if record[0] == 'MyClass'] self.assertEqual(1, len(cared)) self.assertEqual(1, cared[0][2]) def test_show_growth_custom_peak_stats(self): ps = {} objgraph.show_growth(peak_stats=ps, file=StringIO()) self.assertNotEqual(ps, {}) class GetNewIdsTest(unittest.TestCase): maxDiff = None def setUp(self): objgraph.get_new_ids(limit=0, shortnames=True) def test_get_new_ids(self): x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa new_ids = objgraph.get_new_ids(limit=0) self.assertIn(id(x), new_ids['MyClass']) new_ids = objgraph.get_new_ids(limit=0) self.assertNotIn(id(x), new_ids['MyClass']) def test_get_new_ids_skip_update(self): x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa new_ids = objgraph.get_new_ids(limit=0) self.assertIn(id(x), new_ids['MyClass']) new_ids = objgraph.get_new_ids(skip_update=True, limit=0) self.assertIn(id(x), new_ids['MyClass']) def test_get_new_ids_long_typename(self): objgraph.get_new_ids(limit=0, shortnames=False) x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa new_ids = objgraph.get_new_ids(limit=0) self.assertIn(id(x), new_ids['mymodule.MyClass']) def doctest_get_new_ids_prints(): """Test for get_new_ids() >>> _ = objgraph.get_new_ids(limit=0) >>> _ = objgraph.get_new_ids(limit=0) >>> a = [0, 1, 2] # noqa >>> b = [3, 4, 5] # noqa >>> _ = objgraph.get_new_ids(limit=1) ... # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE ======================================================== Type Old_ids Current_ids New_ids Count_Deltas ======================================================== list ... ... ... +2 ======================================================== """ class ByTypeTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the by_test function.""" def test_long_type_names(self): x = type('MyClass', (), {'__module__': 'mymodule'})() self.assertEqual([x], objgraph.by_type('mymodule.MyClass')) def test_new_garbage(self): # Regression test for https://github.com/mgedmin/objgraph/pull/22 gc.disable() x = type('MyClass', (), {})() res = objgraph.by_type('MyClass') self.assertEqual(res, [x]) # referrers we expect: # 1. this stack frame (except on Python 3.7 where it's somehow missing) # 2. the `res` list # referrers we don't want: # the ``objects`` list in the now-dead stack frame of objgraph.by_type self.assertLessEqual(len(gc.get_referrers(res[0])), 2) class AtAddrsTest(unittest.TestCase): def test_at_addrs(self): a = [0, 1, 2] new_ids = objgraph.get_new_ids(limit=0) new_lists = objgraph.at_addrs(new_ids['list']) self.assertIn(a, new_lists) class StringRepresentationTest(GarbageCollectedMixin, CompatibilityMixin, unittest.TestCase): """Tests for the string representation of objects and edges.""" def test_obj_label_long_type_name(self): x = type('MyClass', (), {'__module__': 'mymodule'})() self.assertRegex( objgraph._obj_label(x, shortnames=False), r'mymodule\.MyClass\\n 2, "Python 3 has no unbound methods") def test_short_repr_unbound_method(self): class MyClass(object): def a_method(self): pass self.assertEqual('a_method', objgraph._short_repr(MyClass.a_method)) def test_gradient_empty(self): self.assertEqual((0.1, 0.2, 0.3), objgraph._gradient((0.1, 0.2, 0.3), (0.2, 0.3, 0.4), 0, 0)) def test_edge_label_frame_locals(self): frame = sys._getframe() self.assertEqual(' [label="f_locals",weight=10]', objgraph._edge_label(frame, frame.f_locals)) @skipIf(sys.version_info[0] > 2, "Python 3 has no unbound methods") def test_edge_label_unbound_method(self): class MyClass(object): def a_method(self): pass self.assertEqual(' [label="__func__",weight=10]', objgraph._edge_label(MyClass.a_method, MyClass.a_method.__func__)) def test_edge_label_bound_method(self): class MyClass(object): def a_method(self): pass self.assertEqual(' [label="__func__",weight=10]', objgraph._edge_label(MyClass().a_method, MyClass().a_method.__func__)) def test_edge_label_long_type_names(self): x = type('MyClass', (), {'__module__': 'mymodule'})() d = {x: 1} self.assertRegex( objgraph._edge_label(d, 1, shortnames=False), r' [label="mymodule\.MyClass\n= (3, 4): # Skip uncollectable.txt on Python 3.4 and newer doctests.discard(os.path.join('docs', 'uncollectable.txt')) return sorted(doctests) def doctest_setup_py_works(): """Test that setup.py works >>> import sys >>> orig_argv = sys.argv >>> sys.argv = ['setup.py', '--description'] >>> import setup # noqa Draws Python object reference graphs with graphviz >>> sys.argv = orig_argv """ def test_suite(): doctests = find_doctests() return unittest.TestSuite([ unittest.defaultTestLoader.loadTestsFromName(__name__), doctest.DocFileSuite(setUp=setUp, tearDown=tearDown, optionflags=doctest.ELLIPSIS, checker=IgnoreNodeCountChecker(), *doctests), doctest.DocTestSuite(), ]) if __name__ == '__main__': unittest.main(defaultTest='test_suite') ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1602414482.0 objgraph-3.5.0/tox.ini0000664000175000017500000000113400000000000013660 0ustar00mgmg00000000000000[tox] envlist = py27, py36, py37, py38 [testenv] deps = py,py27,coverage,coverage2: mock commands = python tests.py {posargs} [testenv:py] commands = python --version python tests.py {posargs} [testenv:coverage] deps = {[testenv]deps} coverage coverage-python-version commands = coverage run tests.py coverage report -m --fail-under=100 [testenv:coverage2] basepython = python2 deps = {[testenv:coverage]deps} commands = {[testenv:coverage]commands} [testenv:coverage3] basepython = python3 deps = {[testenv:coverage]deps} commands = {[testenv:coverage]commands}