aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rebar.config11
-rw-r--r--src/rcl_app_info.erl2
-rw-r--r--src/rcl_cmd_args.erl6
-rw-r--r--src/rcl_depsolver.erl714
-rw-r--r--src/rcl_depsolver_culprit.erl359
-rw-r--r--src/rcl_goal_utils.erl4
-rw-r--r--src/rcl_prv_release.erl12
-rw-r--r--src/rcl_release.erl22
-rw-r--r--src/rcl_state.erl6
-rw-r--r--test/data/data.txt53
-rw-r--r--test/data/data1.txt78
-rw-r--r--test/data/data2.txt87
-rw-r--r--test/data/data3.txt87
-rw-r--r--test/data/data4.txt87
-rw-r--r--test/data/data5.txt87
-rw-r--r--test/data/data6.txt90
-rw-r--r--test/data/log-07be9e47-6f42-4a5d-b8b5-1d2eae1ad83b.txt122
-rw-r--r--test/data/log-183998c1-2ada-4214-b308-e480345c42f2.txt946
-rw-r--r--test/data/log-311a15e7-3378-4c5b-beb7-86a1b9cf0ea9.txt620
-rw-r--r--test/data/log-382cfe5b-0ac2-48b8-83d1-717cb4620990.txt78
-rw-r--r--test/data/log-d3564ef6-6437-41e7-90b6-dbdb849551a6_mod.txt937
-rw-r--r--test/data/log-ea2d264b-003e-4611-94ed-14efc7732083.txt74
-rw-r--r--test/rcl_depsolver_tester.erl474
-rw-r--r--test/rcl_depsolver_tests.erl495
24 files changed, 5421 insertions, 30 deletions
diff --git a/rebar.config b/rebar.config
index 2601902..b64dd08 100644
--- a/rebar.config
+++ b/rebar.config
@@ -2,15 +2,14 @@
{deps, [{neotoma, "",
{git, "https://github.com/ericbmerritt/neotoma.git", {tag, "1.5.1"}}},
- {erlware_commons, "",
- {git, "https://github.com/ericbmerritt/erlware_commons.git", {tag, "v0.8.0"}}},
+ {erlware_commons, ".*",
+ {git, "https://github.com/ericbmerritt/erlware_commons.git",
+ {branch, "semver-format"}}},
{getopt, "",
- {git, "https://github.com/jcomellas/getopt.git", {tag, "v0.5.1"}}},
- {depsolver, "",
- {git, "https://github.com/ericbmerritt/depsolver.git", {tag, "v0.1.0"}}}]}.
+ {git, "https://github.com/jcomellas/getopt.git", {tag, "v0.5.1"}}}]}.
{escript_incl_apps,
- [getopt, depsolver, erlware_commons]}.
+ [getopt, erlware_commons]}.
{first_files, [rcl_provider]}.
diff --git a/src/rcl_app_info.erl b/src/rcl_app_info.erl
index db32a8f..d0192e6 100644
--- a/src/rcl_app_info.erl
+++ b/src/rcl_app_info.erl
@@ -157,7 +157,7 @@ format(AppInfo) ->
-spec format(non_neg_integer(), t()) -> iolist().
format(Indent, #app_info_t{name=Name, vsn=Vsn, dir=Dir,
active_deps=Deps, library_deps=LibDeps}) ->
- [rcl_util:indent(Indent), erlang:atom_to_list(Name), "-", depsolver:format_version(Vsn),
+ [rcl_util:indent(Indent), erlang:atom_to_list(Name), "-", ec_semver:format(Vsn),
": ", Dir, "\n",
rcl_util:indent(Indent + 1), "Active Dependencies:\n",
[[rcl_util:indent(Indent + 2), erlang:atom_to_list(Dep), ",\n"] || Dep <- Deps],
diff --git a/src/rcl_cmd_args.erl b/src/rcl_cmd_args.erl
index 201a7af..f12d216 100644
--- a/src/rcl_cmd_args.erl
+++ b/src/rcl_cmd_args.erl
@@ -127,11 +127,11 @@ create_goals(Opts, Acc) ->
create_output_dir(Opts, [{goals, Specs} | Acc])
end.
--spec convert_goals([string()], [depsolver:constraint()]) ->
- {ok,[depsolver:constraint()]} |
+-spec convert_goals([string()], [rcl_depsolver:constraint()]) ->
+ {ok,[rcl_depsolver:constraint()]} |
relcool:error().
convert_goals([], Specs) ->
- %% Reverse the specs because order matters to depsolver
+ %% Reverse the specs because order matters to rcl_depsolver
{ok, lists:reverse(Specs)};
convert_goals([RawSpec | Rest], Acc) ->
case rcl_goal:parse(RawSpec) of
diff --git a/src/rcl_depsolver.erl b/src/rcl_depsolver.erl
new file mode 100644
index 0000000..4d61d6c
--- /dev/null
+++ b/src/rcl_depsolver.erl
@@ -0,0 +1,714 @@
+%% -*- erlang-indent-level: 4; indent-tabs-mode: nil; fill-column: 80 -*-
+%% ex: ts=4 sx=4 et
+%%
+%% Copyright 2012 Opscode, Inc. All Rights Reserved.
+%%
+%% This file is provided to you under the Apache License,
+%% Version 2.0 (the "License"); you may not use this file
+%% except in compliance with the License. You may obtain
+%% a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing,
+%% software distributed under the License is distributed on an
+%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+%% KIND, either express or implied. See the License for the
+%% specific language governing permissions and limitations
+%% under the License.
+%%
+%% @author Eric Merritt <[email protected]>
+%%
+%%%-------------------------------------------------------------------
+%%% @doc
+%%% This is a dependency constraint solver. You add your 'world' to the
+%%% solver. That is the packages that exist, their versions and their
+%%% dependencies. Then give the system a set of targets and ask it to solve.
+%%%
+%%% Lets say our world looks as follows
+%%%
+%%% app1 that has versions "0.1"
+%%% depends on app3 any version greater then "0.2"
+%%% "0.2" with no dependencies
+%%% "0.3" with no dependencies
+%%%
+%%% app2 that has versions "0.1" with no dependencies
+%%% "0.2" that depends on app3 exactly "0.3"
+%%% "0.3" with no dependencies
+%%%
+%%% app3 that has versions
+%%% "0.1", "0.2" and "0.3" all with no dependencies
+%%%
+%%% we can add this world to the system all at once as follows
+%%%
+%%% Graph0 = rcl_depsolver:new_graph(),
+%%% Graph1 = rcl_depsolver:add_packages(
+%%% [{app1, [{"0.1", [{app2, "0.2"},
+%%% {app3, "0.2", '>='}]},
+%%% {"0.2", []},
+%%% {"0.3", []}]},
+%%% {app2, [{"0.1", []},
+%%% {"0.2",[{app3, "0.3"}]},
+%%% {"0.3", []}]},
+%%% {app3, [{"0.1", []},
+%%% {"0.2", []},
+%%% {"0.3", []}]}]).
+%%%
+%%% We can also build it up incrementally using the other add_package and
+%%% add_package_version functions.
+%%%
+%%% Finally, once we have built up the graph we can ask rcl_depsolver to solve the
+%%% dependency constraints. That is to give us a list of valid dependencies by
+%%% using the solve function. Lets say we want the app3 version "0.3" and all of
+%%% its resolved dependencies. We could call solve as follows.
+%%%
+%%% rcl_depsolver:solve(Graph1, [{app3, "0.3"}]).
+%%%
+%%% That will give us the completely resolved dependencies including app3
+%%% itself. Lets be a little more flexible. Lets ask for a graph that is rooted
+%%% in anything greater then or equal to app3 "0.3". We could do that by
+%%%
+%%% rcl_depsolver:solve(Graph1, [{app3, "0.3", '>='}]).
+%%%
+%%% Of course, you can specify any number of goals at the top level.
+%%% @end
+%%%-------------------------------------------------------------------
+-module(rcl_depsolver).
+
+%% Public Api
+-export([format_error/1,
+ format_roots/1,
+ format_culprits/1,
+ format_constraint/1,
+ format_version/1,
+ new_graph/0,
+ solve/2,
+ add_packages/2,
+ add_package/3,
+ add_package_version/3,
+ add_package_version/4,
+ parse_version/1,
+ filter_packages/2]).
+
+%% Internally Exported API. This should *not* be used outside of the rcl_depsolver
+%% application. You have been warned.
+-export([dep_pkg/1,
+ filter_package/2,
+ primitive_solve/3]).
+
+-export_type([t/0,
+ pkg/0,
+ constraint_op/0,
+ pkg_name/0,
+ vsn/0,
+ constraint/0,
+ dependency_set/0]).
+
+-export_type([dep_graph/0, constraints/0,
+ ordered_constraints/0, fail_info/0,
+ fail_detail/0]).
+%%============================================================================
+%% type
+%%============================================================================
+-type dep_graph() :: gb_tree().
+-opaque t() :: {?MODULE, dep_graph()}.
+-type pkg() :: {pkg_name(), vsn()}.
+-type pkg_name() :: binary() | atom().
+-type raw_vsn() :: ec_semver:any_version().
+
+-type vsn() :: 'NO_VSN'
+ | ec_semver:semver().
+
+-type constraint_op() ::
+ '=' | gte | '>=' | lte | '<='
+ | gt | '>' | lt | '<' | pes | '~>' | between.
+
+-type raw_constraint() :: pkg_name()
+ | {pkg_name(), raw_vsn()}
+ | {pkg_name(), raw_vsn(), constraint_op()}
+ | {pkg_name(), raw_vsn(), vsn(), between}.
+
+-type constraint() :: pkg_name()
+ | {pkg_name(), vsn()}
+ | {pkg_name(), vsn(), constraint_op()}
+ | {pkg_name(), vsn(), vsn(), between}.
+
+
+-type vsn_constraint() :: {raw_vsn(), [raw_constraint()]}.
+-type dependency_set() :: {pkg_name(), [vsn_constraint()]}.
+
+%% Internal Types
+-type constraints() :: [constraint()].
+-type ordered_constraints() :: [{pkg_name(), constraints()}].
+-type fail_info() :: {[pkg()], ordered_constraints()}.
+-type fail_detail() :: {fail, [fail_info()]}.
+-type version_checker() :: fun((vsn()) -> fail_detail() | vsn()).
+
+%%============================================================================
+%% API
+%%============================================================================
+%% @doc create a new empty dependency graph
+-spec new_graph() -> t().
+new_graph() ->
+ {?MODULE, gb_trees:empty()}.
+
+%% @doc add a complete set of list of packages to the graph. Where the package
+%% consists of the name and a list of versions and dependencies.
+%%
+%% ``` rcl_depsolver:add_packages(Graph,
+%% [{app1, [{"0.1", [{app2, "0.2"},
+%% {app3, "0.2", '>='}]},
+%% {"0.2", []},
+%% {"0.3", []}]},
+%% {app2, [{"0.1", []},
+%% {"0.2",[{app3, "0.3"}]},
+%% {"0.3", []}]},
+%% {app3, [{"0.1", []},
+%% {"0.2", []},
+%% {"0.3", []}]}])
+%% '''
+-spec add_packages(t(),[dependency_set()]) -> t().
+add_packages(Dom0, Info)
+ when is_list(Info) ->
+ lists:foldl(fun({Pkg, VsnInfo}, Dom1) ->
+ add_package(Dom1, Pkg, VsnInfo)
+ end, Dom0, Info).
+
+%% @doc add a single package to the graph, where it consists of a package name
+%% and its versions and thier dependencies.
+%% ```rcl_depsolver:add_package(Graph, app1, [{"0.1", [{app2, "0.2"},
+%% {app3, "0.2", '>='}]},
+%% {"0.2", []},
+%% {"0.3", []}]}]).
+%% '''
+-spec add_package(t(),pkg_name(),[vsn_constraint()]) -> t().
+add_package(State, Pkg, Versions)
+ when is_list(Versions) ->
+ lists:foldl(fun({Vsn, Constraints}, Dom1) ->
+ add_package_version(Dom1, Pkg, Vsn, Constraints);
+ (Version, Dom1) ->
+ add_package_version(Dom1, Pkg, Version, [])
+ end, State, Versions).
+
+%% @doc add a set of dependencies to a specific package and version.
+%% and its versions and thier dependencies.
+%% ```rcl_depsolver:add_package(Graph, app1, "0.1", [{app2, "0.2"},
+%% {app3, "0.2", '>='}]},
+%% {"0.2", []},
+%% {"0.3", []}]).
+%% '''
+-spec add_package_version(t(), pkg_name(), raw_vsn(), [raw_constraint()]) -> t().
+add_package_version({?MODULE, Dom0}, RawPkg, RawVsn, RawPkgConstraints) ->
+ Pkg = fix_pkg(RawPkg),
+ Vsn = parse_version(RawVsn),
+ %% Incoming constraints are raw
+ %% and need to be fixed
+ PkgConstraints = [fix_con(PkgConstraint) ||
+ PkgConstraint <- RawPkgConstraints],
+ Info2 =
+ case gb_trees:lookup(Pkg, Dom0) of
+ {value, Info0} ->
+ case lists:keytake(Vsn, 1, Info0) of
+ {value, {Vsn, Constraints}, Info1} ->
+ [{Vsn, join_constraints(Constraints,
+ PkgConstraints)}
+ | Info1];
+ false ->
+ [{Vsn, PkgConstraints} | Info0]
+ end;
+ none ->
+ [{Vsn, PkgConstraints}]
+ end,
+ {?MODULE, gb_trees:enter(Pkg, Info2, Dom0)}.
+
+%% @doc add a package and version to the dependency graph with no dependency
+%% constraints, dependency constraints can always be added after the fact.
+%%
+%% ```rcl_depsolver:add_package_version(Graph, app1, "0.1").'''
+-spec add_package_version(t(),pkg_name(),raw_vsn()) -> t().
+add_package_version(State, Pkg, Vsn) ->
+ add_package_version(State, Pkg, Vsn, []).
+
+%% @doc Given a set of goals (in the form of constrains) find a set of packages
+%% and versions that satisfy all constraints. If no solution can be found then
+%% an exception is thrown.
+%% ``` rcl_depsolver:solve(State, [{app1, "0.1", '>='}]).'''
+-spec solve(t(),[constraint()]) -> {ok, [pkg()]} | {error, term()}.
+solve({?MODULE, DepGraph0}, RawGoals)
+ when erlang:length(RawGoals) > 0 ->
+ Goals = [fix_con(Goal) || Goal <- RawGoals],
+ case trim_unreachable_packages(DepGraph0, Goals) of
+ Error = {error, _} ->
+ Error;
+ DepGraph1 ->
+ case primitive_solve(DepGraph1, Goals, no_path) of
+ {fail, _} ->
+ [FirstCons | Rest] = Goals,
+ {error, rcl_depsolver_culprit:search(DepGraph1, [FirstCons], Rest)};
+ Solution ->
+ {ok, Solution}
+ end
+ end.
+
+%% Parse a string version into a tuple based version
+-spec parse_version(raw_vsn() | vsn()) -> vsn().
+parse_version(RawVsn)
+ when erlang:is_list(RawVsn);
+ erlang:is_binary(RawVsn) ->
+ ec_semver:parse(RawVsn);
+parse_version(Vsn)
+ when erlang:is_tuple(Vsn) ->
+ Vsn.
+
+%% @doc given a list of package name version pairs, and a list of constraints
+%% return every member of that list that matches all constraints.
+-spec filter_packages([{pkg_name(), raw_vsn()}], [raw_constraint()]) ->
+ {ok, [{pkg_name(), raw_vsn()}]}
+ | {error, Reason::term()}.
+filter_packages(PVPairs, RawConstraints) ->
+ Constraints = [fix_con(Constraint) || Constraint <- RawConstraints],
+ case check_constraints(Constraints) of
+ ok ->
+ {ok, [PVPair || PVPair <- PVPairs,
+ filter_pvpair_by_constraint(fix_con(PVPair), Constraints)]};
+ Error ->
+ Error
+ end.
+
+%% @doc Produce a full error message for a given error condition. This includes
+%% details of the paths taken to resolve the dependencies and shows which dependencies
+%% could not be satisfied
+-spec format_error({error, {unreachable_package, list()} |
+ {invalid_constraints, [constraint()]} |
+ list()}) -> iolist().
+format_error(Error) ->
+ rcl_depsolver_culprit:format_error(Error).
+
+%% @doc Return a formatted list of roots of the dependency trees which
+%% could not be satisified. These may also have versions attached.
+%% Example:
+%%
+%% ```(foo = 1.2.0), bar```
+%%
+-spec format_roots([constraints()]) -> iolist().
+format_roots(Roots) ->
+ rcl_depsolver_culprit:format_roots(Roots).
+
+
+%% @doc Return a formatted list of the culprit depenedencies which led to
+%% the dependencies not being satisfied. Example:
+%%
+%% ```(foo = 1.2.0) -> (bar > 2.0.0)```
+-spec format_culprits([{[constraint()], [constraint()]}]) -> iolist().
+format_culprits(Culprits) ->
+ rcl_depsolver_culprit:format_culprits(Culprits).
+
+%% @doc A formatted version tuple
+-spec format_version(vsn()) -> iolist().
+format_version(Version) ->
+ rcl_depsolver_culprit:format_version(Version).
+
+%% @doc A formatted constraint tuple
+-spec format_constraint(constraint()) -> iolist().
+format_constraint(Constraint) ->
+ rcl_depsolver_culprit:format_constraint(Constraint).
+
+%%====================================================================
+%% Internal Functions
+%%====================================================================
+-spec check_constraints(constraints()) ->
+ ok | {error, {invalid_constraints, [term()]}}.
+check_constraints(Constraints) ->
+ PossibleInvalids =
+ lists:foldl(fun(Constraint, InvalidConstraints) ->
+ case is_valid_constraint(Constraint) of
+ true ->
+ InvalidConstraints;
+ false ->
+ [Constraint | InvalidConstraints]
+ end
+ end, [], Constraints),
+ case PossibleInvalids of
+ [] ->
+ ok;
+ _ ->
+ {error, {invalid_constraints, PossibleInvalids}}
+ end.
+
+
+-spec filter_pvpair_by_constraint({pkg_name(), vsn()}, [constraint()]) ->
+ boolean().
+filter_pvpair_by_constraint(PVPair, Constraints) ->
+ lists:all(fun(Constraint) ->
+ filter_package(PVPair, Constraint)
+ end, Constraints).
+
+-spec filter_package({pkg_name(), vsn()}, constraint()) ->
+ boolean().
+filter_package({PkgName, Vsn}, C = {PkgName, _}) ->
+ is_version_within_constraint(Vsn, C);
+filter_package({PkgName, Vsn}, C = {PkgName, _, _}) ->
+ is_version_within_constraint(Vsn, C);
+filter_package({PkgName, Vsn}, C = {PkgName, _, _, _}) ->
+ is_version_within_constraint(Vsn, C);
+filter_package(_, _) ->
+ %% If its not explicitly excluded its included
+ true.
+
+%% @doc
+%% fix the package name. If its a list turn it into a binary otherwise leave it as an atom
+fix_pkg(Pkg) when is_list(Pkg) ->
+ erlang:list_to_binary(Pkg);
+fix_pkg(Pkg) when is_binary(Pkg); is_atom(Pkg) ->
+ Pkg.
+
+%% @doc
+%% fix package. Take a package with a possible invalid version and fix it.
+-spec fix_con(raw_constraint()) -> constraint().
+fix_con({Pkg, Vsn}) ->
+ {fix_pkg(Pkg), parse_version(Vsn)};
+fix_con({Pkg, Vsn, CI}) ->
+ {fix_pkg(Pkg), parse_version(Vsn), CI};
+fix_con({Pkg, Vsn1, Vsn2, CI}) ->
+ {fix_pkg(Pkg), parse_version(Vsn1),
+ parse_version(Vsn2), CI};
+fix_con(Pkg) ->
+ fix_pkg(Pkg).
+
+
+%% @doc given two lists of constraints join them in such a way that no
+%% constraint is duplicated but the over all order of the constraints is
+%% preserved. Order drives priority in this solver and is important for that
+%% reason.
+-spec join_constraints([constraint()], [constraint()]) ->
+ [constraint()].
+join_constraints(NewConstraints, ExistingConstraints) ->
+ ECSet = sets:from_list(ExistingConstraints),
+ FilteredNewConstraints = [NC || NC <- NewConstraints,
+ not sets:is_element(NC, ECSet)],
+ ExistingConstraints ++ FilteredNewConstraints.
+
+
+%% @doc constraints is an associated list keeping track of all the constraints
+%% that have been placed on a package
+-spec new_constraints() -> constraints().
+new_constraints() ->
+ [].
+
+%% @doc Given a dep graph and a set of goals this either solves the problem or
+%% fails. This is basically the root solver of the system, the main difference
+%% from the exported solve/2 function is the fact that this does not do the
+%% culprit search.
+-spec primitive_solve(dep_graph(),[constraint()], term()) ->
+ [pkg()] | fail_detail().
+primitive_solve(State, PackageList, PathInd)
+ when erlang:length(PackageList) > 0 ->
+ Constraints = lists:foldl(fun(Info, Acc) ->
+ add_constraint('_GOAL_', 'NO_VSN', Acc, Info)
+ end, new_constraints(), PackageList),
+
+ Pkgs = lists:map(fun dep_pkg/1, PackageList),
+ all_pkgs(State, [], Pkgs, Constraints, PathInd).
+
+%% @doc
+%% given a Pkg | {Pkg, Vsn} | {Pkg, Vsn, Constraint} return Pkg
+-spec dep_pkg(constraint()) -> pkg_name().
+dep_pkg({Pkg, _Vsn}) ->
+ Pkg;
+dep_pkg({Pkg, _Vsn, _}) ->
+ Pkg;
+dep_pkg({Pkg, _Vsn1, _Vsn2, _}) ->
+ Pkg;
+dep_pkg(Pkg) when is_atom(Pkg) orelse is_binary(Pkg) ->
+ Pkg.
+
+-spec is_valid_constraint(constraint()) -> boolean().
+is_valid_constraint(Pkg) when is_atom(Pkg) orelse is_binary(Pkg) ->
+ true;
+is_valid_constraint({_Pkg, Vsn}) when is_tuple(Vsn) ->
+ true;
+is_valid_constraint({_Pkg, Vsn, '='}) when is_tuple(Vsn) ->
+ true;
+is_valid_constraint({_Pkg, _LVsn, gte}) ->
+ true;
+is_valid_constraint({_Pkg, _LVsn, '>='}) ->
+ true;
+is_valid_constraint({_Pkg, _LVsn, lte}) ->
+ true;
+is_valid_constraint({_Pkg, _LVsn, '<='}) ->
+ true;
+is_valid_constraint({_Pkg, _LVsn, gt}) ->
+ true;
+is_valid_constraint({_Pkg, _LVsn, '>'}) ->
+ true;
+is_valid_constraint({_Pkg, _LVsn, lt}) ->
+ true;
+is_valid_constraint({_Pkg, _LVsn, '<'}) ->
+ true;
+is_valid_constraint({_Pkg, _LVsn, pes}) ->
+ true;
+is_valid_constraint({_Pkg, _LVsn, '~>'}) ->
+ true;
+is_valid_constraint({_Pkg, _LVsn1, _LVsn2, between}) ->
+ true;
+is_valid_constraint(_InvalidConstraint) ->
+ false.
+
+-spec add_constraint(pkg_name(), vsn(), [constraint()],constraint()) -> ordered_constraints().
+add_constraint(SrcPkg, SrcVsn, PkgsConstraints, PkgConstraint) ->
+ case is_valid_constraint(PkgConstraint) of
+ true -> ok;
+ false -> erlang:throw({invalid_constraint, PkgConstraint})
+ end,
+ PkgName = dep_pkg(PkgConstraint),
+ Constraints1 =
+ case lists:keysearch(PkgName, 1, PkgsConstraints) of
+ false ->
+ [];
+ {value, {PkgName, Constraints0}} ->
+ Constraints0
+ end,
+ [{PkgName, [{PkgConstraint, {SrcPkg, SrcVsn}} | Constraints1]} |
+ lists:keydelete(PkgName, 1, PkgsConstraints)].
+
+%% @doc
+%% Extend the currently active constraints correctly for the given constraints.
+-spec extend_constraints(pkg_name(), vsn(), constraints(),constraints()) -> [{pkg_name(), constraints()}].
+extend_constraints(SrcPkg, SrcVsn, ExistingConstraints0, NewConstraints) ->
+ lists:foldl(fun (Constraint, ExistingConstraints1) ->
+ add_constraint(SrcPkg, SrcVsn, ExistingConstraints1, Constraint)
+ end,
+ ExistingConstraints0, [{SrcPkg, SrcVsn} | NewConstraints]).
+
+-spec is_version_within_constraint(vsn(),constraint()) -> boolean().
+is_version_within_constraint(_Vsn, Pkg) when is_atom(Pkg) orelse is_binary(Pkg) ->
+ true;
+is_version_within_constraint(Vsn, {_Pkg, NVsn}) ->
+ ec_semver:eql(Vsn, NVsn);
+is_version_within_constraint(Vsn, {_Pkg, NVsn, '='}) ->
+ ec_semver:eql(Vsn, NVsn);
+is_version_within_constraint(Vsn, {_Pkg, LVsn, gte}) ->
+ ec_semver:gte(Vsn, LVsn);
+is_version_within_constraint(Vsn, {_Pkg, LVsn, '>='}) ->
+ ec_semver:gte(Vsn, LVsn);
+is_version_within_constraint(Vsn, {_Pkg, LVsn, lte}) ->
+ ec_semver:lte(Vsn, LVsn);
+is_version_within_constraint(Vsn, {_Pkg, LVsn, '<='}) ->
+ ec_semver:lte(Vsn, LVsn);
+is_version_within_constraint(Vsn, {_Pkg, LVsn, gt}) ->
+ ec_semver:gt(Vsn, LVsn);
+is_version_within_constraint(Vsn, {_Pkg, LVsn, '>'}) ->
+ ec_semver:gt(Vsn, LVsn);
+is_version_within_constraint(Vsn, {_Pkg, LVsn, lt}) ->
+ ec_semver:lt(Vsn, LVsn);
+is_version_within_constraint(Vsn, {_Pkg, LVsn, '<'}) ->
+ ec_semver:lt(Vsn, LVsn);
+is_version_within_constraint(Vsn, {_Pkg, LVsn, 'pes'}) ->
+ ec_semver:pes(Vsn, LVsn);
+is_version_within_constraint(Vsn, {_Pkg, LVsn, '~>'}) ->
+ ec_semver:pes(Vsn, LVsn);
+is_version_within_constraint(Vsn, {_Pkg, LVsn1, LVsn2, between}) ->
+ ec_semver:between(LVsn1, LVsn2, Vsn);
+is_version_within_constraint(_Vsn, _Pkg) ->
+ false.
+
+%% @doc
+%% Get the currently active constraints that relate to the specified package
+-spec get_constraints([{pkg_name(), constraints()}],pkg_name()) -> constraints().
+get_constraints(PkgsConstraints, PkgName) ->
+ case lists:keysearch(PkgName, 1, PkgsConstraints) of
+ false ->
+ [];
+ {value, {PkgName, Constraints}} ->
+ Constraints
+ end.
+
+%% @doc
+%% Given a package name get the list of all versions available for that package.
+-spec get_versions(dep_graph(),pkg_name()) -> [vsn()].
+get_versions(DepGraph, PkgName) ->
+ case gb_trees:lookup(PkgName, DepGraph) of
+ none ->
+ [];
+ {value, AllVsns} ->
+ [Vsn || {Vsn, _} <- AllVsns]
+ end.
+
+%% @doc
+%% make sure a given name/vsn meets all current constraints
+-spec valid_version(pkg_name(),vsn(),constraints()) -> boolean().
+valid_version(PkgName, Vsn, PkgConstraints) ->
+ lists:all(fun ({L, _ConstraintSrc}) ->
+ is_version_within_constraint(Vsn, L)
+ end,
+ get_constraints(PkgConstraints, PkgName)).
+
+%% @doc
+%% Given a Package Name and a set of constraints get a list of package
+%% versions that meet all constraints.
+-spec constrained_package_versions(dep_graph(),pkg_name(),constraints()) ->
+ [vsn()].
+constrained_package_versions(State, PkgName, PkgConstraints) ->
+ Versions = get_versions(State, PkgName),
+ [Vsn || Vsn <- Versions, valid_version(PkgName, Vsn, PkgConstraints)].
+
+%% Given a list of constraints filter said list such that only fail (for things
+%% that do not match a package and pkg are returned. Since at the end only pkg()
+%% we should have a pure list of packages.
+-spec filter_package_constraints([constraint()]) -> fail | pkg().
+filter_package_constraints([]) ->
+ fail;
+filter_package_constraints([PkgCon | PkgConstraints]) ->
+ case PkgCon of
+ {Pkg, _} when is_atom(Pkg); is_binary(Pkg) ->
+ filter_package_constraints(PkgConstraints);
+ {{_Pkg1, _Vsn} = PV, _} ->
+ PV;
+ {{_Pkg2, _Vsn, _R}, _} ->
+ filter_package_constraints(PkgConstraints);
+ {{_Pkg2, _Vsn1, _Vsn2, _R}, _} ->
+ filter_package_constraints(PkgConstraints)
+ end.
+
+%% @doc all_pkgs is one of the set of mutually recursive functions (all_pkgs and
+%% pkgs) that serve to walk the solution space of dependency.
+-spec all_pkgs(dep_graph(),[pkg()],[pkg_name()],[{pkg_name(), constraints()}], term()) ->
+ fail_detail() | [pkg()].
+all_pkgs(_State, Visited, [], Constraints, _PathInd) ->
+ PkgVsns =
+ [filter_package_constraints(PkgConstraints)
+ || {_, PkgConstraints} <- Constraints],
+
+ %% PkgVsns should be a list of pkg() where all the constraints are correctly
+ %% met. If not we fail the solution. If so we return those pkg()s
+ case lists:all(fun({Pkg, Vsn}) ->
+ lists:all(fun({Constraint, _}) ->
+ is_version_within_constraint(Vsn, Constraint)
+ end, get_constraints(Constraints, Pkg))
+ end, PkgVsns) of
+ true ->
+ PkgVsns;
+ false ->
+ {fail, [{Visited, Constraints}]}
+ end;
+all_pkgs(State, Visited, [PkgName | PkgNames], Constraints, PathInd)
+ when is_atom(PkgName); is_binary(PkgName) ->
+ case lists:keymember(PkgName, 1, Visited) of
+ true ->
+ all_pkgs(State, Visited, PkgNames, Constraints, PathInd);
+ false ->
+ pkgs(State, Visited, PkgName, Constraints, PkgNames, PathInd)
+ end.
+
+%% @doc this is the key graph walker. Set of constraints it walks forward into
+%% the solution space searching for a path that solves all dependencies.
+-spec pkgs(dep_graph(),[pkg()], pkg_name(), [{pkg_name(), constraints()}],
+ [pkg_name()], term()) -> fail_detail() | [pkg()].
+pkgs(DepGraph, Visited, Pkg, Constraints, OtherPkgs, PathInd) ->
+ F = fun (Vsn) ->
+ Deps = get_dep_constraints(DepGraph, Pkg, Vsn),
+ UConstraints = extend_constraints(Pkg, Vsn, Constraints, Deps),
+ DepPkgs =[dep_pkg(Dep) || Dep <- Deps],
+ NewVisited = [{Pkg, Vsn} | Visited],
+ Res = all_pkgs(DepGraph, NewVisited, DepPkgs ++ OtherPkgs, UConstraints, PathInd),
+ Res
+
+ end,
+ case constrained_package_versions(DepGraph, Pkg, Constraints) of
+ [] ->
+ {fail, [{Visited, Constraints}]};
+ Res ->
+ lists_some(F, Res, PathInd)
+ end.
+
+
+%% @doc This gathers the dependency constraints for a given package vsn from the
+%% dependency graph.
+-spec get_dep_constraints(dep_graph(), pkg_name(), vsn()) -> [constraint()].
+get_dep_constraints(DepGraph, PkgName, Vsn) ->
+ {Vsn, Constraints} = lists:keyfind(Vsn, 1,
+ gb_trees:get(PkgName, DepGraph)),
+ Constraints.
+
+
+lists_some(F, Res, PathInd) ->
+ lists_some(F, Res, [], PathInd).
+
+-spec lists_some(version_checker(), [vsn()], term(), term()) -> vsn() | fail_detail().
+%% @doc lists_some is the root of the system the actual backtracing search that
+%% makes the dep solver posible. It a takes a function that checks whether the
+%% 'problem' has been solved and an fail indicator. As long as the evaluator
+%% returns the fail indicator processing continues. If the evaluator returns
+%% anything but the fail indicator that indicates success.
+lists_some(_, [], FailPaths, _PathInd) ->
+ {fail, FailPaths};
+lists_some(F, [H | T], FailPaths, PathInd) ->
+ case F(H) of
+ {fail, FailPath} ->
+ case PathInd of
+ keep_paths ->
+ lists_some(F, T, [FailPath | FailPaths], PathInd);
+ _ ->
+ lists_some(F, T, [], PathInd)
+ end;
+ Res ->
+ Res
+ end.
+
+%% @doc given a graph and a set of top level goals return a graph that contains
+%% only those top level packages and those packages that might be required by
+%% those packages.
+-spec trim_unreachable_packages(dep_graph(), [constraint()]) ->
+ dep_graph() | {error, term()}.
+trim_unreachable_packages(State, Goals) ->
+ {_, NewState0} = new_graph(),
+ lists:foldl(fun(_Pkg, Error={error, _}) ->
+ Error;
+ (Pkg, NewState1) ->
+ PkgName = dep_pkg(Pkg),
+ find_reachable_packages(State, NewState1, PkgName)
+ end, NewState0, Goals).
+
+%% @doc given a list of versions and the constraints for that version rewrite
+%% the new graph to reflect the requirements of those versions.
+-spec rewrite_vsns(dep_graph(), dep_graph(), [{vsn(), [constraint()]}]) ->
+ dep_graph() | {error, term()}.
+rewrite_vsns(ExistingGraph, NewGraph0, Info) ->
+ lists:foldl(fun(_, Error={error, _}) ->
+ Error;
+ ({_Vsn, Constraints}, NewGraph1) ->
+ lists:foldl(fun(_DepPkg, Error={error, _}) ->
+ Error;
+ (DepPkg, NewGraph2) ->
+ DepPkgName = dep_pkg(DepPkg),
+ find_reachable_packages(ExistingGraph,
+ NewGraph2,
+ DepPkgName)
+ end, NewGraph1, Constraints)
+ end, NewGraph0, Info).
+
+%% @doc Rewrite the existing dep graph removing anything that is not reachable
+%% required by the goals or any of its potential dependencies.
+-spec find_reachable_packages(dep_graph(), dep_graph(), pkg_name()) ->
+ dep_graph() | {error, term()}.
+find_reachable_packages(_ExistingGraph, Error={error, _}, _PkgName) ->
+ Error;
+find_reachable_packages(ExistingGraph, NewGraph0, PkgName) ->
+ case contains_package_version(NewGraph0, PkgName) of
+ true ->
+ NewGraph0;
+ false ->
+ case gb_trees:lookup(PkgName, ExistingGraph) of
+ {value, Info} ->
+ NewGraph1 = gb_trees:insert(PkgName, Info, NewGraph0),
+ rewrite_vsns(ExistingGraph, NewGraph1, Info);
+ none ->
+ {error, {unreachable_package, PkgName}}
+ end
+ end.
+
+%% @doc
+%% Checks to see if a package name has been defined in the dependency graph
+-spec contains_package_version(dep_graph(), pkg_name()) -> boolean().
+contains_package_version(Dom0, PkgName) ->
+ gb_trees:is_defined(PkgName, Dom0).
diff --git a/src/rcl_depsolver_culprit.erl b/src/rcl_depsolver_culprit.erl
new file mode 100644
index 0000000..f2115c7
--- /dev/null
+++ b/src/rcl_depsolver_culprit.erl
@@ -0,0 +1,359 @@
+%% -*- erlang-indent-level: 4; indent-tabs-mode: nil; fill-column: 80 -*-
+%% ex: ts=4 sx=4 et
+%%
+%% @author Eric Merritt <[email protected]>
+%%
+%% Copyright 2012 Opscode, Inc. All Rights Reserved.
+%%
+%% This file is provided to you under the Apache License,
+%% Version 2.0 (the "License"); you may not use this file
+%% except in compliance with the License. You may obtain
+%% a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing,
+%% software distributed under the License is distributed on an
+%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+%% KIND, either express or implied. See the License for the
+%% specific language governing permissions and limitations
+%% under the License.
+%%
+%%%-------------------------------------------------------------------
+%%% @doc
+%%% This app does the culprit search for a failed solve. It searches
+%%% through the goals provided by the user trying to find the first one
+%%% that fails. It then returns that as the culprit along with the
+%%% unknown apps from the goal, the version constrained apps from the
+%%% goal, and the good apps (those not immediately constrained from
+%%% the goals).
+%%% @end
+-module(rcl_depsolver_culprit).
+
+-export([search/3,
+ format_error/1,
+ format_version/1,
+ format_constraint/1,
+ format_roots/1,
+ format_culprits/1]).
+
+%%============================================================================
+%% Types
+%%============================================================================
+
+%%============================================================================
+%% Internal API
+%%============================================================================
+%% @doc start running the solver, with each run reduce the number of constraints
+%% set as goals. At some point the solver should succeed.
+-spec search(rcl_depsolver:dep_graph(), [rcl_depsolver:constraint()], [rcl_depsolver:constraint()])
+ -> term().
+search(State, ActiveCons, []) ->
+ case rcl_depsolver:primitive_solve(State, ActiveCons, keep_paths) of
+ {fail, FailPaths} ->
+ extract_culprit_information0(ActiveCons, lists:flatten(FailPaths));
+ _Success ->
+ %% This should *never* happen. 'Culprit' above represents the last
+ %% possible constraint that could cause things to fail. There for
+ %% this should have failed as well.
+ inconsistant_graph_state
+ end;
+search(State, ActiveCons, [NewCon | Constraints]) ->
+ case rcl_depsolver:primitive_solve(State, ActiveCons, keep_paths) of
+ {fail, FailPaths} ->
+ extract_culprit_information0(ActiveCons, lists:flatten(FailPaths));
+ _Success ->
+ %% Move one constraint from the inactive to the active
+ %% constraints and run again
+ search(State, [NewCon | ActiveCons], Constraints)
+ end.
+
+format_error({error, {unreachable_package, AppName}}) ->
+ ["Dependency ", format_constraint(AppName), " is specified as a dependency ",
+ "but is not reachable by the system.\n"];
+format_error({error, {invalid_constraints, Constraints}}) ->
+ ["Invalid constraint ", add_s(Constraints), " specified ",
+ lists:foldl(fun(Con, "") ->
+ [io_lib:format("~p", [Con])];
+ (Con, Acc) ->
+ [io_lib:format("~p", [Con]), ", " | Acc]
+ end, "", Constraints)];
+format_error({error, Detail}) ->
+ format_error(Detail);
+format_error(Details) when erlang:is_list(Details) ->
+ ["Unable to solve constraints, the following solutions were attempted \n\n",
+ [[format_error_path(" ", Detail)] || Detail <- Details]].
+
+-spec format_roots([rcl_depsolver:constraints()]) -> iolist().
+format_roots(Roots) ->
+ lists:foldl(fun(Root, Acc0) ->
+ lists:foldl(
+ fun(Con, "") ->
+ [format_constraint(Con)];
+ (Con, Acc1) ->
+ [format_constraint(Con), ", " | Acc1]
+ end, Acc0, Root)
+ end, [], Roots).
+
+-spec format_culprits([{[rcl_depsolver:constraint()], [rcl_depsolver:constraint()]}]) -> iolist().
+format_culprits(FailingDeps) ->
+ Deps = sets:to_list(sets:from_list(lists:flatten([[rcl_depsolver:dep_pkg(Con) || Con <- Cons]
+ || {_, Cons} <- FailingDeps]))),
+ lists:foldl(fun(Con, "") ->
+ [format_constraint(Con)];
+ (Con, Acc1) ->
+ [format_constraint(Con),
+ ", " | Acc1]
+ end, [], Deps).
+
+-spec format_version(rcl_depsolver:vsn()) -> iolist().
+format_version(Vsn) ->
+ ec_semver:format(Vsn).
+
+-spec format_constraint(rcl_depsolver:constraint()) -> list().
+format_constraint(Pkg) when is_atom(Pkg) ->
+ erlang:atom_to_list(Pkg);
+format_constraint(Pkg) when is_binary(Pkg) ->
+ erlang:binary_to_list(Pkg);
+format_constraint({Pkg, Vsn}) when is_tuple(Vsn) ->
+ ["(", format_constraint(Pkg), " = ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn, '='}) when is_tuple(Vsn) ->
+ ["(", format_constraint(Pkg), " = ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn, gte}) ->
+ ["(", format_constraint(Pkg), " >= ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn, '>='}) ->
+ ["(", format_constraint(Pkg), " >= ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn, lte}) ->
+ ["(", format_constraint(Pkg), " <= ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn, '<='}) ->
+ ["(", format_constraint(Pkg), " <= ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn, gt}) ->
+ ["(", format_constraint(Pkg), " > ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn, '>'}) ->
+ ["(", format_constraint(Pkg), " > ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn, lt}) ->
+ ["(", format_constraint(Pkg), " < ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn, '<'}) ->
+ ["(", format_constraint(Pkg), " < ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn, pes}) ->
+ ["(", format_constraint(Pkg), " ~> ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn, '~>'}) ->
+ ["(", format_constraint(Pkg), " ~> ",
+ format_version(Vsn), ")"];
+format_constraint({Pkg, Vsn1, Vsn2, between}) ->
+ ["(", format_constraint(Pkg), " between ",
+ format_version(Vsn1), " and ",
+ format_version(Vsn2), ")"].
+
+
+%%============================================================================
+%% Internal Functions
+%%============================================================================
+-spec append_value(term(), term(), proplists:proplist()) -> proplists:proplist().
+append_value(Key, Value, PropList) ->
+ case proplists:get_value(Key, PropList, undefined) of
+ undefined ->
+ [{Key, Value} | PropList];
+ ExistingValue ->
+ [{Key, sets:to_list(sets:from_list([Value | ExistingValue]))} |
+ proplists:delete(Key, PropList)]
+ end.
+
+-spec strip_goal([[rcl_depsolver:pkg()] | rcl_depsolver:pkg()]) ->
+ [[rcl_depsolver:pkg()] | rcl_depsolver:pkg()].
+strip_goal([{'_GOAL_', 'NO_VSN'}, Children]) ->
+ Children;
+strip_goal(All = [Val | _])
+ when erlang:is_list(Val) ->
+ [strip_goal(Element) || Element <- All];
+strip_goal(Else) ->
+ Else.
+
+-spec extract_culprit_information0(rcl_depsolver:constraints(),
+ [rcl_depsolver:fail_info()]) ->
+ [term()].
+extract_culprit_information0(ActiveCons, FailInfo)
+ when is_list(FailInfo) ->
+ [extract_culprit_information1(ActiveCons, FI) || FI <- FailInfo].
+
+
+-spec extract_root(rcl_depsolver:constraints(), [rcl_depsolver:pkg()]) ->
+ {[rcl_depsolver:constraint()], [rcl_depsolver:pkg()]}.
+extract_root(ActiveCons, TPath = [PRoot | _]) ->
+ RootName = rcl_depsolver:dep_pkg(PRoot),
+ Roots = lists:filter(fun(El) ->
+ RootName =:= rcl_depsolver:dep_pkg(El)
+ end, ActiveCons),
+ {Roots, TPath}.
+
+-spec extract_culprit_information1(rcl_depsolver:constraints(),
+ rcl_depsolver:fail_info()) ->
+ term().
+extract_culprit_information1(_ActiveCons, {[], RawConstraints}) ->
+ %% In this case where there was no realized versions, the GOAL
+ %% constraints actually where unsatisfiable
+ Constraints = lists:flatten([Constraints ||
+ {_, Constraints} <- RawConstraints]),
+
+ Cons = [Pkg || {Pkg, Src} <- Constraints,
+ Src =:= {'_GOAL_', 'NO_VSN'}],
+ {[{Cons, Cons}], []};
+extract_culprit_information1(ActiveCons, {Path, RawConstraints}) ->
+ Constraints = lists:flatten([Constraints ||
+ {_, Constraints} <- RawConstraints]),
+ FailCons =
+ lists:foldl(fun(El = {FailedPkg, FailedVsn}, Acc1) ->
+ case get_constraints(FailedPkg, FailedVsn, Path,
+ Constraints) of
+ [] ->
+ Acc1;
+ Cons ->
+ append_value(El, Cons, Acc1)
+ end
+ end, [], lists:reverse(Path)),
+ TreedPath = strip_goal(treeize_path({'_GOAL_', 'NO_VSN'}, Constraints, [])),
+ RunListItems = [extract_root(ActiveCons, TPath) || TPath <- TreedPath],
+ {RunListItems, FailCons}.
+
+-spec follow_chain(rcl_depsolver:pkg_name(), rcl_depsolver:vsn(),
+ {rcl_depsolver:constraint(), rcl_depsolver:pkg()}) ->
+ false | {ok, rcl_depsolver:constraint()}.
+follow_chain(Pkg, Vsn, {{Pkg, Vsn}, {Pkg, Vsn}}) ->
+ %% When the package version is the same as the source we dont want to try to follow it at all
+ false;
+follow_chain(Pkg, Vsn, {Con, {Pkg, Vsn}}) ->
+ {ok, Con};
+follow_chain(_Pkg, _Vsn, _) ->
+ false.
+
+-spec find_chain(rcl_depsolver:pkg_name(), rcl_depsolver:vsn(),
+ [{rcl_depsolver:constraint(), rcl_depsolver:pkg()}]) ->
+ rcl_depsolver:constraints().
+find_chain(Pkg, Vsn, Constraints) ->
+ lists:foldl(fun(NCon, Acc) ->
+ case follow_chain(Pkg, Vsn, NCon) of
+ {ok, Con} ->
+ [Con | Acc];
+ false ->
+ Acc
+ end
+ end, [], Constraints).
+
+-spec get_constraints(rcl_depsolver:pkg_name(), rcl_depsolver:vsn(), [rcl_depsolver:pkg()],
+ [{rcl_depsolver:constraint(), rcl_depsolver:pkg()}]) ->
+ rcl_depsolver:constraints().
+get_constraints(FailedPkg, FailedVsn, Path, Constraints) ->
+ Chain = find_chain(FailedPkg, FailedVsn, Constraints),
+ lists:filter(fun(Con) ->
+ PkgName = rcl_depsolver:dep_pkg(Con),
+ (lists:any(fun(PathEl) ->
+ not rcl_depsolver:filter_package(PathEl, Con)
+ end, Path) orelse
+ not lists:keymember(PkgName, 1, Path))
+ end, Chain).
+
+-spec pkg_vsn(rcl_depsolver:constraint(), [{rcl_depsolver:constraint(),
+ rcl_depsolver:pkg()}]) ->
+ [rcl_depsolver:pkg()].
+pkg_vsn(PkgCon, Constraints) ->
+ PkgName = rcl_depsolver:dep_pkg(PkgCon),
+ [DepPkg || Con = {DepPkg, _} <- Constraints,
+ case Con of
+ {Pkg = {PkgName, PkgVsn}, {PkgName, PkgVsn}} ->
+ rcl_depsolver:filter_package(Pkg, PkgCon);
+ _ ->
+ false
+ end].
+
+-spec depends(rcl_depsolver:pkg(), [{rcl_depsolver:constraint(),
+ rcl_depsolver:pkg()}],
+ [rcl_depsolver:pkg()]) ->
+ [rcl_depsolver:pkg()].
+depends(SrcPkg, Constraints, Seen) ->
+ lists:flatten([pkg_vsn(Pkg, Constraints) || {Pkg, Source} <- Constraints,
+ Source =:= SrcPkg andalso
+ Pkg =/= SrcPkg andalso
+ not lists:member(Pkg, Seen)]).
+
+-spec treeize_path(rcl_depsolver:pkg(), [{rcl_depsolver:constraint(),
+ rcl_depsolver:pkg()}],
+ [rcl_depsolver:pkg()]) ->
+ [rcl_depsolver:pkg() | [rcl_depsolver:pkg()]].
+treeize_path(Pkg, Constraints, Seen0) ->
+ Seen1 = [Pkg | Seen0],
+ case depends(Pkg, Constraints, Seen1) of
+ [] ->
+ [Pkg];
+ Deps ->
+ [Pkg, [treeize_path(Dep, Constraints, Seen1) ||
+ Dep <- Deps]]
+
+ end.
+
+-spec add_s(list()) -> iolist().
+add_s(Roots) ->
+ case erlang:length(Roots) of
+ Len when Len > 1 ->
+ "s";
+ _ ->
+ ""
+ end.
+
+-spec format_path(string(), [rcl_depsolver:pkg()]) -> iolist().
+format_path(CurrentIdent, Path) ->
+ [CurrentIdent, " ",
+ lists:foldl(fun(Con, "") ->
+ [format_constraint(Con)];
+ (Con, Acc) ->
+ [format_constraint(Con), " -> " | Acc]
+ end, "", Path),
+ "\n"].
+
+-spec format_dependency_paths(string(), [[rcl_depsolver:pkg()] | rcl_depsolver:pkg()],
+ [{rcl_depsolver:pkg(), [rcl_depsolver:constraint()]}], [rcl_depsolver:pkg()]) -> iolist().
+format_dependency_paths(CurrentIndent, [SubPath | Rest], FailingDeps, Acc)
+ when erlang:is_list(SubPath) ->
+ [format_dependency_paths(CurrentIndent, lists:sort(SubPath), FailingDeps, Acc),
+ format_dependency_paths(CurrentIndent, Rest, FailingDeps, Acc)];
+format_dependency_paths(CurrentIndent, [Dep], FailingDeps, Acc)
+ when erlang:is_tuple(Dep) ->
+ case proplists:get_value(Dep, FailingDeps, undefined) of
+ undefined ->
+ format_path(CurrentIndent, [Dep | Acc]);
+ Cons ->
+ [format_path(CurrentIndent, [Con, Dep | Acc]) || Con <- Cons]
+ end;
+format_dependency_paths(CurrentIndent, [Dep | Rest], FailingDeps, Acc)
+ when erlang:is_tuple(Dep) ->
+ case proplists:get_value(Dep, FailingDeps, undefined) of
+ undefined ->
+ format_dependency_paths(CurrentIndent, Rest, FailingDeps, [Dep | Acc]);
+ Cons ->
+ [[format_path(CurrentIndent, [Con, Dep | Acc]) || Con <- Cons],
+ format_dependency_paths(CurrentIndent, Rest, FailingDeps, [Dep | Acc])]
+ end;
+format_dependency_paths(CurrentIndent, [Con | Rest], FailingDeps, Acc) ->
+ format_dependency_paths(CurrentIndent, Rest, FailingDeps, [Con | Acc]);
+format_dependency_paths(_CurrentIndent, [], _FailingDeps, _Acc) ->
+ [].
+
+-spec format_error_path(string(), {[{[rcl_depsolver:constraint()], [rcl_depsolver:pkg()]}],
+ [rcl_depsolver:constraint()]}) -> iolist().
+format_error_path(CurrentIndent, {RawPaths, FailingDeps}) ->
+ Roots = [RootSet || {RootSet, _} <- RawPaths],
+ Paths = [Path || {_, Path} <- RawPaths],
+ [CurrentIndent, "Unable to satisfy goal constraint",
+ add_s(Roots), " ", format_roots(Roots), " due to constraint", add_s(FailingDeps), " on ",
+ format_culprits(FailingDeps), "\n",
+ format_dependency_paths(CurrentIndent, lists:sort(Paths), FailingDeps, []), ""].
diff --git a/src/rcl_goal_utils.erl b/src/rcl_goal_utils.erl
index 213a87d..3627b9c 100644
--- a/src/rcl_goal_utils.erl
+++ b/src/rcl_goal_utils.erl
@@ -32,7 +32,7 @@
%%============================================================================
%% API
%%============================================================================
--spec to_op(iolist()) -> depsolver:constraint_op().
+-spec to_op(iolist()) -> rcl_depsolver:constraint_op().
to_op(List)
when erlang:is_list(List) ->
to_op(erlang:iolist_to_binary(List));
@@ -70,7 +70,7 @@ to_op(<<":between:">>) ->
to_vsn(Version) when erlang:is_list(Version) ->
to_vsn(erlang:iolist_to_binary(Version));
to_vsn(Vsn) ->
- depsolver:parse_version(Vsn).
+ rcl_depsolver:parse_version(Vsn).
%%%===================================================================
%%% Test Functions
diff --git a/src/rcl_prv_release.erl b/src/rcl_prv_release.erl
index 0d692da..0d2e1d7 100644
--- a/src/rcl_prv_release.erl
+++ b/src/rcl_prv_release.erl
@@ -63,28 +63,28 @@ format_error({release_not_found, {RelName, RelVsn}}) ->
io_lib:format("No releases exist in the system for ~p:~s!", [RelName, RelVsn]);
format_error({failed_solve, Error}) ->
io_lib:format("Failed to solve release:\n ~s",
- [depsolver:format_error({error, Error})]).
+ [rcl_depsolver:format_error({error, Error})]).
%%%===================================================================
%%% Internal Functions
%%%===================================================================
--spec create_dep_graph(rcl_state:t()) -> depsolver:t().
+-spec create_dep_graph(rcl_state:t()) -> rcl_depsolver:t().
create_dep_graph(State) ->
Apps = rcl_state:available_apps(State),
- Graph0 = depsolver:new_graph(),
+ Graph0 = rcl_depsolver:new_graph(),
lists:foldl(fun(App, Graph1) ->
AppName = rcl_app_info:name(App),
AppVsn = rcl_app_info:vsn(App),
Deps = rcl_app_info:active_deps(App) ++
rcl_app_info:library_deps(App),
- depsolver:add_package_version(Graph1,
+ rcl_depsolver:add_package_version(Graph1,
AppName,
AppVsn,
Deps)
end, Graph0, Apps).
--spec find_default_release(rcl_state:t(), depsolver:t()) ->
+-spec find_default_release(rcl_state:t(), rcl_depsolver:t()) ->
{ok, rcl_state:t()} | relcool:error().
find_default_release(State, DepGraph) ->
case rcl_state:default_release(State) of
@@ -151,7 +151,7 @@ solve_release(State0, DepGraph, RelName, RelVsn) ->
try
Release = rcl_state:get_release(State0, RelName, RelVsn),
Goals = rcl_release:goals(Release),
- case depsolver:solve(DepGraph, Goals) of
+ case rcl_depsolver:solve(DepGraph, Goals) of
{ok, Pkgs} ->
set_resolved(State0, Release, Pkgs);
{error, Error} ->
diff --git a/src/rcl_release.erl b/src/rcl_release.erl
index c8e52fc..9dbb866 100644
--- a/src/rcl_release.erl
+++ b/src/rcl_release.erl
@@ -32,6 +32,7 @@
realize/3,
applications/1,
application_details/1,
+ realized/1,
format/1,
format/2,
format_error/1]).
@@ -50,7 +51,7 @@
-record(release_t, {name :: atom(),
vsn :: ec_semver:any_version(),
erts :: ec_semver:any_version(),
- goals = [] :: [depsolver:constraint()],
+ goals = [] :: [rcl_depsolver:constraint()],
realized = false :: boolean(),
annotations = undefined :: annotations(),
applications = [] :: [application_spec()],
@@ -70,9 +71,9 @@
{app_name(), app_vsn(), app_type() | incl_apps()} |
{app_name(), app_vsn(), app_type(), incl_apps()}.
--type application_goal() :: depsolver:constraint() |
- {depsolver:constraint(), app_type() | incl_apps()} |
- {depsolver:constraint(), app_type(), incl_apps()}.
+-type application_goal() :: rcl_depsolver:constraint() |
+ {rcl_depsolver:constraint(), app_type() | incl_apps()} |
+ {rcl_depsolver:constraint(), app_type(), incl_apps()}.
-type annotations() :: ec_dictionary:dictionary(app_name(),
{app_type(), incl_apps() | none}).
@@ -137,6 +138,9 @@ applications(#release_t{applications=Apps}) ->
application_details(#release_t{app_detail=App}) ->
App.
+-spec realized(t()) -> boolean().
+realized(#release_t{realized=Realized}) ->
+ Realized.
-spec format(t()) -> iolist().
format(Release) ->
@@ -161,11 +165,11 @@ format(Indent, #release_t{name=Name, vsn=Vsn, erts=ErtsVsn, realized=Realized,
end].
-spec format_goal(application_goal()) -> iolist().
format_goal({Constraint, AppType}) ->
- io_lib:format("~p", [{depsolver:format_constraint(Constraint), AppType}]);
+ io_lib:format("~p", [{rcl_depsolver:format_constraint(Constraint), AppType}]);
format_goal({Constraint, AppType, AppInc}) ->
- io_lib:format("~p", [{depsolver:format_constraint(Constraint), AppType, AppInc}]);
+ io_lib:format("~p", [{rcl_depsolver:format_constraint(Constraint), AppType, AppInc}]);
format_goal(Constraint) ->
- depsolver:format_constraint(Constraint).
+ rcl_depsolver:format_constraint(Constraint).
-spec format_error(Reason::term()) -> iolist().
format_error({topo_error, E}) ->
@@ -277,7 +281,7 @@ parse_goal0(Constraint0, {ok, Release = #release_t{goals=Goals}})
parse_goal0(_, E = {error, _}) ->
E.
--spec parse_goal1(t(), depsolver:constraint() | string(),
+-spec parse_goal1(t(), rcl_depsolver:constraint() | string(),
app_type() | incl_apps() | {app_type(), incl_apps() | none}) ->
{ok, t()} | relcool:error().
parse_goal1(Release = #release_t{annotations=Annots, goals=Goals},
@@ -296,7 +300,7 @@ parse_goal1(Release = #release_t{annotations=Annots, goals=Goals},
end
end.
--spec get_app_name(depsolver:constraint()) ->
+-spec get_app_name(rcl_depsolver:constraint()) ->
AppName::atom() | relcool:error().
get_app_name(AppName) when erlang:is_atom(AppName) ->
AppName;
diff --git a/src/rcl_state.erl b/src/rcl_state.erl
index 2dd0b14..7526c1c 100644
--- a/src/rcl_state.erl
+++ b/src/rcl_state.erl
@@ -57,7 +57,7 @@
output_dir :: file:name(),
lib_dirs=[] :: [file:name()],
config_files=[] :: [file:filename()],
- goals=[] :: [depsolver:constraint()],
+ goals=[] :: [rcl_depsolver:constraint()],
providers = [] :: [rcl_provider:t()],
available_apps = [] :: [rcl_app_info:t()],
default_release :: {rcl_release:name(), rcl_release:vsn()},
@@ -110,7 +110,7 @@ output_dir(#state_t{output_dir=OutDir}) ->
lib_dirs(#state_t{lib_dirs=LibDir}) ->
LibDir.
--spec goals(t()) -> [depsolver:constraints()].
+-spec goals(t()) -> [rcl_depsolver:constraints()].
goals(#state_t{goals=TS}) ->
TS.
@@ -210,7 +210,7 @@ format(#state_t{log=LogState, output_dir=OutDir, lib_dirs=LibDirs,
rcl_util:indent(Indent + 1), "config files: \n",
[[rcl_util:indent(Indent + 2), ConfigFile, ",\n"] || ConfigFile <- ConfigFiles],
rcl_util:indent(Indent + 1), "goals: \n",
- [[rcl_util:indent(Indent + 2), depsolver:format_constraint(Goal), ",\n"] || Goal <- Goals],
+ [[rcl_util:indent(Indent + 2), rcl_depsolver:format_constraint(Goal), ",\n"] || Goal <- Goals],
rcl_util:indent(Indent + 1), "output_dir: ", OutDir, "\n",
rcl_util:indent(Indent + 1), "lib_dirs: \n",
[[rcl_util:indent(Indent + 2), LibDir, ",\n"] || LibDir <- LibDirs],
diff --git a/test/data/data.txt b/test/data/data.txt
new file mode 100644
index 0000000..f9a5a3e
--- /dev/null
+++ b/test/data/data.txt
@@ -0,0 +1,53 @@
+app17 app13=0.0.1 app6
+dep_pkg1 0.0.2
+dep_pkg2 0.0.2
+dep_pkg3 0.0.2
+dep_pkg4 0.0.2
+dep_pkg5 0.0.2
+dep_pkg6 0.0.2
+dep_pkg7 0.0.2
+dep_pkg8 0.0.2
+dep_pkg9 0.0.2
+dep_pkg10 0.0.2
+dep_pkg11 0.0.2
+dep_pkg12 0.0.2
+dep_pkg13 0.0.2
+dep_pkg14 0.0.2
+dep_pkg15 0.0.2
+dep_pkg16 0.0.2
+app1 0.0.1
+app2 0.0.1
+app3 0.0.1
+app4 0.0.1
+app5 0.0.1
+app6 0.0.1
+app7 0.0.1
+app8 0.0.1
+app9 0.0.1
+ dep_pkg10 = 0.0.2
+ dep_pkg1 = 0.0.2
+app10 0.0.1
+app11 0.0.1
+ dep_pkg11 = 0.0.2
+app13 0.0.0
+ dep_pkg12 = 0.0.2
+ dep_pkg10 = 0.0.2
+ dep_pkg1 = 0.0.2
+ dep_pkg11 = 0.0.2
+app13 0.0.1
+ dep_pkg13 = 0.0.2
+app14 0.0.1
+app15 0.0.1
+app16 0.0.1
+app17 0.0.1
+ dep_pkg1 = 0.0.2
+ dep_pkg2 = 0.0.2
+ dep_pkg3 = 0.0.2
+ dep_pkg5 = 0.0.2
+ dep_pkg6 = 0.0.2
+ dep_pkg7 = 0.0.2
+ dep_pkg8 = 0.0.2
+ dep_pkg9 = 0.0.2
+ dep_pkg14 = 0.0.2
+ dep_pkg15 = 0.0.2
+ dep_pkg16 = 0.0.2
diff --git a/test/data/data1.txt b/test/data/data1.txt
new file mode 100644
index 0000000..e2fb8da
--- /dev/null
+++ b/test/data/data1.txt
@@ -0,0 +1,78 @@
+app9 app13=0.0.1 app6
+dep_pkg1 0.0.2
+dep_pkg2 0.0.2
+dep_pkg2 0.0.3
+dep_pkg2 0.0.4
+dep_pkg2 0.0.5
+dep_pkg3 0.0.2
+dep_pkg4 0.0.2
+dep_pkg5 0.0.2
+dep_pkg5 0.0.3
+dep_pkg6 0.0.2
+dep_pkg7 0.0.2
+dep_pkg7 0.0.5
+dep_pkg7 0.1.2
+ dep_pkg1 = 0.0.2
+dep_pkg8 0.0.2
+dep_pkg9 0.0.2
+dep_pkg10 0.0.2
+dep_pkg10 1.2.2
+dep_pkg10 1.3.2
+dep_pkg10 1.4.2
+dep_pkg10 1.6.2
+dep_pkg10 1.5.2
+dep_pkg11 0.0.2
+dep_pkg12 0.0.2
+dep_pkg13 0.0.2
+dep_pkg14 0.0.2
+dep_pkg15 0.0.2
+dep_pkg16 0.0.2
+dep_pkg16 0.0.6
+dep_pkg16 1.0.2
+dep_pkg16 3.0.2
+dep_pkg18 0.0.2
+dep_pkg19 0.0.2
+dep_pkg20 0.0.2
+dep_pkg21 0.0.2
+dep_pkg22 0.0.2
+app1 0.0.1
+app2 0.0.1
+app3 0.0.1
+app4 0.0.1
+app4 0.0.3
+app4 0.0.5
+app4 0.0.6
+app4 0.0.7
+app5 0.0.1
+app6 0.0.1
+app7 0.0.1
+app8 0.0.1
+app9 0.0.1
+ dep_pkg2 >= 0.0.5
+ dep_pkg1 = 0.0.2
+ dep_pkg7 = 0.1.2
+app10 0.0.1
+app11 0.0.1
+ dep_pkg11 = 0.0.2
+app13 0.0.0
+ dep_pkg12 = 0.0.2
+ dep_pkg10 = 0.0.2
+ dep_pkg1 = 0.0.2
+ dep_pkg11 = 0.0.2
+app13 0.0.1
+ dep_pkg13 = 0.0.2
+app14 0.0.1
+app15 0.0.1
+app16 0.0.1
+app17 0.0.1
+ dep_pkg1 = 0.0.2
+ dep_pkg2 = 0.0.2
+ dep_pkg3 = 0.0.2
+ dep_pkg5 = 0.0.2
+ dep_pkg6 = 0.0.2
+ dep_pkg7 = 0.0.2
+ dep_pkg8 = 0.0.2
+ dep_pkg9 = 0.0.2
+ dep_pkg14 = 0.0.2
+ dep_pkg15 = 0.0.2
+ dep_pkg16 = 0.0.2
diff --git a/test/data/data2.txt b/test/data/data2.txt
new file mode 100644
index 0000000..a9bc3d7
--- /dev/null
+++ b/test/data/data2.txt
@@ -0,0 +1,87 @@
+dep_pkg1 dep_pkg2 dep_pkg16=1.0.2 app9 app13=0.0.1 app6 app1 app4 app18
+dep_pkg1 0.0.2
+dep_pkg2 0.0.2
+dep_pkg2 0.0.3
+dep_pkg2 0.0.4
+dep_pkg2 0.0.5
+dep_pkg3 0.0.2
+dep_pkg4 0.0.2
+dep_pkg5 0.0.2
+dep_pkg5 0.0.3
+dep_pkg6 0.0.2
+dep_pkg7 0.0.2
+dep_pkg7 0.0.5
+dep_pkg7 0.1.2
+ dep_pkg1 = 0.0.2
+ dep_pkg2 >= 0.0.2
+ dep_pkg5 >= 0.0.2
+dep_pkg8 0.0.2
+dep_pkg9 0.0.2
+dep_pkg10 0.0.2
+dep_pkg10 1.2.2
+dep_pkg10 1.3.2
+dep_pkg10 1.4.2
+dep_pkg10 1.6.2
+dep_pkg10 1.5.2
+dep_pkg11 0.0.2
+dep_pkg12 0.0.2
+dep_pkg13 0.0.2
+dep_pkg14 0.0.2
+dep_pkg15 0.0.2
+dep_pkg16 0.0.2
+dep_pkg16 0.0.6
+dep_pkg16 1.0.2
+dep_pkg16 3.0.2
+dep_pkg18 0.0.2
+dep_pkg19 0.0.2
+dep_pkg20 0.0.2
+dep_pkg21 0.0.2
+dep_pkg22 0.0.2
+app1 0.0.1
+app2 0.0.1
+app3 0.0.1
+app4 0.0.1
+app4 0.0.3
+app4 0.0.5
+app4 0.0.6
+app4 0.0.7
+app5 0.0.1
+app6 0.0.1
+app7 0.0.1
+app8 0.0.1
+app9 0.0.1
+ dep_pkg2 >= 0.0.5
+ dep_pkg1 = 0.0.2
+ dep_pkg7 = 0.1.2
+app10 0.0.1
+app11 0.0.1
+ dep_pkg11 = 0.0.2
+app13 0.0.0
+ dep_pkg12 = 0.0.2
+ dep_pkg10 = 0.0.2
+ dep_pkg1 = 0.0.2
+ dep_pkg11 = 0.0.2
+app13 0.0.1
+ dep_pkg13 = 0.0.2
+app14 0.0.1
+app15 0.0.1
+app16 0.0.1
+app17 0.0.1
+ dep_pkg1 = 0.0.2
+ dep_pkg2 = 0.0.2
+ dep_pkg3 = 0.0.2
+ dep_pkg5 = 0.0.2
+ dep_pkg6 = 0.0.2
+ dep_pkg7 = 0.0.2
+ dep_pkg8 = 0.0.2
+ dep_pkg9 = 0.0.2
+ dep_pkg14 = 0.0.2
+ dep_pkg15 = 0.0.2
+ dep_pkg16 = 0.0.2
+app18 0.0.1
+app28 0.0.1
+app38 0.0.1
+app48 0.0.7
+app58 0.0.1
+app68 0.0.1
+app78 0.0.1
diff --git a/test/data/data3.txt b/test/data/data3.txt
new file mode 100644
index 0000000..78d126a
--- /dev/null
+++ b/test/data/data3.txt
@@ -0,0 +1,87 @@
+dep_pkg1 dep_pkg2 dep_pkg16=1.0.2 app9 app13=0.0.1 app6 app1 app4 app18 app28 app38 app48 app58 app68
+dep_pkg1 0.0.2
+dep_pkg2 0.0.2
+dep_pkg2 0.0.3
+dep_pkg2 0.0.4
+dep_pkg2 0.0.5
+dep_pkg3 0.0.2
+dep_pkg4 0.0.2
+dep_pkg5 0.0.2
+dep_pkg5 0.0.3
+dep_pkg6 0.0.2
+dep_pkg7 0.0.2
+dep_pkg7 0.0.5
+dep_pkg7 0.1.2
+ dep_pkg1 = 0.0.2
+ dep_pkg2 >= 0.0.2
+ dep_pkg5 >= 0.0.2
+dep_pkg8 0.0.2
+dep_pkg9 0.0.2
+dep_pkg10 0.0.2
+dep_pkg10 1.2.2
+dep_pkg10 1.3.2
+dep_pkg10 1.4.2
+dep_pkg10 1.6.2
+dep_pkg10 1.5.2
+dep_pkg11 0.0.2
+dep_pkg12 0.0.2
+dep_pkg13 0.0.2
+dep_pkg14 0.0.2
+dep_pkg15 0.0.2
+dep_pkg16 0.0.2
+dep_pkg16 0.0.6
+dep_pkg16 1.0.2
+dep_pkg16 3.0.2
+dep_pkg18 0.0.2
+dep_pkg19 0.0.2
+dep_pkg20 0.0.2
+dep_pkg21 0.0.2
+dep_pkg22 0.0.2
+app1 0.0.1
+app2 0.0.1
+app3 0.0.1
+app4 0.0.1
+app4 0.0.3
+app4 0.0.5
+app4 0.0.6
+app4 0.0.7
+app5 0.0.1
+app6 0.0.1
+app7 0.0.1
+app8 0.0.1
+app9 0.0.1
+ dep_pkg2 >= 0.0.5
+ dep_pkg1 = 0.0.2
+ dep_pkg7 = 0.1.2
+app10 0.0.1
+app11 0.0.1
+ dep_pkg11 = 0.0.2
+app13 0.0.0
+ dep_pkg12 = 0.0.2
+ dep_pkg10 = 0.0.2
+ dep_pkg1 = 0.0.2
+ dep_pkg11 = 0.0.2
+app13 0.0.1
+ dep_pkg13 = 0.0.2
+app14 0.0.1
+app15 0.0.1
+app16 0.0.1
+app17 0.0.1
+ dep_pkg1 = 0.0.2
+ dep_pkg2 = 0.0.2
+ dep_pkg3 = 0.0.2
+ dep_pkg5 = 0.0.2
+ dep_pkg6 = 0.0.2
+ dep_pkg7 = 0.0.2
+ dep_pkg8 = 0.0.2
+ dep_pkg9 = 0.0.2
+ dep_pkg14 = 0.0.2
+ dep_pkg15 = 0.0.2
+ dep_pkg16 = 0.0.2
+app18 0.0.1
+app28 0.0.1
+app38 0.0.1
+app48 0.0.7
+app58 0.0.1
+app68 0.0.1
+app78 0.0.1
diff --git a/test/data/data4.txt b/test/data/data4.txt
new file mode 100644
index 0000000..ba72fec
--- /dev/null
+++ b/test/data/data4.txt
@@ -0,0 +1,87 @@
+dep_pkg1 dep_pkg2 dep_pkg16=1.0.2 app9 app13=0.0.1 app6 app1 app4 app18 app28 app38 app48 app58 app68 app78 dep_pkg20
+dep_pkg1 0.0.2
+dep_pkg2 0.0.2
+dep_pkg2 0.0.3
+dep_pkg2 0.0.4
+dep_pkg2 0.0.5
+dep_pkg3 0.0.2
+dep_pkg4 0.0.2
+dep_pkg5 0.0.2
+dep_pkg5 0.0.3
+dep_pkg6 0.0.2
+dep_pkg7 0.0.2
+dep_pkg7 0.0.5
+dep_pkg7 0.1.2
+ dep_pkg1 = 0.0.2
+ dep_pkg2 >= 0.0.2
+ dep_pkg5 >= 0.0.2
+dep_pkg8 0.0.2
+dep_pkg9 0.0.2
+dep_pkg10 0.0.2
+dep_pkg10 1.2.2
+dep_pkg10 1.3.2
+dep_pkg10 1.4.2
+dep_pkg10 1.6.2
+dep_pkg10 1.5.2
+dep_pkg11 0.0.2
+dep_pkg12 0.0.2
+dep_pkg13 0.0.2
+dep_pkg14 0.0.2
+dep_pkg15 0.0.2
+dep_pkg16 0.0.2
+dep_pkg16 0.0.6
+dep_pkg16 1.0.2
+dep_pkg16 3.0.2
+dep_pkg18 0.0.2
+dep_pkg19 0.0.2
+dep_pkg20 0.0.2
+dep_pkg21 0.0.2
+dep_pkg22 0.0.2
+app1 0.0.1
+app2 0.0.1
+app3 0.0.1
+app4 0.0.1
+app4 0.0.3
+app4 0.0.5
+app4 0.0.6
+app4 0.0.7
+app5 0.0.1
+app6 0.0.1
+app7 0.0.1
+app8 0.0.1
+app9 0.0.1
+ dep_pkg2 >= 0.0.5
+ dep_pkg1 = 0.0.2
+ dep_pkg7 = 0.1.2
+app10 0.0.1
+app11 0.0.1
+ dep_pkg11 = 0.0.2
+app13 0.0.0
+ dep_pkg12 = 0.0.2
+ dep_pkg10 = 0.0.2
+ dep_pkg1 = 0.0.2
+ dep_pkg11 = 0.0.2
+app13 0.0.1
+ dep_pkg13 = 0.0.2
+app14 0.0.1
+app15 0.0.1
+app16 0.0.1
+app17 0.0.1
+ dep_pkg1 = 0.0.2
+ dep_pkg2 = 0.0.2
+ dep_pkg3 = 0.0.2
+ dep_pkg5 = 0.0.2
+ dep_pkg6 = 0.0.2
+ dep_pkg7 = 0.0.2
+ dep_pkg8 = 0.0.2
+ dep_pkg9 = 0.0.2
+ dep_pkg14 = 0.0.2
+ dep_pkg15 = 0.0.2
+ dep_pkg16 = 0.0.2
+app18 0.0.1
+app28 0.0.1
+app38 0.0.1
+app48 0.0.7
+app58 0.0.1
+app68 0.0.1
+app78 0.0.1
diff --git a/test/data/data5.txt b/test/data/data5.txt
new file mode 100644
index 0000000..0977d63
--- /dev/null
+++ b/test/data/data5.txt
@@ -0,0 +1,87 @@
+dep_pkg1 dep_pkg2 dep_pkg16=1.0.2 app9 app13=0.0.1 app6 app1 app4 app18 app28 app38 app48 app58 app68 app78 dep_pkg20 dep_pkg22 dep_pkg14
+dep_pkg1 0.0.2
+dep_pkg2 0.0.2
+dep_pkg2 0.0.3
+dep_pkg2 0.0.4
+dep_pkg2 0.0.5
+dep_pkg3 0.0.2
+dep_pkg4 0.0.2
+dep_pkg5 0.0.2
+dep_pkg5 0.0.3
+dep_pkg6 0.0.2
+dep_pkg7 0.0.2
+dep_pkg7 0.0.5
+dep_pkg7 0.1.2
+ dep_pkg1 = 0.0.2
+ dep_pkg2 >= 0.0.2
+ dep_pkg5 >= 0.0.2
+dep_pkg8 0.0.2
+dep_pkg9 0.0.2
+dep_pkg10 0.0.2
+dep_pkg10 1.2.2
+dep_pkg10 1.3.2
+dep_pkg10 1.4.2
+dep_pkg10 1.6.2
+dep_pkg10 1.5.2
+dep_pkg11 0.0.2
+dep_pkg12 0.0.2
+dep_pkg13 0.0.2
+dep_pkg14 0.0.2
+dep_pkg15 0.0.2
+dep_pkg16 0.0.2
+dep_pkg16 0.0.6
+dep_pkg16 1.0.2
+dep_pkg16 3.0.2
+dep_pkg18 0.0.2
+dep_pkg19 0.0.2
+dep_pkg20 0.0.2
+dep_pkg21 0.0.2
+dep_pkg22 0.0.2
+app1 0.0.1
+app2 0.0.1
+app3 0.0.1
+app4 0.0.1
+app4 0.0.3
+app4 0.0.5
+app4 0.0.6
+app4 0.0.7
+app5 0.0.1
+app6 0.0.1
+app7 0.0.1
+app8 0.0.1
+app9 0.0.1
+ dep_pkg2 >= 0.0.5
+ dep_pkg1 = 0.0.2
+ dep_pkg7 = 0.1.2
+app10 0.0.1
+app11 0.0.1
+ dep_pkg11 = 0.0.2
+app13 0.0.0
+ dep_pkg12 = 0.0.2
+ dep_pkg10 = 0.0.2
+ dep_pkg1 = 0.0.2
+ dep_pkg11 = 0.0.2
+app13 0.0.1
+ dep_pkg13 = 0.0.2
+app14 0.0.1
+app15 0.0.1
+app16 0.0.1
+app17 0.0.1
+ dep_pkg1 = 0.0.2
+ dep_pkg2 = 0.0.2
+ dep_pkg3 = 0.0.2
+ dep_pkg5 = 0.0.2
+ dep_pkg6 = 0.0.2
+ dep_pkg7 = 0.0.2
+ dep_pkg8 = 0.0.2
+ dep_pkg9 = 0.0.2
+ dep_pkg14 = 0.0.2
+ dep_pkg15 = 0.0.2
+ dep_pkg16 = 0.0.2
+app18 0.0.1
+app28 0.0.1
+app38 0.0.1
+app48 0.0.7
+app58 0.0.1
+app68 0.0.1
+app78 0.0.1
diff --git a/test/data/data6.txt b/test/data/data6.txt
new file mode 100644
index 0000000..af30d79
--- /dev/null
+++ b/test/data/data6.txt
@@ -0,0 +1,90 @@
+dep_pkg1 dep_pkg2 dep_pkg16=1.0.2 app9 app13=0.0.1 app6 app1 app4 app18 app28 app38 app48 app58 app68 app78 dep_pkg20 dep_pkg22 dep_pkg14 app88 app98 app108
+dep_pkg1 0.0.2
+dep_pkg2 0.0.2
+dep_pkg2 0.0.3
+dep_pkg2 0.0.4
+dep_pkg2 0.0.5
+dep_pkg3 0.0.2
+dep_pkg4 0.0.2
+dep_pkg5 0.0.2
+dep_pkg5 0.0.3
+dep_pkg6 0.0.2
+dep_pkg7 0.0.2
+dep_pkg7 0.0.5
+dep_pkg7 0.1.2
+ dep_pkg1 = 0.0.2
+ dep_pkg2 >= 0.0.2
+ dep_pkg5 >= 0.0.2
+dep_pkg8 0.0.2
+dep_pkg9 0.0.2
+dep_pkg10 0.0.2
+dep_pkg10 1.2.2
+dep_pkg10 1.3.2
+dep_pkg10 1.4.2
+dep_pkg10 1.6.2
+dep_pkg10 1.5.2
+dep_pkg11 0.0.2
+dep_pkg12 0.0.2
+dep_pkg13 0.0.2
+dep_pkg14 0.0.2
+dep_pkg15 0.0.2
+dep_pkg16 0.0.2
+dep_pkg16 0.0.6
+dep_pkg16 1.0.2
+dep_pkg16 3.0.2
+dep_pkg18 0.0.2
+dep_pkg19 0.0.2
+dep_pkg20 0.0.2
+dep_pkg21 0.0.2
+dep_pkg22 0.0.2
+app1 0.0.1
+app2 0.0.1
+app3 0.0.1
+app4 0.0.1
+app4 0.0.3
+app4 0.0.5
+app4 0.0.6
+app4 0.0.7
+app5 0.0.1
+app6 0.0.1
+app7 0.0.1
+app8 0.0.1
+app9 0.0.1
+ dep_pkg2 >= 0.0.5
+ dep_pkg1 = 0.0.2
+ dep_pkg7 = 0.1.2
+app10 0.0.1
+app11 0.0.1
+ dep_pkg11 = 0.0.2
+app13 0.0.0
+ dep_pkg12 = 0.0.2
+ dep_pkg10 = 0.0.2
+ dep_pkg1 = 0.0.2
+ dep_pkg11 = 0.0.2
+app13 0.0.1
+ dep_pkg13 = 0.0.2
+app14 0.0.1
+app15 0.0.1
+app16 0.0.1
+app17 0.0.1
+ dep_pkg1 = 0.0.2
+ dep_pkg2 = 0.0.2
+ dep_pkg3 = 0.0.2
+ dep_pkg5 = 0.0.2
+ dep_pkg6 = 0.0.2
+ dep_pkg7 = 0.0.2
+ dep_pkg8 = 0.0.2
+ dep_pkg9 = 0.0.2
+ dep_pkg14 = 0.0.2
+ dep_pkg15 = 0.0.2
+ dep_pkg16 = 0.0.2
+app18 0.0.1
+app28 0.0.1
+app38 0.0.1
+app48 0.0.7
+app58 0.0.1
+app68 0.0.1
+app78 0.0.1
+app88 0.0.1
+app98 0.0.1
+app108 0.0.1
diff --git a/test/data/log-07be9e47-6f42-4a5d-b8b5-1d2eae1ad83b.txt b/test/data/log-07be9e47-6f42-4a5d-b8b5-1d2eae1ad83b.txt
new file mode 100644
index 0000000..589dd15
--- /dev/null
+++ b/test/data/log-07be9e47-6f42-4a5d-b8b5-1d2eae1ad83b.txt
@@ -0,0 +1,122 @@
+Creating VersionProblem inst# 3471 with 27 packages, 1 stats, 1 debug
+DepSelector inst# 3471 - Adding package id 0/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 1/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 2/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding VC for 1 @ 0 depPkg 2 [ 0, 0 ]
+DepSelector inst# 3471 - Adding package id 3/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 4/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 5/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 6/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 7/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 8/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding VC for 8 @ 0 depPkg 2 [ 0, 0 ]
+DepSelector inst# 3471 - Adding package id 9/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 10/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 11/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 12/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 13/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 14/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 15/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 16/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 17/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding VC for 16 @ 0 depPkg 17 [ 0, 0 ]
+DepSelector inst# 3471 - Adding package id 18/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 19/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding VC for 19 @ 0 depPkg 17 [ 0, 0 ]
+DepSelector inst# 3471 - Adding package id 20/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding VC for 19 @ 0 depPkg 20 [ 0, 0 ]
+DepSelector inst# 3471 - Adding package id 21/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding VC for 21 @ 0 depPkg 20 [ 0, 0 ]
+DepSelector inst# 3471 - Adding package id 22/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding package id 23/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding VC for 23 @ 0 depPkg 2 [ 0, 0 ]
+DepSelector inst# 3471 - Adding package id 24/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding VC for 24 @ 0 depPkg 2 [ 0, 0 ]
+DepSelector inst# 3471 - Adding package id 25/27: min = -1, max = 0, current version 0
+DepSelector inst# 3471 - Adding VC for 25 @ 0 depPkg 24 [ 0, 0 ]
+DepSelector inst# 3471 - Adding VC for 25 @ 0 depPkg 17 [ 0, 0 ]
+DepSelector inst# 3471 - Adding package id 26/27: min = 0, max = 0, current version 0
+DepSelector inst# 3471 - Marking Package Preferred Latest 0 weight 10
+DepSelector inst# 3471 - Marking Package Required 0
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 0 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 0 weight 10
+DepSelector inst# 3471 - Marking Package Required 0
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 0 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 0 weight 10
+DepSelector inst# 3471 - Marking Package Required 0
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 0 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 1 weight 10
+DepSelector inst# 3471 - Marking Package Required 1
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 1 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 3 weight 10
+DepSelector inst# 3471 - Marking Package Required 3
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 3 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 4 weight 10
+DepSelector inst# 3471 - Marking Package Required 4
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 4 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 5 weight 10
+DepSelector inst# 3471 - Marking Package Required 5
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 5 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 6 weight 10
+DepSelector inst# 3471 - Marking Package Required 6
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 6 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 7 weight 10
+DepSelector inst# 3471 - Marking Package Required 7
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 7 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 8 weight 10
+DepSelector inst# 3471 - Marking Package Required 8
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 8 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 8 weight 10
+DepSelector inst# 3471 - Marking Package Required 8
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 8 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 9 weight 10
+DepSelector inst# 3471 - Marking Package Required 9
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 9 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 10 weight 10
+DepSelector inst# 3471 - Marking Package Required 10
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 10 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 11 weight 10
+DepSelector inst# 3471 - Marking Package Required 11
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 11 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 12 weight 10
+DepSelector inst# 3471 - Marking Package Required 12
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 12 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 13 weight 10
+DepSelector inst# 3471 - Marking Package Required 13
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 13 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 14 weight 10
+DepSelector inst# 3471 - Marking Package Required 14
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 14 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 15 weight 10
+DepSelector inst# 3471 - Marking Package Required 15
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 15 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 16 weight 10
+DepSelector inst# 3471 - Marking Package Required 16
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 16 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 18 weight 10
+DepSelector inst# 3471 - Marking Package Required 18
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 18 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 19 weight 10
+DepSelector inst# 3471 - Marking Package Required 19
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 19 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 21 weight 10
+DepSelector inst# 3471 - Marking Package Required 21
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 21 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 22 weight 10
+DepSelector inst# 3471 - Marking Package Required 22
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 22 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 23 weight 10
+DepSelector inst# 3471 - Marking Package Required 23
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 23 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 24 weight 10
+DepSelector inst# 3471 - Marking Package Required 24
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 24 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 24 weight 10
+DepSelector inst# 3471 - Marking Package Required 24
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 24 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 25 weight 10
+DepSelector inst# 3471 - Marking Package Required 25
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 25 [ 0, 0 ]
+DepSelector inst# 3471 - Marking Package Preferred Latest 25 weight 10
+DepSelector inst# 3471 - Marking Package Required 25
+DepSelector inst# 3471 - Adding VC for 26 @ 0 depPkg 25 [ 0, 0 ]
diff --git a/test/data/log-183998c1-2ada-4214-b308-e480345c42f2.txt b/test/data/log-183998c1-2ada-4214-b308-e480345c42f2.txt
new file mode 100644
index 0000000..b90bb3d
--- /dev/null
+++ b/test/data/log-183998c1-2ada-4214-b308-e480345c42f2.txt
@@ -0,0 +1,946 @@
+Creating VersionProblem inst# 4558 with 84 packages, 1 stats, 1 debug
+DepSelector inst# 4558 - Adding package id 0/84: min = -1, max = 3, current version 0
+DepSelector inst# 4558 - Adding package id 1/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding VC for 0 @ 3 depPkg 1 [ 0, 1 ]
+DepSelector inst# 4558 - Adding package id 2/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 0 @ 3 depPkg 2 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 0 @ 2 depPkg 1 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 0 @ 2 depPkg 2 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 0 @ 1 depPkg 1 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 0 @ 1 depPkg 2 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 0 @ 0 depPkg 1 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 0 @ 0 depPkg 2 [ 0, 0 ]
+DepSelector inst# 4558 - Adding package id 3/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding package id 4/84: min = -1, max = 5, current version 0
+DepSelector inst# 4558 - Adding package id 5/84: min = -1, max = 5, current version 0
+DepSelector inst# 4558 - Adding VC for 4 @ 5 depPkg 5 [ 0, 5 ]
+DepSelector inst# 4558 - Adding package id 6/84: min = -1, max = 5, current version 0
+DepSelector inst# 4558 - Adding VC for 4 @ 5 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 4 @ 4 depPkg 5 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 4 @ 3 depPkg 5 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 4 @ 2 depPkg 5 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 4 @ 1 depPkg 5 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 4 @ 0 depPkg 5 [ 0, 5 ]
+DepSelector inst# 4558 - Adding package id 7/84: min = -1, max = 3, current version 0
+DepSelector inst# 4558 - Adding VC for 5 @ 5 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding package id 8/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 5 @ 5 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 5 @ 5 depPkg 8 [ 0, 0 ]
+DepSelector inst# 4558 - Adding package id 8/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 5 @ 4 depPkg 8 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 5 @ 5 depPkg 8 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 5 @ 5 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding package id 8/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 5 @ 5 depPkg 8 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 5 @ 4 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 5 @ 4 depPkg 8 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 5 @ 3 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 5 @ 2 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 5 @ 2 depPkg 8 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 5 @ 1 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 5 @ 1 depPkg 8 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 5 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding package id 10/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 11/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 12/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 13/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding package id 14/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 15/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding package id 16/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 17/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding package id 18/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 19/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 20/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding package id 21/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 22/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding package id 23/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 24/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding package id 25/84: min = -1, max = 3, current version 0
+DepSelector inst# 4558 - Adding package id 26/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding VC for 26 @ 1 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 26 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 26 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding package id 27/84: min = -1, max = 3, current version 0
+DepSelector inst# 4558 - Adding package id 28/84: min = -1, max = 5, current version 0
+DepSelector inst# 4558 - Adding package id 29/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 30/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding package id 31/84: min = -1, max = 0, current version 0
+
+DepSelector inst# 4558 - Adding VC for 30 @ 2 depPkg 31 [ 0, 0 ]
+DepSelector inst# 4558 - Adding package id 32/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding package id 33/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 34/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 33 @ 0 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding package id 35/84: min = -1, max = 24, current version 0
+DepSelector inst# 4558 - Adding package id 36/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 35 @ 24 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 24 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 23 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 23 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 22 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 22 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 21 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 21 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 20 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 20 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 19 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 19 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 18 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 17 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 17 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 16 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 16 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 16 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 16 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 15 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 15 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 14 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 14 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 13 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 13 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 12 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 12 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 11 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 11 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 10 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 10 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 9 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 9 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 8 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 8 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 7 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 7 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 6 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 6 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 5 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 5 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 4 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 4 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 3 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 3 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 2 depPkg 36 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 35 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding package id 37/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 36 @ 0 depPkg 37 [ 0, 0 ]
+DepSelector inst# 4558 - Adding package id 38/84: min = -1, max = 4, current version 0
+DepSelector inst# 4558 - Adding VC for 37 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 38 @ 4 depPkg 4 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 38 @ 3 depPkg 4 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 38 @ 2 depPkg 4 [ 0, 5 ]
+DepSelector inst# 4558 - Adding package id 39/84: min = -1, max = 3, current version 0
+DepSelector inst# 4558 - Adding VC for 39 @ 3 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 39 @ 2 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 39 @ 1 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 39 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding package id 40/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding package id 41/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding package id 42/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding VC for 42 @ 1 depPkg 10 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 42 @ 0 depPkg 10 [ 0, 0 ]
+DepSelector inst# 4558 - Adding package id 43/84: min = -1, max = 7, current version 0
+DepSelector inst# 4558 - Adding package id 44/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding VC for 44 @ 1 depPkg 5 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 44 @ 0 depPkg 5 [ 0, 5 ]
+DepSelector inst# 4558 - Adding package id 45/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding package id 46/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding VC for 45 @ 1 depPkg 46 [ 0, 2 ]
+DepSelector inst# 4558 - Adding package id 47/84: min = -1, max = 4, current version 0
+DepSelector inst# 4558 - Adding VC for 45 @ 1 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 45 @ 1 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding package id 48/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding VC for 45 @ 1 depPkg 48 [ 0, 1 ]
+DepSelector inst# 4558 - Adding package id 49/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 45 @ 1 depPkg 49 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 45 @ 0 depPkg 46 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 45 @ 0 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 45 @ 0 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 45 @ 0 depPkg 48 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 45 @ 0 depPkg 49 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 46 @ 2 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 46 @ 2 depPkg 5 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 46 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 46 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 46 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding package id 50/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding VC for 48 @ 1 depPkg 50 [ 0, 2 ]
+DepSelector inst# 4558 - Adding package id 51/84: min = -1, max = 3, current version 0
+DepSelector inst# 4558 - Adding VC for 48 @ 1 depPkg 51 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 48 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 48 @ 1 depPkg 49 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 48 @ 0 depPkg 51 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 48 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 48 @ 0 depPkg 49 [ 0, 0 ]
+DepSelector inst# 4558 - Adding package id 52/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 51 @ 3 depPkg 52 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 51 @ 2 depPkg 52 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 51 @ 1 depPkg 52 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 51 @ 0 depPkg 52 [ 0, 0 ]
+DepSelector inst# 4558 - Adding package id 53/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding VC for 53 @ 1 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding package id 54/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 54 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 54 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding package id 55/84: min = -1, max = 4, current version 0
+DepSelector inst# 4558 - Adding VC for 55 @ 4 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 55 @ 4 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 55 @ 3 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 55 @ 3 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 55 @ 2 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 55 @ 2 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 55 @ 1 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 55 @ 1 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 55 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 55 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding package id 56/84: min = -1, max = 3, current version 0
+DepSelector inst# 4558 - Adding VC for 56 @ 3 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 56 @ 2 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 56 @ 1 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 56 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding package id 57/84: min = -1, max = 5, current version 0
+DepSelector inst# 4558 - Adding package id 58/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding VC for 57 @ 5 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding package id 59/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 57 @ 5 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding package id 60/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 57 @ 5 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 5 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 5 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding package id 61/84: min = -1, max = 6, current version 0
+DepSelector inst# 4558 - Adding VC for 57 @ 5 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding package id 62/84: min = -1, max = 4, current version 0
+DepSelector inst# 4558 - Adding VC for 57 @ 5 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 4 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 4 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 4 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 4 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 4 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 4 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 3 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 3 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 3 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 3 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 3 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 2 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 2 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 2 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 2 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 1 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 1 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 1 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 57 @ 1 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding package id 63/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding VC for 58 @ 2 depPkg 63 [ 0, 2 ]
+DepSelector inst# 4558 - Adding package id 64/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding VC for 58 @ 2 depPkg 64 [ 0, 2 ]
+DepSelector inst# 4558 - Adding package id 65/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 58 @ 2 depPkg 65 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 58 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 58 @ 1 depPkg 63 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 58 @ 1 depPkg 64 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 58 @ 1 depPkg 65 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 58 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 58 @ 0 depPkg 63 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 58 @ 0 depPkg 64 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 58 @ 0 depPkg 65 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 58 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 63 @ 2 depPkg 65 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 63 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 63 @ 1 depPkg 65 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 63 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 63 @ 0 depPkg 65 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 63 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding package id 66/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding VC for 60 @ 0 depPkg 66 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 4 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 4 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 4 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 3 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 3 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 3 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 2 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 2 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 1 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 1 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 62 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding package id 67/84: min = -1, max = 7, current version 0
+DepSelector inst# 4558 - Adding VC for 67 @ 7 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 7 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 7 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 7 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 7 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 7 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 7 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 6 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 6 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 6 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 6 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 6 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 6 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 6 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 5 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 5 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 5 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 5 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 5 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 5 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 5 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 4 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 4 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 4 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 4 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 4 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 4 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 3 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 3 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 3 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 3 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 3 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 3 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 2 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 2 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 2 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 2 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 1 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 1 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 1 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 1 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 0 depPkg 58 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 0 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 0 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 67 @ 0 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding package id 68/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding package id 69/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding package id 70/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding package id 71/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding VC for 70 @ 1 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 70 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 70 @ 0 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 70 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding package id 72/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 72 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding package id 73/84: min = -1, max = 11, current version 0
+DepSelector inst# 4558 - Adding VC for 73 @ 11 depPkg 50 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 11 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 11 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 11 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 11 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 11 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 10 depPkg 50 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 10 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 10 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 10 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 10 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 10 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 9 depPkg 50 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 9 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 9 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 9 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 9 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 9 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 8 depPkg 50 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 8 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 8 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 8 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 8 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 8 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 7 depPkg 50 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 7 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 7 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 7 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 7 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 7 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 6 depPkg 50 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 6 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 6 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 6 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 6 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 5 depPkg 50 [ 0, 2 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 5 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 5 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 5 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 5 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 4 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 4 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 4 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 3 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 3 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 3 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 2 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 2 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 1 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 1 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 0 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 0 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 73 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding package id 74/84: min = -1, max = 7, current version 0
+DepSelector inst# 4558 - Adding VC for 74 @ 7 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding package id 75/84: min = -1, max = 32, current version 0
+DepSelector inst# 4558 - Adding VC for 74 @ 7 depPkg 75 [ 0, 32 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 7 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 7 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 6 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 6 depPkg 75 [ 0, 32 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 6 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 6 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 5 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 5 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 5 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 4 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 4 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 3 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 2 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 1 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 74 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 32 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 32 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 32 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding package id 76/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 75 @ 32 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 32 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 32 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding package id 77/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 75 @ 32 depPkg 77 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 31 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 31 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 31 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 31 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 31 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 31 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 31 depPkg 77 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 30 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 30 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 30 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 30 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 30 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 30 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 30 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 30 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 29 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 29 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 29 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 29 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 29 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 29 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 29 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 29 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 28 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 28 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 28 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 28 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 28 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 28 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 28 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 28 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 27 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 27 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 27 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 27 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 27 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 27 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 27 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 27 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 26 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 26 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 26 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 26 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 26 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 26 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 26 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 26 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 25 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 25 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 25 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 25 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 25 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 25 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 25 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 25 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 24 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 24 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 24 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 24 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 24 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 24 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 24 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 24 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 23 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 23 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 23 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 23 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 23 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 23 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 23 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 23 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 22 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 22 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 22 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 22 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 22 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 22 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 22 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 22 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 21 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 21 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 21 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 21 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 21 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 21 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 21 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 21 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 20 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 20 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 20 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 20 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 20 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 20 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 20 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 20 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 19 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 19 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 19 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 19 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 19 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 19 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 19 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 19 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 18 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 18 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 18 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 18 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 18 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 18 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 18 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 18 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 17 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 17 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 17 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 17 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 17 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 17 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 17 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 17 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 16 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 16 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 16 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 16 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 16 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 16 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 16 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 16 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 15 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 15 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 15 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 15 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 15 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 15 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 15 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 15 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 14 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 14 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 14 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 14 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 14 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 14 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 14 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 14 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 13 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 13 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 13 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 13 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 13 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 13 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 13 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 13 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 12 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 12 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 12 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 12 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 12 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 12 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 12 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 12 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 11 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 11 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 11 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 11 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 11 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 11 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 11 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 11 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 10 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 10 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 10 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 10 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 10 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 10 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 10 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 10 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 9 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 9 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 9 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 9 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 9 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 9 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 9 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 8 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 8 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 8 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 8 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 8 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 8 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 8 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 7 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 7 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 7 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 7 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 7 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 7 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 7 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 6 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 6 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 6 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 6 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 6 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 6 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 6 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 5 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 5 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 5 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 5 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 5 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 5 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 5 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 4 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 4 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 4 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 4 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 4 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 4 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 3 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 3 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 3 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 3 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 3 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 3 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 2 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 2 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 2 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 2 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 2 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 1 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 1 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 1 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 1 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 1 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 0 depPkg 59 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 0 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 0 depPkg 76 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 0 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 75 @ 0 depPkg 62 [ 0, 4 ]
+DepSelector inst# 4558 - Adding VC for 77 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 4558 - Adding VC for 77 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding package id 78/84: min = -1, max = 4, current version 0
+DepSelector inst# 4558 - Adding VC for 78 @ 4 depPkg 75 [ 0, 32 ]
+DepSelector inst# 4558 - Adding VC for 78 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 78 @ 4 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 78 @ 3 depPkg 75 [ 0, 32 ]
+DepSelector inst# 4558 - Adding VC for 78 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 78 @ 3 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 78 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 78 @ 2 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 78 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 78 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding package id 79/84: min = -1, max = 2, current version 0
+DepSelector inst# 4558 - Adding VC for 79 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 79 @ 2 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 79 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 79 @ 1 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 79 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding package id 80/84: min = -1, max = 1, current version 0
+DepSelector inst# 4558 - Adding VC for 80 @ 1 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 80 @ 1 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 80 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 80 @ 1 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 80 @ 1 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding VC for 80 @ 0 depPkg 71 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 80 @ 0 depPkg 60 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 80 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Adding VC for 80 @ 0 depPkg 34 [ 0, 0 ]
+DepSelector inst# 4558 - Adding VC for 80 @ 0 depPkg 61 [ 0, 6 ]
+DepSelector inst# 4558 - Adding package id 81/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 81 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding package id 82/84: min = -1, max = 0, current version 0
+DepSelector inst# 4558 - Adding VC for 82 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 4558 - Adding package id 83/84: min = 0, max = 0, current version 0
+DepSelector inst# 4558 - Marking Package Preferred Latest 0 weight 10
+DepSelector inst# 4558 - Marking Package Required 0
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 0 [ 0, 3 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 3 weight 10
+DepSelector inst# 4558 - Marking Package Required 3
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 3 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 4 weight 10
+DepSelector inst# 4558 - Marking Package Required 4
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 4 [ 0, 5 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 9 weight 10
+DepSelector inst# 4558 - Marking Package Required 9
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 9 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 10 weight 10
+DepSelector inst# 4558 - Marking Package Required 10
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 10 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 11 weight 10
+DepSelector inst# 4558 - Marking Package Required 11
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 11 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 12 weight 10
+DepSelector inst# 4558 - Marking Package Required 12
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 12 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 13 weight 10
+DepSelector inst# 4558 - Marking Package Required 13
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 13 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 14 weight 10
+DepSelector inst# 4558 - Marking Package Required 14
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 14 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 15 weight 10
+DepSelector inst# 4558 - Marking Package Required 15
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 15 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 16 weight 10
+DepSelector inst# 4558 - Marking Package Required 16
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 16 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 17 weight 10
+DepSelector inst# 4558 - Marking Package Required 17
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 17 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 18 weight 10
+DepSelector inst# 4558 - Marking Package Required 18
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 18 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 19 weight 10
+DepSelector inst# 4558 - Marking Package Required 19
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 19 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 20 weight 10
+DepSelector inst# 4558 - Marking Package Required 20
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 20 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 21 weight 10
+DepSelector inst# 4558 - Marking Package Required 21
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 21 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 22 weight 10
+DepSelector inst# 4558 - Marking Package Required 22
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 22 weight 10
+DepSelector inst# 4558 - Marking Package Required 22
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 23 weight 10
+DepSelector inst# 4558 - Marking Package Required 23
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 23 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 24 weight 10
+DepSelector inst# 4558 - Marking Package Required 24
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 24 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 25 weight 10
+DepSelector inst# 4558 - Marking Package Required 25
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 25 [ 0, 3 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 26 weight 10
+DepSelector inst# 4558 - Marking Package Required 26
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 26 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 27 weight 10
+DepSelector inst# 4558 - Marking Package Required 27
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 27 [ 0, 3 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 28 weight 10
+DepSelector inst# 4558 - Marking Package Required 28
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 28 [ 0, 5 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 4558 - Marking Package Required 29
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 29 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 4558 - Marking Package Required 29
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 29 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 30 weight 10
+DepSelector inst# 4558 - Marking Package Required 30
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 30 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 4558 - Marking Package Required 32
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 33 weight 10
+DepSelector inst# 4558 - Marking Package Required 33
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 33 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 33 weight 10
+DepSelector inst# 4558 - Marking Package Required 33
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 33 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 35 weight 10
+DepSelector inst# 4558 - Marking Package Required 35
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 35 [ 0, 24 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 39 weight 10
+DepSelector inst# 4558 - Marking Package Required 39
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 39 [ 0, 3 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 40 weight 10
+DepSelector inst# 4558 - Marking Package Required 40
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 40 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 41 weight 10
+DepSelector inst# 4558 - Marking Package Required 41
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 41 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 41 weight 10
+DepSelector inst# 4558 - Marking Package Required 41
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 41 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 42 weight 10
+DepSelector inst# 4558 - Marking Package Required 42
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 42 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 43 weight 10
+DepSelector inst# 4558 - Marking Package Required 43
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 43 [ 0, 7 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 44 weight 10
+DepSelector inst# 4558 - Marking Package Required 44
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 44 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 45 weight 10
+DepSelector inst# 4558 - Marking Package Required 45
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 45 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 47 weight 10
+DepSelector inst# 4558 - Marking Package Required 47
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 47 [ 0, 4 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 53 weight 10
+DepSelector inst# 4558 - Marking Package Required 53
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 53 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 54 weight 10
+DepSelector inst# 4558 - Marking Package Required 54
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 54 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 54 weight 10
+DepSelector inst# 4558 - Marking Package Required 54
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 54 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 54 weight 10
+DepSelector inst# 4558 - Marking Package Required 54
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 54 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 54 weight 10
+DepSelector inst# 4558 - Marking Package Required 54
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 54 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 55 weight 10
+DepSelector inst# 4558 - Marking Package Required 55
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 55 [ 0, 4 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 56 weight 10
+DepSelector inst# 4558 - Marking Package Required 56
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 56 [ 0, 3 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 57 weight 10
+DepSelector inst# 4558 - Marking Package Required 57
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 57 [ 0, 5 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 57 weight 10
+DepSelector inst# 4558 - Marking Package Required 57
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 57 [ 0, 5 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 67 weight 10
+DepSelector inst# 4558 - Marking Package Required 67
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 67 [ 0, 7 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 68 weight 10
+DepSelector inst# 4558 - Marking Package Required 68
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 68 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 69 weight 10
+DepSelector inst# 4558 - Marking Package Required 69
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 69 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 69 weight 10
+DepSelector inst# 4558 - Marking Package Required 69
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 69 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 70 weight 10
+DepSelector inst# 4558 - Marking Package Required 70
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 70 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 72 weight 10
+DepSelector inst# 4558 - Marking Package Required 72
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 72 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 73 weight 10
+DepSelector inst# 4558 - Marking Package Required 73
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 73 [ 0, 11 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 74 weight 10
+DepSelector inst# 4558 - Marking Package Required 74
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 74 [ 0, 7 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 78 weight 10
+DepSelector inst# 4558 - Marking Package Required 78
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 78 [ 0, 4 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 79 weight 10
+DepSelector inst# 4558 - Marking Package Required 79
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 79 [ 0, 2 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 80 weight 10
+DepSelector inst# 4558 - Marking Package Required 80
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 80 [ 0, 1 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 75 weight 10
+DepSelector inst# 4558 - Marking Package Required 75
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 75 [ 0, 32 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 75 weight 10
+DepSelector inst# 4558 - Marking Package Required 75
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 75 [ 0, 32 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 81 weight 10
+DepSelector inst# 4558 - Marking Package Required 81
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 81 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 81 weight 10
+DepSelector inst# 4558 - Marking Package Required 81
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 81 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 82 weight 10
+DepSelector inst# 4558 - Marking Package Required 82
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 82 [ 0, 0 ]
+DepSelector inst# 4558 - Marking Package Preferred Latest 75 weight 10
+DepSelector inst# 4558 - Marking Package Required 75
+DepSelector inst# 4558 - Adding VC for 83 @ 0 depPkg 75 [ 0, 32 ]
diff --git a/test/data/log-311a15e7-3378-4c5b-beb7-86a1b9cf0ea9.txt b/test/data/log-311a15e7-3378-4c5b-beb7-86a1b9cf0ea9.txt
new file mode 100644
index 0000000..5bc8cbe
--- /dev/null
+++ b/test/data/log-311a15e7-3378-4c5b-beb7-86a1b9cf0ea9.txt
@@ -0,0 +1,620 @@
+Creating VersionProblem inst# 5893 with 64 packages, 1 stats, 1 debug
+DepSelector inst# 5893 - Adding package id 0/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding package id 1/64: min = -1, max = 5, current version 0
+DepSelector inst# 5893 - Adding package id 2/64: min = -1, max = 5, current version 0
+DepSelector inst# 5893 - Adding VC for 1 @ 5 depPkg 2 [ 0, 5 ]
+DepSelector inst# 5893 - Adding package id 3/64: min = -1, max = 5, current version 0
+DepSelector inst# 5893 - Adding VC for 1 @ 5 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 1 @ 4 depPkg 2 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 1 @ 3 depPkg 2 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 1 @ 2 depPkg 2 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 1 @ 1 depPkg 2 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 1 @ 0 depPkg 2 [ 0, 5 ]
+DepSelector inst# 5893 - Adding package id 4/64: min = -1, max = 3, current version 0
+DepSelector inst# 5893 - Adding VC for 2 @ 5 depPkg 4 [ 0, 3 ]
+DepSelector inst# 5893 - Adding package id 5/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 2 @ 5 depPkg 5 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 2 @ 4 depPkg 4 [ 0, 3 ]
+DepSelector inst# 5893 - Adding VC for 2 @ 4 depPkg 5 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 2 @ 3 depPkg 4 [ 0, 3 ]
+DepSelector inst# 5893 - Adding VC for 2 @ 3 depPkg 5 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 2 @ 2 depPkg 4 [ 0, 3 ]
+DepSelector inst# 5893 - Adding VC for 2 @ 2 depPkg 5 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 2 @ 1 depPkg 4 [ 0, 3 ]
+DepSelector inst# 5893 - Adding VC for 2 @ 1 depPkg 5 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 2 @ 0 depPkg 4 [ 0, 3 ]
+DepSelector inst# 5893 - Adding VC for 2 @ 0 depPkg 5 [ 0, 0 ]
+DepSelector inst# 5893 - Adding package id 6/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding package id 7/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 8/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 9/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 10/64: min = -1, max = 1, current version 0
+DepSelector inst# 5893 - Adding package id 11/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 12/64: min = -1, max = 1, current version 0
+DepSelector inst# 5893 - Adding package id 13/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 14/64: min = -1, max = 1, current version 0
+DepSelector inst# 5893 - Adding package id 15/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 16/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 17/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding package id 18/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 19/64: min = -1, max = 1, current version 0
+DepSelector inst# 5893 - Adding package id 20/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 21/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding package id 22/64: min = -1, max = 3, current version 0
+DepSelector inst# 5893 - Adding package id 23/64: min = -1, max = 1, current version 0
+DepSelector inst# 5893 - Adding VC for 23 @ 1 depPkg 4 [ 0, 3 ]
+DepSelector inst# 5893 - Adding VC for 23 @ 0 depPkg 4 [ 0, 3 ]
+DepSelector inst# 5893 - Adding VC for 23 @ 0 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding package id 24/64: min = -1, max = 3, current version 0
+DepSelector inst# 5893 - Adding package id 25/64: min = -1, max = 5, current version 0
+DepSelector inst# 5893 - Adding package id 26/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 27/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding package id 28/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 27 @ 2 depPkg 28 [ 0, 0 ]
+DepSelector inst# 5893 - Adding package id 29/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding package id 30/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 31/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 30 @ 0 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding package id 32/64: min = -1, max = 24, current version 0
+DepSelector inst# 5893 - Adding package id 33/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 32 @ 24 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 24 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 23 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 23 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 22 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 22 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 21 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 21 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 20 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 20 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 19 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 19 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 18 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 18 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 17 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 17 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 16 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 16 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 15 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 15 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 14 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 14 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 13 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 13 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 12 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 12 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 11 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 11 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 10 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 10 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 9 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 9 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 8 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 8 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 7 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 7 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 6 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 6 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 5 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 5 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 4 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 4 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 3 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 3 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 2 depPkg 33 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 2 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 32 @ 1 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding package id 34/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 33 @ 0 depPkg 34 [ 0, 0 ]
+DepSelector inst# 5893 - Adding package id 35/64: min = -1, max = 4, current version 0
+DepSelector inst# 5893 - Adding VC for 34 @ 0 depPkg 35 [ 0, 4 ]
+DepSelector inst# 5893 - Adding VC for 35 @ 4 depPkg 1 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 35 @ 3 depPkg 1 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 35 @ 2 depPkg 1 [ 0, 5 ]
+DepSelector inst# 5893 - Adding package id 36/64: min = -1, max = 3, current version 0
+DepSelector inst# 5893 - Adding VC for 36 @ 3 depPkg 35 [ 0, 4 ]
+DepSelector inst# 5893 - Adding VC for 36 @ 2 depPkg 35 [ 0, 4 ]
+DepSelector inst# 5893 - Adding VC for 36 @ 1 depPkg 35 [ 0, 4 ]
+DepSelector inst# 5893 - Adding VC for 36 @ 0 depPkg 35 [ 0, 4 ]
+DepSelector inst# 5893 - Adding package id 37/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding package id 38/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding package id 39/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 40/64: min = -1, max = 1, current version 0
+DepSelector inst# 5893 - Adding package id 41/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding VC for 40 @ 1 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding package id 42/64: min = -1, max = 3, current version 0
+DepSelector inst# 5893 - Adding VC for 40 @ 1 depPkg 42 [ 0, 3 ]
+DepSelector inst# 5893 - Adding VC for 40 @ 1 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding package id 43/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 40 @ 1 depPkg 43 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 40 @ 0 depPkg 42 [ 0, 3 ]
+DepSelector inst# 5893 - Adding VC for 40 @ 0 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 40 @ 0 depPkg 43 [ 0, 0 ]
+DepSelector inst# 5893 - Adding package id 44/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 42 @ 3 depPkg 44 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 42 @ 2 depPkg 44 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 42 @ 1 depPkg 44 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 42 @ 0 depPkg 44 [ 0, 0 ]
+DepSelector inst# 5893 - Adding package id 45/64: min = -1, max = 22, current version 0
+DepSelector inst# 5893 - Adding VC for 45 @ 22 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding package id 46/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding VC for 45 @ 22 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding package id 47/64: min = -1, max = 1, current version 0
+DepSelector inst# 5893 - Adding VC for 45 @ 22 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding package id 48/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 45 @ 22 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding package id 49/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 45 @ 22 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 22 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 22 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 22 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding package id 50/64: min = -1, max = 6, current version 0
+DepSelector inst# 5893 - Adding VC for 45 @ 22 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 21 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 21 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 21 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 21 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 21 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 21 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 21 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 21 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 21 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 20 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 20 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 20 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 20 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 20 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 20 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 20 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 20 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 20 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 19 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 19 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding package id 51/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding VC for 45 @ 19 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 19 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 19 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 19 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 19 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 19 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 19 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 19 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 18 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 18 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 18 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 18 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 18 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 18 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 18 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 18 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 18 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 18 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 17 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 17 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 17 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 17 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 17 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 17 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 17 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 17 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 17 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 17 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 16 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 16 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 16 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 16 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 16 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 16 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 16 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 16 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 16 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 16 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 15 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 15 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 15 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 15 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 15 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 15 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 15 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 15 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 15 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 15 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 14 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 14 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 14 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 14 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 14 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 14 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 14 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 14 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 14 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 14 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 13 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 13 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 13 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 13 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 13 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 13 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 13 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 13 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 13 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 13 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 12 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 12 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 12 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 12 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 12 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 12 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 12 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 12 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 12 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 12 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 11 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 11 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 11 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 11 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 11 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 11 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 11 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 11 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 11 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 11 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 10 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 10 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 10 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 10 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 10 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 10 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 10 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 10 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 10 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 10 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 9 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 9 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 9 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 9 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 9 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 9 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 9 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 9 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 9 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 9 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 8 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 8 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 8 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 8 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 8 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 8 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 8 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 8 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 8 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 8 depPkg 50 [ 0, 6 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 7 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 7 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 7 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 7 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 7 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 7 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 7 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 7 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 7 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 6 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 6 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 6 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 6 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 6 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 6 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 6 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 6 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 6 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 5 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 5 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 5 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 5 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 5 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 5 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 5 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 5 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 5 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 4 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 4 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 4 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 4 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 4 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 4 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 4 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 4 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 4 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 3 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 3 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 3 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 3 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 3 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 3 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 3 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 3 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 3 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 2 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 2 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 2 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 2 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 2 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 2 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 2 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 2 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 2 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 1 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 1 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 1 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 1 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 1 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 1 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 1 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 1 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 1 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 0 depPkg 41 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 0 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 0 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 0 depPkg 47 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 0 depPkg 48 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 0 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 0 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 0 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 45 @ 0 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 46 @ 2 depPkg 39 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 46 @ 2 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 46 @ 1 depPkg 39 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 46 @ 1 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 46 @ 0 depPkg 39 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 46 @ 0 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding package id 52/64: min = -1, max = 1, current version 0
+DepSelector inst# 5893 - Adding VC for 47 @ 1 depPkg 52 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 47 @ 1 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 47 @ 0 depPkg 52 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 47 @ 0 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding package id 53/64: min = -1, max = 1, current version 0
+DepSelector inst# 5893 - Adding VC for 49 @ 0 depPkg 53 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 51 @ 2 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding package id 54/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding VC for 51 @ 2 depPkg 54 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 51 @ 2 depPkg 39 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 51 @ 2 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 51 @ 1 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 51 @ 1 depPkg 54 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 51 @ 1 depPkg 39 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 51 @ 1 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 51 @ 0 depPkg 46 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 51 @ 0 depPkg 54 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 51 @ 0 depPkg 39 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 51 @ 0 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding package id 55/64: min = -1, max = 4, current version 0
+DepSelector inst# 5893 - Adding package id 56/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 56 @ 0 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 56 @ 0 depPkg 40 [ 0, 1 ]
+DepSelector inst# 5893 - Adding package id 57/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 57 @ 0 depPkg 51 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 57 @ 0 depPkg 49 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 57 @ 0 depPkg 40 [ 0, 1 ]
+DepSelector inst# 5893 - Adding package id 58/64: min = -1, max = 1, current version 0
+DepSelector inst# 5893 - Adding VC for 58 @ 1 depPkg 35 [ 0, 4 ]
+DepSelector inst# 5893 - Adding package id 59/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding VC for 59 @ 0 depPkg 4 [ 0, 3 ]
+DepSelector inst# 5893 - Adding VC for 59 @ 0 depPkg 35 [ 0, 4 ]
+DepSelector inst# 5893 - Adding package id 60/64: min = -1, max = 0, current version 0
+DepSelector inst# 5893 - Adding package id 61/64: min = -1, max = 1, current version 0
+DepSelector inst# 5893 - Adding package id 62/64: min = -1, max = 2, current version 0
+DepSelector inst# 5893 - Adding VC for 61 @ 1 depPkg 62 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 61 @ 1 depPkg 55 [ 0, 4 ]
+DepSelector inst# 5893 - Adding VC for 61 @ 1 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 61 @ 1 depPkg 40 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 61 @ 1 depPkg 43 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 61 @ 0 depPkg 62 [ 0, 2 ]
+DepSelector inst# 5893 - Adding VC for 61 @ 0 depPkg 55 [ 0, 4 ]
+DepSelector inst# 5893 - Adding VC for 61 @ 0 depPkg 31 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 61 @ 0 depPkg 40 [ 0, 1 ]
+DepSelector inst# 5893 - Adding VC for 61 @ 0 depPkg 43 [ 0, 0 ]
+DepSelector inst# 5893 - Adding VC for 62 @ 2 depPkg 4 [ 0, 3 ]
+DepSelector inst# 5893 - Adding VC for 62 @ 2 depPkg 2 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 62 @ 2 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 62 @ 1 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding VC for 62 @ 0 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Adding package id 63/64: min = 0, max = 0, current version 0
+DepSelector inst# 5893 - Marking Package Preferred Latest 0 weight 10
+DepSelector inst# 5893 - Marking Package Required 0
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 0 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 1 weight 10
+DepSelector inst# 5893 - Marking Package Required 1
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 1 [ 0, 5 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 6 weight 10
+DepSelector inst# 5893 - Marking Package Required 6
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 6 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 7 weight 10
+DepSelector inst# 5893 - Marking Package Required 7
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 7 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 8 weight 10
+DepSelector inst# 5893 - Marking Package Required 8
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 8 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 9 weight 10
+DepSelector inst# 5893 - Marking Package Required 9
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 9 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 10 weight 10
+DepSelector inst# 5893 - Marking Package Required 10
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 10 [ 0, 1 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 11 weight 10
+DepSelector inst# 5893 - Marking Package Required 11
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 11 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 12 weight 10
+DepSelector inst# 5893 - Marking Package Required 12
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 12 [ 0, 1 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 13 weight 10
+DepSelector inst# 5893 - Marking Package Required 13
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 13 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 14 weight 10
+DepSelector inst# 5893 - Marking Package Required 14
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 14 [ 0, 1 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 15 weight 10
+DepSelector inst# 5893 - Marking Package Required 15
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 15 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 16 weight 10
+DepSelector inst# 5893 - Marking Package Required 16
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 16 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 17 weight 10
+DepSelector inst# 5893 - Marking Package Required 17
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 17 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 18 weight 10
+DepSelector inst# 5893 - Marking Package Required 18
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 18 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 19 weight 10
+DepSelector inst# 5893 - Marking Package Required 19
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 19 weight 10
+DepSelector inst# 5893 - Marking Package Required 19
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 19 [ 0, 1 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 20 weight 10
+DepSelector inst# 5893 - Marking Package Required 20
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 20 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 21 weight 10
+DepSelector inst# 5893 - Marking Package Required 21
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 21 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 22 weight 10
+DepSelector inst# 5893 - Marking Package Required 22
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 22 [ 0, 3 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 23 weight 10
+DepSelector inst# 5893 - Marking Package Required 23
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 23 [ 0, 1 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 24 weight 10
+DepSelector inst# 5893 - Marking Package Required 24
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 24 [ 0, 3 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 25 weight 10
+DepSelector inst# 5893 - Marking Package Required 25
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 25 [ 0, 5 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 26 weight 10
+DepSelector inst# 5893 - Marking Package Required 26
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 26 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 26 weight 10
+DepSelector inst# 5893 - Marking Package Required 26
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 26 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 27 weight 10
+DepSelector inst# 5893 - Marking Package Required 27
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 27 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 5893 - Marking Package Required 29
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 29 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 30 weight 10
+DepSelector inst# 5893 - Marking Package Required 30
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 30 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 30 weight 10
+DepSelector inst# 5893 - Marking Package Required 30
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 30 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 5893 - Marking Package Required 32
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 32 [ 0, 24 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 36 weight 10
+DepSelector inst# 5893 - Marking Package Required 36
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 36 [ 0, 3 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 37 weight 10
+DepSelector inst# 5893 - Marking Package Required 37
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 37 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 38 weight 10
+DepSelector inst# 5893 - Marking Package Required 38
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 38 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 38 weight 10
+DepSelector inst# 5893 - Marking Package Required 38
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 38 [ 0, 2 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 3 weight 10
+DepSelector inst# 5893 - Marking Package Required 3
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 3 weight 10
+DepSelector inst# 5893 - Marking Package Required 3
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 3 [ 0, 5 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 39 weight 10
+DepSelector inst# 5893 - Marking Package Required 39
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 39 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 35 weight 10
+DepSelector inst# 5893 - Marking Package Required 35
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 35 [ 0, 4 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 40 weight 10
+DepSelector inst# 5893 - Marking Package Required 40
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 40 [ 0, 1 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 45 weight 10
+DepSelector inst# 5893 - Marking Package Required 45
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 45 [ 0, 22 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 45 weight 10
+DepSelector inst# 5893 - Marking Package Required 45
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 45 [ 0, 22 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 45 weight 10
+DepSelector inst# 5893 - Marking Package Required 45
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 45 [ 0, 22 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 55 weight 10
+DepSelector inst# 5893 - Marking Package Required 55
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 55 [ 0, 4 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 56 weight 10
+DepSelector inst# 5893 - Marking Package Required 56
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 56 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 57 weight 10
+DepSelector inst# 5893 - Marking Package Required 57
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 57 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 58 weight 10
+DepSelector inst# 5893 - Marking Package Required 58
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 58 [ 0, 1 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 59 weight 10
+DepSelector inst# 5893 - Marking Package Required 59
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 59 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 59 weight 10
+DepSelector inst# 5893 - Marking Package Required 59
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 59 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 59 weight 10
+DepSelector inst# 5893 - Marking Package Required 59
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 59 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 59 weight 10
+DepSelector inst# 5893 - Marking Package Required 59
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 59 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 60 weight 10
+DepSelector inst# 5893 - Marking Package Required 60
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 60 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 60 weight 10
+DepSelector inst# 5893 - Marking Package Required 60
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 60 [ 0, 0 ]
+DepSelector inst# 5893 - Marking Package Preferred Latest 61 weight 10
+DepSelector inst# 5893 - Marking Package Required 61
+DepSelector inst# 5893 - Adding VC for 63 @ 0 depPkg 61 [ 0, 1 ]
+dep_selector solve: SOLVED 64 packages, 422 constraints, Time: 21.8ms Stats: 1 steps, 2309619 bytes, 2542 props, 108 nodes, 107 depth
diff --git a/test/data/log-382cfe5b-0ac2-48b8-83d1-717cb4620990.txt b/test/data/log-382cfe5b-0ac2-48b8-83d1-717cb4620990.txt
new file mode 100644
index 0000000..b5feac9
--- /dev/null
+++ b/test/data/log-382cfe5b-0ac2-48b8-83d1-717cb4620990.txt
@@ -0,0 +1,78 @@
+Creating VersionProblem inst# 3445 with 20 packages, 1 stats, 1 debug
+DepSelector inst# 3445 - Adding package id 0/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding package id 1/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding package id 2/20: min = -1, max = 1, current version 0
+DepSelector inst# 3445 - Adding package id 3/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding package id 4/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding package id 5/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding package id 6/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding package id 7/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding package id 8/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding VC for 7 @ 0 depPkg 8 [ 0, 0 ]
+DepSelector inst# 3445 - Adding package id 9/20: min = -1, max = 1, current version 0
+DepSelector inst# 3445 - Adding VC for 7 @ 0 depPkg 9 [ 0, 1 ]
+DepSelector inst# 3445 - Adding package id 10/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding package id 11/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding VC for 10 @ 0 depPkg 11 [ 0, 0 ]
+DepSelector inst# 3445 - Adding VC for 10 @ 0 depPkg 8 [ 0, 0 ]
+DepSelector inst# 3445 - Adding package id 12/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding VC for 10 @ 0 depPkg 12 [ 0, 0 ]
+DepSelector inst# 3445 - Adding package id 13/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding VC for 11 @ 0 depPkg 13 [ 0, 0 ]
+DepSelector inst# 3445 - Adding package id 14/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding VC for 14 @ 0 depPkg 10 [ 0, 0 ]
+DepSelector inst# 3445 - Adding package id 15/20: min = -1, max = 1, current version 0
+DepSelector inst# 3445 - Adding package id 16/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding VC for 15 @ 1 depPkg 16 [ 0, 0 ]
+DepSelector inst# 3445 - Adding VC for 15 @ 0 depPkg 2 [ 0, 1 ]
+DepSelector inst# 3445 - Adding VC for 15 @ 0 depPkg 13 [ 0, 0 ]
+DepSelector inst# 3445 - Adding VC for 15 @ 0 depPkg 16 [ 0, 0 ]
+DepSelector inst# 3445 - Adding package id 17/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding VC for 17 @ 0 depPkg 12 [ 0, 0 ]
+DepSelector inst# 3445 - Adding VC for 17 @ 0 depPkg 16 [ 0, 0 ]
+DepSelector inst# 3445 - Adding package id 18/20: min = -1, max = 0, current version 0
+DepSelector inst# 3445 - Adding VC for 18 @ 0 depPkg 12 [ 0, 0 ]
+DepSelector inst# 3445 - Adding package id 19/20: min = 0, max = 0, current version 0
+DepSelector inst# 3445 - Marking Package Preferred Latest 0 weight 10
+DepSelector inst# 3445 - Marking Package Required 0
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 0 [ 0, 0 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 1 weight 10
+DepSelector inst# 3445 - Marking Package Required 1
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 1 [ 0, 0 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 2 weight 10
+DepSelector inst# 3445 - Marking Package Required 2
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 2 [ 0, 1 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 3 weight 10
+DepSelector inst# 3445 - Marking Package Required 3
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 3 [ 0, 0 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 4 weight 10
+DepSelector inst# 3445 - Marking Package Required 4
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 4 [ 0, 0 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 5 weight 10
+DepSelector inst# 3445 - Marking Package Required 5
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 5 [ 0, 0 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 6 weight 10
+DepSelector inst# 3445 - Marking Package Required 6
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 6 [ 0, 0 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 7 weight 10
+DepSelector inst# 3445 - Marking Package Required 7
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 7 [ 0, 0 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 10 weight 10
+DepSelector inst# 3445 - Marking Package Required 10
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 10 [ 0, 0 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 14 weight 10
+DepSelector inst# 3445 - Marking Package Required 14
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 14 [ 0, 0 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 15 weight 10
+DepSelector inst# 3445 - Marking Package Required 15
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 15 [ 0, 1 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 15 weight 10
+DepSelector inst# 3445 - Marking Package Required 15
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 15 [ 0, 1 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 17 weight 10
+DepSelector inst# 3445 - Marking Package Required 17
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 17 [ 0, 0 ]
+DepSelector inst# 3445 - Marking Package Preferred Latest 18 weight 10
+DepSelector inst# 3445 - Marking Package Required 18
+DepSelector inst# 3445 - Adding VC for 19 @ 0 depPkg 18 [ 0, 0 ]
+dep_selector solve: SOLVED 20 packages, 28 constraints, Time: 0.343ms Stats: 1 steps, 70191 bytes, 183 props, 243459 nodes, 23 depth
diff --git a/test/data/log-d3564ef6-6437-41e7-90b6-dbdb849551a6_mod.txt b/test/data/log-d3564ef6-6437-41e7-90b6-dbdb849551a6_mod.txt
new file mode 100644
index 0000000..e3d1f76
--- /dev/null
+++ b/test/data/log-d3564ef6-6437-41e7-90b6-dbdb849551a6_mod.txt
@@ -0,0 +1,937 @@
+Creating VersionProblem inst# 0 with 84 packages, 1 stats, 1 debug
+DepSelector inst# 0 - Adding package id 0/84: min = -1, max = 3, current version 0
+DepSelector inst# 0 - Adding package id 1/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding VC for 0 @ 3 depPkg 1 [ 0, 1 ]
+DepSelector inst# 0 - Adding package id 2/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 0 @ 3 depPkg 2 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 0 @ 2 depPkg 1 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 0 @ 2 depPkg 2 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 0 @ 1 depPkg 1 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 0 @ 1 depPkg 2 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 0 @ 0 depPkg 1 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 0 @ 0 depPkg 2 [ 0, 0 ]
+DepSelector inst# 0 - Adding package id 3/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding package id 4/84: min = -1, max = 5, current version 0
+DepSelector inst# 0 - Adding package id 5/84: min = -1, max = 5, current version 0
+DepSelector inst# 0 - Adding VC for 4 @ 5 depPkg 5 [ 0, 5 ]
+DepSelector inst# 0 - Adding package id 6/84: min = -1, max = 5, current version 0
+DepSelector inst# 0 - Adding VC for 4 @ 5 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 4 @ 4 depPkg 5 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 4 @ 3 depPkg 5 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 4 @ 2 depPkg 5 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 4 @ 1 depPkg 5 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 4 @ 0 depPkg 5 [ 0, 5 ]
+DepSelector inst# 0 - Adding package id 7/84: min = -1, max = 3, current version 0
+DepSelector inst# 0 - Adding VC for 5 @ 5 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding package id 8/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 5 @ 5 depPkg 8 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 5 @ 4 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 5 @ 4 depPkg 8 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 5 @ 3 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 5 @ 3 depPkg 8 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 5 @ 2 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 5 @ 2 depPkg 8 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 5 @ 1 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 5 @ 1 depPkg 8 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 5 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 5 @ 0 depPkg 8 [ 0, 0 ]
+DepSelector inst# 0 - Adding package id 9/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding package id 10/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 11/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 12/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 13/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding package id 14/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 15/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding package id 16/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 17/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding package id 18/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 19/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 20/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding package id 21/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 22/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding package id 23/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 24/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding package id 25/84: min = -1, max = 3, current version 0
+DepSelector inst# 0 - Adding package id 26/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding VC for 26 @ 1 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 26 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 26 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding package id 27/84: min = -1, max = 3, current version 0
+DepSelector inst# 0 - Adding package id 28/84: min = -1, max = 5, current version 0
+DepSelector inst# 0 - Adding package id 29/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 30/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding package id 31/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 30 @ 2 depPkg 31 [ 0, 0 ]
+DepSelector inst# 0 - Adding package id 32/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding package id 33/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 34/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 33 @ 0 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding package id 35/84: min = -1, max = 24, current version 0
+DepSelector inst# 0 - Adding package id 36/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 35 @ 24 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 24 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 23 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 23 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 22 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 22 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 21 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 21 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 20 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 20 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 19 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 19 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 18 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 18 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 17 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 17 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 16 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 16 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 15 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 15 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 14 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 14 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 13 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 13 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 12 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 12 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 11 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 11 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 10 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 10 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 9 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 9 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 8 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 8 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 7 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 7 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 6 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 6 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 5 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 5 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 4 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 4 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 3 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 3 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 2 depPkg 36 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 35 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 35 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding package id 37/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 36 @ 0 depPkg 37 [ 0, 0 ]
+DepSelector inst# 0 - Adding package id 38/84: min = -1, max = 4, current version 0
+DepSelector inst# 0 - Adding VC for 37 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 38 @ 4 depPkg 4 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 38 @ 3 depPkg 4 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 38 @ 2 depPkg 4 [ 0, 5 ]
+DepSelector inst# 0 - Adding package id 39/84: min = -1, max = 3, current version 0
+DepSelector inst# 0 - Adding VC for 39 @ 3 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 39 @ 2 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 39 @ 1 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 39 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding package id 40/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding package id 41/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding package id 42/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding VC for 42 @ 1 depPkg 10 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 42 @ 0 depPkg 10 [ 0, 0 ]
+DepSelector inst# 0 - Adding package id 43/84: min = -1, max = 7, current version 0
+DepSelector inst# 0 - Adding package id 44/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding VC for 44 @ 1 depPkg 5 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 44 @ 0 depPkg 5 [ 0, 5 ]
+DepSelector inst# 0 - Adding package id 45/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding package id 46/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding VC for 45 @ 1 depPkg 46 [ 0, 2 ]
+DepSelector inst# 0 - Adding package id 47/84: min = -1, max = 4, current version 0
+DepSelector inst# 0 - Adding VC for 45 @ 1 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 45 @ 1 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding package id 48/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding VC for 45 @ 1 depPkg 48 [ 0, 1 ]
+DepSelector inst# 0 - Adding package id 49/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 45 @ 1 depPkg 49 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 45 @ 0 depPkg 46 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 45 @ 0 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 45 @ 0 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 45 @ 0 depPkg 48 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 45 @ 0 depPkg 49 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 46 @ 2 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 46 @ 2 depPkg 5 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 46 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 46 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 46 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding package id 50/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding VC for 48 @ 1 depPkg 50 [ 0, 2 ]
+DepSelector inst# 0 - Adding package id 51/84: min = -1, max = 3, current version 0
+DepSelector inst# 0 - Adding VC for 48 @ 1 depPkg 51 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 48 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 48 @ 1 depPkg 49 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 48 @ 0 depPkg 51 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 48 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 48 @ 0 depPkg 49 [ 0, 0 ]
+DepSelector inst# 0 - Adding package id 52/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 51 @ 3 depPkg 52 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 51 @ 2 depPkg 52 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 51 @ 1 depPkg 52 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 51 @ 0 depPkg 52 [ 0, 0 ]
+DepSelector inst# 0 - Adding package id 53/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding VC for 53 @ 1 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding package id 54/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 54 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 54 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding package id 55/84: min = -1, max = 4, current version 0
+DepSelector inst# 0 - Adding VC for 55 @ 4 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 55 @ 4 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 55 @ 3 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 55 @ 3 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 55 @ 2 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 55 @ 2 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 55 @ 1 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 55 @ 1 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 55 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 55 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding package id 56/84: min = -1, max = 3, current version 0
+DepSelector inst# 0 - Adding VC for 56 @ 3 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 56 @ 2 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 56 @ 1 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 56 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding package id 57/84: min = -1, max = 5, current version 0
+DepSelector inst# 0 - Adding package id 58/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding VC for 57 @ 5 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding package id 59/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 57 @ 5 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding package id 60/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 57 @ 5 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 57 @ 5 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 57 @ 5 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding package id 61/84: min = -1, max = 6, current version 0
+DepSelector inst# 0 - Adding VC for 57 @ 5 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding package id 62/84: min = -1, max = 4, current version 0
+DepSelector inst# 0 - Adding VC for 57 @ 5 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 57 @ 4 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 57 @ 4 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 57 @ 4 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 57 @ 4 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 57 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 57 @ 4 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 57 @ 4 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 57 @ 3 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 57 @ 3 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 57 @ 3 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 57 @ 3 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 57 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 57 @ 3 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 57 @ 2 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 57 @ 2 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 57 @ 2 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 57 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 57 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 57 @ 2 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 57 @ 1 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 57 @ 1 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 57 @ 1 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 57 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 57 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 57 @ 1 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding package id 63/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding VC for 58 @ 2 depPkg 63 [ 0, 2 ]
+DepSelector inst# 0 - Adding package id 64/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding VC for 58 @ 2 depPkg 64 [ 0, 2 ]
+DepSelector inst# 0 - Adding package id 65/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 58 @ 2 depPkg 65 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 58 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 58 @ 1 depPkg 63 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 58 @ 1 depPkg 64 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 58 @ 1 depPkg 65 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 58 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 58 @ 0 depPkg 63 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 58 @ 0 depPkg 64 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 58 @ 0 depPkg 65 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 58 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 63 @ 2 depPkg 65 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 63 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 63 @ 1 depPkg 65 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 63 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 63 @ 0 depPkg 65 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 63 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding package id 66/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding VC for 60 @ 0 depPkg 66 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 62 @ 4 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 62 @ 4 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 62 @ 4 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 62 @ 3 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 62 @ 3 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 62 @ 3 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 62 @ 2 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 62 @ 2 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 62 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 62 @ 1 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 62 @ 1 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 62 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 62 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 62 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 62 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding package id 67/84: min = -1, max = 7, current version 0
+DepSelector inst# 0 - Adding VC for 67 @ 7 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 67 @ 7 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 7 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 7 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 67 @ 7 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 67 @ 7 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 67 @ 7 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 67 @ 6 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 67 @ 6 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 6 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 6 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 67 @ 6 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 67 @ 6 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 67 @ 6 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 67 @ 5 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 67 @ 5 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 5 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 5 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 67 @ 5 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 67 @ 5 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 67 @ 5 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 67 @ 4 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 67 @ 4 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 4 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 4 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 67 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 67 @ 4 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 67 @ 4 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 67 @ 3 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 67 @ 3 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 3 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 3 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 67 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 67 @ 3 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 67 @ 3 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 67 @ 2 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 67 @ 2 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 2 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 67 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 67 @ 2 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 67 @ 1 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 67 @ 1 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 1 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 67 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 67 @ 1 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 67 @ 0 depPkg 58 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 67 @ 0 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 0 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 67 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 67 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 67 @ 0 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding package id 68/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding package id 69/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 70/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding package id 71/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding VC for 70 @ 1 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 70 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 70 @ 0 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 70 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding package id 72/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding package id 73/84: min = -1, max = 11, current version 0
+DepSelector inst# 0 - Adding VC for 73 @ 11 depPkg 50 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 73 @ 11 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 11 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 11 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 11 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 11 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 73 @ 10 depPkg 50 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 73 @ 10 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 10 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 10 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 10 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 10 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 73 @ 9 depPkg 50 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 73 @ 9 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 9 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 9 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 9 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 9 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 73 @ 8 depPkg 50 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 73 @ 8 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 8 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 8 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 8 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 8 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 73 @ 7 depPkg 50 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 73 @ 7 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 7 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 7 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 7 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 7 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 73 @ 6 depPkg 50 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 73 @ 6 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 6 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 6 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 5 depPkg 50 [ 0, 2 ]
+DepSelector inst# 0 - Adding VC for 73 @ 5 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 5 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 5 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 5 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 4 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 4 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 4 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 3 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 3 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 3 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 2 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 2 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 1 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 1 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 0 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 73 @ 0 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 73 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding package id 74/84: min = -1, max = 7, current version 0
+DepSelector inst# 0 - Adding VC for 74 @ 7 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding package id 75/84: min = -1, max = 32, current version 0
+DepSelector inst# 0 - Adding VC for 74 @ 7 depPkg 75 [ 0, 32 ]
+DepSelector inst# 0 - Adding VC for 74 @ 7 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 74 @ 7 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 74 @ 6 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 74 @ 6 depPkg 75 [ 0, 32 ]
+DepSelector inst# 0 - Adding VC for 74 @ 6 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 74 @ 6 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 74 @ 5 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 74 @ 5 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 74 @ 5 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 74 @ 4 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 74 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 74 @ 4 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 74 @ 3 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 74 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 74 @ 2 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 74 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 74 @ 1 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 74 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 74 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 32 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 32 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 32 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding package id 76/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 75 @ 32 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 32 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 32 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding package id 77/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 75 @ 32 depPkg 77 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 31 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 31 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 31 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 31 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 31 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 31 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 31 depPkg 77 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 30 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 30 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 30 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 30 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 30 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 30 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 30 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 30 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 29 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 29 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 29 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 29 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 29 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 29 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 29 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 29 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 28 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 28 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 28 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 28 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 28 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 28 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 28 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 28 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 27 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 27 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 27 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 27 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 27 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 27 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 27 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 27 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 26 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 26 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 26 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 26 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 26 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 26 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 26 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 26 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 25 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 25 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 25 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 25 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 25 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 25 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 25 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 25 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 24 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 24 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 24 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 24 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 24 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 24 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 24 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 24 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 23 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 23 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 23 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 23 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 23 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 23 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 23 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 23 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 22 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 22 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 22 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 22 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 22 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 22 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 22 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 22 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 21 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 21 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 21 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 21 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 21 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 21 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 21 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 21 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 20 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 20 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 20 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 20 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 20 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 20 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 20 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 20 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 19 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 19 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 19 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 19 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 19 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 19 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 19 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 19 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 18 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 18 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 18 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 18 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 18 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 18 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 18 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 18 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 17 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 17 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 17 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 17 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 17 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 17 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 17 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 17 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 16 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 16 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 16 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 16 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 16 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 16 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 16 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 16 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 15 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 15 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 15 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 15 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 15 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 15 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 15 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 15 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 14 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 14 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 14 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 14 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 14 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 14 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 14 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 14 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 13 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 13 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 13 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 13 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 13 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 13 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 13 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 13 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 12 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 12 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 12 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 12 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 12 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 12 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 12 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 12 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 11 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 11 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 11 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 11 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 11 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 11 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 11 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 11 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 10 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 10 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 10 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 10 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 10 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 10 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 10 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 75 @ 10 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 9 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 9 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 9 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 9 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 9 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 9 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 9 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 8 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 8 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 8 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 8 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 8 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 8 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 8 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 7 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 7 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 7 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 7 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 7 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 7 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 7 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 6 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 6 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 6 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 6 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 6 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 6 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 6 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 5 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 5 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 5 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 5 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 5 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 5 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 5 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 4 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 4 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 4 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 4 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 4 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 4 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 3 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 3 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 3 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 3 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 3 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 3 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 2 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 2 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 2 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 2 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 2 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 2 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 1 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 1 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 1 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 1 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 1 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 1 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 0 depPkg 59 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 0 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 75 @ 0 depPkg 6 [ 0, 5 ]
+DepSelector inst# 0 - Adding VC for 75 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 75 @ 0 depPkg 76 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 0 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 75 @ 0 depPkg 62 [ 0, 4 ]
+DepSelector inst# 0 - Adding VC for 77 @ 0 depPkg 7 [ 0, 3 ]
+DepSelector inst# 0 - Adding VC for 77 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding package id 78/84: min = -1, max = 4, current version 0
+DepSelector inst# 0 - Adding VC for 78 @ 4 depPkg 75 [ 0, 32 ]
+DepSelector inst# 0 - Adding VC for 78 @ 4 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 78 @ 3 depPkg 75 [ 0, 32 ]
+DepSelector inst# 0 - Adding VC for 78 @ 3 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 78 @ 3 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 78 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 78 @ 2 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 78 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 78 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding package id 79/84: min = -1, max = 2, current version 0
+DepSelector inst# 0 - Adding VC for 79 @ 2 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 79 @ 2 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 79 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 79 @ 1 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 79 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding package id 80/84: min = -1, max = 1, current version 0
+DepSelector inst# 0 - Adding VC for 80 @ 1 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 80 @ 1 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 80 @ 1 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 80 @ 1 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 80 @ 1 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding VC for 80 @ 0 depPkg 71 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 80 @ 0 depPkg 60 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 80 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Adding VC for 80 @ 0 depPkg 34 [ 0, 0 ]
+DepSelector inst# 0 - Adding VC for 80 @ 0 depPkg 61 [ 0, 6 ]
+DepSelector inst# 0 - Adding package id 81/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 81 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding package id 82/84: min = -1, max = 0, current version 0
+DepSelector inst# 0 - Adding VC for 82 @ 0 depPkg 38 [ 0, 4 ]
+DepSelector inst# 0 - Adding package id 83/84: min = 0, max = 0, current version 0
+DepSelector inst# 0 - Marking Package Preferred Latest 0 weight 10
+DepSelector inst# 0 - Marking Package Required 0
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 0 [ 0, 3 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 3 weight 10
+DepSelector inst# 0 - Marking Package Required 3
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 3 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 4 weight 10
+DepSelector inst# 0 - Marking Package Required 4
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 4 [ 0, 5 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 9 weight 10
+DepSelector inst# 0 - Marking Package Required 9
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 9 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 10 weight 10
+DepSelector inst# 0 - Marking Package Required 10
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 10 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 11 weight 10
+DepSelector inst# 0 - Marking Package Required 11
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 11 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 12 weight 10
+DepSelector inst# 0 - Marking Package Required 12
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 12 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 13 weight 10
+DepSelector inst# 0 - Marking Package Required 13
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 13 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 14 weight 10
+DepSelector inst# 0 - Marking Package Required 14
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 14 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 15 weight 10
+DepSelector inst# 0 - Marking Package Required 15
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 15 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 16 weight 10
+DepSelector inst# 0 - Marking Package Required 16
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 16 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 17 weight 10
+DepSelector inst# 0 - Marking Package Required 17
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 17 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 18 weight 10
+DepSelector inst# 0 - Marking Package Required 18
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 18 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 19 weight 10
+DepSelector inst# 0 - Marking Package Required 19
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 19 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 20 weight 10
+DepSelector inst# 0 - Marking Package Required 20
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 20 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 21 weight 10
+DepSelector inst# 0 - Marking Package Required 21
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 21 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 22 weight 10
+DepSelector inst# 0 - Marking Package Required 22
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 22 weight 10
+DepSelector inst# 0 - Marking Package Required 22
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 22 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 23 weight 10
+DepSelector inst# 0 - Marking Package Required 23
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 23 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 24 weight 10
+DepSelector inst# 0 - Marking Package Required 24
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 24 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 25 weight 10
+DepSelector inst# 0 - Marking Package Required 25
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 25 [ 0, 3 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 26 weight 10
+DepSelector inst# 0 - Marking Package Required 26
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 26 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 27 weight 10
+DepSelector inst# 0 - Marking Package Required 27
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 27 [ 0, 3 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 28 weight 10
+DepSelector inst# 0 - Marking Package Required 28
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 28 [ 0, 5 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 0 - Marking Package Required 29
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 29 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 29 weight 10
+DepSelector inst# 0 - Marking Package Required 29
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 29 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 30 weight 10
+DepSelector inst# 0 - Marking Package Required 30
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 30 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 32 weight 10
+DepSelector inst# 0 - Marking Package Required 32
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 32 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 33 weight 10
+DepSelector inst# 0 - Marking Package Required 33
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 33 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 33 weight 10
+DepSelector inst# 0 - Marking Package Required 33
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 33 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 35 weight 10
+DepSelector inst# 0 - Marking Package Required 35
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 35 [ 0, 24 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 39 weight 10
+DepSelector inst# 0 - Marking Package Required 39
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 39 [ 0, 3 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 40 weight 10
+DepSelector inst# 0 - Marking Package Required 40
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 40 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 41 weight 10
+DepSelector inst# 0 - Marking Package Required 41
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 41 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 41 weight 10
+DepSelector inst# 0 - Marking Package Required 41
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 41 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 42 weight 10
+DepSelector inst# 0 - Marking Package Required 42
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 42 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 43 weight 10
+DepSelector inst# 0 - Marking Package Required 43
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 43 [ 0, 7 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 44 weight 10
+DepSelector inst# 0 - Marking Package Required 44
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 44 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 45 weight 10
+DepSelector inst# 0 - Marking Package Required 45
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 45 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 47 weight 10
+DepSelector inst# 0 - Marking Package Required 47
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 47 [ 0, 4 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 53 weight 10
+DepSelector inst# 0 - Marking Package Required 53
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 53 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 54 weight 10
+DepSelector inst# 0 - Marking Package Required 54
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 54 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 54 weight 10
+DepSelector inst# 0 - Marking Package Required 54
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 54 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 54 weight 10
+DepSelector inst# 0 - Marking Package Required 54
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 54 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 54 weight 10
+DepSelector inst# 0 - Marking Package Required 54
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 54 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 55 weight 10
+DepSelector inst# 0 - Marking Package Required 55
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 55 [ 0, 4 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 56 weight 10
+DepSelector inst# 0 - Marking Package Required 56
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 56 [ 0, 3 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 57 weight 10
+DepSelector inst# 0 - Marking Package Required 57
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 57 [ 0, 5 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 57 weight 10
+DepSelector inst# 0 - Marking Package Required 57
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 57 [ 0, 5 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 67 weight 10
+DepSelector inst# 0 - Marking Package Required 67
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 67 [ 0, 7 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 68 weight 10
+DepSelector inst# 0 - Marking Package Required 68
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 68 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 69 weight 10
+DepSelector inst# 0 - Marking Package Required 69
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 69 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 69 weight 10
+DepSelector inst# 0 - Marking Package Required 69
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 69 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 70 weight 10
+DepSelector inst# 0 - Marking Package Required 70
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 70 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 72 weight 10
+DepSelector inst# 0 - Marking Package Required 72
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 72 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 73 weight 10
+DepSelector inst# 0 - Marking Package Required 73
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 73 [ 0, 11 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 74 weight 10
+DepSelector inst# 0 - Marking Package Required 74
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 74 [ 0, 7 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 78 weight 10
+DepSelector inst# 0 - Marking Package Required 78
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 78 [ 0, 4 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 79 weight 10
+DepSelector inst# 0 - Marking Package Required 79
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 79 [ 0, 2 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 80 weight 10
+DepSelector inst# 0 - Marking Package Required 80
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 80 [ 0, 1 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 75 weight 10
+DepSelector inst# 0 - Marking Package Required 75
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 75 [ 0, 32 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 75 weight 10
+DepSelector inst# 0 - Marking Package Required 75
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 75 [ 0, 32 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 81 weight 10
+DepSelector inst# 0 - Marking Package Required 81
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 81 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 81 weight 10
+DepSelector inst# 0 - Marking Package Required 81
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 81 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 82 weight 10
+DepSelector inst# 0 - Marking Package Required 82
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 82 [ 0, 0 ]
+DepSelector inst# 0 - Marking Package Preferred Latest 75 weight 10
+DepSelector inst# 0 - Marking Package Required 75
+DepSelector inst# 0 - Adding VC for 83 @ 0 depPkg 75 [ 0, 32 ] \ No newline at end of file
diff --git a/test/data/log-ea2d264b-003e-4611-94ed-14efc7732083.txt b/test/data/log-ea2d264b-003e-4611-94ed-14efc7732083.txt
new file mode 100644
index 0000000..5a9e0ff
--- /dev/null
+++ b/test/data/log-ea2d264b-003e-4611-94ed-14efc7732083.txt
@@ -0,0 +1,74 @@
+Creating VersionProblem inst# 4477 with 20 packages, 1 stats, 1 debug
+DepSelector inst# 4477 - Adding package id 0/20: min = -1, max = 1, current version 0
+DepSelector inst# 4477 - Adding package id 1/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding package id 2/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding package id 3/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding package id 4/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding package id 5/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding package id 6/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding package id 7/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding VC for 6 @ 0 depPkg 7 [ 0, 0 ]
+DepSelector inst# 4477 - Adding package id 8/20: min = -1, max = 2, current version 0
+DepSelector inst# 4477 - Adding package id 9/20: min = -1, max = 1, current version 0
+DepSelector inst# 4477 - Adding package id 10/20: min = -1, max = 1, current version 0
+DepSelector inst# 4477 - Adding package id 11/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding VC for 10 @ 1 depPkg 11 [ 0, 0 ]
+DepSelector inst# 4477 - Adding package id 12/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding VC for 10 @ 1 depPkg 12 [ 0, 0 ]
+DepSelector inst# 4477 - Adding VC for 10 @ 0 depPkg 11 [ 0, 0 ]
+DepSelector inst# 4477 - Adding package id 13/20: min = -1, max = 1, current version 0
+DepSelector inst# 4477 - Adding package id 14/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding package id 15/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding package id 16/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding package id 17/20: min = -1, max = 0, current version 0
+DepSelector inst# 4477 - Adding VC for 17 @ 0 depPkg 1 [ 0, 0 ]
+DepSelector inst# 4477 - Adding package id 18/20: min = -1, max = 1, current version 0
+DepSelector inst# 4477 - Adding package id 19/20: min = 0, max = 0, current version 0
+DepSelector inst# 4477 - Marking Package Preferred Latest 0 weight 10
+DepSelector inst# 4477 - Marking Package Required 0
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 0 [ 0, 1 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 1 weight 10
+DepSelector inst# 4477 - Marking Package Required 1
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 1 [ 0, 0 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 2 weight 10
+DepSelector inst# 4477 - Marking Package Required 2
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 2 [ 0, 0 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 3 weight 10
+DepSelector inst# 4477 - Marking Package Required 3
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 3 [ 0, 0 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 4 weight 10
+DepSelector inst# 4477 - Marking Package Required 4
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 4 [ 0, 0 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 5 weight 10
+DepSelector inst# 4477 - Marking Package Required 5
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 5 [ 0, 0 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 6 weight 10
+DepSelector inst# 4477 - Marking Package Required 6
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 6 [ 0, 0 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 8 weight 10
+DepSelector inst# 4477 - Marking Package Required 8
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 8 [ 0, 2 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 9 weight 10
+DepSelector inst# 4477 - Marking Package Required 9
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 9 [ 0, 1 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 10 weight 10
+DepSelector inst# 4477 - Marking Package Required 10
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 10 [ 0, 1 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 13 weight 10
+DepSelector inst# 4477 - Marking Package Required 13
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 13 [ 0, 1 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 14 weight 10
+DepSelector inst# 4477 - Marking Package Required 14
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 14 [ 0, 0 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 15 weight 10
+DepSelector inst# 4477 - Marking Package Required 15
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 15 [ 0, 0 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 16 weight 10
+DepSelector inst# 4477 - Marking Package Required 16
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 16 [ 0, 0 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 17 weight 10
+DepSelector inst# 4477 - Marking Package Required 17
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 17 [ 0, 0 ]
+DepSelector inst# 4477 - Marking Package Preferred Latest 18 weight 10
+DepSelector inst# 4477 - Marking Package Required 18
+DepSelector inst# 4477 - Adding VC for 19 @ 0 depPkg 18 [ 0, 0 ] \ No newline at end of file
diff --git a/test/rcl_depsolver_tester.erl b/test/rcl_depsolver_tester.erl
new file mode 100644
index 0000000..53f5ac0
--- /dev/null
+++ b/test/rcl_depsolver_tester.erl
@@ -0,0 +1,474 @@
+%% -*- erlang-indent-level: 4; indent-tabs-mode: nil; fill-column: 92 -*-
+%% ex: ts=4 sx=4 et
+%%-------------------------------------------------------------------
+%%
+%% Copyright 2012 Opscode, Inc. All Rights Reserved.
+%%
+%% This file is provided to you under the Apache License,
+%% Version 2.0 (the "License"); you may not use this file
+%% except in compliance with the License. You may obtain
+%% a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing,
+%% software distributed under the License is distributed on an
+%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+%% KIND, either express or implied. See the License for the
+%% specific language governing permissions and limitations
+%% under the License.
+%%
+%% @author Eric Merritt <[email protected]>
+%% @doc
+%% Additional testing for depsolver
+%% @end
+%%-------------------------------------------------------------------
+-module(rcl_depsolver_tester).
+
+-export([run_data/1, run_log/1]).
+-include_lib("eunit/include/eunit.hrl").
+
+-define(ADD_PKG, "^DepSelector\\sinst#\\s(\\d+)\\s-\\s"
+ "Adding\\spackage\\sid\\s(\\d+)\\/(\\d+):\\smin\\s=\\s-1,"
+ "\\smax\\s=\\s(\\d+),\\scurrent\\sversion\\s0$").
+-define(ADD_VC, "^DepSelector\\sinst#\\s(\\d+)\\s-\\sAdding\\sVC\\s"
+ "for\\s(\\d+)\\s@\\s(\\d+)\\sdepPkg\\s(\\d+)\\s\\[\\s(\\d+)"
+ "\\s(\\d+)\\s\\]$").
+-define(ADD_GOAL, "^DepSelector\\sinst#\\s(\\d+)\\s-\\s"
+ "Marking\\sPackage\\sRequired\\s(\\d+)$").
+
+%%============================================================================
+%% Public Api
+%%============================================================================
+run_data(FileName) ->
+ {ok, Device} = file:open(FileName, [read]),
+ run_data_file(Device).
+
+run_log(FileName) ->
+ {ok, Device} = file:open(FileName, [read]),
+ run_log_file(Device).
+
+data1_test() ->
+ ExpectedResult = versionify([{"app6","0.0.1"},
+ {"dep_pkg13","0.0.2"},
+ {"app13","0.0.1"},
+ {"dep_pkg2","0.0.5"},
+ {"dep_pkg1","0.0.2"},
+ {"dep_pkg7","0.1.2"},
+ {"app9","0.0.1"}]),
+ ?assertMatch({ok, ExpectedResult},
+ run_data(fix_rebar_brokenness("data1.txt"))).
+
+data2_test() ->
+ ExpectedResult = versionify([{"app18","0.0.1"},
+ {"app4","0.0.1"},
+ {"app1","0.0.1"},
+ {"app6","0.0.1"},
+ {"dep_pkg13","0.0.2"},
+ {"app13","0.0.1"},
+ {"dep_pkg5","0.0.2"},
+ {"dep_pkg1","0.0.2"},
+ {"dep_pkg2","0.0.5"},
+ {"dep_pkg7","0.1.2"},
+ {"app9","0.0.1"},
+ {"dep_pkg16","1.0.2"}]),
+ ?assertMatch({ok, ExpectedResult},
+ run_data(fix_rebar_brokenness("data2.txt"))).
+
+data3_test() ->
+ ExpectedResult = versionify([{"app68","0.0.1"},
+ {"app58","0.0.1"},
+ {"app48","0.0.7"},
+ {"app38","0.0.1"},
+ {"app28","0.0.1"},
+ {"app18","0.0.1"},
+ {"app4","0.0.1"},
+ {"app1","0.0.1"},
+ {"app6","0.0.1"},
+ {"dep_pkg13","0.0.2"},
+ {"app13","0.0.1"},
+ {"dep_pkg5","0.0.2"},
+ {"dep_pkg1","0.0.2"},
+ {"dep_pkg2","0.0.5"},
+ {"dep_pkg7","0.1.2"},
+ {"app9","0.0.1"},
+ {"dep_pkg16","1.0.2"}]),
+ ?assertMatch({ok,ExpectedResult}, run_data(fix_rebar_brokenness("data3.txt"))).
+
+data4_test() ->
+ ExpectedResult = versionify([{"dep_pkg20","0.0.2"},
+ {"app78","0.0.1"},
+ {"app68","0.0.1"},
+ {"app58","0.0.1"},
+ {"app48","0.0.7"},
+ {"app38","0.0.1"},
+ {"app28","0.0.1"},
+ {"app18","0.0.1"},
+ {"app4","0.0.1"},
+ {"app1","0.0.1"},
+ {"app6","0.0.1"},
+ {"dep_pkg13","0.0.2"},
+ {"app13","0.0.1"},
+ {"dep_pkg5","0.0.2"},
+ {"dep_pkg1","0.0.2"},
+ {"dep_pkg2","0.0.5"},
+ {"dep_pkg7","0.1.2"},
+ {"app9","0.0.1"},
+ {"dep_pkg16","1.0.2"}]),
+ ?assertMatch({ok, ExpectedResult},
+ run_data(fix_rebar_brokenness("data4.txt"))).
+
+data5_test() ->
+ ExpectedResult = versionify([{"dep_pkg14","0.0.2"},
+ {"dep_pkg22","0.0.2"},
+ {"dep_pkg20","0.0.2"},
+ {"app78","0.0.1"},
+ {"app68","0.0.1"},
+ {"app58","0.0.1"},
+ {"app48","0.0.7"},
+ {"app38","0.0.1"},
+ {"app28","0.0.1"},
+ {"app18","0.0.1"},
+ {"app4","0.0.1"},
+ {"app1","0.0.1"},
+ {"app6","0.0.1"},
+ {"dep_pkg13","0.0.2"},
+ {"app13","0.0.1"},
+ {"dep_pkg5","0.0.2"},
+ {"dep_pkg1","0.0.2"},
+ {"dep_pkg2","0.0.5"},
+ {"dep_pkg7","0.1.2"},
+ {"app9","0.0.1"},
+ {"dep_pkg16","1.0.2"}]),
+ ?assertMatch({ok, ExpectedResult},
+ run_data(fix_rebar_brokenness("data5.txt"))).
+
+data6_test() ->
+ ExpectedResult = versionify([{"app108","0.0.1"},
+ {"app98","0.0.1"},
+ {"app88","0.0.1"},
+ {"dep_pkg14","0.0.2"},
+ {"dep_pkg22","0.0.2"},
+ {"dep_pkg20","0.0.2"},
+ {"app78","0.0.1"},
+ {"app68","0.0.1"},
+ {"app58","0.0.1"},
+ {"app48","0.0.7"},
+ {"app38","0.0.1"},
+ {"app28","0.0.1"},
+ {"app18","0.0.1"},
+ {"app4","0.0.1"},
+ {"app1","0.0.1"},
+ {"app6","0.0.1"},
+ {"dep_pkg13","0.0.2"},
+ {"app13","0.0.1"},
+ {"dep_pkg5","0.0.2"},
+ {"dep_pkg1","0.0.2"},
+ {"dep_pkg2","0.0.5"},
+ {"dep_pkg7","0.1.2"},
+ {"app9","0.0.1"},
+ {"dep_pkg16","1.0.2"}]),
+ ?assertMatch({ok, ExpectedResult},
+ run_data(fix_rebar_brokenness("data6.txt"))).
+
+log_07be9e47_test() ->
+ Data = run_log(fix_rebar_brokenness("log-07be9e47-6f42-4a5d-b8b5-1d2eae1ad83b.txt")),
+ ExpectedResult = versionify([{"0","0"},
+ {"1","0"},
+ {"3","0"},
+ {"4","0"},
+ {"5","0"},
+ {"6","0"},
+ {"7","0"},
+ {"8","0"},
+ {"9","0"},
+ {"10","0"},
+ {"11","0"},
+ {"12","0"},
+ {"13","0"},
+ {"14","0"},
+ {"15","0"},
+ {"16","0"},
+ {"18","0"},
+ {"19","0"},
+ {"21","0"},
+ {"22","0"},
+ {"23","0"},
+ {"24","0"},
+ {"25","0"}]),
+ ?assertMatch({ok, ExpectedResult},
+ Data).
+
+log_183998c1_test() ->
+ ?assertMatch({error, {unreachable_package,<<"9">>}},
+ run_log(fix_rebar_brokenness("log-183998c1-2ada-4214-b308-e480345c42f2.txt"))).
+
+
+log_311a15e7_test() ->
+ {ok, Data} = run_log(fix_rebar_brokenness("log-311a15e7-3378-4c5b-beb7-86a1b9cf0ea9.txt")),
+ ExpectedResult = lists:sort(versionify([{"45", "22"},
+ {"40","1"},
+ {"3","5"},
+ {"9","0"},
+ {"8","0"},
+ {"7","0"},
+ {"6","2"},
+ {"1","5"},
+ {"0","2"},
+ {"61","1"},
+ {"60","0"},
+ {"35","4"},
+ {"39","0"},
+ {"38","2"},
+ {"37","2"},
+ {"36","3"},
+ {"32","24"},
+ {"30","0"},
+ {"19","1"},
+ {"18","0"},
+ {"17","2"},
+ {"16","0"},
+ {"15","0"},
+ {"14","1"},
+ {"13","0"},
+ {"12","1"},
+ {"11","0"},
+ {"10","1"},
+ {"59","0"},
+ {"58","1"},
+ {"57","0"},
+ {"56","0"},
+ {"55","4"},
+ {"29","2"},
+ {"27","2"},
+ {"26","0"},
+ {"25","5"},
+ {"24","3"},
+ {"23","1"},
+ {"22","3"},
+ {"21","2"},
+ {"20","0"}])),
+ ?assertMatch(ExpectedResult, lists:sort(Data)).
+
+log_382cfe5b_test() ->
+ {ok, Data} =
+ run_log(fix_rebar_brokenness("log-382cfe5b-0ac2-48b8-83d1-717cb4620990.txt")),
+ ExpectedResult = lists:sort(versionify([{"18","0"},
+ {"17","0"},
+ {"15","1"},
+ {"14","0"},
+ {"10","0"},
+ {"7","0"},
+ {"6","0"},
+ {"5","0"},
+ {"4","0"},
+ {"3","0"},
+ {"2","1"},
+ {"1","0"},
+ {"0","0"}])),
+ ?assertMatch(ExpectedResult, lists:sort(Data)).
+
+log_d3564ef6_test() ->
+ {ok, Data} = run_log(fix_rebar_brokenness("log-d3564ef6-6437-41e7-90b6-dbdb849551a6_mod.txt")),
+ ExpectedResult = lists:sort(versionify([{"57","5"},
+ {"56","3"},
+ {"55","4"},
+ {"54","0"},
+ {"53","1"},
+ {"82","0"},
+ {"81","0"},
+ {"80","1"},
+ {"29","0"},
+ {"28","5"},
+ {"27","3"},
+ {"26","1"},
+ {"25","3"},
+ {"24","2"},
+ {"23","0"},
+ {"22","1"},
+ {"21","0"},
+ {"20","2"},
+ {"75","32"},
+ {"79","2"},
+ {"78","4"},
+ {"74","7"},
+ {"73","11"},
+ {"72","0"},
+ {"70","1"},
+ {"47","4"},
+ {"45","1"},
+ {"44","1"},
+ {"43","7"},
+ {"42","1"},
+ {"41","2"},
+ {"40","2"},
+ {"19","0"},
+ {"18","0"},
+ {"17","1"},
+ {"16","0"},
+ {"15","1"},
+ {"14","0"},
+ {"13","1"},
+ {"12","0"},
+ {"11","0"},
+ {"10","0"},
+ {"9","2"},
+ {"4","5"},
+ {"3","2"},
+ {"0","3"},
+ {"69","0"},
+ {"68","1"},
+ {"67","7"},
+ {"39","3"},
+ {"35","24"},
+ {"33","0"},
+ {"32","2"},
+ {"30","2"}])),
+ ?assertMatch(ExpectedResult, lists:sort(Data)).
+
+log_ea2d264b_test() ->
+ {ok, Data} = run_log(fix_rebar_brokenness("log-ea2d264b-003e-4611-94ed-14efc7732083.txt")),
+ ExpectedResult = lists:sort(versionify([{"18","1"},
+ {"17","0"},
+ {"16","0"},
+ {"15","0"},
+ {"14","0"},
+ {"13","1"},
+ {"10","1"},
+ {"9","1"},
+ {"8","2"},
+ {"6","0"},
+ {"5","0"},
+ {"4","0"},
+ {"3","0"},
+ {"2","0"},
+ {"1","0"},
+ {"0","1"}])),
+ ?assertMatch(ExpectedResult, lists:sort(Data)).
+
+%%============================================================================
+%% Internal Functions
+%%============================================================================
+versionify(X) when erlang:is_list(X) ->
+ lists:map(fun versionify/1, X);
+versionify({K, V}) ->
+ {erlang:list_to_binary(K), rcl_depsolver:parse_version(V)}.
+
+fix_rebar_brokenness(Filename) ->
+ Alt1 = filename:join(["./test", "data", Filename]),
+ Alt2 = filename:join(["../test", "data", Filename]),
+ case filelib:is_regular(Alt1) of
+ true ->
+ Alt1;
+ false ->
+ case filelib:is_regular(Alt2) of
+ true ->
+ Alt2;
+ false ->
+ io:format("~p~n", [Alt2]),
+ erlang:throw(unable_to_find_data_files)
+ end
+ end.
+
+run_data_file(Device) ->
+ Constraints = get_constraints(io:get_line(Device, "")),
+ rcl_depsolver:solve(process_packages(read_packages(Device)), Constraints).
+
+goble_lines(_Device, eof, Acc) ->
+ lists:reverse(Acc);
+goble_lines(_Device, {error, Err}, _Acc) ->
+ erlang:throw(Err);
+goble_lines(Device, ValidVal, Acc) ->
+ goble_lines(Device, io:get_line(Device, ""), [ValidVal | Acc]).
+
+goble_lines(Device) ->
+ goble_lines(Device, io:get_line(Device, ""), []).
+
+run_log_file(Device) ->
+ State0 = rcl_depsolver:new_graph(),
+ {Goals, State2} =
+ lists:foldl(fun(Line, Data) ->
+ process_add_goal(Line,
+ process_add_constraint(Line,
+ process_add_package(Line, Data)))
+ end, {[], State0}, goble_lines(Device)),
+ rcl_depsolver:solve(State2, Goals).
+
+read_packages(Device) ->
+ process_line(Device, io:get_line(Device, ""), []).
+
+process_line(Device, eof, Acc) ->
+ file:close(Device),
+ Acc;
+process_line(Device, [], Acc) ->
+ process_line(Device, io:get_line(Device, ""),
+ Acc);
+process_line(Device, "\n", Acc) ->
+ process_line(Device, io:get_line(Device, ""),
+ Acc);
+process_line(Device, [$\s | Rest], [{Pkg, Vsn, Deps} | Acc]) ->
+ [DepPackage, Type, DepVsn] = string:tokens(Rest, " \n"),
+ Dep =
+ case Type of
+ "=" ->
+ {DepPackage, DepVsn};
+ ">=" ->
+ {DepPackage, DepVsn, gte}
+ end,
+ process_line(Device, io:get_line(Device, ""),
+ [{Pkg, Vsn, [Dep | Deps]} | Acc]);
+process_line(Device, Pkg, Acc) ->
+ [Package, Vsn] = string:tokens(Pkg, " \n"),
+ process_line(Device, io:get_line(Device, ""),
+ [{Package, Vsn, []} | Acc]).
+
+process_packages(Pkgs) ->
+ lists:foldl(fun({Pkg, Vsn, Constraints}, Dom0) ->
+ rcl_depsolver:add_package_version(Dom0, Pkg, Vsn, Constraints)
+ end, rcl_depsolver:new_graph(), Pkgs).
+
+get_constraints(ConLine) ->
+ AppVsns = string:tokens(ConLine, " \n"),
+ lists:map(fun(AppCon) ->
+ parse_app(AppCon, [])
+ end, AppVsns).
+parse_app([$= | Rest], Acc) ->
+ {lists:reverse(Acc), Rest};
+parse_app([$>, $= | Rest], Acc) ->
+ {lists:reverse(Acc), Rest, gte};
+parse_app([Else | Rest], Acc) ->
+ parse_app(Rest, [Else | Acc]);
+parse_app([], Acc) ->
+ lists:reverse(Acc).
+
+process_add_package(Line, {Goals, State0}) ->
+ case re:run(Line, ?ADD_PKG, [{capture, all, list}]) of
+ {match, [_All, _InstNumber, PkgName, _PkgCount, VersionCount]} ->
+ {Goals,
+ lists:foldl(fun(PkgVsn, State1) ->
+ rcl_depsolver:add_package_version(State1,
+ PkgName,
+ erlang:integer_to_list(PkgVsn),
+ [])
+ end, State0, lists:seq(0,
+ erlang:list_to_integer(VersionCount)))};
+ _ ->
+ {Goals, State0}
+ end.
+
+process_add_constraint(Line, {Goals, State0}) ->
+ case re:run(Line, ?ADD_VC, [{capture, all, list}]) of
+ {match, [_All, _InstNumber, Pkg, Vsn, Dep, _Ignore, DepVsn]} ->
+ {Goals,
+ rcl_depsolver:add_package_version(State0, Pkg, Vsn, [{Dep, DepVsn}])};
+ _ ->
+ {Goals, State0}
+ end.
+
+process_add_goal(Line, {Goals, State0}) ->
+ case re:run(Line, ?ADD_GOAL, [{capture, all, list}]) of
+ {match,[_All, _InstNumber, NewGoal]} ->
+ {[NewGoal | Goals], State0};
+ _ ->
+ {Goals, State0}
+ end.
diff --git a/test/rcl_depsolver_tests.erl b/test/rcl_depsolver_tests.erl
new file mode 100644
index 0000000..eae31a4
--- /dev/null
+++ b/test/rcl_depsolver_tests.erl
@@ -0,0 +1,495 @@
+%% -*- erlang-indent-level: 4; indent-tabs-mode: nil; fill-column: 80 -*-
+%% ex: ts=4 sx=4 et
+%%
+%%-------------------------------------------------------------------
+%% Copyright 2012 Opscode, Inc. All Rights Reserved.
+%%
+%% This file is provided to you under the Apache License,
+%% Version 2.0 (the "License"); you may not use this file
+%% except in compliance with the License. You may obtain
+%% a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing,
+%% software distributed under the License is distributed on an
+%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+%% KIND, either express or implied. See the License for the
+%% specific language governing permissions and limitations
+%% under the License.
+%%
+%% @author Eric Merritt <[email protected]>
+%%-------------------------------------------------------------------
+-module(rcl_depsolver_tests).
+
+-include_lib("eunit/include/eunit.hrl").
+
+%%============================================================================
+%% Tests
+%%============================================================================
+
+first_test() ->
+ Dom0 = rcl_depsolver:add_packages(rcl_depsolver:new_graph(), [{app1, [{"0.1", [{app2, "0.2+build.33"},
+ {app3, "0.2", '>='}]},
+ {"0.2", []},
+ {"0.3", []}]},
+ {app2, [{"0.1", []},
+ {"0.2+build.33",[{app3, "0.3"}]},
+ {"0.3", []}]},
+ {app3, [{"0.1", []},
+ {"0.2", []},
+ {"0.3", []}]}]),
+
+
+ case rcl_depsolver:solve(Dom0, [{app1, "0.1"}]) of
+ {ok,[{app3,{{0,3},{[],[]}}},
+ {app2,{{0,2},{[],[<<"build">>,33]}}},
+ {app1,{{0,1},{[],[]}}}]} ->
+ ok;
+ E ->
+ erlang:throw({invalid_result, E})
+ end.
+
+second_test() ->
+
+ Dom0 = rcl_depsolver:add_packages(rcl_depsolver:new_graph(), [{app1, [{"0.1", [{app2, "0.1", '>='},
+ {app4, "0.2"},
+ {app3, "0.2", '>='}]},
+ {"0.2", []},
+ {"0.3", []}]},
+ {app2, [{"0.1", [{app3, "0.2", gte}]},
+ {"0.2", [{app3, "0.2", gte}]},
+ {"0.3", [{app3, "0.2", '>='}]}]},
+ {app3, [{"0.1", [{app4, "0.2", '>='}]},
+ {"0.2", [{app4, "0.2"}]},
+ {"0.3", []}]},
+ {app4, [{"0.1", []},
+ {"0.2", [{app2, "0.2", gte},
+ {app3, "0.3"}]},
+ {"0.3", []}]}]),
+
+ X = rcl_depsolver:solve(Dom0, [{app1, "0.1"},
+ {app2, "0.3"}]),
+
+ ?assertMatch({ok, [{app3,{{0,3},{[],[]}}},
+ {app2,{{0,3},{[],[]}}},
+ {app4,{{0,2},{[],[]}}},
+ {app1,{{0,1},{[],[]}}}]},
+ X).
+
+third_test() ->
+
+ Pkg1Deps = [{app2, "0.1.0", '>='},
+ {app3, "0.1.1", "0.1.5", between}],
+
+ Pkg2Deps = [{app4, "5.0.0", gte}],
+ Pkg3Deps = [{app5, "2.0.0", '>='}],
+ Pkg4Deps = [app5],
+
+ Dom0 = rcl_depsolver:add_packages(rcl_depsolver:new_graph(), [{app1, [{"0.1.0", Pkg1Deps},
+ {"0.2", Pkg1Deps},
+ {"3.0", Pkg1Deps}]},
+ {app2, [{"0.0.1", Pkg2Deps},
+ {"0.1", Pkg2Deps},
+ {"1.0", Pkg2Deps},
+ {"3.0", Pkg2Deps}]},
+ {app3, [{"0.1.0", Pkg3Deps},
+ {"0.1.3", Pkg3Deps},
+ {"2.0.0", Pkg3Deps},
+ {"3.0.0", Pkg3Deps},
+ {"4.0.0", Pkg3Deps}]},
+ {app4, [{"0.1.0", Pkg4Deps},
+ {"0.3.0", Pkg4Deps},
+ {"5.0.0", Pkg4Deps},
+ {"6.0.0", Pkg4Deps}]},
+ {app5, [{"0.1.0", []},
+ {"0.3.0", []},
+ {"2.0.0", []},
+ {"6.0.0", []}]}]),
+
+ ?assertMatch({ok, [{app5,{{6,0,0},{[],[]}}},
+ {app3,{{0,1,3},{[],[]}}},
+ {app4,{{6,0,0},{[],[]}}},
+ {app2,{{3,0},{[],[]}}},
+ {app1,{{3,0},{[],[]}}}]},
+ rcl_depsolver:solve(Dom0, [{app1, "3.0"}])),
+
+
+ ?assertMatch({ok, [{app5,{{6,0,0},{[],[]}}},
+ {app3,{{0,1,3},{[],[]}}},
+ {app4,{{6,0,0},{[],[]}}},
+ {app2,{{3,0},{[],[]}}},
+ {app1,{{3,0},{[],[]}}}]},
+ rcl_depsolver:solve(Dom0, [app1])).
+
+fail_test() ->
+ Dom0 = rcl_depsolver:add_packages(rcl_depsolver:new_graph(),
+ [{app1, [{"0.1", [{app2, "0.2"},
+ {app3, "0.2", gte}]},
+ {"0.2", []},
+ {"0.3", []}]},
+ {app2, [{"0.1", []},
+ {"0.2",[{app3, "0.1"}]},
+ {"0.3", []}]},
+ {app3, [{"0.1", []},
+ {"0.2", []},
+ {"0.3", []}]}]),
+
+ Ret = rcl_depsolver:solve(Dom0, [{app1, "0.1"}]),
+ %% We do this to make sure all errors can be formated.
+ _ = rcl_depsolver:format_error(Ret),
+ ?assertMatch({error,
+ [{[{[{app1,{{0,1},{[],[]}}}],
+ [{app1,{{0,1},{[],[]}}},[[{app2,{{0,2},{[],[]}}}]]]}],
+ [{{app2,{{0,2},{[],[]}}},[{app3,{{0,1},{[],[]}}}]},
+ {{app1,{{0,1},{[],[]}}},[{app3,{{0,2},{[],[]}},gte}]}]}]},
+ Ret).
+
+conflicting_passing_test() ->
+ Pkg1Deps = [{app2, "0.1.0", '>='},
+ {app5, "2.0.0"},
+ {app4, "0.3.0", "5.0.0", between},
+ {app3, "0.1.1", "0.1.5", between}],
+
+ Pkg2Deps = [{app4, "3.0.0", gte}],
+ Pkg3Deps = [{app5, "2.0.0", '>='}],
+
+ Dom0 = rcl_depsolver:add_packages(rcl_depsolver:new_graph(), [{app1, [{"0.1.0", Pkg1Deps},
+ {"0.1.0", Pkg1Deps},
+ {"0.2", Pkg1Deps},
+ {"3.0", Pkg1Deps}]},
+ {app2, [{"0.0.1", Pkg2Deps},
+ {"0.1", Pkg2Deps},
+ {"1.0", Pkg2Deps},
+ {"3.0", Pkg2Deps}]},
+ {app3, [{"0.1.0", Pkg3Deps},
+ {"0.1.3", Pkg3Deps},
+ {"2.0.0", Pkg3Deps},
+ {"3.0.0", Pkg3Deps},
+ {"4.0.0", Pkg3Deps}]},
+ {app4, [{"0.1.0", [{app5, "0.1.0"}]},
+ {"0.3.0", [{app5, "0.3.0"}]},
+ {"5.0.0", [{app5, "2.0.0"}]},
+ {"6.0.0", [{app5, "6.0.0"}]}]},
+ {app5, [{"0.1.0", []},
+ {"0.3.0", []},
+ {"2.0.0", []},
+ {"6.0.0", []}]}]),
+
+ ?assertMatch({ok, [{app5,{{2,0,0},{[],[]}}},
+ {app3,{{0,1,3},{[],[]}}},
+ {app4,{{5,0,0},{[],[]}}},
+ {app2,{{3,0},{[],[]}}},
+ {app1,{{3,0},{[],[]}}}]},
+ rcl_depsolver:solve(Dom0, [{app1, "3.0"}])),
+
+ ?assertMatch({ok, [{app5,{{2,0,0},{[],[]}}},
+ {app3,{{0,1,3},{[],[]}}},
+ {app4,{{5,0,0},{[],[]}}},
+ {app2,{{3,0},{[],[]}}},
+ {app1,{{3,0},{[],[]}}}]},
+ rcl_depsolver:solve(Dom0, [app1, app2, app5])).
+
+
+
+circular_dependencies_test() ->
+ Dom0 = rcl_depsolver:add_packages(rcl_depsolver:new_graph(), [{app1, [{"0.1.0", [app2]}]},
+ {app2, [{"0.0.1", [app1]}]}]),
+
+ ?assertMatch({ok, [{app1,{{0,1,0},{[],[]}}},{app2,{{0,0,1},{[],[]}}}]},
+ rcl_depsolver:solve(Dom0, [{app1, "0.1.0"}])).
+
+conflicting_failing_test() ->
+ Pkg1Deps = [app2,
+ {app5, "2.0.0", '='},
+ {app4, "0.3.0", "5.0.0", between}],
+
+ Pkg2Deps = [{app4, "5.0.0", gte}],
+ Pkg3Deps = [{app5, "6.0.0"}],
+
+
+ Dom0 = rcl_depsolver:add_packages(rcl_depsolver:new_graph(), [{app1, [{"3.0", Pkg1Deps}]},
+ {app2, [{"0.0.1", Pkg2Deps}]},
+ {app3, [{"0.1.0", Pkg3Deps}]},
+ {app4, [{"5.0.0", [{app5, "2.0.0"}]}]},
+ {app5, [{"2.0.0", []},
+ {"6.0.0", []}]}]),
+ Ret = rcl_depsolver:solve(Dom0, [app1, app3]),
+ _ = rcl_depsolver:format_error(Ret),
+ ?assertMatch({error,
+ [{[{[app1],
+ [{app1,{{3,0},{[],[]}}},
+ [[{app4,{{5,0,0},{[],[]}}}],
+ [{app2,{{0,0,1},{[],[]}}},[[{app4,{{5,0,0},{[],[]}}}]]]]]},
+ {[app3],
+ [{app3,{{0,1,0},{[],[]}}},[[{app5,{{6,0,0},{[],[]}}}]]]}],
+ [{{app4,{{5,0,0},{[],[]}}},[{app5,{{2,0,0},{[],[]}}}]},
+ {{app1,{{3,0},{[],[]}}},[{app5,{{2,0,0},{[],[]}},'='}]}]}]},
+ Ret).
+
+
+pessimistic_major_minor_patch_test() ->
+
+ Pkg1Deps = [{app2, "2.1.1", '~>'},
+ {app3, "0.1.1", "0.1.5", between}],
+
+ Pkg2Deps = [{app4, "5.0.0", gte}],
+ Pkg3Deps = [{app5, "2.0.0", '>='}],
+ Pkg4Deps = [app5],
+
+ Dom0 = rcl_depsolver:add_packages(rcl_depsolver:new_graph(), [{app1, [{"0.1.0", Pkg1Deps},
+ {"0.2", Pkg1Deps},
+ {"3.0", Pkg1Deps}]},
+ {app2, [{"0.0.1", Pkg2Deps},
+ {"0.1", Pkg2Deps},
+ {"1.0", Pkg2Deps},
+ {"2.1.5", Pkg2Deps},
+ {"2.2", Pkg2Deps},
+ {"3.0", Pkg2Deps}]},
+ {app3, [{"0.1.0", Pkg3Deps},
+ {"0.1.3", Pkg3Deps},
+ {"2.0.0", Pkg3Deps},
+ {"3.0.0", Pkg3Deps},
+ {"4.0.0", Pkg3Deps}]},
+ {app4, [{"0.1.0", Pkg4Deps},
+ {"0.3.0", Pkg4Deps},
+ {"5.0.0", Pkg4Deps},
+ {"6.0.0", Pkg4Deps}]},
+ {app5, [{"0.1.0", []},
+ {"0.3.0", []},
+ {"2.0.0", []},
+ {"6.0.0", []}]}]),
+ ?assertMatch({ok, [{app5,{{6,0,0},{[],[]}}},
+ {app3,{{0,1,3},{[],[]}}},
+ {app4,{{6,0,0},{[],[]}}},
+ {app2,{{2,1,5},{[],[]}}},
+ {app1,{{3,0},{[],[]}}}]},
+ rcl_depsolver:solve(Dom0, [{app1, "3.0"}])).
+
+pessimistic_major_minor_test() ->
+
+ Pkg1Deps = [{app2, "2.1", '~>'},
+ {app3, "0.1.1", "0.1.5", between}],
+
+ Pkg2Deps = [{app4, "5.0.0", gte}],
+ Pkg3Deps = [{app5, "2.0.0", '>='}],
+ Pkg4Deps = [app5],
+
+ Dom0 = rcl_depsolver:add_packages(rcl_depsolver:new_graph(), [{app1, [{"0.1.0", Pkg1Deps},
+ {"0.2", Pkg1Deps},
+ {"3.0", Pkg1Deps}]},
+ {app2, [{"0.0.1", Pkg2Deps},
+ {"0.1", Pkg2Deps},
+ {"1.0", Pkg2Deps},
+ {"2.1.5", Pkg2Deps},
+ {"2.2", Pkg2Deps},
+ {"3.0", Pkg2Deps}]},
+ {app3, [{"0.1.0", Pkg3Deps},
+ {"0.1.3", Pkg3Deps},
+ {"2.0.0", Pkg3Deps},
+ {"3.0.0", Pkg3Deps},
+ {"4.0.0", Pkg3Deps}]},
+ {app4, [{"0.1.0", Pkg4Deps},
+ {"0.3.0", Pkg4Deps},
+ {"5.0.0", Pkg4Deps},
+ {"6.0.0", Pkg4Deps}]},
+ {app5, [{"0.1.0", []},
+ {"0.3.0", []},
+ {"2.0.0", []},
+ {"6.0.0", []}]}]),
+ ?assertMatch({ok, [{app5,{{6,0,0},{[],[]}}},
+ {app3,{{0,1,3},{[],[]}}},
+ {app4,{{6,0,0},{[],[]}}},
+ {app2,{{2,2},{[],[]}}},
+ {app1,{{3,0},{[],[]}}}]},
+ rcl_depsolver:solve(Dom0, [{app1, "3.0"}])).
+
+filter_versions_test() ->
+
+ Cons = [{app2, "2.1", '~>'},
+ {app3, "0.1.1", "0.1.5", between},
+ {app4, "5.0.0", gte},
+ {app5, "2.0.0", '>='},
+ app5],
+
+ Packages = [{app1, "0.1.0"},
+ {app1, "0.2"},
+ {app1, "0.2"},
+ {app1, "3.0"},
+ {app2, "0.0.1"},
+ {app2, "0.1"},
+ {app2, "1.0"},
+ {app2, "2.1.5"},
+ {app2, "2.2"},
+ {app2, "3.0"},
+ {app3, "0.1.0"},
+ {app3, "0.1.3"},
+ {app3, "2.0.0"},
+ {app3, "3.0.0"},
+ {app3, "4.0.0"},
+ {app4, "0.1.0"},
+ {app4, "0.3.0"},
+ {app4, "5.0.0"},
+ {app4, "6.0.0"},
+ {app5, "0.1.0"},
+ {app5, "0.3.0"},
+ {app5, "2.0.0"},
+ {app5, "6.0.0"}],
+
+ ?assertMatch({ok, [{app1,"0.1.0"},
+ {app1,"0.2"},
+ {app1,"0.2"},
+ {app1,"3.0"},
+ {app2,"2.1.5"},
+ {app2,"2.2"},
+ {app3,"0.1.3"},
+ {app4,"5.0.0"},
+ {app4,"6.0.0"},
+ {app5,"2.0.0"},
+ {app5,"6.0.0"}]},
+ rcl_depsolver:filter_packages(Packages, Cons)),
+
+ Ret = rcl_depsolver:filter_packages(Packages,
+ [{"foo", "1.0.0", '~~~~'} | Cons]),
+ _ = rcl_depsolver:format_error(Ret),
+ ?assertMatch({error, {invalid_constraints, [{<<"foo">>,{{1,0,0},{[],[]}},'~~~~'}]}}, Ret).
+
+
+-spec missing_test() -> ok.
+missing_test() ->
+
+ Dom0 = rcl_depsolver:add_packages(rcl_depsolver:new_graph(), [{app1, [{"0.1", [{app2, "0.2"},
+ {app3, "0.2", '>='},
+ {app4, "0.2", '='}]},
+ {"0.2", [{app4, "0.2"}]},
+ {"0.3", [{app4, "0.2", '='}]}]},
+ {app2, [{"0.1", []},
+ {"0.2",[{app3, "0.3"}]},
+ {"0.3", []}]},
+ {app3, [{"0.1", []},
+ {"0.2", []},
+ {"0.3", []}]}]),
+ Ret1 = rcl_depsolver:solve(Dom0, [{app4, "0.1"}, {app3, "0.1"}]),
+ _ = rcl_depsolver:format_error(Ret1),
+ ?assertMatch({error,{unreachable_package,app4}}, Ret1),
+
+ Ret2 = rcl_depsolver:solve(Dom0, [{app1, "0.1"}]),
+ _ = rcl_depsolver:format_error(Ret2),
+ ?assertMatch({error,{unreachable_package,app4}},
+ Ret2).
+
+
+binary_test() ->
+
+ World = [{<<"foo">>, [{<<"1.2.3">>, [{<<"bar">>, <<"2.0.0">>, gt}]}]},
+ {<<"bar">>, [{<<"2.0.0">>, [{<<"foo">>, <<"3.0.0">>, gt}]}]}],
+ Ret = rcl_depsolver:solve(rcl_depsolver:add_packages(rcl_depsolver:new_graph(),
+ World),
+ [<<"foo">>]),
+
+ _ = rcl_depsolver:format_error(Ret),
+ ?assertMatch({error,
+ [{[{[<<"foo">>],[{<<"foo">>,{{1,2,3},{[],[]}}}]}],
+ [{{<<"foo">>,{{1,2,3},{[],[]}}},
+ [{<<"bar">>,{{2,0,0},{[],[]}},gt}]}]}]}, Ret).
+
+%%
+%% We don't have bar cookbook
+%%
+%% Ruby gives
+%% "message":"Unable to satisfy constraints on cookbook bar, which does not
+%% exist, due to run list item (foo >= 0.0.0). Run list items that may result
+%% in a constraint on bar: [(foo = 1.2.3) -> (bar > 2.0.0)]",
+%% "unsatisfiable_run_list_item":"(foo >= 0.0.0)",
+%% "non_existent_cookbooks":["bar"],"
+%% "most_constrained_cookbooks":[]}"
+%%
+doesnt_exist_test() ->
+ Constraints = [{<<"foo">>,[{<<"1.2.3">>, [{<<"bar">>, <<"2.0.0">>, gt}]}]}],
+ World = rcl_depsolver:add_packages(rcl_depsolver:new_graph(), Constraints),
+ Ret = rcl_depsolver:solve(World, [<<"foo">>]),
+ _ = rcl_depsolver:format_error(Ret),
+ ?assertMatch({error,{unreachable_package,<<"bar">>}}, Ret).
+
+%%
+%% We have v 2.0.0 of bar but want > 2.0.0
+%%
+%% Ruby gives
+%% "message":"Unable to satisfy constraints on cookbook bar due to run list item
+%% (foo >= 0.0.0). Run list items that may result in a constraint on bar: [(foo
+%% = 1.2.3) -> (bar > 2.0.0)]",
+%% "unsatisfiable_run_list_item":"(foo >= 0.0.0)",
+%% "non_existent_cookbooks":[],
+%% "most_constrained_cookbooks":["bar 2.0.0 -> []"]
+%%
+not_new_enough_test() ->
+
+ Constraints = [{<<"foo">>, [{<<"1.2.3">>, [{<<"bar">>, <<"2.0.0">>, gt}]}]},
+ {<<"bar">>, [{<<"2.0.0">>, []}]}],
+ World = rcl_depsolver:add_packages(rcl_depsolver:new_graph(), Constraints),
+ Ret = rcl_depsolver:solve(World, [<<"foo">>]),
+ _ = rcl_depsolver:format_error(Ret),
+ ?assertMatch({error,
+ [{[{[<<"foo">>],[{<<"foo">>,{{1,2,3},{[],[]}}}]}],
+ [{{<<"foo">>,{{1,2,3},{[],[]}}},
+ [{<<"bar">>,{{2,0,0},{[],[]}},gt}]}]}]}, Ret).
+
+%%
+%% circular deps are bad
+%%
+%% Ruby gives
+%% "message":"Unable to satisfy constraints on cookbook bar due to run list item (foo >= 0.0.0).
+%% Run list items that may result in a constraint on bar: [(foo = 1.2.3) -> (bar > 2.0.0)]",
+%% "unsatisfiable_run_list_item":"(foo >= 0.0.0)",
+%% "non_existent_cookbooks":[],
+%% "most_constrained_cookbooks:["bar = 2.0.0 -> [(foo > 3.0.0)]"]
+%%
+impossible_dependency_test() ->
+ World = rcl_depsolver:add_packages(rcl_depsolver:new_graph(),
+ [{<<"foo">>, [{<<"1.2.3">>,[{ <<"bar">>, <<"2.0.0">>, gt}]}]},
+ {<<"bar">>, [{<<"2.0.0">>, [{ <<"foo">>, <<"3.0.0">>, gt}]}]}]),
+ Ret = rcl_depsolver:solve(World, [<<"foo">>]),
+ _ = rcl_depsolver:format_error(Ret),
+ ?assertMatch({error,
+ [{[{[<<"foo">>],[{<<"foo">>,{{1,2,3},{[],[]}}}]}],
+ [{{<<"foo">>,{{1,2,3},{[],[]}}},
+ [{<<"bar">>,{{2,0,0},{[],[]}},gt}]}]}]}, Ret).
+
+%%
+%% Formatting tests
+%%
+format_test_() ->
+ [{"format constraint",
+ [equal_bin_string(<<"foo">>, rcl_depsolver:format_constraint(<<"foo">>)),
+ equal_bin_string(<<"foo">>, rcl_depsolver:format_constraint(foo)),
+ equal_bin_string(<<"(foo = 1.2.0)">>, rcl_depsolver:format_constraint({<<"foo">>, {{1,2,0}, {[], []}}})),
+ equal_bin_string(<<"(foo = 1.2.0)">>, rcl_depsolver:format_constraint({<<"foo">>, {{1,2,0}, {[], []}}, '='})),
+ equal_bin_string(<<"(foo > 1.2.0)">>,
+ rcl_depsolver:format_constraint({<<"foo">>, {{1,2,0}, {[], []}}, '>'})),
+ equal_bin_string(<<"(foo > 1.2.0)">>,
+ rcl_depsolver:format_constraint({<<"foo">>, {{1,2,0}, {[], []}}, gt})),
+ equal_bin_string(<<"(foo between 1.2.0 and 1.3.0)">>,
+ rcl_depsolver:format_constraint({<<"foo">>,{{1,2,0}, {[], []}},
+ {{1,3,0}, {[], []}}, between})),
+ equal_bin_string(<<"(foo > 1.2.0-alpha.1+build.36)">>,
+ rcl_depsolver:format_constraint({<<"foo">>,
+ {{1,2,0}, {["alpha", 1], ["build", 36]}}, gt}))
+ ]
+ },
+ {"format roots",
+ [equal_bin_string(<<"(bar = 1.2.0)">>,
+ rcl_depsolver:format_roots([ [{<<"bar">>, {{1,2,0},{[],[]}}}] ])),
+ equal_bin_string(<<"(bar = 1.2.0), foo">>,
+ rcl_depsolver:format_roots([[<<"foo">>,
+ {<<"bar">>, {{1,2,0},{[],[]}}}]])),
+ equal_bin_string(<<"(bar = 1.2.0), foo">>,
+ rcl_depsolver:format_roots([[<<"foo">>], [{<<"bar">>, {{1,2,0},{[],[]}}}]]))
+ ]
+ }
+ ].
+
+%%
+%% Internal functions
+%%
+equal_bin_string(Expected, Got) ->
+ ?_assertEqual(Expected, erlang:iolist_to_binary(Got)).