code: public boolean implies(Permission p) {
          // By default only supports comparisons with other WildcardPermissions
          List<Set<String>> otherParts = p.getParts();
  
          int i = 0;
          for (Set<String> otherPart : otherParts) {
              // If this permission has less parts than the other permission, everything after the number of parts contained
              // in this permission is automatically implied, so return true
              if (getParts().size() - 1 < i) {
                  return true;
              } else {
                  Set<String> part = getParts().get(i);
                  if (!part.contains(WILDCARD_TOKEN) && !part.containsAll(otherPart)) {
                      return false;
                  }
                  i++;
              }
          }
  
          // If this permission has more parts than the other parts, only imply it if all of the other parts are wildcards
          for (; i < getParts().size(); i++) {
              Set<String> part = getParts().get(i);
              if (!part.contains(WILDCARD_TOKEN)) {
                  return false;
              }
          }
  
          return true;
      }
docs: Returns {@code true} if this current instance <em>implies</em> all the functionality and/or resource access
  described by the specified {@code Permission} argument, {@code false} otherwise.
  <p>
  <p>That is, this current instance must be exactly equal to or a <em>superset</em> of the functionalty
  and/or resource access described by the given {@code Permission} argument.  Yet another way of saying this
  would be:
  <p>
  <p>If &quot;permission1 implies permission2&quot;, i.e. <code>permission1.implies(permission2)</code> ,
  then any Subject granted {@code permission1} would have ability greater than or equal to that defined by
  {@code permission2}.
  
  @param p the permission to check for behavior/functionality comparison.
  @return {@code true} if this current instance <em>implies</em> all the functionality and/or resource access
  described by the specified {@code Permission} argument, {@code false} otherwise.