[CMR] added tokens support, added tokens download

This commit is contained in:
Oleg Agafonov 2020-12-19 21:42:12 +04:00
parent 92f9bc0c65
commit 9dd09c970a
34 changed files with 281 additions and 168 deletions

View file

@ -28,7 +28,9 @@ public class PermanentToken extends PermanentImpl {
// token's ZCC must be synced with original token to keep abilities settings
// Example: kicker ability and kicked status
this.setZoneChangeCounter(this.token.getZoneChangeCounter(game), game);
if (game != null) { // game == null in GUI for card viewer's tokens
this.setZoneChangeCounter(this.token.getZoneChangeCounter(game), game);
}
}
public PermanentToken(final PermanentToken permanent) {

View file

@ -19,7 +19,7 @@ public final class AngelToken extends TokenImpl {
addAbility(FlyingAbility.getInstance());
availableImageSetCodes = Arrays.asList("APC", "AVR", "C14", "C15", "C18", "CON", "DDQ", "GTC",
"ISD", "M14", "MM3", "NEM", "OGW", "ORI", "PC2", "SCG", "SOI", "ZEN", "C20", "M21");
"ISD", "M14", "MM3", "NEM", "OGW", "ORI", "PC2", "SCG", "SOI", "ZEN", "C20", "M21", "CMR");
}
public AngelToken(final AngelToken token) {

View file

@ -20,9 +20,9 @@ public final class BeastToken extends TokenImpl {
power = new MageInt(3);
toughness = new MageInt(3);
availableImageSetCodes = Arrays.asList("5DN", "C14", "C16", "C19", "CMA", "CMD", "CN2",
availableImageSetCodes = Arrays.asList("5DN", "C14", "C16", "C19", "CMA", "CMD", "CN2", "GVL",
"DD3C", "DD3GVL", "DDD", "DDL", "DST", "E01", "EVE", "LRW", "M10", "M11", "M12",
"M13", "M14", "M15", "MM3", "NPH", "PC2", "USG", "M19", "IKO", "M21");
"M13", "M14", "M15", "MM3", "NPH", "PC2", "USG", "M19", "IKO", "M21", "CMR");
}
@Override

View file

@ -4,38 +4,23 @@ import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author LoneFox
*/
public final class BeastToken2 extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
static {
tokenImageSets.addAll(Arrays.asList("ZEN", "C14", "DDD", "C15", "GVL", "MM3", "CMA", "E01", "C19", "C20", "ZNC"));
}
public BeastToken2() {
this(null, 0);
}
public BeastToken2(String setCode) {
this(setCode, 0);
}
public BeastToken2(String setCode, int tokenType) {
super("Beast", "4/4 green Beast creature token");
availableImageSetCodes = tokenImageSets;
setOriginalExpansionSetCode(setCode);
cardType.add(CardType.CREATURE);
color.setGreen(true);
subtype.add(SubType.BEAST);
power = new MageInt(4);
toughness = new MageInt(4);
availableImageSetCodes = Arrays.asList("C13", "C14", "C15", "C19", "CMA", "CMD", "GVL", "DDD",
"E01", "ODY", "SCG", "ZEN", "C20", "ZNC", "CMR");
}
public BeastToken2(final BeastToken2 token) {
@ -50,7 +35,28 @@ public final class BeastToken2 extends TokenImpl {
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode().equals("C14") || getOriginalExpansionSetCode().equals("DDD") || getOriginalExpansionSetCode().equals("GVL") || getOriginalExpansionSetCode().equals("MM3")) {
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("C14")) {
this.setTokenType(2);
}
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("C19")) {
this.setTokenType(2);
}
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("CMA")) {
this.setTokenType(2);
}
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("DDD")) {
this.setTokenType(2);
}
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("E01")) {
this.setTokenType(2);
}
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("CMR")) {
this.setTokenType(2);
}
}

View file

@ -1,12 +1,12 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class BreedingPitThrullToken extends TokenImpl {
@ -18,6 +18,8 @@ public final class BreedingPitThrullToken extends TokenImpl {
color.setBlack(true);
power = new MageInt(0);
toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("CMR");
}
public BreedingPitThrullToken(final BreedingPitThrullToken token) {
@ -27,4 +29,9 @@ public final class BreedingPitThrullToken extends TokenImpl {
public BreedingPitThrullToken copy() {
return new BreedingPitThrullToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
}
}

View file

@ -1,12 +1,12 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.MageInt;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class CarnivoreToken extends TokenImpl {
@ -18,6 +18,8 @@ public final class CarnivoreToken extends TokenImpl {
subtype.add(SubType.BEAST);
power = new MageInt(3);
toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("C13", "EMA", "TMP");
}
public CarnivoreToken(final CarnivoreToken token) {
@ -27,4 +29,13 @@ public final class CarnivoreToken extends TokenImpl {
public CarnivoreToken copy() {
return new CarnivoreToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("C13")) {
this.setTokenType(2);
}
}
}

View file

@ -19,7 +19,7 @@ public final class CatToken extends TokenImpl {
power = new MageInt(2);
toughness = new MageInt(2);
availableImageSetCodes = Arrays.asList("PMEI", "C14", "C15", "C17", "C18", "M13", "M14", "MBS", "SOM");
availableImageSetCodes = Arrays.asList("PMEI", "C14", "C15", "C17", "C18", "M13", "M14", "MBS", "SOM", "CMR");
}
public CatToken(final CatToken token) {
@ -29,4 +29,9 @@ public final class CatToken extends TokenImpl {
public CatToken copy() {
return new CatToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
}
}

View file

@ -1,4 +1,3 @@
package mage.game.permanent.token;
import mage.MageInt;
@ -7,27 +6,29 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class DragonEggDragonToken extends TokenImpl {
public DragonEggDragonToken() {
super("Dragon", "2/2 red Dragon creature token with flying and \"{R}: This creature gets +1/+0 until end of turn.\"");
this.setOriginalExpansionSetCode("M14");
cardType.add(CardType.CREATURE);
color.setRed(true);
subtype.add(SubType.DRAGON);
power = new MageInt(2);
toughness = new MageInt(2);
addAbility(FlyingAbility.getInstance());
addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}")));
this.addAbility(FlyingAbility.getInstance());
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}")));
availableImageSetCodes = Arrays.asList("C18", "EMA", "M14", "M19", "CMR");
}
public DragonEggDragonToken(final DragonEggDragonToken token) {
@ -37,4 +38,9 @@ public final class DragonEggDragonToken extends TokenImpl {
public DragonEggDragonToken copy() {
return new DragonEggDragonToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
}
}

View file

@ -4,34 +4,23 @@ import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author BetaSteward_at_googlemail.com
*/
public final class ElephantToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
static {
tokenImageSets.addAll(Arrays.asList("C14", "CNS", "DDD", "MM2", "WWK", "OGW", "C15", "GVL", "MM3", "CMA", "MH1"));
}
public ElephantToken() {
this((String) null);
}
public ElephantToken(String setCode) {
super("Elephant", "3/3 green Elephant creature token");
availableImageSetCodes = tokenImageSets;
setOriginalExpansionSetCode(setCode);
cardType.add(CardType.CREATURE);
color.setGreen(true);
subtype.add(SubType.ELEPHANT);
power = new MageInt(3);
toughness = new MageInt(3);
availableImageSetCodes = Arrays.asList("C13", "C14", "C15", "CMA", "CMD", "CNS", "GVL", "DDD",
"EMA", "INV", "JUD", "MM2", "ODY", "ROE", "TSP", "VMA", "WWK", "MH1", "CMR");
}
public ElephantToken(final ElephantToken token) {
@ -42,4 +31,8 @@ public final class ElephantToken extends TokenImpl {
return new ElephantToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
}
}

View file

@ -1,42 +1,26 @@
package mage.game.permanent.token;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
*
* @author Loki
*/
public final class ElfToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
static {
tokenImageSets.addAll(Arrays.asList("C14", "SHM", "EVG", "LRW", "ORI"));
}
public ElfToken() {
super("Elf Warrior", "1/1 green Elf Warrior creature token");
availableImageSetCodes = tokenImageSets;
cardType.add(CardType.CREATURE);
color.setGreen(true);
subtype.add(SubType.ELF);
subtype.add(SubType.WARRIOR);
power = new MageInt(1);
toughness = new MageInt(1);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode().equals("SHM")) {
this.setTokenType(1);
}
availableImageSetCodes = Arrays.asList("C13", "C14", "EVG", "EMA", "LRW", "MOR", "ORI", "SHM", "M19", "CMR");
}
public ElfToken(final ElfToken token) {
@ -45,6 +29,11 @@ public final class ElfToken extends TokenImpl {
@Override
public ElfToken copy() {
return new ElfToken(this); //To change body of generated methods, choose Tools | Templates.
return new ElfToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
}
}

View file

@ -4,35 +4,22 @@ import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author North
*/
public final class GolemToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
static {
tokenImageSets.addAll(Arrays.asList("MM2", "NPH", "SOM", "MM3", "MH1", "M20"));
}
public GolemToken() {
this((String) null);
}
public GolemToken(String setCode) {
super("Golem", "3/3 colorless Golem artifact creature token");
setOriginalExpansionSetCode(setCode);
cardType.add(CardType.ARTIFACT);
cardType.add(CardType.CREATURE);
subtype.add(SubType.GOLEM);
power = new MageInt(3);
toughness = new MageInt(3);
availableImageSetCodes = tokenImageSets;
availableImageSetCodes = Arrays.asList("MM2", "NPH", "SOM", "MH1", "M20", "CMR");
}
public GolemToken(final GolemToken token) {
@ -42,4 +29,9 @@ public final class GolemToken extends TokenImpl {
public GolemToken copy() {
return new GolemToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
}
}

View file

@ -19,8 +19,10 @@ public final class MelokuTheCloudedMirrorToken extends TokenImpl {
subtype.add(SubType.ILLUSION);
power = new MageInt(1);
toughness = new MageInt(1);
addAbility(FlyingAbility.getInstance());
availableImageSetCodes.addAll(Arrays.asList("CHK", "MMA", "MH1"));
availableImageSetCodes = Arrays.asList("CHK", "MMA", "MH1", "CMR");
}
public MelokuTheCloudedMirrorToken(final MelokuTheCloudedMirrorToken token) {
@ -30,4 +32,9 @@ public final class MelokuTheCloudedMirrorToken extends TokenImpl {
public MelokuTheCloudedMirrorToken copy() {
return new MelokuTheCloudedMirrorToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
}
}

View file

@ -1,12 +1,12 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.MageInt;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class OneDozenEyesBeastToken extends TokenImpl {
@ -18,6 +18,8 @@ public final class OneDozenEyesBeastToken extends TokenImpl {
subtype.add(SubType.BEAST);
power = new MageInt(5);
toughness = new MageInt(5);
availableImageSetCodes = Arrays.asList("C13", "MRD");
}
public OneDozenEyesBeastToken(final OneDozenEyesBeastToken token) {
@ -28,4 +30,12 @@ public final class OneDozenEyesBeastToken extends TokenImpl {
return new OneDozenEyesBeastToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("C13")) {
this.setTokenType(3);
}
}
}

View file

@ -1,12 +1,12 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.MageInt;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class PhyrexianRebirthHorrorToken extends TokenImpl {
@ -18,6 +18,8 @@ public final class PhyrexianRebirthHorrorToken extends TokenImpl {
subtype.add(SubType.HORROR);
power = new MageInt(0);
toughness = new MageInt(0);
availableImageSetCodes = Arrays.asList("C18", "C19", "MBS", "CMR");
}
public PhyrexianRebirthHorrorToken(final PhyrexianRebirthHorrorToken token) {
@ -27,4 +29,9 @@ public final class PhyrexianRebirthHorrorToken extends TokenImpl {
public PhyrexianRebirthHorrorToken copy() {
return new PhyrexianRebirthHorrorToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
}
}

View file

@ -16,7 +16,7 @@ public final class PlantToken extends TokenImpl {
power = new MageInt(0);
toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("WWK", "DDP", "OGW", "ZNR");
availableImageSetCodes = Arrays.asList("ARC", "C13", "C18", "DDP", "OGW", "PC2", "WWK", "XLN", "ZEN", "ZNR", "CMR");
}
public PlantToken(final PlantToken token) {
@ -26,4 +26,9 @@ public final class PlantToken extends TokenImpl {
public PlantToken copy() {
return new PlantToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
}
}

View file

@ -1,12 +1,12 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.MageInt;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class RhysTheRedeemedToken extends TokenImpl {
@ -20,6 +20,8 @@ public final class RhysTheRedeemedToken extends TokenImpl {
subtype.add(SubType.WARRIOR);
power = new MageInt(1);
toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("SHM");
}
public RhysTheRedeemedToken(final RhysTheRedeemedToken token) {
@ -29,4 +31,13 @@ public final class RhysTheRedeemedToken extends TokenImpl {
public RhysTheRedeemedToken copy() {
return new RhysTheRedeemedToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("SHM")) {
this.setTokenType(2);
}
}
}

View file

@ -11,6 +11,8 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.target.common.TargetAnyTarget;
import java.util.Arrays;
public final class RockToken extends TokenImpl {
public RockToken() {
@ -23,6 +25,8 @@ public final class RockToken extends TokenImpl {
new DamageTargetEffect(2), new TargetAnyTarget(), new SacrificeAttachmentCost(), new GenericManaCost(1), new TapSourceCost()
)));
this.addAbility(new EquipAbility(1));
availableImageSetCodes = Arrays.asList("CMR");
}
public RockToken(final RockToken token) {
@ -32,4 +36,9 @@ public final class RockToken extends TokenImpl {
public RockToken copy() {
return new RockToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
}
}

View file

@ -4,6 +4,8 @@ import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
* @author TheElk801
*/
@ -17,6 +19,8 @@ public final class SalamnderWarriorToken extends TokenImpl {
subtype.add(SubType.WARRIOR);
power = new MageInt(4);
toughness = new MageInt(3);
availableImageSetCodes = Arrays.asList("CMR");
}
public SalamnderWarriorToken(final SalamnderWarriorToken token) {
@ -26,4 +30,9 @@ public final class SalamnderWarriorToken extends TokenImpl {
public SalamnderWarriorToken copy() {
return new SalamnderWarriorToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
}
}

View file

@ -43,7 +43,8 @@ public final class SaprolingToken extends TokenImpl {
"C19",
"C20",
"M21",
"ZNC"
"ZNC",
"CMR"
));
}

View file

@ -21,7 +21,7 @@ public final class SoldierToken extends TokenImpl {
toughness = new MageInt(1);
availableImageSetCodes = Arrays.asList("10E", "M15", "C14", "ORI", "ALA", "DDF", "THS", "M12", "M13", "MM2", "MMA", "RTR",
"SOM", "DDO", "M10", "ORI", "EMN", "EMA", "CN2", "C16", "MM3", "E01", "DOM", "MH1", "M20", "C20", "M21");
"SOM", "DDO", "M10", "ORI", "EMN", "EMA", "CN2", "C16", "MM3", "E01", "DOM", "MH1", "M20", "C20", "M21", "CMR");
}
public SoldierToken(final SoldierToken token) {
@ -49,5 +49,8 @@ public final class SoldierToken extends TokenImpl {
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("THS")) {
this.setTokenType(RandomUtil.nextInt(2) + 1);
}
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("CMR")) {
this.setTokenType(RandomUtil.nextInt(2) + 1);
}
}
}

View file

@ -1,13 +1,13 @@
package mage.game.permanent.token;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.MageInt;
import mage.abilities.keyword.TrampleAbility;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.Arrays;
/**
*
* @author spjspj
*/
public final class SpawningGroundsBeastToken extends TokenImpl {
@ -19,7 +19,10 @@ public final class SpawningGroundsBeastToken extends TokenImpl {
subtype.add(SubType.BEAST);
power = new MageInt(5);
toughness = new MageInt(5);
this.addAbility(TrampleAbility.getInstance());
availableImageSetCodes = Arrays.asList("C13", "");
}
public SpawningGroundsBeastToken(final SpawningGroundsBeastToken token) {
@ -29,4 +32,13 @@ public final class SpawningGroundsBeastToken extends TokenImpl {
public SpawningGroundsBeastToken copy() {
return new SpawningGroundsBeastToken(this);
}
@Override
public void setExpansionSetCodeForImage(String code) {
super.setExpansionSetCodeForImage(code);
if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("C13")) {
this.setTokenType(4);
}
}
}

View file

@ -5,25 +5,15 @@ import mage.abilities.keyword.FlyingAbility;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author nantuko
*/
public final class SpiritWhiteToken extends TokenImpl {
static final private List<String> tokenImageSets = new ArrayList<>();
static {
tokenImageSets.addAll(Arrays.asList("AVR", "C14", "CNS", "DDC", "DDK", "FRF", "ISD", "KTK", "M15", "MM2", "SHM",
"SOI", "EMA", "C16", "MM3", "CMA", "E01", "ANA", "GPT", "RAV", "EMN", "RNA", "M20", "C20"));
}
public SpiritWhiteToken() {
super("Spirit", "1/1 white Spirit creature token with flying");
availableImageSetCodes = tokenImageSets;
cardType.add(CardType.CREATURE);
subtype.add(SubType.SPIRIT);
color.setWhite(true);
@ -31,6 +21,9 @@ public final class SpiritWhiteToken extends TokenImpl {
toughness = new MageInt(1);
addAbility(FlyingAbility.getInstance());
availableImageSetCodes = Arrays.asList("AVR", "C14", "CNS", "DDC", "DDK", "FRF", "ISD", "KTK", "M15", "MM2", "SHM",
"SOI", "EMA", "C16", "MM3", "CMA", "E01", "ANA", "GPT", "RAV", "EMN", "RNA", "M20", "C20", "CMR");
}
@Override

View file

@ -29,7 +29,7 @@ public final class TreasureToken extends TokenImpl {
ability.addCost(new SacrificeSourceCost());
this.addAbility(ability);
availableImageSetCodes = Arrays.asList("XLN", "RNA", "M20", "C19", "C20", "M21");
availableImageSetCodes = Arrays.asList("XLN", "RNA", "M20", "C19", "C20", "M21", "CMR");
}
public TreasureToken(final TreasureToken token) {

View file

@ -24,7 +24,8 @@ public final class ZombieToken extends TokenImpl {
"MBS", "ALA", "ISD", "C14", "C15", "C16", "C17",
"CNS", "MMA", "BNG", "KTK", "DTK", "ORI", "OGW",
"SOI", "EMN", "EMA", "MM3", "AKH", "CMA", "E01",
"RNA", "WAR", "MH1", "M20", "C19", "THB", "M21");
"RNA", "WAR", "MH1", "M20", "C19", "THB", "M21",
"CMR");
}
@Override