Fix default use match for implicit IUSE.

This will fix bug #453400, which was triggered by inconsistency
between the enabled USE and the effective missing_disabled set used
in matching logic, due to implicit IUSE.
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 7a96795..73ee3e9 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -4418,8 +4418,11 @@
 
 						use_match = True
 						can_adjust_use = not pkg.built
-						missing_enabled = atom.use.missing_enabled.difference(pkg.iuse.all)
-						missing_disabled = atom.use.missing_disabled.difference(pkg.iuse.all)
+						is_valid_flag = pkg.iuse.is_valid_flag
+						missing_enabled = frozenset(x for x in
+							atom.use.missing_enabled if not is_valid_flag(x))
+						missing_disabled = frozenset(x for x in
+							atom.use.missing_disabled if not is_valid_flag(x))
 
 						if atom.use.enabled:
 							if any(x in atom.use.enabled for x in missing_disabled):
diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index 5828bca..3540c6d 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -220,8 +220,12 @@
 			# data corruption).
 			use = frozenset(x for x in metadata["USE"].split()
 				if x in iuse or iuse_implicit_match(x))
-			missing_enabled = atom.use.missing_enabled.difference(iuse)
-			missing_disabled = atom.use.missing_disabled.difference(iuse)
+			missing_enabled = frozenset(x for x in
+				atom.use.missing_enabled if not
+				(x in iuse or iuse_implicit_match(x)))
+			missing_disabled = frozenset(x for x in
+				atom.use.missing_disabled if not
+				(x in iuse or iuse_implicit_match(x)))
 
 			if atom.use.enabled:
 				if any(x in atom.use.enabled for x in missing_disabled):
@@ -258,11 +262,15 @@
 
 			# Check unsatisfied use-default deps
 			if atom.use.enabled:
-				missing_disabled = atom.use.missing_disabled.difference(iuse)
+				missing_disabled = frozenset(x for x in
+					atom.use.missing_disabled if not
+					(x in iuse or iuse_implicit_match(x)))
 				if any(x in atom.use.enabled for x in missing_disabled):
 					return False
 			if atom.use.disabled:
-				missing_enabled = atom.use.missing_enabled.difference(iuse)
+				missing_enabled = frozenset(x for x in
+					atom.use.missing_enabled if not
+					(x in iuse or iuse_implicit_match(x)))
 				if any(x in atom.use.disabled for x in missing_enabled):
 					return False
 
diff --git a/pym/portage/dep/__init__.py b/pym/portage/dep/__init__.py
index 5117531..1edbab7 100644
--- a/pym/portage/dep/__init__.py
+++ b/pym/portage/dep/__init__.py
@@ -2282,9 +2282,11 @@
 					continue
 
 				if mydep.use:
-
-					missing_enabled = mydep.use.missing_enabled.difference(x.iuse.all)
-					missing_disabled = mydep.use.missing_disabled.difference(x.iuse.all)
+					is_valid_flag = x.iuse.is_valid_flag
+					missing_enabled = frozenset(flag for flag in
+						mydep.use.missing_enabled if not is_valid_flag(flag))
+					missing_disabled = frozenset(flag for flag in
+						mydep.use.missing_disabled if not is_valid_flag(flag))
 
 					if mydep.use.enabled:
 						if any(f in mydep.use.enabled for f in missing_disabled):