summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2023-10-06 10:24:21 +0200
committerGitHub <noreply@github.com>2023-10-06 10:24:21 +0200
commite20c05fcdfc7a9ad995956bfee269e123860288f (patch)
treebb94c72fce83126116e0bcd8561a7c3b560ecc3c
parent36183eac408539e84323fe5ec514d7ae83e4bca6 (diff)
downloadspack-e20c05fcdfc7a9ad995956bfee269e123860288f.tar.gz
spack-e20c05fcdfc7a9ad995956bfee269e123860288f.tar.bz2
spack-e20c05fcdfc7a9ad995956bfee269e123860288f.tar.xz
spack-e20c05fcdfc7a9ad995956bfee269e123860288f.zip
Make "minimal" the default duplicate strategy (#39621)
* Allow branching out of the "generic build" unification set For cases like the one in https://github.com/spack/spack/pull/39661 we need to relax rules on unification sets. The issue is that, right now, nodes in the "generic build" unification set are unified together with their build dependencies. This was done out of caution to avoid the risk of circular dependencies, which would ultimately cause a very slow solve. For build-tools like Cython, however, the build dependencies is masked by a long chain of "build, run" dependencies that belong in the "generic build" unification space. To allow splitting on cases like this, we relax the rule disallowing branching out of the "generic build" unification set. * Fix issue with pure build virtual dependencies Pure build virtual dependencies were not accounted properly in the list of possible virtuals. This caused some facts connecting virtuals to the corresponding providers to not be emitted, and in the end lead to unsat problems. * Fixed a few issues in packages py-gevent: restore dependency on py-cython@3 jsoncpp: fix typo in build dependency ecp-data-vis-sdk: update spack.yaml and cmake recipe py-statsmodels: add v0.13.5 * Make dependency on "blt" of type "build"
-rw-r--r--etc/spack/defaults/concretizer.yaml2
-rw-r--r--lib/spack/docs/build_settings.rst167
-rw-r--r--lib/spack/docs/images/shapely_duplicates.svg2784
-rw-r--r--lib/spack/spack/solver/asp.py1
-rw-r--r--lib/spack/spack/solver/concretize.lp19
-rw-r--r--lib/spack/spack/solver/counter.py15
-rw-r--r--lib/spack/spack/spec.py11
-rw-r--r--lib/spack/spack/test/concretize.py28
-rw-r--r--lib/spack/spack/test/data/config/concretizer.yaml2
-rw-r--r--share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml16
-rw-r--r--var/spack/repos/builtin/packages/camp/package.py2
-rw-r--r--var/spack/repos/builtin/packages/cmake/package.py2
-rw-r--r--var/spack/repos/builtin/packages/jsoncpp/package.py2
-rw-r--r--var/spack/repos/builtin/packages/mgard/package.py2
-rw-r--r--var/spack/repos/builtin/packages/py-gevent/package.py3
-rw-r--r--var/spack/repos/builtin/packages/py-statsmodels/package.py12
-rw-r--r--var/spack/repos/builtin/packages/raja/package.py2
-rw-r--r--var/spack/repos/builtin/packages/umpire/package.py2
-rw-r--r--var/spack/repos/duplicates.test/packages/pkg-config/package.py16
-rw-r--r--var/spack/repos/duplicates.test/packages/virtual-build/package.py16
20 files changed, 2984 insertions, 120 deletions
diff --git a/etc/spack/defaults/concretizer.yaml b/etc/spack/defaults/concretizer.yaml
index 598bb8c349..edefa552ce 100644
--- a/etc/spack/defaults/concretizer.yaml
+++ b/etc/spack/defaults/concretizer.yaml
@@ -41,4 +41,4 @@ concretizer:
# "none": allows a single node for any package in the DAG.
# "minimal": allows the duplication of 'build-tools' nodes only (e.g. py-setuptools, cmake etc.)
# "full" (experimental): allows separation of the entire build-tool stack (e.g. the entire "cmake" subDAG)
- strategy: none \ No newline at end of file
+ strategy: minimal
diff --git a/lib/spack/docs/build_settings.rst b/lib/spack/docs/build_settings.rst
index 0bbd27e8c3..402b33f6a2 100644
--- a/lib/spack/docs/build_settings.rst
+++ b/lib/spack/docs/build_settings.rst
@@ -3,6 +3,103 @@
SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+.. _concretizer-options:
+
+==========================================
+Concretization Settings (concretizer.yaml)
+==========================================
+
+The ``concretizer.yaml`` configuration file allows to customize aspects of the
+algorithm used to select the dependencies you install. The default configuration
+is the following:
+
+.. literalinclude:: _spack_root/etc/spack/defaults/concretizer.yaml
+ :language: yaml
+
+--------------------------------
+Reuse already installed packages
+--------------------------------
+
+The ``reuse`` attribute controls whether Spack will prefer to use installed packages (``true``), or
+whether it will do a "fresh" installation and prefer the latest settings from
+``package.py`` files and ``packages.yaml`` (``false``).
+You can use:
+
+.. code-block:: console
+
+ % spack install --reuse <spec>
+
+to enable reuse for a single installation, and you can use:
+
+.. code-block:: console
+
+ spack install --fresh <spec>
+
+to do a fresh install if ``reuse`` is enabled by default.
+``reuse: true`` is the default.
+
+------------------------------------------
+Selection of the target microarchitectures
+------------------------------------------
+
+The options under the ``targets`` attribute control which targets are considered during a solve.
+Currently the options in this section are only configurable from the ``concretizer.yaml`` file
+and there are no corresponding command line arguments to enable them for a single solve.
+
+The ``granularity`` option can take two possible values: ``microarchitectures`` and ``generic``.
+If set to:
+
+.. code-block:: yaml
+
+ concretizer:
+ targets:
+ granularity: microarchitectures
+
+Spack will consider all the microarchitectures known to ``archspec`` to label nodes for
+compatibility. If instead the option is set to:
+
+.. code-block:: yaml
+
+ concretizer:
+ targets:
+ granularity: generic
+
+Spack will consider only generic microarchitectures. For instance, when running on an
+Haswell node, Spack will consider ``haswell`` as the best target in the former case and
+``x86_64_v3`` as the best target in the latter case.
+
+The ``host_compatible`` option is a Boolean option that determines whether or not the
+microarchitectures considered during the solve are constrained to be compatible with the
+host Spack is currently running on. For instance, if this option is set to ``true``, a
+user cannot concretize for ``target=icelake`` while running on an Haswell node.
+
+---------------
+Duplicate nodes
+---------------
+
+The ``duplicates`` attribute controls whether the DAG can contain multiple configurations of
+the same package. This is mainly relevant for build dependencies, which may have their version
+pinned by some nodes, and thus be required at different versions by different nodes in the same
+DAG.
+
+The ``strategy`` option controls how the solver deals with duplicates. If the value is ``none``,
+then a single configuration per package is allowed in the DAG. This means, for instance, that only
+a single ``cmake`` or a single ``py-setuptools`` version is allowed. The result would be a slightly
+faster concretization, at the expense of making a few specs unsolvable.
+
+If the value is ``minimal`` Spack will allow packages tagged as ``build-tools`` to have duplicates.
+This allows, for instance, to concretize specs whose nodes require different, and incompatible, ranges
+of some build tool. For instance, in the figure below the latest `py-shapely` requires a newer `py-setuptools`,
+while `py-numpy` still needs an older version:
+
+.. figure:: images/shapely_duplicates.svg
+ :scale: 70 %
+ :align: center
+
+Up to Spack v0.20 ``duplicates:strategy:none`` was the default (and only) behavior. From Spack v0.21 the
+default behavior is ``duplicates:strategy:minimal``.
+
.. _build-settings:
================================
@@ -232,76 +329,6 @@ Specific limitations include:
then Spack will not add a new external entry (``spack config blame packages``
can help locate all external entries).
-.. _concretizer-options:
-
-----------------------
-Concretizer options
-----------------------
-
-``packages.yaml`` gives the concretizer preferences for specific packages,
-but you can also use ``concretizer.yaml`` to customize aspects of the
-algorithm it uses to select the dependencies you install:
-
-.. literalinclude:: _spack_root/etc/spack/defaults/concretizer.yaml
- :language: yaml
-
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Reuse already installed packages
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The ``reuse`` attribute controls whether Spack will prefer to use installed packages (``true``), or
-whether it will do a "fresh" installation and prefer the latest settings from
-``package.py`` files and ``packages.yaml`` (``false``).
-You can use:
-
-.. code-block:: console
-
- % spack install --reuse <spec>
-
-to enable reuse for a single installation, and you can use:
-
-.. code-block:: console
-
- spack install --fresh <spec>
-
-to do a fresh install if ``reuse`` is enabled by default.
-``reuse: true`` is the default.
-
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Selection of the target microarchitectures
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The options under the ``targets`` attribute control which targets are considered during a solve.
-Currently the options in this section are only configurable from the ``concretizer.yaml`` file
-and there are no corresponding command line arguments to enable them for a single solve.
-
-The ``granularity`` option can take two possible values: ``microarchitectures`` and ``generic``.
-If set to:
-
-.. code-block:: yaml
-
- concretizer:
- targets:
- granularity: microarchitectures
-
-Spack will consider all the microarchitectures known to ``archspec`` to label nodes for
-compatibility. If instead the option is set to:
-
-.. code-block:: yaml
-
- concretizer:
- targets:
- granularity: generic
-
-Spack will consider only generic microarchitectures. For instance, when running on an
-Haswell node, Spack will consider ``haswell`` as the best target in the former case and
-``x86_64_v3`` as the best target in the latter case.
-
-The ``host_compatible`` option is a Boolean option that determines whether or not the
-microarchitectures considered during the solve are constrained to be compatible with the
-host Spack is currently running on. For instance, if this option is set to ``true``, a
-user cannot concretize for ``target=icelake`` while running on an Haswell node.
-
.. _package-requirements:
--------------------
diff --git a/lib/spack/docs/images/shapely_duplicates.svg b/lib/spack/docs/images/shapely_duplicates.svg
new file mode 100644
index 0000000000..912f03b2e5
--- /dev/null
+++ b/lib/spack/docs/images/shapely_duplicates.svg
@@ -0,0 +1,2784 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by graphviz version 2.49.0 (0)
+ -->
+
+<!-- Title: G Pages: 1 -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="5580pt"
+ height="1842pt"
+ viewBox="0.00 0.00 5580.04 1841.60"
+ version="1.1"
+ id="svg996"
+ sodipodi:docname="shapely_duplicates.svg"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+ <metadata
+ id="metadata1002">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs1000" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="3840"
+ inkscape:window-height="2096"
+ id="namedview998"
+ showgrid="false"
+ inkscape:zoom="0.37311828"
+ inkscape:cx="4881.4641"
+ inkscape:cy="1383.4263"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="graph0" />
+ <g
+ id="graph0"
+ class="graph"
+ transform="scale(1 1) rotate(0) translate(4 1837.6)">
+ <title
+ id="title2">G</title>
+ <polygon
+ fill="white"
+ stroke="transparent"
+ points="-4,4 -4,-1837.6 5576.04,-1837.6 5576.04,4 -4,4"
+ id="polygon4" />
+ <!-- bqm4trdmbbqhrthe6flwnxp57cfbbser -->
+ <g
+ id="node1"
+ class="node">
+ <title
+ id="title6">bqm4trdmbbqhrthe6flwnxp57cfbbser</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M426.56,-245.5C426.56,-245.5 11.81,-245.5 11.81,-245.5 5.81,-245.5 -0.19,-239.5 -0.19,-233.5 -0.19,-233.5 -0.19,-170.9 -0.19,-170.9 -0.19,-164.9 5.81,-158.9 11.81,-158.9 11.81,-158.9 426.56,-158.9 426.56,-158.9 432.56,-158.9 438.56,-164.9 438.56,-170.9 438.56,-170.9 438.56,-233.5 438.56,-233.5 438.56,-239.5 432.56,-245.5 426.56,-245.5"
+ id="path8" />
+ <text
+ x="219.19"
+ y="-195"
+ font-size="24.00"
+ id="text10"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">nghttp2@1.52.0/bqm4trd</text>
+ </g>
+ <!-- hsp7usvecwby6o6kszujxywbux5f5qc4 -->
+ <g
+ id="node32"
+ class="node">
+ <title
+ id="title13">hsp7usvecwby6o6kszujxywbux5f5qc4</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M668.7,-86.7C668.7,-86.7 263.67,-86.7 263.67,-86.7 257.67,-86.7 251.67,-80.7 251.67,-74.7 251.67,-74.7 251.67,-12.1 251.67,-12.1 251.67,-6.1 257.67,-0.1 263.67,-0.1 263.67,-0.1 668.7,-0.1 668.7,-0.1 674.7,-0.1 680.7,-6.1 680.7,-12.1 680.7,-12.1 680.7,-74.7 680.7,-74.7 680.7,-80.7 674.7,-86.7 668.7,-86.7"
+ id="path15" />
+ <text
+ x="466.19"
+ y="-36.200001"
+ font-size="24.00"
+ id="text17"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">pkgconf@1.9.5/hsp7usv</text>
+ </g>
+ <!-- bqm4trdmbbqhrthe6flwnxp57cfbbser&#45;&gt;hsp7usvecwby6o6kszujxywbux5f5qc4 -->
+ <g
+ id="edge43"
+ class="edge">
+ <title
+ id="title20">bqm4trdmbbqhrthe6flwnxp57cfbbser-&gt;hsp7usvecwby6o6kszujxywbux5f5qc4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M286.03,-158.77C318.29,-138.29 357.14,-113.62 390.49,-92.45"
+ id="path22" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="392.72,-95.18 399.29,-86.87 388.97,-89.27 392.72,-95.18"
+ id="polygon24" />
+ </g>
+ <!-- s3mykqnlex5ygursynhv4cfu4p4jcp5c -->
+ <g
+ id="node2"
+ class="node">
+ <title
+ id="title27">s3mykqnlex5ygursynhv4cfu4p4jcp5c</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M1829.88,-404.3C1829.88,-404.3 1436.49,-404.3 1436.49,-404.3 1430.49,-404.3 1424.49,-398.3 1424.49,-392.3 1424.49,-392.3 1424.49,-329.7 1424.49,-329.7 1424.49,-323.7 1430.49,-317.7 1436.49,-317.7 1436.49,-317.7 1829.88,-317.7 1829.88,-317.7 1835.88,-317.7 1841.88,-323.7 1841.88,-329.7 1841.88,-329.7 1841.88,-392.3 1841.88,-392.3 1841.88,-398.3 1835.88,-404.3 1829.88,-404.3"
+ id="path29" />
+ <text
+ x="1633.1899"
+ y="-353.79999"
+ font-size="24.00"
+ id="text31"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">diffutils@3.9/s3mykqn</text>
+ </g>
+ <!-- gpd7yevon44acblslmgorfsxufgk3nhz -->
+ <g
+ id="node14"
+ class="node">
+ <title
+ id="title34">gpd7yevon44acblslmgorfsxufgk3nhz</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3429.7,-245.5C3429.7,-245.5 3026.67,-245.5 3026.67,-245.5 3020.67,-245.5 3014.67,-239.5 3014.67,-233.5 3014.67,-233.5 3014.67,-170.9 3014.67,-170.9 3014.67,-164.9 3020.67,-158.9 3026.67,-158.9 3026.67,-158.9 3429.7,-158.9 3429.7,-158.9 3435.7,-158.9 3441.7,-164.9 3441.7,-170.9 3441.7,-170.9 3441.7,-233.5 3441.7,-233.5 3441.7,-239.5 3435.7,-245.5 3429.7,-245.5"
+ id="path36" />
+ <text
+ x="3228.1899"
+ y="-195"
+ font-size="24.00"
+ id="text38"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">libiconv@1.17/gpd7yev</text>
+ </g>
+ <!-- s3mykqnlex5ygursynhv4cfu4p4jcp5c&#45;&gt;gpd7yevon44acblslmgorfsxufgk3nhz -->
+ <g
+ id="edge23"
+ class="edge">
+ <title
+ id="title41">s3mykqnlex5ygursynhv4cfu4p4jcp5c-&gt;gpd7yevon44acblslmgorfsxufgk3nhz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1841.9,-323.65C1859.52,-321.1 1877.08,-318.71 1894.06,-316.61 2283.29,-268.37 2738.86,-234.03 3004.32,-216.21"
+ id="path43" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M1842.19,-325.63C1859.79,-323.08 1877.35,-320.69 1894.31,-318.59 2283.44,-270.37 2739.02,-236.02 3004.45,-218.21"
+ id="path45" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3004.79,-220.69 3014.53,-216.53 3004.32,-213.71 3004.79,-220.69"
+ id="polygon47" />
+ </g>
+ <!-- al63766ivhemwb3bxsklvqmhdptf34fn -->
+ <g
+ id="node3"
+ class="node">
+ <title
+ id="title50">al63766ivhemwb3bxsklvqmhdptf34fn</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3438.7,-1674.7C3438.7,-1674.7 3057.67,-1674.7 3057.67,-1674.7 3051.67,-1674.7 3045.67,-1668.7 3045.67,-1662.7 3045.67,-1662.7 3045.67,-1600.1 3045.67,-1600.1 3045.67,-1594.1 3051.67,-1588.1 3057.67,-1588.1 3057.67,-1588.1 3438.7,-1588.1 3438.7,-1588.1 3444.7,-1588.1 3450.7,-1594.1 3450.7,-1600.1 3450.7,-1600.1 3450.7,-1662.7 3450.7,-1662.7 3450.7,-1668.7 3444.7,-1674.7 3438.7,-1674.7"
+ id="path52" />
+ <text
+ x="3248.1899"
+ y="-1624.2"
+ font-size="24.00"
+ id="text54"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">geos@3.12.0/al63766</text>
+ </g>
+ <!-- ma6zn6mykr7xe226v2hvu4ye7jltnddb -->
+ <g
+ id="node23"
+ class="node">
+ <title
+ id="title57">ma6zn6mykr7xe226v2hvu4ye7jltnddb</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M521.67,-1198.3C521.67,-1198.3 104.71,-1198.3 104.71,-1198.3 98.71,-1198.3 92.71,-1192.3 92.71,-1186.3 92.71,-1186.3 92.71,-1123.7 92.71,-1123.7 92.71,-1117.7 98.71,-1111.7 104.71,-1111.7 104.71,-1111.7 521.67,-1111.7 521.67,-1111.7 527.67,-1111.7 533.67,-1117.7 533.67,-1123.7 533.67,-1123.7 533.67,-1186.3 533.67,-1186.3 533.67,-1192.3 527.67,-1198.3 521.67,-1198.3"
+ id="path59" />
+ <text
+ x="313.19"
+ y="-1147.8"
+ font-size="24.00"
+ id="text61"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">cmake@3.27.4/ma6zn6m</text>
+ </g>
+ <!-- al63766ivhemwb3bxsklvqmhdptf34fn&#45;&gt;ma6zn6mykr7xe226v2hvu4ye7jltnddb -->
+ <g
+ id="edge35"
+ class="edge">
+ <title
+ id="title64">al63766ivhemwb3bxsklvqmhdptf34fn-&gt;ma6zn6mykr7xe226v2hvu4ye7jltnddb</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3045.61,-1629.73C2579.68,-1626.57 1443.62,-1609.24 1074.19,-1516 807.17,-1448.61 520.96,-1285.4 388.46,-1203.93"
+ id="path66" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="389.92,-1200.72 379.57,-1198.44 386.24,-1206.67 389.92,-1200.72"
+ id="polygon68" />
+ </g>
+ <!-- revhbmcsddofjb7jt3fql7fawtxjihvc -->
+ <g
+ id="node30"
+ class="node">
+ <title
+ id="title71">revhbmcsddofjb7jt3fql7fawtxjihvc</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M1486.85,-1515.9C1486.85,-1515.9 1095.52,-1515.9 1095.52,-1515.9 1089.52,-1515.9 1083.52,-1509.9 1083.52,-1503.9 1083.52,-1503.9 1083.52,-1441.3 1083.52,-1441.3 1083.52,-1435.3 1089.52,-1429.3 1095.52,-1429.3 1095.52,-1429.3 1486.85,-1429.3 1486.85,-1429.3 1492.85,-1429.3 1498.85,-1435.3 1498.85,-1441.3 1498.85,-1441.3 1498.85,-1503.9 1498.85,-1503.9 1498.85,-1509.9 1492.85,-1515.9 1486.85,-1515.9"
+ id="path73" />
+ <text
+ x="1291.1899"
+ y="-1465.4"
+ font-size="24.00"
+ id="text75"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">ninja@1.11.1/revhbmc</text>
+ </g>
+ <!-- al63766ivhemwb3bxsklvqmhdptf34fn&#45;&gt;revhbmcsddofjb7jt3fql7fawtxjihvc -->
+ <g
+ id="edge59"
+ class="edge">
+ <title
+ id="title78">al63766ivhemwb3bxsklvqmhdptf34fn-&gt;revhbmcsddofjb7jt3fql7fawtxjihvc</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3045.67,-1614.17C2675.06,-1584.48 1890.81,-1521.64 1509.08,-1491.06"
+ id="path80" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1509.27,-1487.56 1499.02,-1490.25 1508.71,-1494.54 1509.27,-1487.56"
+ id="polygon82" />
+ </g>
+ <!-- 7vxac6cvfyqggxsvd7votisi72rdfvoh -->
+ <g
+ id="node4"
+ class="node">
+ <title
+ id="title85">7vxac6cvfyqggxsvd7votisi72rdfvoh</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M1226.36,-721.9C1226.36,-721.9 620.01,-721.9 620.01,-721.9 614.01,-721.9 608.01,-715.9 608.01,-709.9 608.01,-709.9 608.01,-647.3 608.01,-647.3 608.01,-641.3 614.01,-635.3 620.01,-635.3 620.01,-635.3 1226.36,-635.3 1226.36,-635.3 1232.36,-635.3 1238.36,-641.3 1238.36,-647.3 1238.36,-647.3 1238.36,-709.9 1238.36,-709.9 1238.36,-715.9 1232.36,-721.9 1226.36,-721.9"
+ id="path87" />
+ <text
+ x="923.19"
+ y="-671.40002"
+ font-size="24.00"
+ id="text89"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">ca-certificates-mozilla@2023-05-30/7vxac6c</text>
+ </g>
+ <!-- wuse2zg2p4ujfbsks4znlwyqumsa476w -->
+ <g
+ id="node5"
+ class="node">
+ <title
+ id="title92">wuse2zg2p4ujfbsks4znlwyqumsa476w</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M4274.67,-1515.9C4274.67,-1515.9 3821.7,-1515.9 3821.7,-1515.9 3815.7,-1515.9 3809.7,-1509.9 3809.7,-1503.9 3809.7,-1503.9 3809.7,-1441.3 3809.7,-1441.3 3809.7,-1435.3 3815.7,-1429.3 3821.7,-1429.3 3821.7,-1429.3 4274.67,-1429.3 4274.67,-1429.3 4280.67,-1429.3 4286.67,-1435.3 4286.67,-1441.3 4286.67,-1441.3 4286.67,-1503.9 4286.67,-1503.9 4286.67,-1509.9 4280.67,-1515.9 4274.67,-1515.9"
+ id="path94" />
+ <text
+ x="4048.1899"
+ y="-1465.4"
+ font-size="24.00"
+ id="text96"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">py-cython@0.29.36/wuse2zg</text>
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4 -->
+ <g
+ id="node10"
+ class="node">
+ <title
+ id="title99">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3900.72,-1039.5C3900.72,-1039.5 3499.65,-1039.5 3499.65,-1039.5 3493.65,-1039.5 3487.65,-1033.5 3487.65,-1027.5 3487.65,-1027.5 3487.65,-964.9 3487.65,-964.9 3487.65,-958.9 3493.65,-952.9 3499.65,-952.9 3499.65,-952.9 3900.72,-952.9 3900.72,-952.9 3906.72,-952.9 3912.72,-958.9 3912.72,-964.9 3912.72,-964.9 3912.72,-1027.5 3912.72,-1027.5 3912.72,-1033.5 3906.72,-1039.5 3900.72,-1039.5"
+ id="path101" />
+ <text
+ x="3700.1899"
+ y="-989"
+ font-size="24.00"
+ id="text103"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">python@3.11.4/7ftqkn3</text>
+ </g>
+ <!-- wuse2zg2p4ujfbsks4znlwyqumsa476w&#45;&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4 -->
+ <g
+ id="edge84"
+ class="edge">
+ <title
+ id="title106">wuse2zg2p4ujfbsks4znlwyqumsa476w-&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4031.64,-1429.51C4015.15,-1387.39 3986.76,-1321.85 3952.36,-1270.96 3894.42,-1185.15 3809.75,-1099.62 3754.66,-1047.77"
+ id="path108" />
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M4033.5,-1428.79C4016.98,-1386.6 3988.59,-1321.06 3954.01,-1269.84 3895.84,-1183.74 3811.17,-1098.21 3756.03,-1046.31"
+ id="path110" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3757.46,-1044.23 3747.77,-1039.95 3752.68,-1049.34 3757.46,-1044.23"
+ id="polygon112" />
+ </g>
+ <!-- 33tg442mk3uy52ocdgd7uxbusdtkozlq -->
+ <g
+ id="node15"
+ class="node">
+ <title
+ id="title115">33tg442mk3uy52ocdgd7uxbusdtkozlq</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M4496.72,-1198.3C4496.72,-1198.3 4095.65,-1198.3 4095.65,-1198.3 4089.65,-1198.3 4083.65,-1192.3 4083.65,-1186.3 4083.65,-1186.3 4083.65,-1123.7 4083.65,-1123.7 4083.65,-1117.7 4089.65,-1111.7 4095.65,-1111.7 4095.65,-1111.7 4496.72,-1111.7 4496.72,-1111.7 4502.72,-1111.7 4508.72,-1117.7 4508.72,-1123.7 4508.72,-1123.7 4508.72,-1186.3 4508.72,-1186.3 4508.72,-1192.3 4502.72,-1198.3 4496.72,-1198.3"
+ id="path117" />
+ <text
+ x="4296.1899"
+ y="-1147.8"
+ font-size="24.00"
+ id="text119"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">py-pip@23.1.2/33tg442</text>
+ </g>
+ <!-- wuse2zg2p4ujfbsks4znlwyqumsa476w&#45;&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq -->
+ <g
+ id="edge61"
+ class="edge">
+ <title
+ id="title122">wuse2zg2p4ujfbsks4znlwyqumsa476w-&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4040.99,-1429.1C4035.98,-1385.4 4035.05,-1317.28 4067.19,-1270.4 4086.97,-1241.54 4116.24,-1219.61 4147.29,-1203.08"
+ id="path124" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4149.23,-1206.02 4156.53,-1198.34 4146.04,-1199.79 4149.23,-1206.02"
+ id="polygon126" />
+ </g>
+ <!-- isprdjk4hdva3owdr6bgzavgaqzyjwyj -->
+ <g
+ id="node19"
+ class="node">
+ <title
+ id="title129">isprdjk4hdva3owdr6bgzavgaqzyjwyj</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M4503.84,-1357.1C4503.84,-1357.1 4088.53,-1357.1 4088.53,-1357.1 4082.53,-1357.1 4076.53,-1351.1 4076.53,-1345.1 4076.53,-1345.1 4076.53,-1282.5 4076.53,-1282.5 4076.53,-1276.5 4082.53,-1270.5 4088.53,-1270.5 4088.53,-1270.5 4503.84,-1270.5 4503.84,-1270.5 4509.84,-1270.5 4515.84,-1276.5 4515.84,-1282.5 4515.84,-1282.5 4515.84,-1345.1 4515.84,-1345.1 4515.84,-1351.1 4509.84,-1357.1 4503.84,-1357.1"
+ id="path131" />
+ <text
+ x="4296.1899"
+ y="-1306.6"
+ font-size="24.00"
+ id="text133"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">py-wheel@0.37.1/isprdjk</text>
+ </g>
+ <!-- wuse2zg2p4ujfbsks4znlwyqumsa476w&#45;&gt;isprdjk4hdva3owdr6bgzavgaqzyjwyj -->
+ <g
+ id="edge70"
+ class="edge">
+ <title
+ id="title136">wuse2zg2p4ujfbsks4znlwyqumsa476w-&gt;isprdjk4hdva3owdr6bgzavgaqzyjwyj</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4115.3,-1429.17C4147.69,-1408.69 4186.7,-1384.02 4220.18,-1362.85"
+ id="path138" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4222.44,-1365.57 4229.02,-1357.27 4218.7,-1359.65 4222.44,-1365.57"
+ id="polygon140" />
+ </g>
+ <!-- esl2253adih4qsbluhmzdtsxfrws4fnt -->
+ <g
+ id="node26"
+ class="node">
+ <title
+ id="title143">esl2253adih4qsbluhmzdtsxfrws4fnt</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3931.86,-1357.1C3931.86,-1357.1 3468.51,-1357.1 3468.51,-1357.1 3462.51,-1357.1 3456.51,-1351.1 3456.51,-1345.1 3456.51,-1345.1 3456.51,-1282.5 3456.51,-1282.5 3456.51,-1276.5 3462.51,-1270.5 3468.51,-1270.5 3468.51,-1270.5 3931.86,-1270.5 3931.86,-1270.5 3937.86,-1270.5 3943.86,-1276.5 3943.86,-1282.5 3943.86,-1282.5 3943.86,-1345.1 3943.86,-1345.1 3943.86,-1351.1 3937.86,-1357.1 3931.86,-1357.1"
+ id="path145" />
+ <text
+ x="3700.1899"
+ y="-1306.6"
+ font-size="24.00"
+ id="text147"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">py-setuptools@59.4.0/esl2253</text>
+ </g>
+ <!-- wuse2zg2p4ujfbsks4znlwyqumsa476w&#45;&gt;esl2253adih4qsbluhmzdtsxfrws4fnt -->
+ <g
+ id="edge50"
+ class="edge">
+ <title
+ id="title150">wuse2zg2p4ujfbsks4znlwyqumsa476w-&gt;esl2253adih4qsbluhmzdtsxfrws4fnt</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3953.6,-1430.08C3906.99,-1409.08 3850.61,-1383.68 3802.85,-1362.15"
+ id="path152" />
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M3954.42,-1428.26C3907.81,-1407.25 3851.44,-1381.85 3803.67,-1360.33"
+ id="path154" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3804.69,-1358.05 3794.13,-1357.13 3801.81,-1364.43 3804.69,-1358.05"
+ id="polygon156" />
+ </g>
+ <!-- e3xjka5zk6vtoen2oexuzxyorp6um5rv -->
+ <g
+ id="node6"
+ class="node">
+ <title
+ id="title159">e3xjka5zk6vtoen2oexuzxyorp6um5rv</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M1463.86,-880.7C1463.86,-880.7 1068.52,-880.7 1068.52,-880.7 1062.52,-880.7 1056.52,-874.7 1056.52,-868.7 1056.52,-868.7 1056.52,-806.1 1056.52,-806.1 1056.52,-800.1 1062.52,-794.1 1068.52,-794.1 1068.52,-794.1 1463.86,-794.1 1463.86,-794.1 1469.86,-794.1 1475.86,-800.1 1475.86,-806.1 1475.86,-806.1 1475.86,-868.7 1475.86,-868.7 1475.86,-874.7 1469.86,-880.7 1463.86,-880.7"
+ id="path161" />
+ <text
+ x="1266.1899"
+ y="-830.20001"
+ font-size="24.00"
+ id="text163"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">openssl@3.1.3/e3xjka5</text>
+ </g>
+ <!-- e3xjka5zk6vtoen2oexuzxyorp6um5rv&#45;&gt;7vxac6cvfyqggxsvd7votisi72rdfvoh -->
+ <g
+ id="edge8"
+ class="edge">
+ <title
+ id="title166">e3xjka5zk6vtoen2oexuzxyorp6um5rv-&gt;7vxac6cvfyqggxsvd7votisi72rdfvoh</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1173.36,-793.97C1127.52,-773.01 1072.09,-747.67 1025.07,-726.18"
+ id="path168" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1026.33,-722.9 1015.78,-721.93 1023.42,-729.27 1026.33,-722.9"
+ id="polygon170" />
+ </g>
+ <!-- ez3cm4rogbx7at45wfi6gquti6fbo3zz -->
+ <g
+ id="node35"
+ class="node">
+ <title
+ id="title173">ez3cm4rogbx7at45wfi6gquti6fbo3zz</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M2346.49,-404.3C2346.49,-404.3 1947.88,-404.3 1947.88,-404.3 1941.88,-404.3 1935.88,-398.3 1935.88,-392.3 1935.88,-392.3 1935.88,-329.7 1935.88,-329.7 1935.88,-323.7 1941.88,-317.7 1947.88,-317.7 1947.88,-317.7 2346.49,-317.7 2346.49,-317.7 2352.49,-317.7 2358.49,-323.7 2358.49,-329.7 2358.49,-329.7 2358.49,-392.3 2358.49,-392.3 2358.49,-398.3 2352.49,-404.3 2346.49,-404.3"
+ id="path175" />
+ <text
+ x="2147.1899"
+ y="-353.79999"
+ font-size="24.00"
+ id="text177"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">zlib-ng@2.1.3/ez3cm4r</text>
+ </g>
+ <!-- e3xjka5zk6vtoen2oexuzxyorp6um5rv&#45;&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz -->
+ <g
+ id="edge12"
+ class="edge">
+ <title
+ id="title180">e3xjka5zk6vtoen2oexuzxyorp6um5rv-&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1263.09,-793.94C1259.85,-708.48 1257.95,-520.34 1301.47,-475.7 1399.6,-376.55 1785.18,-424.26 1922.04,-403.41 1923.16,-403.24 1924.3,-403.07 1925.43,-402.89"
+ id="path182" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M1265.09,-793.86C1261.85,-708.46 1259.95,-520.32 1302.9,-477.1 1399.36,-378.54 1784.94,-426.25 1922.34,-405.39 1923.47,-405.22 1924.6,-405.04 1925.74,-404.87"
+ id="path184" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1926.54,-407.27 1935.87,-402.27 1925.45,-400.36 1926.54,-407.27"
+ id="polygon186" />
+ </g>
+ <!-- 7bvgd7zcvk3hglqgbqczma5h4urvrdjb -->
+ <g
+ id="node39"
+ class="node">
+ <title
+ id="title189">7bvgd7zcvk3hglqgbqczma5h4urvrdjb</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M1763.86,-721.9C1763.86,-721.9 1384.52,-721.9 1384.52,-721.9 1378.52,-721.9 1372.52,-715.9 1372.52,-709.9 1372.52,-709.9 1372.52,-647.3 1372.52,-647.3 1372.52,-641.3 1378.52,-635.3 1384.52,-635.3 1384.52,-635.3 1763.86,-635.3 1763.86,-635.3 1769.86,-635.3 1775.86,-641.3 1775.86,-647.3 1775.86,-647.3 1775.86,-709.9 1775.86,-709.9 1775.86,-715.9 1769.86,-721.9 1763.86,-721.9"
+ id="path191" />
+ <text
+ x="1574.1899"
+ y="-671.40002"
+ font-size="24.00"
+ id="text193"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">perl@5.38.0/7bvgd7z</text>
+ </g>
+ <!-- e3xjka5zk6vtoen2oexuzxyorp6um5rv&#45;&gt;7bvgd7zcvk3hglqgbqczma5h4urvrdjb -->
+ <g
+ id="edge26"
+ class="edge">
+ <title
+ id="title196">e3xjka5zk6vtoen2oexuzxyorp6um5rv-&gt;7bvgd7zcvk3hglqgbqczma5h4urvrdjb</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1349.53,-793.97C1390.45,-773.14 1439.86,-747.99 1481.91,-726.58"
+ id="path198" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1483.71,-729.59 1491.04,-721.93 1480.54,-723.35 1483.71,-729.59"
+ id="polygon200" />
+ </g>
+ <!-- ys6bcgmvdayitnod74ppxvzbn75e7227 -->
+ <g
+ id="node7"
+ class="node">
+ <title
+ id="title203">ys6bcgmvdayitnod74ppxvzbn75e7227</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3919.85,-1833.5C3919.85,-1833.5 3480.53,-1833.5 3480.53,-1833.5 3474.53,-1833.5 3468.53,-1827.5 3468.53,-1821.5 3468.53,-1821.5 3468.53,-1758.9 3468.53,-1758.9 3468.53,-1752.9 3474.53,-1746.9 3480.53,-1746.9 3480.53,-1746.9 3919.85,-1746.9 3919.85,-1746.9 3925.85,-1746.9 3931.85,-1752.9 3931.85,-1758.9 3931.85,-1758.9 3931.85,-1821.5 3931.85,-1821.5 3931.85,-1827.5 3925.85,-1833.5 3919.85,-1833.5"
+ id="path205" />
+ <text
+ x="3700.1899"
+ y="-1783"
+ font-size="24.00"
+ id="text207"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">py-shapely@2.0.1/ys6bcgm</text>
+ </g>
+ <!-- ys6bcgmvdayitnod74ppxvzbn75e7227&#45;&gt;al63766ivhemwb3bxsklvqmhdptf34fn -->
+ <g
+ id="edge44"
+ class="edge">
+ <title
+ id="title210">ys6bcgmvdayitnod74ppxvzbn75e7227-&gt;al63766ivhemwb3bxsklvqmhdptf34fn</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3577.84,-1747.82C3516.53,-1726.55 3442.18,-1700.76 3379.58,-1679.04"
+ id="path212" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3578.49,-1745.93C3517.19,-1724.66 3442.83,-1698.87 3380.24,-1677.15"
+ id="path214" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3380.96,-1674.75 3370.36,-1674.78 3378.66,-1681.37 3380.96,-1674.75"
+ id="polygon216" />
+ </g>
+ <!-- ys6bcgmvdayitnod74ppxvzbn75e7227&#45;&gt;wuse2zg2p4ujfbsks4znlwyqumsa476w -->
+ <g
+ id="edge6"
+ class="edge">
+ <title
+ id="title219">ys6bcgmvdayitnod74ppxvzbn75e7227-&gt;wuse2zg2p4ujfbsks4znlwyqumsa476w</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3827.57,-1746.85C3867.33,-1729.16 3909.12,-1705.44 3941.19,-1674.8 3984.76,-1633.17 4014.36,-1569.85 4031.19,-1525.39"
+ id="path221" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4034.51,-1526.51 4034.69,-1515.92 4027.94,-1524.09 4034.51,-1526.51"
+ id="polygon223" />
+ </g>
+ <!-- ys6bcgmvdayitnod74ppxvzbn75e7227&#45;&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4 -->
+ <g
+ id="edge78"
+ class="edge">
+ <title
+ id="title226">ys6bcgmvdayitnod74ppxvzbn75e7227-&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3932.02,-1782.87C4327.46,-1767.43 5090.11,-1707.23 5089.19,-1473.6 5089.19,-1473.6 5089.19,-1473.6 5089.19,-1312.8 5090.11,-1077.34 4315.52,-1018.04 3922.84,-1003.18"
+ id="path228" />
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M3932.1,-1784.87C4327.61,-1769.42 5090.26,-1709.22 5091.19,-1473.6 5091.19,-1473.6 5091.19,-1473.6 5091.19,-1312.8 5090.26,-1075.35 4315.68,-1016.05 3922.92,-1001.18"
+ id="path230" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3922.93,-998.68 3912.81,-1001.8 3922.67,-1005.67 3922.93,-998.68"
+ id="polygon232" />
+ </g>
+ <!-- ys6bcgmvdayitnod74ppxvzbn75e7227&#45;&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq -->
+ <g
+ id="edge39"
+ class="edge">
+ <title
+ id="title235">ys6bcgmvdayitnod74ppxvzbn75e7227-&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3932.02,-1766.98C4024.76,-1750.83 4129.83,-1722.95 4216.19,-1674.8 4388.19,-1578.89 4451.07,-1539.66 4525.19,-1357.2 4539.7,-1321.46 4545.47,-1303.21 4525.19,-1270.4 4507.26,-1241.41 4479.53,-1219.53 4449.48,-1203.09"
+ id="path237" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4451,-1199.94 4440.52,-1198.38 4447.74,-1206.13 4451,-1199.94"
+ id="polygon239" />
+ </g>
+ <!-- ca3noh6upxuh3hdx2lnrsdvw7blgcj5p -->
+ <g
+ id="node17"
+ class="node">
+ <title
+ id="title242">ca3noh6upxuh3hdx2lnrsdvw7blgcj5p</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3919.86,-1674.7C3919.86,-1674.7 3480.52,-1674.7 3480.52,-1674.7 3474.52,-1674.7 3468.52,-1668.7 3468.52,-1662.7 3468.52,-1662.7 3468.52,-1600.1 3468.52,-1600.1 3468.52,-1594.1 3474.52,-1588.1 3480.52,-1588.1 3480.52,-1588.1 3919.86,-1588.1 3919.86,-1588.1 3925.86,-1588.1 3931.86,-1594.1 3931.86,-1600.1 3931.86,-1600.1 3931.86,-1662.7 3931.86,-1662.7 3931.86,-1668.7 3925.86,-1674.7 3919.86,-1674.7"
+ id="path244" />
+ <text
+ x="3700.1899"
+ y="-1624.2"
+ font-size="24.00"
+ id="text246"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">py-numpy@1.25.2/ca3noh6</text>
+ </g>
+ <!-- ys6bcgmvdayitnod74ppxvzbn75e7227&#45;&gt;ca3noh6upxuh3hdx2lnrsdvw7blgcj5p -->
+ <g
+ id="edge45"
+ class="edge">
+ <title
+ id="title249">ys6bcgmvdayitnod74ppxvzbn75e7227-&gt;ca3noh6upxuh3hdx2lnrsdvw7blgcj5p</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3698.19,-1746.77C3698.19,-1727.77 3698.19,-1705.17 3698.19,-1685.1"
+ id="path251" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3700.19,-1746.77C3700.19,-1727.77 3700.19,-1705.17 3700.19,-1685.1"
+ id="path253" />
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M3702.19,-1746.77C3702.19,-1727.77 3702.19,-1705.17 3702.19,-1685.1"
+ id="path255" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3703.69,-1684.87 3700.19,-1674.87 3696.69,-1684.87 3703.69,-1684.87"
+ id="polygon257" />
+ </g>
+ <!-- ys6bcgmvdayitnod74ppxvzbn75e7227&#45;&gt;isprdjk4hdva3owdr6bgzavgaqzyjwyj -->
+ <g
+ id="edge66"
+ class="edge">
+ <title
+ id="title260">ys6bcgmvdayitnod74ppxvzbn75e7227-&gt;isprdjk4hdva3owdr6bgzavgaqzyjwyj</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3932.1,-1752.84C4071.16,-1717.68 4236.88,-1649.08 4321.19,-1516 4349.47,-1471.35 4335.97,-1409.87 4319.98,-1366.65"
+ id="path262" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4323.19,-1365.25 4316.33,-1357.18 4316.66,-1367.77 4323.19,-1365.25"
+ id="polygon264" />
+ </g>
+ <!-- 2ok2ozl5i2qphhfsbxkdtq3iezemvpsv -->
+ <g
+ id="node21"
+ class="node">
+ <title
+ id="title267">2ok2ozl5i2qphhfsbxkdtq3iezemvpsv</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M5050.53,-1357.1C5050.53,-1357.1 4583.84,-1357.1 4583.84,-1357.1 4577.84,-1357.1 4571.84,-1351.1 4571.84,-1345.1 4571.84,-1345.1 4571.84,-1282.5 4571.84,-1282.5 4571.84,-1276.5 4577.84,-1270.5 4583.84,-1270.5 4583.84,-1270.5 5050.53,-1270.5 5050.53,-1270.5 5056.53,-1270.5 5062.53,-1276.5 5062.53,-1282.5 5062.53,-1282.5 5062.53,-1345.1 5062.53,-1345.1 5062.53,-1351.1 5056.53,-1357.1 5050.53,-1357.1"
+ id="path269" />
+ <text
+ x="4817.1899"
+ y="-1306.6"
+ font-size="24.00"
+ id="text271"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">py-setuptools@68.0.0/2ok2ozl</text>
+ </g>
+ <!-- ys6bcgmvdayitnod74ppxvzbn75e7227&#45;&gt;2ok2ozl5i2qphhfsbxkdtq3iezemvpsv -->
+ <g
+ id="edge27"
+ class="edge">
+ <title
+ id="title274">ys6bcgmvdayitnod74ppxvzbn75e7227-&gt;2ok2ozl5i2qphhfsbxkdtq3iezemvpsv</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3931.99,-1778.84C4149.3,-1765.49 4455.67,-1736.23 4558.19,-1674.8 4679.88,-1601.88 4760.57,-1447.43 4796.24,-1366.59"
+ id="path276" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4799.58,-1367.67 4800.36,-1357.11 4793.16,-1364.88 4799.58,-1367.67"
+ id="polygon278" />
+ </g>
+ <!-- aoucvoqqeft4hsw3poydbf4mvong4nry -->
+ <g
+ id="node8"
+ class="node">
+ <title
+ id="title281">aoucvoqqeft4hsw3poydbf4mvong4nry</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M4530.66,-245.5C4530.66,-245.5 4147.71,-245.5 4147.71,-245.5 4141.71,-245.5 4135.71,-239.5 4135.71,-233.5 4135.71,-233.5 4135.71,-170.9 4135.71,-170.9 4135.71,-164.9 4141.71,-158.9 4147.71,-158.9 4147.71,-158.9 4530.66,-158.9 4530.66,-158.9 4536.66,-158.9 4542.66,-164.9 4542.66,-170.9 4542.66,-170.9 4542.66,-233.5 4542.66,-233.5 4542.66,-239.5 4536.66,-245.5 4530.66,-245.5"
+ id="path283" />
+ <text
+ x="4339.1899"
+ y="-195"
+ font-size="24.00"
+ id="text285"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">ncurses@6.4/aoucvoq</text>
+ </g>
+ <!-- aoucvoqqeft4hsw3poydbf4mvong4nry&#45;&gt;hsp7usvecwby6o6kszujxywbux5f5qc4 -->
+ <g
+ id="edge25"
+ class="edge">
+ <title
+ id="title288">aoucvoqqeft4hsw3poydbf4mvong4nry-&gt;hsp7usvecwby6o6kszujxywbux5f5qc4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4135.53,-190.93C3955.56,-181.99 3685.95,-168.9 3451.19,-158.8 2420.4,-114.44 1189.01,-69.94 691.31,-52.3"
+ id="path290" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="691.26,-48.8 681.14,-51.94 691.01,-55.8 691.26,-48.8"
+ id="polygon292" />
+ </g>
+ <!-- 7aawlyt3hu24znvpgwedu2s3jmz46dkn -->
+ <g
+ id="node9"
+ class="node">
+ <title
+ id="title295">7aawlyt3hu24znvpgwedu2s3jmz46dkn</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3614.51,-563.1C3614.51,-563.1 3267.86,-563.1 3267.86,-563.1 3261.86,-563.1 3255.86,-557.1 3255.86,-551.1 3255.86,-551.1 3255.86,-488.5 3255.86,-488.5 3255.86,-482.5 3261.86,-476.5 3267.86,-476.5 3267.86,-476.5 3614.51,-476.5 3614.51,-476.5 3620.51,-476.5 3626.51,-482.5 3626.51,-488.5 3626.51,-488.5 3626.51,-551.1 3626.51,-551.1 3626.51,-557.1 3620.51,-563.1 3614.51,-563.1"
+ id="path297" />
+ <text
+ x="3441.1899"
+ y="-512.59998"
+ font-size="24.00"
+ id="text299"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">xz@5.4.1/7aawlyt</text>
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;e3xjka5zk6vtoen2oexuzxyorp6um5rv -->
+ <g
+ id="edge15"
+ class="edge">
+ <title
+ id="title302">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;e3xjka5zk6vtoen2oexuzxyorp6um5rv</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3487.47,-992.85C3097.14,-984.97 2240.65,-959.59 1523.08,-881.79 1510.92,-880.48 1498.47,-878.96 1485.91,-877.31"
+ id="path304" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3487.51,-990.85C3097.2,-982.97 2240.71,-957.6 1523.29,-879.81 1511.16,-878.49 1498.71,-876.98 1486.17,-875.33"
+ id="path306" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1486.33,-872.83 1475.96,-874.97 1485.4,-879.77 1486.33,-872.83"
+ id="polygon308" />
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;aoucvoqqeft4hsw3poydbf4mvong4nry -->
+ <g
+ id="edge80"
+ class="edge">
+ <title
+ id="title311">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;aoucvoqqeft4hsw3poydbf4mvong4nry</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3912.55,-962.9C4178.03,-917.67 4597.97,-823.27 4597.19,-679.6 4597.19,-679.6 4597.19,-679.6 4597.19,-518.8 4597.19,-426.22 4600.94,-390.51 4544.4,-318.21 4522.89,-290.48 4492.35,-268.37 4461.52,-251.4"
+ id="path313" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3912.88,-964.87C4178.47,-919.62 4598.4,-825.22 4599.19,-679.6 4599.19,-679.6 4599.19,-679.6 4599.19,-518.8 4599.18,-426.43 4602.93,-390.72 4545.98,-316.99 4524.07,-288.86 4493.52,-266.75 4462.48,-249.64"
+ id="path315" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4463.3,-247.25 4452.84,-245.62 4460.01,-253.42 4463.3,-247.25"
+ id="polygon317" />
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;7aawlyt3hu24znvpgwedu2s3jmz46dkn -->
+ <g
+ id="edge10"
+ class="edge">
+ <title
+ id="title320">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;7aawlyt3hu24znvpgwedu2s3jmz46dkn</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3582.19,-953.78C3548.95,-936.27 3516.11,-912.7 3494.36,-881.37 3460.37,-832.01 3447.1,-660.68 3442.43,-573.14"
+ id="path322" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3583.12,-952.01C3550.11,-934.65 3517.28,-911.07 3496.01,-880.23 3462.37,-831.86 3449.09,-660.52 3444.43,-573.04"
+ id="path324" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3446.93,-572.91 3442.92,-563.1 3439.94,-573.27 3446.93,-572.91"
+ id="polygon326" />
+ </g>
+ <!-- ygkrrpeszr4j377qqtqqecmwt27pm2ho -->
+ <g
+ id="node11"
+ class="node">
+ <title
+ id="title329">ygkrrpeszr4j377qqtqqecmwt27pm2ho</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M5050.5,-880.7C5050.5,-880.7 4675.87,-880.7 4675.87,-880.7 4669.87,-880.7 4663.87,-874.7 4663.87,-868.7 4663.87,-868.7 4663.87,-806.1 4663.87,-806.1 4663.87,-800.1 4669.87,-794.1 4675.87,-794.1 4675.87,-794.1 5050.5,-794.1 5050.5,-794.1 5056.5,-794.1 5062.5,-800.1 5062.5,-806.1 5062.5,-806.1 5062.5,-868.7 5062.5,-868.7 5062.5,-874.7 5056.5,-880.7 5050.5,-880.7"
+ id="path331" />
+ <text
+ x="4863.1899"
+ y="-830.20001"
+ font-size="24.00"
+ id="text333"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">expat@2.5.0/ygkrrpe</text>
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;ygkrrpeszr4j377qqtqqecmwt27pm2ho -->
+ <g
+ id="edge18"
+ class="edge">
+ <title
+ id="title336">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;ygkrrpeszr4j377qqtqqecmwt27pm2ho</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3912.97,-973.29C4105.92,-953.21 4397.85,-920.04 4650.03,-879.81 4651.31,-879.61 4652.6,-879.4 4653.89,-879.19"
+ id="path338" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3913.17,-975.28C4106.15,-955.19 4398.07,-922.02 4650.34,-881.79 4651.63,-881.58 4652.91,-881.38 4654.21,-881.17"
+ id="path340" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4654.71,-883.62 4664.01,-878.54 4653.57,-876.71 4654.71,-883.62"
+ id="polygon342" />
+ </g>
+ <!-- qlqyzklm3yyv6tkqgnj4tzoy7g72ejyu -->
+ <g
+ id="node13"
+ class="node">
+ <title
+ id="title345">qlqyzklm3yyv6tkqgnj4tzoy7g72ejyu</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M4115.88,-563.1C4115.88,-563.1 3732.49,-563.1 3732.49,-563.1 3726.49,-563.1 3720.49,-557.1 3720.49,-551.1 3720.49,-551.1 3720.49,-488.5 3720.49,-488.5 3720.49,-482.5 3726.49,-476.5 3732.49,-476.5 3732.49,-476.5 4115.88,-476.5 4115.88,-476.5 4121.88,-476.5 4127.88,-482.5 4127.88,-488.5 4127.88,-488.5 4127.88,-551.1 4127.88,-551.1 4127.88,-557.1 4121.88,-563.1 4115.88,-563.1"
+ id="path347" />
+ <text
+ x="3924.1899"
+ y="-512.59998"
+ font-size="24.00"
+ id="text349"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">sqlite@3.42.0/qlqyzkl</text>
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;qlqyzklm3yyv6tkqgnj4tzoy7g72ejyu -->
+ <g
+ id="edge64"
+ class="edge">
+ <title
+ id="title352">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;qlqyzklm3yyv6tkqgnj4tzoy7g72ejyu</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3821.51,-951.95C3853.74,-934.77 3885.08,-911.3 3904.34,-880.27 3963.39,-785.91 3949.15,-647.95 3935.2,-573.49"
+ id="path354" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3822.45,-953.72C3854.94,-936.37 3886.28,-912.9 3906.03,-881.33 3965.38,-785.7 3951.14,-647.74 3937.16,-573.13"
+ id="path356" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3939.56,-572.37 3934.22,-563.23 3932.69,-573.71 3939.56,-572.37"
+ id="polygon358" />
+ </g>
+ <!-- ihtvssgtl7yz2wj7wdla4hsi7nqfny42 -->
+ <g
+ id="node16"
+ class="node">
+ <title
+ id="title361">ihtvssgtl7yz2wj7wdla4hsi7nqfny42</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M5559.89,-880.7C5559.89,-880.7 5092.48,-880.7 5092.48,-880.7 5086.48,-880.7 5080.48,-874.7 5080.48,-868.7 5080.48,-868.7 5080.48,-806.1 5080.48,-806.1 5080.48,-800.1 5086.48,-794.1 5092.48,-794.1 5092.48,-794.1 5559.89,-794.1 5559.89,-794.1 5565.89,-794.1 5571.89,-800.1 5571.89,-806.1 5571.89,-806.1 5571.89,-868.7 5571.89,-868.7 5571.89,-874.7 5565.89,-880.7 5559.89,-880.7"
+ id="path363" />
+ <text
+ x="5326.1899"
+ y="-830.20001"
+ font-size="24.00"
+ id="text365"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">util-linux-uuid@2.38.1/ihtvssg</text>
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;ihtvssgtl7yz2wj7wdla4hsi7nqfny42 -->
+ <g
+ id="edge14"
+ class="edge">
+ <title
+ id="title368">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;ihtvssgtl7yz2wj7wdla4hsi7nqfny42</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3912.64,-981.86C4180.43,-965.08 4654.84,-931.28 5070.03,-879.91"
+ id="path370" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3912.77,-983.85C4180.57,-967.07 4654.98,-933.27 5070.27,-881.9"
+ id="path372" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="5070.76,-884.35 5080.26,-879.65 5069.9,-877.41 5070.76,-884.35"
+ id="polygon374" />
+ </g>
+ <!-- bvcsrijbs7lp5jvlyooahoxc3zfapwfp -->
+ <g
+ id="node18"
+ class="node">
+ <title
+ id="title377">bvcsrijbs7lp5jvlyooahoxc3zfapwfp</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M4519.87,-563.1C4519.87,-563.1 4158.5,-563.1 4158.5,-563.1 4152.5,-563.1 4146.5,-557.1 4146.5,-551.1 4146.5,-551.1 4146.5,-488.5 4146.5,-488.5 4146.5,-482.5 4152.5,-476.5 4158.5,-476.5 4158.5,-476.5 4519.87,-476.5 4519.87,-476.5 4525.87,-476.5 4531.87,-482.5 4531.87,-488.5 4531.87,-488.5 4531.87,-551.1 4531.87,-551.1 4531.87,-557.1 4525.87,-563.1 4519.87,-563.1"
+ id="path379" />
+ <text
+ x="4339.1899"
+ y="-512.59998"
+ font-size="24.00"
+ id="text381"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">gdbm@1.23/bvcsrij</text>
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;bvcsrijbs7lp5jvlyooahoxc3zfapwfp -->
+ <g
+ id="edge34"
+ class="edge">
+ <title
+ id="title384">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;bvcsrijbs7lp5jvlyooahoxc3zfapwfp</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3802.02,-951.95C3844.5,-932.5 3893.46,-907.57 3934.63,-879.97 4075.95,-785.27 4219.64,-644.23 4291.46,-569.98"
+ id="path386" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3802.85,-953.77C3845.4,-934.28 3894.37,-909.35 3935.74,-881.63 4077.35,-786.7 4221.04,-645.66 4292.89,-571.37"
+ id="path388" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4294.9,-572.9 4299.32,-563.27 4289.86,-568.04 4294.9,-572.9"
+ id="polygon390" />
+ </g>
+ <!-- 3o2rmrxpwkmmetxmzvba6sizei5womzv -->
+ <g
+ id="node20"
+ class="node">
+ <title
+ id="title393">3o2rmrxpwkmmetxmzvba6sizei5womzv</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3435.85,-880.7C3435.85,-880.7 3028.52,-880.7 3028.52,-880.7 3022.52,-880.7 3016.52,-874.7 3016.52,-868.7 3016.52,-868.7 3016.52,-806.1 3016.52,-806.1 3016.52,-800.1 3022.52,-794.1 3028.52,-794.1 3028.52,-794.1 3435.85,-794.1 3435.85,-794.1 3441.85,-794.1 3447.85,-800.1 3447.85,-806.1 3447.85,-806.1 3447.85,-868.7 3447.85,-868.7 3447.85,-874.7 3441.85,-880.7 3435.85,-880.7"
+ id="path395" />
+ <text
+ x="3232.1899"
+ y="-830.20001"
+ font-size="24.00"
+ id="text397"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">gettext@0.21.1/3o2rmrx</text>
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;3o2rmrxpwkmmetxmzvba6sizei5womzv -->
+ <g
+ id="edge52"
+ class="edge">
+ <title
+ id="title400">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;3o2rmrxpwkmmetxmzvba6sizei5womzv</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3573.53,-953.82C3509.92,-932.51 3432.75,-906.65 3367.85,-884.91"
+ id="path402" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3574.16,-951.92C3510.56,-930.61 3433.39,-904.76 3368.49,-883.01"
+ id="path404" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3369.28,-880.64 3358.69,-880.78 3367.06,-887.28 3369.28,-880.64"
+ id="polygon406" />
+ </g>
+ <!-- bcjm3vxlgrjgewpdakhpfea3y2kzcspe -->
+ <g
+ id="node24"
+ class="node">
+ <title
+ id="title409">bcjm3vxlgrjgewpdakhpfea3y2kzcspe</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M2269.7,-563.1C2269.7,-563.1 1884.67,-563.1 1884.67,-563.1 1878.67,-563.1 1872.67,-557.1 1872.67,-551.1 1872.67,-551.1 1872.67,-488.5 1872.67,-488.5 1872.67,-482.5 1878.67,-476.5 1884.67,-476.5 1884.67,-476.5 2269.7,-476.5 2269.7,-476.5 2275.7,-476.5 2281.7,-482.5 2281.7,-488.5 2281.7,-488.5 2281.7,-551.1 2281.7,-551.1 2281.7,-557.1 2275.7,-563.1 2269.7,-563.1"
+ id="path411" />
+ <text
+ x="2077.1899"
+ y="-512.59998"
+ font-size="24.00"
+ id="text413"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">bzip2@1.0.8/bcjm3vx</text>
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;bcjm3vxlgrjgewpdakhpfea3y2kzcspe -->
+ <g
+ id="edge83"
+ class="edge">
+ <title
+ id="title416">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;bcjm3vxlgrjgewpdakhpfea3y2kzcspe</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3487.55,-990.75C3095.86,-975.96 2283.41,-921.52 2097.45,-722.68 2060.54,-682.74 2060.18,-618.58 2065.84,-573.16"
+ id="path418" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3487.62,-988.76C3096,-973.97 2283.54,-919.53 2098.92,-721.32 2062.54,-682.73 2062.18,-618.57 2067.83,-573.41"
+ id="path420" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="2070.31,-573.73 2068.21,-563.35 2063.37,-572.78 2070.31,-573.73"
+ id="polygon422" />
+ </g>
+ <!-- 7pjirtey2xqww2bbkil3yj3mtmasruaw -->
+ <g
+ id="node25"
+ class="node">
+ <title
+ id="title425">7pjirtey2xqww2bbkil3yj3mtmasruaw</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M4523.83,-404.3C4523.83,-404.3 4154.54,-404.3 4154.54,-404.3 4148.54,-404.3 4142.54,-398.3 4142.54,-392.3 4142.54,-392.3 4142.54,-329.7 4142.54,-329.7 4142.54,-323.7 4148.54,-317.7 4154.54,-317.7 4154.54,-317.7 4523.83,-317.7 4523.83,-317.7 4529.83,-317.7 4535.83,-323.7 4535.83,-329.7 4535.83,-329.7 4535.83,-392.3 4535.83,-392.3 4535.83,-398.3 4529.83,-404.3 4523.83,-404.3"
+ id="path427" />
+ <text
+ x="4339.1899"
+ y="-353.79999"
+ font-size="24.00"
+ id="text429"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">readline@8.2/7pjirte</text>
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;7pjirtey2xqww2bbkil3yj3mtmasruaw -->
+ <g
+ id="edge13"
+ class="edge">
+ <title
+ id="title432">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;7pjirtey2xqww2bbkil3yj3mtmasruaw</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3912.58,-953.42C4116.11,-901.59 4411.02,-789.86 4540.32,-562.7 4559.3,-529.67 4559.61,-509.71 4540.32,-476.9 4523.99,-448.77 4497.48,-426.86 4469.17,-410.27"
+ id="path434" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3913.07,-955.36C4116.82,-903.46 4411.73,-791.73 4542.05,-563.7 4561.3,-529.71 4561.61,-509.74 4542.05,-475.9 4525.27,-447.23 4498.76,-425.31 4470.19,-408.54"
+ id="path436" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4471.23,-406.26 4460.8,-404.39 4467.79,-412.36 4471.23,-406.26"
+ id="polygon438" />
+ </g>
+ <!-- d24pqmu7ayswej2jfwwcgnw26t4gatgv -->
+ <g
+ id="node31"
+ class="node">
+ <title
+ id="title441">d24pqmu7ayswej2jfwwcgnw26t4gatgv</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M1981.71,-880.7C1981.71,-880.7 1544.66,-880.7 1544.66,-880.7 1538.66,-880.7 1532.66,-874.7 1532.66,-868.7 1532.66,-868.7 1532.66,-806.1 1532.66,-806.1 1532.66,-800.1 1538.66,-794.1 1544.66,-794.1 1544.66,-794.1 1981.71,-794.1 1981.71,-794.1 1987.71,-794.1 1993.71,-800.1 1993.71,-806.1 1993.71,-806.1 1993.71,-868.7 1993.71,-868.7 1993.71,-874.7 1987.71,-880.7 1981.71,-880.7"
+ id="path443" />
+ <text
+ x="1763.1899"
+ y="-830.20001"
+ font-size="24.00"
+ id="text445"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">libxcrypt@4.4.35/d24pqmu</text>
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;d24pqmu7ayswej2jfwwcgnw26t4gatgv -->
+ <g
+ id="edge75"
+ class="edge">
+ <title
+ id="title448">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;d24pqmu7ayswej2jfwwcgnw26t4gatgv</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3487.47,-988.91C3166.14,-976.3 2538.15,-945.41 2008.07,-881.79 2006.74,-881.63 2005.41,-881.47 2004.07,-881.31"
+ id="path450" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3487.55,-986.91C3166.24,-974.3 2538.25,-943.41 2008.3,-879.81 2006.98,-879.65 2005.65,-879.49 2004.32,-879.32"
+ id="path452" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="2004.27,-876.8 1993.91,-879.02 2003.4,-883.74 2004.27,-876.8"
+ id="polygon454" />
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;hsp7usvecwby6o6kszujxywbux5f5qc4 -->
+ <g
+ id="edge46"
+ class="edge">
+ <title
+ id="title457">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;hsp7usvecwby6o6kszujxywbux5f5qc4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3912.92,-989.61C4058.66,-979.03 4253.38,-951.32 4411.19,-880.8 4533.66,-826.07 4636.19,-813.75 4636.19,-679.6 4636.19,-679.6 4636.19,-679.6 4636.19,-360 4636.19,-262.93 4631.33,-213.58 4551.19,-158.8 4391.07,-49.37 1523.66,-43.42 691.08,-44.01"
+ id="path459" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="690.78,-40.51 680.78,-44.02 690.78,-47.51 690.78,-40.51"
+ id="polygon461" />
+ </g>
+ <!-- rei73bcylffduxjtuwt5sbibc2cbvuyt -->
+ <g
+ id="node34"
+ class="node">
+ <title
+ id="title464">rei73bcylffduxjtuwt5sbibc2cbvuyt</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3883.84,-880.7C3883.84,-880.7 3516.53,-880.7 3516.53,-880.7 3510.53,-880.7 3504.53,-874.7 3504.53,-868.7 3504.53,-868.7 3504.53,-806.1 3504.53,-806.1 3504.53,-800.1 3510.53,-794.1 3516.53,-794.1 3516.53,-794.1 3883.84,-794.1 3883.84,-794.1 3889.84,-794.1 3895.84,-800.1 3895.84,-806.1 3895.84,-806.1 3895.84,-868.7 3895.84,-868.7 3895.84,-874.7 3889.84,-880.7 3883.84,-880.7"
+ id="path466" />
+ <text
+ x="3700.1899"
+ y="-830.20001"
+ font-size="24.00"
+ id="text468"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">libffi@3.4.4/rei73bc</text>
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;rei73bcylffduxjtuwt5sbibc2cbvuyt -->
+ <g
+ id="edge49"
+ class="edge">
+ <title
+ id="title471">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;rei73bcylffduxjtuwt5sbibc2cbvuyt</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3699.19,-952.77C3699.19,-933.77 3699.19,-911.17 3699.19,-891.1"
+ id="path473" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3701.19,-952.77C3701.19,-933.77 3701.19,-911.17 3701.19,-891.1"
+ id="path475" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3703.69,-890.87 3700.19,-880.87 3696.69,-890.87 3703.69,-890.87"
+ id="polygon477" />
+ </g>
+ <!-- 7ftqkn35sy5bmqv3wui3ap3gubqyu4f4&#45;&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz -->
+ <g
+ id="edge40"
+ class="edge">
+ <title
+ id="title480">7ftqkn35sy5bmqv3wui3ap3gubqyu4f4-&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3487.49,-996.42C3133.63,-994.03 2440.89,-976.87 2217.79,-881.72 2022.99,-798.56 1949.11,-757.34 1862.27,-563.61 1846.48,-528.27 1840.64,-508.66 1862.36,-475.84 1882.5,-446.11 1911.43,-424.22 1943.43,-407.87"
+ id="path482" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3487.51,-994.42C3133.68,-992.03 2440.94,-974.87 2218.58,-879.88 2023.97,-796.81 1950.09,-755.59 1864.1,-562.79 1848.4,-527.7 1842.55,-508.09 1864.01,-476.96 1883.71,-447.7 1912.63,-425.81 1944.34,-409.65"
+ id="path484" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1945.5,-411.87 1952.95,-404.33 1942.43,-405.58 1945.5,-411.87"
+ id="polygon486" />
+ </g>
+ <!-- mof23fyk5qdmzll42yrtvvjeafzn45rl -->
+ <g
+ id="node40"
+ class="node">
+ <title
+ id="title489">mof23fyk5qdmzll42yrtvvjeafzn45rl</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M5077.71,-721.9C5077.71,-721.9 4676.66,-721.9 4676.66,-721.9 4670.66,-721.9 4664.66,-715.9 4664.66,-709.9 4664.66,-709.9 4664.66,-647.3 4664.66,-647.3 4664.66,-641.3 4670.66,-635.3 4676.66,-635.3 4676.66,-635.3 5077.71,-635.3 5077.71,-635.3 5083.71,-635.3 5089.71,-641.3 5089.71,-647.3 5089.71,-647.3 5089.71,-709.9 5089.71,-709.9 5089.71,-715.9 5083.71,-721.9 5077.71,-721.9"
+ id="path491" />
+ <text
+ x="4877.1899"
+ y="-671.40002"
+ font-size="24.00"
+ id="text493"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">libbsd@0.11.7/mof23fy</text>
+ </g>
+ <!-- ygkrrpeszr4j377qqtqqecmwt27pm2ho&#45;&gt;mof23fyk5qdmzll42yrtvvjeafzn45rl -->
+ <g
+ id="edge48"
+ class="edge">
+ <title
+ id="title496">ygkrrpeszr4j377qqtqqecmwt27pm2ho-&gt;mof23fyk5qdmzll42yrtvvjeafzn45rl</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4865.98,-793.88C4867.67,-774.88 4869.69,-752.28 4871.48,-732.21"
+ id="path498" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M4867.97,-794.06C4869.67,-775.06 4871.68,-752.46 4873.48,-732.39"
+ id="path500" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4875.99,-732.34 4873.39,-722.07 4869.02,-731.72 4875.99,-732.34"
+ id="polygon502" />
+ </g>
+ <!-- pbpdelsw4pyldezsnide5zcc4ym5rrzg -->
+ <g
+ id="node12"
+ class="node">
+ <title
+ id="title505">pbpdelsw4pyldezsnide5zcc4ym5rrzg</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M1463.84,-1357.1C1463.84,-1357.1 1118.53,-1357.1 1118.53,-1357.1 1112.53,-1357.1 1106.53,-1351.1 1106.53,-1345.1 1106.53,-1345.1 1106.53,-1282.5 1106.53,-1282.5 1106.53,-1276.5 1112.53,-1270.5 1118.53,-1270.5 1118.53,-1270.5 1463.84,-1270.5 1463.84,-1270.5 1469.84,-1270.5 1475.84,-1276.5 1475.84,-1282.5 1475.84,-1282.5 1475.84,-1345.1 1475.84,-1345.1 1475.84,-1351.1 1469.84,-1357.1 1463.84,-1357.1"
+ id="path507" />
+ <text
+ x="1291.1899"
+ y="-1306.6"
+ font-size="24.00"
+ id="text509"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">re2c@2.2/pbpdels</text>
+ </g>
+ <!-- qlqyzklm3yyv6tkqgnj4tzoy7g72ejyu&#45;&gt;7pjirtey2xqww2bbkil3yj3mtmasruaw -->
+ <g
+ id="edge28"
+ class="edge">
+ <title
+ id="title512">qlqyzklm3yyv6tkqgnj4tzoy7g72ejyu-&gt;7pjirtey2xqww2bbkil3yj3mtmasruaw</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4035.86,-475.54C4091.92,-454.36 4159.86,-428.69 4217.18,-407.03"
+ id="path514" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M4036.57,-477.41C4092.62,-456.23 4160.56,-430.56 4217.89,-408.9"
+ id="path516" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4218.89,-411.19 4227.01,-404.38 4216.42,-404.64 4218.89,-411.19"
+ id="polygon518" />
+ </g>
+ <!-- qlqyzklm3yyv6tkqgnj4tzoy7g72ejyu&#45;&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz -->
+ <g
+ id="edge51"
+ class="edge">
+ <title
+ id="title521">qlqyzklm3yyv6tkqgnj4tzoy7g72ejyu-&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3720.21,-488.09C3691.66,-484.18 3662.65,-480.47 3635.07,-477.39 3186.76,-427.33 2659.93,-392.45 2368.81,-375.26"
+ id="path523" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3720.48,-486.11C3691.91,-482.19 3662.9,-478.49 3635.3,-475.41 3186.89,-425.34 2660.06,-390.45 2368.92,-373.26"
+ id="path525" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="2368.8,-370.75 2358.61,-373.65 2368.39,-377.74 2368.8,-370.75"
+ id="polygon527" />
+ </g>
+ <!-- 33tg442mk3uy52ocdgd7uxbusdtkozlq&#45;&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4 -->
+ <g
+ id="edge17"
+ class="edge">
+ <title
+ id="title530">33tg442mk3uy52ocdgd7uxbusdtkozlq-&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4135.04,-1112.64C4053.21,-1091.11 3953.74,-1064.94 3870.57,-1043.06"
+ id="path532" />
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M4135.55,-1110.7C4053.72,-1089.18 3954.25,-1063.01 3871.08,-1041.13"
+ id="path534" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3871.59,-1038.68 3861.03,-1039.52 3869.81,-1045.44 3871.59,-1038.68"
+ id="polygon536" />
+ </g>
+ <!-- ihtvssgtl7yz2wj7wdla4hsi7nqfny42&#45;&gt;hsp7usvecwby6o6kszujxywbux5f5qc4 -->
+ <g
+ id="edge85"
+ class="edge">
+ <title
+ id="title539">ihtvssgtl7yz2wj7wdla4hsi7nqfny42-&gt;hsp7usvecwby6o6kszujxywbux5f5qc4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M5302.59,-793.96C5271.9,-734.69 5222.19,-622.91 5222.19,-520.8 5222.19,-520.8 5222.19,-520.8 5222.19,-360 5222.19,-90.51 4915.19,-207.78 4650.19,-158.8 4260.98,-86.86 1503.72,-54.51 691.06,-46.47"
+ id="path541" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="691.03,-42.97 681,-46.37 690.96,-49.97 691.03,-42.97"
+ id="polygon543" />
+ </g>
+ <!-- ca3noh6upxuh3hdx2lnrsdvw7blgcj5p&#45;&gt;wuse2zg2p4ujfbsks4znlwyqumsa476w -->
+ <g
+ id="edge65"
+ class="edge">
+ <title
+ id="title546">ca3noh6upxuh3hdx2lnrsdvw7blgcj5p-&gt;wuse2zg2p4ujfbsks4znlwyqumsa476w</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3794.36,-1587.97C3840.97,-1566.96 3897.35,-1541.56 3945.11,-1520.04"
+ id="path548" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3946.56,-1523.23 3954.24,-1515.93 3943.68,-1516.85 3946.56,-1523.23"
+ id="polygon550" />
+ </g>
+ <!-- ca3noh6upxuh3hdx2lnrsdvw7blgcj5p&#45;&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4 -->
+ <g
+ id="edge2"
+ class="edge">
+ <title
+ id="title553">ca3noh6upxuh3hdx2lnrsdvw7blgcj5p-&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3639.13,-1589.51C3577.19,-1541.49 3484.47,-1457.24 3445.32,-1357.93 3397.19,-1231.57 3532.51,-1109.35 3623.71,-1044.01"
+ id="path555" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3640.35,-1587.93C3578.54,-1540.01 3485.81,-1455.76 3447.19,-1357.2 3398.53,-1233.05 3533.85,-1110.84 3624.88,-1045.64"
+ id="path557" />
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M3641.58,-1586.35C3579.88,-1538.53 3487.16,-1454.28 3449.05,-1356.47 3399.87,-1234.54 3535.19,-1112.32 3626.04,-1047.26"
+ id="path559" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3627.12,-1048.33 3633.26,-1039.7 3623.08,-1042.62 3627.12,-1048.33"
+ id="polygon561" />
+ </g>
+ <!-- ca3noh6upxuh3hdx2lnrsdvw7blgcj5p&#45;&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq -->
+ <g
+ id="edge33"
+ class="edge">
+ <title
+ id="title564">ca3noh6upxuh3hdx2lnrsdvw7blgcj5p-&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3712.32,-1588.07C3726.96,-1543.55 3755.49,-1473.87 3801.19,-1429.2 3854.64,-1376.95 3892.7,-1401.12 3953.19,-1357.2 3996.13,-1326.02 3991.79,-1300.95 4035.19,-1270.4 4074,-1243.07 4120.39,-1220.15 4163.22,-1202.18"
+ id="path566" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4164.69,-1205.37 4172.59,-1198.31 4162.01,-1198.9 4164.69,-1205.37"
+ id="polygon568" />
+ </g>
+ <!-- ca3noh6upxuh3hdx2lnrsdvw7blgcj5p&#45;&gt;isprdjk4hdva3owdr6bgzavgaqzyjwyj -->
+ <g
+ id="edge55"
+ class="edge">
+ <title
+ id="title571">ca3noh6upxuh3hdx2lnrsdvw7blgcj5p-&gt;isprdjk4hdva3owdr6bgzavgaqzyjwyj</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3932.15,-1615.6C4078.62,-1600.88 4248.7,-1572 4295.19,-1516 4329.1,-1475.15 4323.09,-1411.87 4312.62,-1367.21"
+ id="path573" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4315.99,-1366.27 4310.18,-1357.41 4309.2,-1367.96 4315.99,-1366.27"
+ id="polygon575" />
+ </g>
+ <!-- ca3noh6upxuh3hdx2lnrsdvw7blgcj5p&#45;&gt;esl2253adih4qsbluhmzdtsxfrws4fnt -->
+ <g
+ id="edge19"
+ class="edge">
+ <title
+ id="title578">ca3noh6upxuh3hdx2lnrsdvw7blgcj5p-&gt;esl2253adih4qsbluhmzdtsxfrws4fnt</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3699.19,-1587.84C3699.19,-1530.74 3699.19,-1429.38 3699.19,-1367.52"
+ id="path580" />
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M3701.19,-1587.84C3701.19,-1530.74 3701.19,-1429.38 3701.19,-1367.52"
+ id="path582" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3703.69,-1367.19 3700.19,-1357.19 3696.69,-1367.19 3703.69,-1367.19"
+ id="polygon584" />
+ </g>
+ <!-- buscwcl7gy7xqmrsmtewcustpjoa3jy6 -->
+ <g
+ id="node36"
+ class="node">
+ <title
+ id="title587">buscwcl7gy7xqmrsmtewcustpjoa3jy6</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3387.84,-1515.9C3387.84,-1515.9 2964.54,-1515.9 2964.54,-1515.9 2958.54,-1515.9 2952.54,-1509.9 2952.54,-1503.9 2952.54,-1503.9 2952.54,-1441.3 2952.54,-1441.3 2952.54,-1435.3 2958.54,-1429.3 2964.54,-1429.3 2964.54,-1429.3 3387.84,-1429.3 3387.84,-1429.3 3393.84,-1429.3 3399.84,-1435.3 3399.84,-1441.3 3399.84,-1441.3 3399.84,-1503.9 3399.84,-1503.9 3399.84,-1509.9 3393.84,-1515.9 3387.84,-1515.9"
+ id="path589" />
+ <text
+ x="3176.1899"
+ y="-1465.4"
+ font-size="24.00"
+ id="text591"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">openblas@0.3.24/buscwcl</text>
+ </g>
+ <!-- ca3noh6upxuh3hdx2lnrsdvw7blgcj5p&#45;&gt;buscwcl7gy7xqmrsmtewcustpjoa3jy6 -->
+ <g
+ id="edge36"
+ class="edge">
+ <title
+ id="title594">ca3noh6upxuh3hdx2lnrsdvw7blgcj5p-&gt;buscwcl7gy7xqmrsmtewcustpjoa3jy6</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3558.44,-1589.03C3486.94,-1567.63 3400.11,-1541.65 3327.26,-1519.85"
+ id="path596" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3559.02,-1587.11C3487.51,-1565.72 3400.68,-1539.73 3327.84,-1517.94"
+ id="path598" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3328.41,-1515.5 3317.83,-1515.98 3326.4,-1522.2 3328.41,-1515.5"
+ id="polygon600" />
+ </g>
+ <!-- bvcsrijbs7lp5jvlyooahoxc3zfapwfp&#45;&gt;7pjirtey2xqww2bbkil3yj3mtmasruaw -->
+ <g
+ id="edge42"
+ class="edge">
+ <title
+ id="title603">bvcsrijbs7lp5jvlyooahoxc3zfapwfp-&gt;7pjirtey2xqww2bbkil3yj3mtmasruaw</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4338.19,-476.37C4338.19,-457.37 4338.19,-434.77 4338.19,-414.7"
+ id="path605" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M4340.19,-476.37C4340.19,-457.37 4340.19,-434.77 4340.19,-414.7"
+ id="path607" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4342.69,-414.47 4339.19,-404.47 4335.69,-414.47 4342.69,-414.47"
+ id="polygon609" />
+ </g>
+ <!-- isprdjk4hdva3owdr6bgzavgaqzyjwyj&#45;&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4 -->
+ <g
+ id="edge1"
+ class="edge">
+ <title
+ id="title612">isprdjk4hdva3owdr6bgzavgaqzyjwyj-&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4434.01,-1269.54C4466.94,-1252.66 4498.23,-1229.34 4517.33,-1197.88 4537.29,-1165.25 4542.53,-1140.5 4517.43,-1112.26 4479.31,-1068.02 4151.46,-1033.43 3922.82,-1014.44"
+ id="path614" />
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M4434.93,-1271.32C4468.13,-1254.26 4499.43,-1230.95 4519.04,-1198.92 4539.25,-1165.67 4544.48,-1140.91 4518.94,-1110.94 4479.52,-1066.03 4151.67,-1031.44 3922.98,-1012.44"
+ id="path616" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3923.02,-1009.94 3912.77,-1012.6 3922.45,-1016.92 3923.02,-1009.94"
+ id="polygon618" />
+ </g>
+ <!-- isprdjk4hdva3owdr6bgzavgaqzyjwyj&#45;&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq -->
+ <g
+ id="edge69"
+ class="edge">
+ <title
+ id="title621">isprdjk4hdva3owdr6bgzavgaqzyjwyj-&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4296.19,-1270.37C4296.19,-1251.37 4296.19,-1228.77 4296.19,-1208.7"
+ id="path623" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4299.69,-1208.47 4296.19,-1198.47 4292.69,-1208.47 4299.69,-1208.47"
+ id="polygon625" />
+ </g>
+ <!-- 3o2rmrxpwkmmetxmzvba6sizei5womzv&#45;&gt;aoucvoqqeft4hsw3poydbf4mvong4nry -->
+ <g
+ id="edge60"
+ class="edge">
+ <title
+ id="title628">3o2rmrxpwkmmetxmzvba6sizei5womzv-&gt;aoucvoqqeft4hsw3poydbf4mvong4nry</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3436.08,-793.02C3483.72,-776.29 3531.92,-753.09 3570.55,-721.23 3618.71,-681.79 3663.47,-518.1 3710.52,-475.66 3838.37,-360.97 4021.42,-288.79 4157.09,-247.55"
+ id="path630" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3436.74,-794.9C3484.59,-778.09 3532.79,-754.89 3571.82,-722.77 3620.64,-682.32 3665.4,-518.63 3711.85,-477.14 3839.11,-362.83 4022.16,-290.65 4157.67,-249.46"
+ id="path632" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4158.49,-251.83 4167.06,-245.59 4156.48,-245.12 4158.49,-251.83"
+ id="polygon634" />
+ </g>
+ <!-- 3o2rmrxpwkmmetxmzvba6sizei5womzv&#45;&gt;7aawlyt3hu24znvpgwedu2s3jmz46dkn -->
+ <g
+ id="edge11"
+ class="edge">
+ <title
+ id="title637">3o2rmrxpwkmmetxmzvba6sizei5womzv-&gt;7aawlyt3hu24znvpgwedu2s3jmz46dkn</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3258.7,-792.73C3296.91,-735.04 3365.03,-632.17 3405.87,-570.51"
+ id="path639" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3260.37,-793.84C3298.58,-736.15 3366.7,-633.28 3407.54,-571.61"
+ id="path641" />
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M3262.04,-794.94C3300.24,-737.25 3368.37,-634.38 3409.2,-572.71"
+ id="path643" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3410.51,-573.46 3413.11,-563.19 3404.67,-569.6 3410.51,-573.46"
+ id="polygon645" />
+ </g>
+ <!-- 3o2rmrxpwkmmetxmzvba6sizei5womzv&#45;&gt;gpd7yevon44acblslmgorfsxufgk3nhz -->
+ <g
+ id="edge77"
+ class="edge">
+ <title
+ id="title648">3o2rmrxpwkmmetxmzvba6sizei5womzv-&gt;gpd7yevon44acblslmgorfsxufgk3nhz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3351.76,-793.17C3496.51,-734.77 3711.73,-619.98 3634.3,-476.87 3575.82,-366.86 3450.35,-293.17 3354.28,-250.48"
+ id="path650" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3352.51,-795.02C3497.45,-736.53 3712.67,-621.74 3636.07,-475.93 3576.83,-365.14 3451.36,-291.44 3355.09,-248.65"
+ id="path652" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3356.03,-246.33 3345.47,-245.52 3353.22,-252.74 3356.03,-246.33"
+ id="polygon654" />
+ </g>
+ <!-- 3o2rmrxpwkmmetxmzvba6sizei5womzv&#45;&gt;bcjm3vxlgrjgewpdakhpfea3y2kzcspe -->
+ <g
+ id="edge82"
+ class="edge">
+ <title
+ id="title657">3o2rmrxpwkmmetxmzvba6sizei5womzv-&gt;bcjm3vxlgrjgewpdakhpfea3y2kzcspe</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3016.41,-826.06C2723.35,-808.9 2228.07,-772.94 2160.59,-722.8 2113.02,-687.09 2092.17,-620.36 2083.05,-573.32"
+ id="path659" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3016.52,-824.07C2723.49,-806.9 2228.22,-770.95 2161.78,-721.2 2114.93,-686.49 2094.08,-619.76 2085.01,-572.94"
+ id="path661" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="2087.45,-572.35 2082.21,-563.14 2080.56,-573.61 2087.45,-572.35"
+ id="polygon663" />
+ </g>
+ <!-- jofugpdt2lki4tvw3xa56pxz4kzmjb33 -->
+ <g
+ id="node33"
+ class="node">
+ <title
+ id="title666">jofugpdt2lki4tvw3xa56pxz4kzmjb33</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3233.86,-721.9C3233.86,-721.9 2892.51,-721.9 2892.51,-721.9 2886.51,-721.9 2880.51,-715.9 2880.51,-709.9 2880.51,-709.9 2880.51,-647.3 2880.51,-647.3 2880.51,-641.3 2886.51,-635.3 2892.51,-635.3 2892.51,-635.3 3233.86,-635.3 3233.86,-635.3 3239.86,-635.3 3245.86,-641.3 3245.86,-647.3 3245.86,-647.3 3245.86,-709.9 3245.86,-709.9 3245.86,-715.9 3239.86,-721.9 3233.86,-721.9"
+ id="path668" />
+ <text
+ x="3063.1899"
+ y="-671.40002"
+ font-size="24.00"
+ id="text670"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">tar@1.34/jofugpd</text>
+ </g>
+ <!-- 3o2rmrxpwkmmetxmzvba6sizei5womzv&#45;&gt;jofugpdt2lki4tvw3xa56pxz4kzmjb33 -->
+ <g
+ id="edge41"
+ class="edge">
+ <title
+ id="title673">3o2rmrxpwkmmetxmzvba6sizei5womzv-&gt;jofugpdt2lki4tvw3xa56pxz4kzmjb33</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3185.77,-794.7C3164.17,-774.66 3138.24,-750.6 3115.76,-729.74"
+ id="path675" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3187.13,-793.23C3165.53,-773.19 3139.6,-749.14 3117.12,-728.28"
+ id="path677" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3118.67,-726.3 3108.96,-722.07 3113.91,-731.43 3118.67,-726.3"
+ id="polygon679" />
+ </g>
+ <!-- yry2pcjkl2hcfeexfi2yvnar2lyplbyg -->
+ <g
+ id="node37"
+ class="node">
+ <title
+ id="title682">yry2pcjkl2hcfeexfi2yvnar2lyplbyg</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M2589.88,-721.9C2589.88,-721.9 2182.49,-721.9 2182.49,-721.9 2176.49,-721.9 2170.49,-715.9 2170.49,-709.9 2170.49,-709.9 2170.49,-647.3 2170.49,-647.3 2170.49,-641.3 2176.49,-635.3 2182.49,-635.3 2182.49,-635.3 2589.88,-635.3 2589.88,-635.3 2595.88,-635.3 2601.88,-641.3 2601.88,-647.3 2601.88,-647.3 2601.88,-709.9 2601.88,-709.9 2601.88,-715.9 2595.88,-721.9 2589.88,-721.9"
+ id="path684" />
+ <text
+ x="2386.1899"
+ y="-671.40002"
+ font-size="24.00"
+ id="text686"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">libxml2@2.10.3/yry2pcj</text>
+ </g>
+ <!-- 3o2rmrxpwkmmetxmzvba6sizei5womzv&#45;&gt;yry2pcjkl2hcfeexfi2yvnar2lyplbyg -->
+ <g
+ id="edge30"
+ class="edge">
+ <title
+ id="title689">3o2rmrxpwkmmetxmzvba6sizei5womzv-&gt;yry2pcjkl2hcfeexfi2yvnar2lyplbyg</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3016.33,-797.41C2892.64,-774.49 2737.54,-745.74 2612.14,-722.5"
+ id="path691" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3016.7,-795.44C2893.01,-772.52 2737.9,-743.77 2612.5,-720.53"
+ id="path693" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="2612.67,-718.02 2602.2,-719.64 2611.39,-724.9 2612.67,-718.02"
+ id="polygon695" />
+ </g>
+ <!-- 2ok2ozl5i2qphhfsbxkdtq3iezemvpsv&#45;&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4 -->
+ <g
+ id="edge16"
+ class="edge">
+ <title
+ id="title698">2ok2ozl5i2qphhfsbxkdtq3iezemvpsv-&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4772.75,-1270.9C4721.47,-1223.71 4631.66,-1149.35 4539.81,-1112.53 4431.39,-1068.96 4133.21,-1035.37 3923.16,-1016.19"
+ id="path700" />
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M4774.1,-1269.43C4722.75,-1222.16 4632.94,-1147.81 4540.56,-1110.67 4431.62,-1066.97 4133.44,-1033.38 3923.34,-1014.2"
+ id="path702" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3923.28,-1011.69 3913,-1014.27 3922.65,-1018.66 3923.28,-1011.69"
+ id="polygon704" />
+ </g>
+ <!-- 2ok2ozl5i2qphhfsbxkdtq3iezemvpsv&#45;&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq -->
+ <g
+ id="edge20"
+ class="edge">
+ <title
+ id="title707">2ok2ozl5i2qphhfsbxkdtq3iezemvpsv-&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4676.54,-1270.47C4605.44,-1249.07 4519.11,-1223.09 4446.68,-1201.29"
+ id="path709" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4447.6,-1197.91 4437.01,-1198.38 4445.58,-1204.62 4447.6,-1197.91"
+ id="polygon711" />
+ </g>
+ <!-- ma7u5unvr5auweq7clkgz75hca33j6eb -->
+ <g
+ id="node22"
+ class="node">
+ <title
+ id="title714">ma7u5unvr5auweq7clkgz75hca33j6eb</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M3188.54,-563.1C3188.54,-563.1 2827.84,-563.1 2827.84,-563.1 2821.84,-563.1 2815.84,-557.1 2815.84,-551.1 2815.84,-551.1 2815.84,-488.5 2815.84,-488.5 2815.84,-482.5 2821.84,-476.5 2827.84,-476.5 2827.84,-476.5 3188.54,-476.5 3188.54,-476.5 3194.54,-476.5 3200.54,-482.5 3200.54,-488.5 3200.54,-488.5 3200.54,-551.1 3200.54,-551.1 3200.54,-557.1 3194.54,-563.1 3188.54,-563.1"
+ id="path716" />
+ <text
+ x="3008.1899"
+ y="-512.59998"
+ font-size="24.00"
+ id="text718"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">pigz@2.7/ma7u5un</text>
+ </g>
+ <!-- ma7u5unvr5auweq7clkgz75hca33j6eb&#45;&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz -->
+ <g
+ id="edge58"
+ class="edge">
+ <title
+ id="title721">ma7u5unvr5auweq7clkgz75hca33j6eb-&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M2815.73,-479.07C2812.8,-478.5 2809.89,-477.94 2807,-477.38 2661.21,-449.38 2496.67,-420.85 2368.37,-399.29"
+ id="path723" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M2816.11,-477.11C2813.18,-476.54 2810.26,-475.97 2807.37,-475.42 2661.55,-447.41 2497.02,-418.88 2368.7,-397.32"
+ id="path725" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="2369.02,-394.84 2358.58,-396.64 2367.86,-401.74 2369.02,-394.84"
+ id="polygon727" />
+ </g>
+ <!-- ma6zn6mykr7xe226v2hvu4ye7jltnddb&#45;&gt;aoucvoqqeft4hsw3poydbf4mvong4nry -->
+ <g
+ id="edge22"
+ class="edge">
+ <title
+ id="title730">ma6zn6mykr7xe226v2hvu4ye7jltnddb-&gt;aoucvoqqeft4hsw3poydbf4mvong4nry</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M436.88,-1110.68C469.78,-1093.51 501.97,-1070.07 522.35,-1039.05 571.87,-965.26 541.42,-928.86 541.19,-838.4 541.19,-838.4 541.19,-838.4 541.19,-677.6 541.61,-580.2 670.7,-489.07 698.75,-475.5 930.36,-363.84 1621.23,-516.61 1850.74,-403.5 1896.27,-382.13 1880.07,-340.24 1926.75,-316.7 2079.88,-242.95 3281.86,-252.64 3451.14,-244.6 3681.5,-233.66 3945.48,-221.05 4125.35,-212.44"
+ id="path732" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M437.81,-1112.45C470.96,-1095.13 503.14,-1071.69 524.02,-1040.15 573.41,-963.98 542.95,-927.58 543.19,-838.4 543.19,-838.4 543.19,-838.4 543.19,-677.6 542.76,-581.84 671.85,-490.7 699.62,-477.3 929.93,-365.79 1620.8,-518.57 1851.63,-405.3 1898.13,-381.41 1881.93,-339.52 1927.62,-318.5 2079.87,-244.95 3281.85,-254.64 3451.23,-246.6 3681.6,-235.66 3945.58,-223.04 4125.45,-214.44"
+ id="path734" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4125.69,-216.93 4135.51,-212.95 4125.35,-209.94 4125.69,-216.93"
+ id="polygon736" />
+ </g>
+ <!-- omxtm4xh3xbta4le4ehihd26gi3qn2hc -->
+ <g
+ id="node29"
+ class="node">
+ <title
+ id="title739">omxtm4xh3xbta4le4ehihd26gi3qn2hc</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M501.71,-1039.5C501.71,-1039.5 124.66,-1039.5 124.66,-1039.5 118.66,-1039.5 112.66,-1033.5 112.66,-1027.5 112.66,-1027.5 112.66,-964.9 112.66,-964.9 112.66,-958.9 118.66,-952.9 124.66,-952.9 124.66,-952.9 501.71,-952.9 501.71,-952.9 507.71,-952.9 513.71,-958.9 513.71,-964.9 513.71,-964.9 513.71,-1027.5 513.71,-1027.5 513.71,-1033.5 507.71,-1039.5 501.71,-1039.5"
+ id="path741" />
+ <text
+ x="313.19"
+ y="-989"
+ font-size="24.00"
+ id="text743"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">curl@8.1.2/omxtm4x</text>
+ </g>
+ <!-- ma6zn6mykr7xe226v2hvu4ye7jltnddb&#45;&gt;omxtm4xh3xbta4le4ehihd26gi3qn2hc -->
+ <g
+ id="edge32"
+ class="edge">
+ <title
+ id="title746">ma6zn6mykr7xe226v2hvu4ye7jltnddb-&gt;omxtm4xh3xbta4le4ehihd26gi3qn2hc</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M312.19,-1111.57C312.19,-1092.57 312.19,-1069.97 312.19,-1049.9"
+ id="path748" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M314.19,-1111.57C314.19,-1092.57 314.19,-1069.97 314.19,-1049.9"
+ id="path750" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="316.69,-1049.67 313.19,-1039.67 309.69,-1049.67 316.69,-1049.67"
+ id="polygon752" />
+ </g>
+ <!-- ma6zn6mykr7xe226v2hvu4ye7jltnddb&#45;&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz -->
+ <g
+ id="edge68"
+ class="edge">
+ <title
+ id="title755">ma6zn6mykr7xe226v2hvu4ye7jltnddb-&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M463.69,-1110.79C498.95,-1093.98 532.91,-1070.69 555.37,-1039.02 660.41,-893.15 479.18,-771.68 598.44,-634.54 796.47,-410.23 1627.05,-447.42 1922.04,-403.41 1923.17,-403.24 1924.3,-403.07 1925.44,-402.9"
+ id="path757" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M464.55,-1112.59C500.08,-1095.63 534.05,-1072.34 557,-1040.18 661.52,-891.49 480.29,-770.02 599.94,-635.86 796.38,-412.22 1626.96,-449.42 1922.33,-405.39 1923.46,-405.22 1924.6,-405.05 1925.73,-404.88"
+ id="path759" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1926.53,-407.29 1935.88,-402.31 1925.46,-400.37 1926.53,-407.29"
+ id="polygon761" />
+ </g>
+ <!-- bcjm3vxlgrjgewpdakhpfea3y2kzcspe&#45;&gt;s3mykqnlex5ygursynhv4cfu4p4jcp5c -->
+ <g
+ id="edge21"
+ class="edge">
+ <title
+ id="title764">bcjm3vxlgrjgewpdakhpfea3y2kzcspe-&gt;s3mykqnlex5ygursynhv4cfu4p4jcp5c</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1957.33,-476.47C1897.23,-455.25 1824.37,-429.52 1762.96,-407.83"
+ id="path766" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1763.8,-404.41 1753.2,-404.38 1761.46,-411.01 1763.8,-404.41"
+ id="polygon768" />
+ </g>
+ <!-- 7pjirtey2xqww2bbkil3yj3mtmasruaw&#45;&gt;aoucvoqqeft4hsw3poydbf4mvong4nry -->
+ <g
+ id="edge7"
+ class="edge">
+ <title
+ id="title771">7pjirtey2xqww2bbkil3yj3mtmasruaw-&gt;aoucvoqqeft4hsw3poydbf4mvong4nry</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4338.19,-317.57C4338.19,-298.57 4338.19,-275.97 4338.19,-255.9"
+ id="path773" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M4340.19,-317.57C4340.19,-298.57 4340.19,-275.97 4340.19,-255.9"
+ id="path775" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4342.69,-255.67 4339.19,-245.67 4335.69,-255.67 4342.69,-255.67"
+ id="polygon777" />
+ </g>
+ <!-- esl2253adih4qsbluhmzdtsxfrws4fnt&#45;&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4 -->
+ <g
+ id="edge53"
+ class="edge">
+ <title
+ id="title780">esl2253adih4qsbluhmzdtsxfrws4fnt-&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3699.19,-1270.24C3699.19,-1213.14 3699.19,-1111.78 3699.19,-1049.92"
+ id="path782" />
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M3701.19,-1270.24C3701.19,-1213.14 3701.19,-1111.78 3701.19,-1049.92"
+ id="path784" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3703.69,-1049.59 3700.19,-1039.59 3696.69,-1049.59 3703.69,-1049.59"
+ id="polygon786" />
+ </g>
+ <!-- esl2253adih4qsbluhmzdtsxfrws4fnt&#45;&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq -->
+ <g
+ id="edge57"
+ class="edge">
+ <title
+ id="title789">esl2253adih4qsbluhmzdtsxfrws4fnt-&gt;33tg442mk3uy52ocdgd7uxbusdtkozlq</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3861.08,-1270.47C3942.91,-1248.94 4042.38,-1222.77 4125.54,-1200.89"
+ id="path791" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4126.56,-1204.24 4135.34,-1198.32 4124.78,-1197.48 4126.56,-1204.24"
+ id="polygon793" />
+ </g>
+ <!-- r3mipc2ezzxleb6g3yjy2rgio44tpsnr -->
+ <g
+ id="node27"
+ class="node">
+ <title
+ id="title796">r3mipc2ezzxleb6g3yjy2rgio44tpsnr</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M5068.88,-563.1C5068.88,-563.1 4685.49,-563.1 4685.49,-563.1 4679.49,-563.1 4673.49,-557.1 4673.49,-551.1 4673.49,-551.1 4673.49,-488.5 4673.49,-488.5 4673.49,-482.5 4679.49,-476.5 4685.49,-476.5 4685.49,-476.5 5068.88,-476.5 5068.88,-476.5 5074.88,-476.5 5080.88,-482.5 5080.88,-488.5 5080.88,-488.5 5080.88,-551.1 5080.88,-551.1 5080.88,-557.1 5074.88,-563.1 5068.88,-563.1"
+ id="path798" />
+ <text
+ x="4877.1899"
+ y="-512.59998"
+ font-size="24.00"
+ id="text800"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">libmd@1.0.4/r3mipc2</text>
+ </g>
+ <!-- tolbgopadusf5fpqzmhm7qfsnhpluyvv -->
+ <g
+ id="node28"
+ class="node">
+ <title
+ id="title803">tolbgopadusf5fpqzmhm7qfsnhpluyvv</title>
+ <path
+ fill="lightblue"
+ stroke="black"
+ stroke-width="4"
+ d="M2785.88,-563.1C2785.88,-563.1 2426.49,-563.1 2426.49,-563.1 2420.49,-563.1 2414.49,-557.1 2414.49,-551.1 2414.49,-551.1 2414.49,-488.5 2414.49,-488.5 2414.49,-482.5 2420.49,-476.5 2426.49,-476.5 2426.49,-476.5 2785.88,-476.5 2785.88,-476.5 2791.88,-476.5 2797.88,-482.5 2797.88,-488.5 2797.88,-488.5 2797.88,-551.1 2797.88,-551.1 2797.88,-557.1 2791.88,-563.1 2785.88,-563.1"
+ id="path805" />
+ <text
+ x="2606.1899"
+ y="-512.59998"
+ font-size="24.00"
+ id="text807"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">zstd@1.5.5/tolbgop</text>
+ </g>
+ <!-- omxtm4xh3xbta4le4ehihd26gi3qn2hc&#45;&gt;bqm4trdmbbqhrthe6flwnxp57cfbbser -->
+ <g
+ id="edge47"
+ class="edge">
+ <title
+ id="title810">omxtm4xh3xbta4le4ehihd26gi3qn2hc-&gt;bqm4trdmbbqhrthe6flwnxp57cfbbser</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M301.84,-953.1C287.99,-892.78 265.2,-778.54 265.19,-679.6 265.19,-679.6 265.19,-679.6 265.19,-518.8 265.2,-425.45 244.76,-318.01 230.84,-255.72"
+ id="path812" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M303.79,-952.65C289.95,-892.39 267.17,-778.15 267.19,-679.6 267.19,-679.6 267.19,-679.6 267.19,-518.8 267.17,-425.08 246.72,-317.63 232.79,-255.29"
+ id="path814" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="235.18,-254.51 229.56,-245.53 228.35,-256.05 235.18,-254.51"
+ id="polygon816" />
+ </g>
+ <!-- omxtm4xh3xbta4le4ehihd26gi3qn2hc&#45;&gt;e3xjka5zk6vtoen2oexuzxyorp6um5rv -->
+ <g
+ id="edge81"
+ class="edge">
+ <title
+ id="title819">omxtm4xh3xbta4le4ehihd26gi3qn2hc-&gt;e3xjka5zk6vtoen2oexuzxyorp6um5rv</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M513.67,-961.2C669.58,-935.55 885.57,-900.01 1046.14,-873.59"
+ id="path821" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M514,-963.17C669.9,-937.52 885.89,-901.98 1046.47,-875.56"
+ id="path823" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1047.02,-878.01 1056.32,-872.93 1045.88,-871.1 1047.02,-878.01"
+ id="polygon825" />
+ </g>
+ <!-- omxtm4xh3xbta4le4ehihd26gi3qn2hc&#45;&gt;hsp7usvecwby6o6kszujxywbux5f5qc4 -->
+ <g
+ id="edge4"
+ class="edge">
+ <title
+ id="title828">omxtm4xh3xbta4le4ehihd26gi3qn2hc-&gt;hsp7usvecwby6o6kszujxywbux5f5qc4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M349.44,-952.41C394.69,-894.51 466.19,-786.16 466.19,-679.6 466.19,-679.6 466.19,-679.6 466.19,-360 466.19,-267.35 466.19,-159.41 466.19,-96.79"
+ id="path830" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="469.69,-96.77 466.19,-86.77 462.69,-96.77 469.69,-96.77"
+ id="polygon832" />
+ </g>
+ <!-- omxtm4xh3xbta4le4ehihd26gi3qn2hc&#45;&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz -->
+ <g
+ id="edge54"
+ class="edge">
+ <title
+ id="title835">omxtm4xh3xbta4le4ehihd26gi3qn2hc-&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M397.33,-951.86C426.91,-933.39 458.13,-909.18 479.38,-880.21 590.81,-730.03 455.59,-593.18 603.57,-475.61 713.39,-389.71 1713.12,-417.25 1851.09,-403.4 1875.24,-400.98 1900.46,-398.03 1925.53,-394.82"
+ id="path837" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M398.39,-953.56C428.14,-934.97 459.36,-910.76 480.99,-881.39 592.24,-728.62 457.02,-591.77 604.8,-477.19 713.33,-391.71 1713.06,-419.25 1851.29,-405.4 1875.47,-402.97 1900.69,-400.01 1925.79,-396.8"
+ id="path839" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1926.17,-399.27 1935.64,-394.52 1925.27,-392.33 1926.17,-399.27"
+ id="polygon841" />
+ </g>
+ <!-- revhbmcsddofjb7jt3fql7fawtxjihvc&#45;&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4 -->
+ <g
+ id="edge63"
+ class="edge">
+ <title
+ id="title844">revhbmcsddofjb7jt3fql7fawtxjihvc-&gt;7ftqkn35sy5bmqv3wui3ap3gubqyu4f4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1498.92,-1430.69C1949.54,-1341.95 3013.5,-1132.43 3477.42,-1041.07"
+ id="path846" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3478.11,-1044.5 3487.25,-1039.13 3476.76,-1037.63 3478.11,-1044.5"
+ id="polygon848" />
+ </g>
+ <!-- revhbmcsddofjb7jt3fql7fawtxjihvc&#45;&gt;pbpdelsw4pyldezsnide5zcc4ym5rrzg -->
+ <g
+ id="edge73"
+ class="edge">
+ <title
+ id="title851">revhbmcsddofjb7jt3fql7fawtxjihvc-&gt;pbpdelsw4pyldezsnide5zcc4ym5rrzg</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1291.19,-1429.17C1291.19,-1410.17 1291.19,-1387.57 1291.19,-1367.5"
+ id="path853" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1294.69,-1367.27 1291.19,-1357.27 1287.69,-1367.27 1294.69,-1367.27"
+ id="polygon855" />
+ </g>
+ <!-- d24pqmu7ayswej2jfwwcgnw26t4gatgv&#45;&gt;7bvgd7zcvk3hglqgbqczma5h4urvrdjb -->
+ <g
+ id="edge72"
+ class="edge">
+ <title
+ id="title858">d24pqmu7ayswej2jfwwcgnw26t4gatgv-&gt;7bvgd7zcvk3hglqgbqczma5h4urvrdjb</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1712.04,-793.97C1687.67,-773.75 1658.38,-749.45 1633.09,-728.47"
+ id="path860" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1635.3,-725.76 1625.37,-722.07 1630.83,-731.14 1635.3,-725.76"
+ id="polygon862" />
+ </g>
+ <!-- jofugpdt2lki4tvw3xa56pxz4kzmjb33&#45;&gt;7aawlyt3hu24znvpgwedu2s3jmz46dkn -->
+ <g
+ id="edge5"
+ class="edge">
+ <title
+ id="title865">jofugpdt2lki4tvw3xa56pxz4kzmjb33-&gt;7aawlyt3hu24znvpgwedu2s3jmz46dkn</title>
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M3165.48,-635.17C3216.32,-614.08 3277.85,-588.55 3329.88,-566.97"
+ id="path867" />
+ <polygon
+ fill="goldenrod"
+ stroke="goldenrod"
+ stroke-width="2"
+ points="3331.24,-570.19 3339.14,-563.13 3328.56,-563.73 3331.24,-570.19"
+ id="polygon869" />
+ </g>
+ <!-- jofugpdt2lki4tvw3xa56pxz4kzmjb33&#45;&gt;gpd7yevon44acblslmgorfsxufgk3nhz -->
+ <g
+ id="edge38"
+ class="edge">
+ <title
+ id="title872">jofugpdt2lki4tvw3xa56pxz4kzmjb33-&gt;gpd7yevon44acblslmgorfsxufgk3nhz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M3140.71,-634.3C3166.85,-615.92 3193.29,-591.75 3208.3,-562.74 3259.54,-464.5 3248.7,-329.18 3237.32,-255.87"
+ id="path874" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M3141.86,-635.94C3168.2,-617.4 3194.63,-593.22 3210.07,-563.66 3261.54,-464.34 3250.7,-329.02 3239.29,-255.56"
+ id="path876" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3241.75,-255.09 3236.7,-245.78 3234.84,-256.21 3241.75,-255.09"
+ id="polygon878" />
+ </g>
+ <!-- jofugpdt2lki4tvw3xa56pxz4kzmjb33&#45;&gt;ma7u5unvr5auweq7clkgz75hca33j6eb -->
+ <g
+ id="edge29"
+ class="edge">
+ <title
+ id="title881">jofugpdt2lki4tvw3xa56pxz4kzmjb33-&gt;ma7u5unvr5auweq7clkgz75hca33j6eb</title>
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M3048.3,-635.17C3041.58,-615.99 3033.57,-593.16 3026.48,-572.95"
+ id="path883" />
+ <polygon
+ fill="goldenrod"
+ stroke="goldenrod"
+ stroke-width="2"
+ points="3029.69,-571.54 3023.08,-563.27 3023.09,-573.86 3029.69,-571.54"
+ id="polygon885" />
+ </g>
+ <!-- jofugpdt2lki4tvw3xa56pxz4kzmjb33&#45;&gt;bcjm3vxlgrjgewpdakhpfea3y2kzcspe -->
+ <g
+ id="edge37"
+ class="edge">
+ <title
+ id="title888">jofugpdt2lki4tvw3xa56pxz4kzmjb33-&gt;bcjm3vxlgrjgewpdakhpfea3y2kzcspe</title>
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M2880.33,-648.52C2713.79,-622.04 2467.75,-582.91 2291.92,-554.95"
+ id="path890" />
+ <polygon
+ fill="goldenrod"
+ stroke="goldenrod"
+ stroke-width="2"
+ points="2292.45,-551.49 2282.03,-553.38 2291.35,-558.4 2292.45,-551.49"
+ id="polygon892" />
+ </g>
+ <!-- jofugpdt2lki4tvw3xa56pxz4kzmjb33&#45;&gt;tolbgopadusf5fpqzmhm7qfsnhpluyvv -->
+ <g
+ id="edge24"
+ class="edge">
+ <title
+ id="title895">jofugpdt2lki4tvw3xa56pxz4kzmjb33-&gt;tolbgopadusf5fpqzmhm7qfsnhpluyvv</title>
+ <path
+ fill="none"
+ stroke="goldenrod"
+ stroke-width="2"
+ d="M2939.82,-635.27C2877.83,-614 2802.66,-588.21 2739.36,-566.49"
+ id="path897" />
+ <polygon
+ fill="goldenrod"
+ stroke="goldenrod"
+ stroke-width="2"
+ points="2740.31,-563.12 2729.71,-563.18 2738.04,-569.74 2740.31,-563.12"
+ id="polygon899" />
+ </g>
+ <!-- buscwcl7gy7xqmrsmtewcustpjoa3jy6&#45;&gt;7bvgd7zcvk3hglqgbqczma5h4urvrdjb -->
+ <g
+ id="edge67"
+ class="edge">
+ <title
+ id="title902">buscwcl7gy7xqmrsmtewcustpjoa3jy6-&gt;7bvgd7zcvk3hglqgbqczma5h4urvrdjb</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M2952.43,-1452.38C2496.82,-1410.23 1504.19,-1301.67 1504.19,-1156 1504.19,-1156 1504.19,-1156 1504.19,-995.2 1504.19,-905.38 1500.38,-880.88 1523.19,-794 1528.76,-772.76 1537.87,-750.48 1546.86,-731.28"
+ id="path904" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1550.09,-732.65 1551.25,-722.12 1543.78,-729.63 1550.09,-732.65"
+ id="polygon906" />
+ </g>
+ <!-- yry2pcjkl2hcfeexfi2yvnar2lyplbyg&#45;&gt;7aawlyt3hu24znvpgwedu2s3jmz46dkn -->
+ <g
+ id="edge79"
+ class="edge">
+ <title
+ id="title909">yry2pcjkl2hcfeexfi2yvnar2lyplbyg-&gt;7aawlyt3hu24znvpgwedu2s3jmz46dkn</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M2602.17,-649.13C2768.38,-627.38 3003.6,-595.25 3209.03,-562.21 3220.98,-560.29 3233.28,-558.24 3245.67,-556.13"
+ id="path911" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M2602.43,-651.11C2768.65,-629.36 3003.87,-597.23 3209.34,-564.19 3221.31,-562.26 3233.61,-560.22 3246.01,-558.1"
+ id="path913" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3246.53,-560.55 3255.79,-555.41 3245.34,-553.65 3246.53,-560.55"
+ id="polygon915" />
+ </g>
+ <!-- yry2pcjkl2hcfeexfi2yvnar2lyplbyg&#45;&gt;gpd7yevon44acblslmgorfsxufgk3nhz -->
+ <g
+ id="edge56"
+ class="edge">
+ <title
+ id="title918">yry2pcjkl2hcfeexfi2yvnar2lyplbyg-&gt;gpd7yevon44acblslmgorfsxufgk3nhz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M2376.8,-635.09C2370.61,-590.51 2368.57,-521.18 2404.4,-475.78 2548.18,-295.47 2813.54,-233.01 3004.39,-211.87"
+ id="path920" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M2378.78,-634.81C2372.61,-590.45 2370.57,-521.12 2405.97,-477.02 2548.63,-297.42 2814,-234.95 3004.61,-213.85"
+ id="path922" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="3005.09,-216.32 3014.66,-211.77 3004.34,-209.36 3005.09,-216.32"
+ id="polygon924" />
+ </g>
+ <!-- yry2pcjkl2hcfeexfi2yvnar2lyplbyg&#45;&gt;hsp7usvecwby6o6kszujxywbux5f5qc4 -->
+ <g
+ id="edge71"
+ class="edge">
+ <title
+ id="title927">yry2pcjkl2hcfeexfi2yvnar2lyplbyg-&gt;hsp7usvecwby6o6kszujxywbux5f5qc4</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M2361.4,-635.1C2349.46,-613.85 2335.34,-587.53 2324.19,-563.2 2306.98,-525.69 2322.72,-503.03 2291.19,-476.4 2165.2,-369.99 2070.02,-486.84 1927.19,-404.4 1882.78,-378.77 1895.6,-343.22 1851.19,-317.6 1656.6,-205.36 1030.5,-113.77 690.66,-70.82"
+ id="path929" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="691.05,-67.34 680.69,-69.56 690.18,-74.29 691.05,-67.34"
+ id="polygon931" />
+ </g>
+ <!-- yry2pcjkl2hcfeexfi2yvnar2lyplbyg&#45;&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz -->
+ <g
+ id="edge62"
+ class="edge">
+ <title
+ id="title934">yry2pcjkl2hcfeexfi2yvnar2lyplbyg-&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M2380.71,-635.38C2374.28,-591.86 2358.95,-523.83 2323.39,-477 2303.26,-450.35 2274.69,-428.03 2246.51,-410.51"
+ id="path936" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M2382.69,-635.09C2376.23,-591.42 2360.9,-523.39 2324.98,-475.8 2304.49,-448.78 2275.92,-426.46 2247.57,-408.81"
+ id="path938" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="2248.65,-406.54 2238.28,-404.35 2245.02,-412.53 2248.65,-406.54"
+ id="polygon940" />
+ </g>
+ <!-- lcvuenzomq3fdqabnz22ih3kpt4g2nyd -->
+ <g
+ id="node38"
+ class="node">
+ <title
+ id="title943">lcvuenzomq3fdqabnz22ih3kpt4g2nyd</title>
+ <path
+ fill="coral"
+ stroke="black"
+ stroke-width="4"
+ d="M1804.63,-563.1C1804.63,-563.1 1343.74,-563.1 1343.74,-563.1 1337.74,-563.1 1331.74,-557.1 1331.74,-551.1 1331.74,-551.1 1331.74,-488.5 1331.74,-488.5 1331.74,-482.5 1337.74,-476.5 1343.74,-476.5 1343.74,-476.5 1804.63,-476.5 1804.63,-476.5 1810.63,-476.5 1816.63,-482.5 1816.63,-488.5 1816.63,-488.5 1816.63,-551.1 1816.63,-551.1 1816.63,-557.1 1810.63,-563.1 1804.63,-563.1"
+ id="path945" />
+ <text
+ x="1574.1899"
+ y="-512.59998"
+ font-size="24.00"
+ id="text947"
+ style="font-size:24px;font-family:Monaco;text-anchor:middle">berkeley-db@18.1.40/lcvuenz</text>
+ </g>
+ <!-- 7bvgd7zcvk3hglqgbqczma5h4urvrdjb&#45;&gt;bvcsrijbs7lp5jvlyooahoxc3zfapwfp -->
+ <g
+ id="edge3"
+ class="edge">
+ <title
+ id="title950">7bvgd7zcvk3hglqgbqczma5h4urvrdjb-&gt;bvcsrijbs7lp5jvlyooahoxc3zfapwfp</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1776.05,-660.23C1889.21,-651.5 2032.95,-641.16 2161.13,-634.2 3035.71,-586.77 3263.49,-668.29 4136.22,-562.25"
+ id="path952" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M1776.2,-662.22C1889.36,-653.5 2033.09,-643.16 2161.24,-636.2 3035.04,-588.66 3262.82,-670.17 4136.46,-564.24"
+ id="path954" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4136.81,-566.71 4146.32,-562.03 4135.97,-559.76 4136.81,-566.71"
+ id="polygon956" />
+ </g>
+ <!-- 7bvgd7zcvk3hglqgbqczma5h4urvrdjb&#45;&gt;bcjm3vxlgrjgewpdakhpfea3y2kzcspe -->
+ <g
+ id="edge76"
+ class="edge">
+ <title
+ id="title959">7bvgd7zcvk3hglqgbqczma5h4urvrdjb-&gt;bcjm3vxlgrjgewpdakhpfea3y2kzcspe</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1709.68,-634.32C1778.18,-612.96 1861.32,-587.04 1931.16,-565.27"
+ id="path961" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M1710.27,-636.23C1778.77,-614.87 1861.92,-588.95 1931.76,-567.18"
+ id="path963" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1932.72,-569.5 1941.22,-563.18 1930.63,-562.82 1932.72,-569.5"
+ id="polygon965" />
+ </g>
+ <!-- 7bvgd7zcvk3hglqgbqczma5h4urvrdjb&#45;&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz -->
+ <g
+ id="edge74"
+ class="edge">
+ <title
+ id="title968">7bvgd7zcvk3hglqgbqczma5h4urvrdjb-&gt;ez3cm4rogbx7at45wfi6gquti6fbo3zz</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1410.03,-636.17C1375.41,-619.34 1343.26,-596.13 1322.34,-563.74 1301.33,-530.94 1296.6,-505.44 1322.44,-475.74 1412.28,-375.11 1789.81,-423.83 1922.03,-403.41 1923.16,-403.24 1924.29,-403.06 1925.43,-402.89"
+ id="path970" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M1410.9,-634.37C1376.58,-617.72 1344.43,-594.51 1324.03,-562.66 1303.3,-530.57 1298.57,-505.08 1323.93,-477.06 1412.02,-377.09 1789.55,-425.82 1922.34,-405.39 1923.47,-405.21 1924.6,-405.04 1925.74,-404.86"
+ id="path972" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1926.54,-407.27 1935.87,-402.25 1925.45,-400.35 1926.54,-407.27"
+ id="polygon974" />
+ </g>
+ <!-- 7bvgd7zcvk3hglqgbqczma5h4urvrdjb&#45;&gt;lcvuenzomq3fdqabnz22ih3kpt4g2nyd -->
+ <g
+ id="edge31"
+ class="edge">
+ <title
+ id="title977">7bvgd7zcvk3hglqgbqczma5h4urvrdjb-&gt;lcvuenzomq3fdqabnz22ih3kpt4g2nyd</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M1573.19,-635.17C1573.19,-616.17 1573.19,-593.57 1573.19,-573.5"
+ id="path979" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M1575.19,-635.17C1575.19,-616.17 1575.19,-593.57 1575.19,-573.5"
+ id="path981" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="1577.69,-573.27 1574.19,-563.27 1570.69,-573.27 1577.69,-573.27"
+ id="polygon983" />
+ </g>
+ <!-- mof23fyk5qdmzll42yrtvvjeafzn45rl&#45;&gt;r3mipc2ezzxleb6g3yjy2rgio44tpsnr -->
+ <g
+ id="edge9"
+ class="edge">
+ <title
+ id="title986">mof23fyk5qdmzll42yrtvvjeafzn45rl-&gt;r3mipc2ezzxleb6g3yjy2rgio44tpsnr</title>
+ <path
+ fill="none"
+ stroke="dodgerblue"
+ stroke-width="2"
+ d="M4876.19,-635.17C4876.19,-616.17 4876.19,-593.57 4876.19,-573.5"
+ id="path988" />
+ <path
+ fill="none"
+ stroke="crimson"
+ stroke-width="2"
+ d="M4878.19,-635.17C4878.19,-616.17 4878.19,-593.57 4878.19,-573.5"
+ id="path990" />
+ <polygon
+ fill="dodgerblue"
+ stroke="dodgerblue"
+ stroke-width="2"
+ points="4880.69,-573.27 4877.19,-563.27 4873.69,-573.27 4880.69,-573.27"
+ id="polygon992" />
+ </g>
+ </g>
+</svg>
diff --git a/lib/spack/spack/solver/asp.py b/lib/spack/spack/solver/asp.py
index 1afe31f162..ce0ae2ca7f 100644
--- a/lib/spack/spack/solver/asp.py
+++ b/lib/spack/spack/solver/asp.py
@@ -2595,6 +2595,7 @@ class SpecBuilder:
r"^node_compiler$",
r"^package_hash$",
r"^root$",
+ r"^variant_default_value_from_cli$",
r"^virtual_node$",
r"^virtual_root$",
]
diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp
index 7a41a9e834..fd3fb94f49 100644
--- a/lib/spack/spack/solver/concretize.lp
+++ b/lib/spack/spack/solver/concretize.lp
@@ -20,7 +20,7 @@
% Integrity constraints on DAG nodes
:- attr("root", PackageNode), not attr("node", PackageNode).
-:- attr("version", PackageNode), not attr("node", PackageNode).
+:- attr("version", PackageNode, _), not attr("node", PackageNode), not attr("virtual_node", PackageNode).
:- attr("node_version_satisfies", PackageNode), not attr("node", PackageNode).
:- attr("hash", PackageNode, _), not attr("node", PackageNode).
:- attr("node_platform", PackageNode, _), not attr("node", PackageNode).
@@ -58,7 +58,6 @@ unification_set(SetID, ChildNode) :- attr("depends_on", ParentNode, ChildNode, T
unification_set(("build", node(X, Child)), node(X, Child))
:- attr("depends_on", ParentNode, node(X, Child), Type),
Type == "build",
- SetID != "generic_build",
multiple_unification_sets(Child),
unification_set(SetID, ParentNode).
@@ -68,18 +67,18 @@ unification_set("generic_build", node(X, Child))
not multiple_unification_sets(Child),
unification_set(_, ParentNode).
-% Any dependency of type "build" in a unification set that is in the leaf unification set,
-% stays in that unification set
-unification_set(SetID, ChildNode)
- :- attr("depends_on", ParentNode, ChildNode, Type),
- Type == "build",
- SetID == "generic_build",
- unification_set(SetID, ParentNode).
-
unification_set(SetID, VirtualNode)
:- provider(PackageNode, VirtualNode),
unification_set(SetID, PackageNode).
+% Do not allow split dependencies, for now. This ensures that we don't construct graphs where e.g.
+% a python extension depends on setuptools@63.4 as a run dependency, but uses e.g. setuptools@68
+% as a build dependency.
+%
+% We'll need to relax the rule before we get to actual cross-compilation
+:- depends_on(ParentNode, node(X, Dependency)), depends_on(ParentNode, node(Y, Dependency)), X < Y.
+
+
#defined multiple_unification_sets/1.
%----
diff --git a/lib/spack/spack/solver/counter.py b/lib/spack/spack/solver/counter.py
index b238f60d8c..28883817df 100644
--- a/lib/spack/spack/solver/counter.py
+++ b/lib/spack/spack/solver/counter.py
@@ -5,6 +5,8 @@
import collections
from typing import List, Set
+from llnl.util import lang
+
import spack.deptypes as dt
import spack.package_base
import spack.repo
@@ -95,8 +97,17 @@ class MinimalDuplicatesCounter(NoDuplicatesCounter):
)
self._link_run_virtuals.update(self._possible_virtuals)
for x in self._link_run:
- current = spack.repo.PATH.get_pkg_class(x).dependencies_of_type(dt.BUILD)
- self._direct_build.update(current)
+ build_dependencies = spack.repo.PATH.get_pkg_class(x).dependencies_of_type(dt.BUILD)
+ virtuals, reals = lang.stable_partition(
+ build_dependencies, spack.repo.PATH.is_virtual_safe
+ )
+
+ self._possible_virtuals.update(virtuals)
+ for virtual_dep in virtuals:
+ providers = spack.repo.PATH.providers_for(virtual_dep)
+ self._direct_build.update(str(x) for x in providers)
+
+ self._direct_build.update(reals)
self._total_build = set(
spack.package_base.possible_dependencies(
diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py
index 85a638b602..8300e4d8a7 100644
--- a/lib/spack/spack/spec.py
+++ b/lib/spack/spack/spec.py
@@ -1604,13 +1604,20 @@ class Spec:
try:
dspec = next(dspec for dspec in orig if depflag == dspec.depflag)
except StopIteration:
- raise DuplicateDependencyError("Cannot depend on '%s' twice" % spec)
+ current_deps = ", ".join(
+ dt.flag_to_chars(x.depflag) + " " + x.spec.short_spec for x in orig
+ )
+ raise DuplicateDependencyError(
+ f"{self.short_spec} cannot depend on '{spec.short_spec}' multiple times.\n"
+ f"\tRequired: {dt.flag_to_chars(depflag)}\n"
+ f"\tDependency: {current_deps}"
+ )
try:
dspec.spec.constrain(spec)
except spack.error.UnsatisfiableSpecError:
raise DuplicateDependencyError(
- "Cannot depend on incompatible specs '%s' and '%s'" % (dspec.spec, spec)
+ f"Cannot depend on incompatible specs '{dspec.spec}' and '{spec}'"
)
def add_dependency_edge(
diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretize.py
index 63c6699de2..53f9c64d5e 100644
--- a/lib/spack/spack/test/concretize.py
+++ b/lib/spack/spack/test/concretize.py
@@ -2121,12 +2121,9 @@ def duplicates_test_repository():
@pytest.mark.usefixtures("mutable_config", "duplicates_test_repository")
+@pytest.mark.only_clingo("Not supported by the original concretizer")
class TestConcretizeSeparately:
@pytest.mark.parametrize("strategy", ["minimal", "full"])
- @pytest.mark.skipif(
- os.environ.get("SPACK_TEST_SOLVER") == "original",
- reason="Not supported by the original concretizer",
- )
def test_two_gmake(self, strategy):
"""Tests that we can concretize a spec with nodes using the same build
dependency pinned at different versions.
@@ -2151,10 +2148,6 @@ class TestConcretizeSeparately:
assert len(pinned_gmake) == 1 and pinned_gmake[0].satisfies("@=3.0")
@pytest.mark.parametrize("strategy", ["minimal", "full"])
- @pytest.mark.skipif(
- os.environ.get("SPACK_TEST_SOLVER") == "original",
- reason="Not supported by the original concretizer",
- )
def test_two_setuptools(self, strategy):
"""Tests that we can concretize separate build dependencies, when we are dealing
with extensions.
@@ -2191,10 +2184,6 @@ class TestConcretizeSeparately:
gmake = s["python"].dependencies(name="gmake", deptype="build")
assert len(gmake) == 1 and gmake[0].satisfies("@=3.0")
- @pytest.mark.skipif(
- os.environ.get("SPACK_TEST_SOLVER") == "original",
- reason="Not supported by the original concretizer",
- )
def test_solution_without_cycles(self):
"""Tests that when we concretize a spec with cycles, a fallback kicks in to recompute
a solution without cycles.
@@ -2207,6 +2196,21 @@ class TestConcretizeSeparately:
assert s["cycle-a"].satisfies("~cycle")
assert s["cycle-b"].satisfies("+cycle")
+ @pytest.mark.parametrize("strategy", ["minimal", "full"])
+ def test_pure_build_virtual_dependency(self, strategy):
+ """Tests that we can concretize a pure build virtual dependency, and ensures that
+ pure build virtual dependencies are accounted in the list of possible virtual
+ dependencies.
+
+ virtual-build@1.0
+ | [type=build, virtual=pkgconfig]
+ pkg-config@1.0
+ """
+ spack.config.CONFIG.set("concretizer:duplicates:strategy", strategy)
+
+ s = Spec("virtual-build").concretized()
+ assert s["pkgconfig"].name == "pkg-config"
+
@pytest.mark.parametrize(
"v_str,v_opts,checksummed",
diff --git a/lib/spack/spack/test/data/config/concretizer.yaml b/lib/spack/spack/test/data/config/concretizer.yaml
index ecf121a917..0dd810163d 100644
--- a/lib/spack/spack/test/data/config/concretizer.yaml
+++ b/lib/spack/spack/test/data/config/concretizer.yaml
@@ -4,4 +4,4 @@ concretizer:
granularity: microarchitectures
host_compatible: false
duplicates:
- strategy: none
+ strategy: minimal
diff --git a/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml
index b4534f0814..9963f4b777 100644
--- a/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml
+++ b/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml
@@ -4,22 +4,16 @@ spack:
cmake:
variants: ~ownlibs
ecp-data-vis-sdk:
- require:
- - one_of:
- - +ascent +adios2 +cinema +darshan +faodel +hdf5 +pnetcdf +sensei +sz +unifyfs
- +veloc +vtkm +zfp
- - one_of:
- - +paraview ~visit
- - ~paraview +visit
+ require: "+ascent +adios2 +cinema +darshan +faodel +hdf5 +pnetcdf +sensei +sz +unifyfs +veloc +vtkm +zfp"
hdf5:
require:
- one_of: ['@1.14', '@1.12']
mesa:
- require: +glx +osmesa +opengl ~opengles +llvm
+ require: "+glx +osmesa +opengl ~opengles +llvm"
libosmesa:
- require: mesa +osmesa
+ require: "mesa +osmesa"
libglx:
- require: mesa +glx
+ require: "mesa +glx"
ospray:
require: '@2.8.0 +denoiser +mpi'
llvm:
@@ -57,9 +51,11 @@ spack:
# Test ParaView and VisIt builds with different GL backends
- matrix:
- [$sdk_base_spec]
+ - ["+paraview ~visit"]
- [$^paraview_specs]
- matrix:
- [$sdk_base_spec]
+ - ["~paraview +visit"]
- [$^visit_specs]
mirrors: {mirror: s3://spack-binaries/develop/data-vis-sdk}
diff --git a/var/spack/repos/builtin/packages/camp/package.py b/var/spack/repos/builtin/packages/camp/package.py
index 8d7b4f62b1..a1bdc830d3 100644
--- a/var/spack/repos/builtin/packages/camp/package.py
+++ b/var/spack/repos/builtin/packages/camp/package.py
@@ -53,7 +53,7 @@ class Camp(CMakePackage, CudaPackage, ROCmPackage):
depends_on("cub", when="+cuda")
- depends_on("blt")
+ depends_on("blt", type="build")
conflicts("^blt@:0.3.6", when="+rocm")
diff --git a/var/spack/repos/builtin/packages/cmake/package.py b/var/spack/repos/builtin/packages/cmake/package.py
index c4c61aee82..796eb4c397 100644
--- a/var/spack/repos/builtin/packages/cmake/package.py
+++ b/var/spack/repos/builtin/packages/cmake/package.py
@@ -239,7 +239,7 @@ class Cmake(Package):
depends_on("libuv@1.10.0:1.10", when="@3.11.0:3.11")
depends_on("libuv@1.10.0:", when="@3.12.0:")
depends_on("rhash", when="@3.8.0:")
- depends_on("jsoncpp", when="@3.2:")
+ depends_on("jsoncpp build_system=meson", when="@3.2:")
depends_on("ncurses", when="+ncurses")
diff --git a/var/spack/repos/builtin/packages/jsoncpp/package.py b/var/spack/repos/builtin/packages/jsoncpp/package.py
index 55c2f22a02..bd20e2b22e 100644
--- a/var/spack/repos/builtin/packages/jsoncpp/package.py
+++ b/var/spack/repos/builtin/packages/jsoncpp/package.py
@@ -47,7 +47,7 @@ class Jsoncpp(CMakePackage, MesonPackage):
with when("build_system=cmake"):
depends_on("cmake@3.1:", type="build")
- depends_on("cmake@1.9:", when="@1.9:", type="build")
+ depends_on("cmake@3.9:", when="@1.9:", type="build")
with when("build_system=meson"):
depends_on("meson@0.49.0:", type="build")
diff --git a/var/spack/repos/builtin/packages/mgard/package.py b/var/spack/repos/builtin/packages/mgard/package.py
index ca9f2f46e4..b58f4c0bba 100644
--- a/var/spack/repos/builtin/packages/mgard/package.py
+++ b/var/spack/repos/builtin/packages/mgard/package.py
@@ -50,7 +50,7 @@ class Mgard(CMakePackage, CudaPackage):
depends_on("libarchive", when="@2021-11-12:")
depends_on("tclap", when="@2021-11-12")
depends_on("yaml-cpp", when="@2021-11-12:")
- depends_on("cmake@3.19:")
+ depends_on("cmake@3.19:", type="build")
depends_on("nvcomp@2.2.0:", when="@2022-11-18:+cuda")
depends_on("nvcomp@2.0.2", when="@:2021-11-12+cuda")
conflicts("cuda_arch=none", when="+cuda")
diff --git a/var/spack/repos/builtin/packages/py-gevent/package.py b/var/spack/repos/builtin/packages/py-gevent/package.py
index b684829f54..c41b815ef2 100644
--- a/var/spack/repos/builtin/packages/py-gevent/package.py
+++ b/var/spack/repos/builtin/packages/py-gevent/package.py
@@ -24,8 +24,7 @@ class PyGevent(PythonPackage):
depends_on("py-setuptools@40.8:", when="@20.5.1:", type=("build", "run"))
depends_on("py-setuptools@40.8:", when="@1.5:", type="build")
depends_on("py-setuptools@24.2:", when="@:1.4", type="build")
- # TODO: relax this until we support separate concretization of build deps by default
- # depends_on("py-cython@3:", when="@20.5.1:", type="build")
+ depends_on("py-cython@3:", when="@20.5.1:", type="build")
depends_on("py-cython@0.29.14:", when="@1.5:", type="build")
depends_on("py-cffi@1.12.3:", type=("build", "run"))
depends_on("py-greenlet@3:", when="@23.7: ^python@3.12:", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/py-statsmodels/package.py b/var/spack/repos/builtin/packages/py-statsmodels/package.py
index c99901d9ae..36968986a3 100644
--- a/var/spack/repos/builtin/packages/py-statsmodels/package.py
+++ b/var/spack/repos/builtin/packages/py-statsmodels/package.py
@@ -14,6 +14,7 @@ class PyStatsmodels(PythonPackage):
homepage = "https://www.statsmodels.org"
pypi = "statsmodels/statsmodels-0.8.0.tar.gz"
+ version("0.13.5", sha256="593526acae1c0fda0ea6c48439f67c3943094c542fe769f8b90fe9e6c6cc4871")
version("0.13.2", sha256="77dc292c9939c036a476f1770f9d08976b05437daa229928da73231147cde7d4")
version("0.13.1", sha256="006ec8d896d238873af8178d5475203844f2c391194ed8d42ddac37f5ff77a69")
version("0.13.0", sha256="f2efc02011b7240a9e851acd76ab81150a07d35c97021cb0517887539a328f8a")
@@ -25,12 +26,15 @@ class PyStatsmodels(PythonPackage):
depends_on("python@2.7:2.8,3.4:", when="@0.10.1:", type=("build", "link", "run"))
depends_on("python@3.6:", when="@0.12.1:", type=("build", "link", "run"))
- # according to https://www.statsmodels.org/dev/install.html earlier versions
- # might work.
- depends_on("py-setuptools@0.6c5:", type="build")
- depends_on("py-cython@0.29:", type="build")
+ # according to https://www.statsmodels.org/dev/install.html earlier versions might work.
+ depends_on("py-setuptools", type="build")
+ depends_on("py-setuptools@59.2.0:", type="build", when="@0.13.5:")
+
+ # https://github.com/statsmodels/statsmodels/blob/01b19d7d111b29c183f620ff0a949ef6391ff8ee/pyproject.toml
+ depends_on("py-cython@0", type="build")
depends_on("py-cython@0.29.14:", type="build", when="@0.12.0:")
depends_on("py-cython@0.29.22:", type="build", when="@0.13.0:")
+ depends_on("py-cython@0.29.32:", type="build", when="@0.13.5:")
# patsy@0.5.1 works around a Python change
# https://github.com/statsmodels/statsmodels/issues/5343 and
diff --git a/var/spack/repos/builtin/packages/raja/package.py b/var/spack/repos/builtin/packages/raja/package.py
index 88505b3a81..cc1ede76be 100644
--- a/var/spack/repos/builtin/packages/raja/package.py
+++ b/var/spack/repos/builtin/packages/raja/package.py
@@ -137,7 +137,7 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage):
depends_on("cmake@:3.20", when="@:2022.03+rocm", type="build")
depends_on("cmake@3.23:", when="@2022.10:+rocm", type="build")
- depends_on("cmake@3.14:", when="@2022.03.0:")
+ depends_on("cmake@3.14:", when="@2022.03.0:", type="build")
depends_on("llvm-openmp", when="+openmp %apple-clang")
diff --git a/var/spack/repos/builtin/packages/umpire/package.py b/var/spack/repos/builtin/packages/umpire/package.py
index 51f0c034b2..c64bfdf256 100644
--- a/var/spack/repos/builtin/packages/umpire/package.py
+++ b/var/spack/repos/builtin/packages/umpire/package.py
@@ -168,7 +168,7 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage):
depends_on("cmake@3.8:", type="build")
depends_on("cmake@3.9:", when="+cuda", type="build")
- depends_on("cmake@3.14:", when="@2022.03.0:")
+ depends_on("cmake@3.14:", when="@2022.03.0:", type="build")
depends_on("blt@0.5.2:", type="build", when="@2022.10.0:")
depends_on("blt@0.5.0:", type="build", when="@2022.03.0:")
diff --git a/var/spack/repos/duplicates.test/packages/pkg-config/package.py b/var/spack/repos/duplicates.test/packages/pkg-config/package.py
new file mode 100644
index 0000000000..eb7b84b88f
--- /dev/null
+++ b/var/spack/repos/duplicates.test/packages/pkg-config/package.py
@@ -0,0 +1,16 @@
+# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+from spack.package import *
+
+
+class PkgConfig(Package):
+ """A package providing a virtual, which is frequently used as a pure build dependency."""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/tdep-1.0.tar.gz"
+
+ version("1.0.0", md5="0123456789abcdef0123456789abcdef")
+
+ provides("pkgconfig")
diff --git a/var/spack/repos/duplicates.test/packages/virtual-build/package.py b/var/spack/repos/duplicates.test/packages/virtual-build/package.py
new file mode 100644
index 0000000000..17fc60955d
--- /dev/null
+++ b/var/spack/repos/duplicates.test/packages/virtual-build/package.py
@@ -0,0 +1,16 @@
+# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+from spack.package import *
+
+
+class VirtualBuild(Package):
+ """A package that has a pure build virtual dependency"""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/tdep-1.0.tar.gz"
+
+ version("1.0.0", md5="0123456789abcdef0123456789abcdef")
+
+ depends_on("pkgconfig", type="build")