Program: 158015
Project: 158015
Buggy source:
@Override public boolean apply(Game game,Ability source){
  Player controller=game.getPlayer(source.getControllerId());
  Permanent enchantment=game.getPermanent(source.getSourceId());
  if (enchantment == null || controller == null || enchantment.getAttachedTo() == null) {
    return false;
  }
  Permanent creature=game.getPermanent(enchantment.getAttachedTo());
  if (creature == null) {
    return false;
  }
  Cards cards=new CardsImpl();
  cards.addAll(controller.getLibrary().getTopCards(game,5));
  controller.lookAtCards(enchantment.getIdName(),cards,game);
  FilterCreatureCard filter=new FilterCreatureCard();
  if (!creature.getAbilities().contains(ChangelingAbility.getInstance())) {
    StringBuilder sb=new StringBuilder("String_Node_Str");
    ArrayList<Predicate<MageObject>> subtypes=new ArrayList<>();
    for (    String subtype : creature.getSubtype(game)) {
      subtypes.add(new SubtypePredicate(subtype));
      sb.append(subtype).append("String_Node_Str");
    }
    filter.add(Predicates.or(subtypes));
    sb.delete(sb.length() - 2,sb.length());
    filter.setMessage(sb.toString());
  }
 else {
    filter.setMessage("String_Node_Str");
  }
  if (cards.count(filter,game) > 0 && controller.chooseUse(Outcome.DrawCard,"String_Node_Str",source,game)) {
    TargetCard target=new TargetCard(Zone.LIBRARY,filter);
    if (controller.choose(Outcome.PutCreatureInPlay,cards,target,game)) {
      Card card=cards.get(target.getFirstTarget(),game);
      if (card != null) {
        cards.remove(card);
        controller.moveCards(card,Zone.BATTLEFIELD,source,game);
      }
    }
  }
  controller.putCardsOnBottomOfLibrary(cards,game,source,true);
  return true;
}

Fixed version (ground truth):
@Override public boolean apply(Game game,Ability source){
  Player controller=game.getPlayer(source.getControllerId());
  Permanent enchantment=game.getPermanent(source.getSourceId());
  if (enchantment == null || controller == null || enchantment.getAttachedTo() == null) {
    return false;
  }
  Permanent creature=game.getPermanent(enchantment.getAttachedTo());
  if (creature == null) {
    return false;
  }
  Cards cards=new CardsImpl();
  cards.addAll(controller.getLibrary().getTopCards(game,5));
  controller.lookAtCards(enchantment.getIdName(),cards,game);
  FilterCreatureCard filter=new FilterCreatureCard();
  if (!creature.getAbilities().contains(ChangelingAbility.getInstance())) {
    StringBuilder sb=new StringBuilder("String_Node_Str");
    ArrayList<Predicate<MageObject>> subtypes=new ArrayList<>();
    for (    String subtype : creature.getSubtype(game)) {
      subtypes.add(new SubtypePredicate(SubType.byDescription(subtype)));
      sb.append(subtype).append("String_Node_Str");
    }
    filter.add(Predicates.or(subtypes));
    sb.delete(sb.length() - 2,sb.length());
    filter.setMessage(sb.toString());
  }
 else {
    filter.setMessage("String_Node_Str");
  }
  if (cards.count(filter,game) > 0 && controller.chooseUse(Outcome.DrawCard,"String_Node_Str",source,game)) {
    TargetCard target=new TargetCard(Zone.LIBRARY,filter);
    if (controller.choose(Outcome.PutCreatureInPlay,cards,target,game)) {
      Card card=cards.get(target.getFirstTarget(),game);
      if (card != null) {
        cards.remove(card);
        controller.moveCards(card,Zone.BATTLEFIELD,source,game);
      }
    }
  }
  controller.putCardsOnBottomOfLibrary(cards,game,source,true);
  return true;
}