// Path: src/main/java/ch/idsia/benchmark/mario/engine/GlobalOptions.java
// public abstract class GlobalOptions
// {
// public static final int primaryVerionUID = 0;
// public static final int minorVerionUID = 1;
// public static final int minorSubVerionID = 9;
// 
// public static boolean areLabels = false;
// public static boolean isCameraCenteredOnMario = false;
// public static Integer FPS = 24;
// public static int MaxFPS = 100;
// public static boolean areFrozenCreatures = false;
// 
// public static boolean isVisualization = true;
// public static boolean isGameplayStopped = false;
// public static boolean isFly = false;
// 
// private static GameViewer GameViewer = null;
// //    public static boolean isTimer = true;
// 
// public static int mariosecondMultiplier = 15;
// 
// public static boolean isPowerRestoration;
// 
// // required for rendering grid in ch/idsia/benchmark/mario/engine/sprites/Sprite.java
// public static int receptiveFieldWidth = 19;
// public static int receptiveFieldHeight = 19;
// public static int marioEgoCol = 9;
// public static int marioEgoRow = 9;
// 
// private static MarioVisualComponent marioVisualComponent;
// public static int VISUAL_COMPONENT_WIDTH = 320;
// public static int VISUAL_COMPONENT_HEIGHT = 240;
// 
// public static boolean isShowReceptiveField = false;
// public static boolean isScale2x = false;
// public static boolean isRecording = false;
// public static boolean isReplaying = false;
// 
// public static int getPrimaryVersionUID()
// {
//     return primaryVerionUID;
// }
// 
// public static int getMinorVersionUID()
// {
//     return minorVerionUID;
// }
// 
// public static int getMinorSubVersionID()
// {
//     return minorSubVerionID;
// }
// 
// public static String getBenchmarkName()
// {
//     return "[~ Mario AI Benchmark ~" + GlobalOptions.getVersionUID() + "]";
// }
// 
// public static String getVersionUID()
// {
//     return " " + getPrimaryVersionUID() + "." + getMinorVersionUID() + "." + getMinorSubVersionID();
// }
// 
// public static void registerMarioVisualComponent(MarioVisualComponent mc)
// {
//     marioVisualComponent = mc;
// }
// 
// public static void registerGameViewer(GameViewer gv)
// {
//     GameViewer = gv;
// }
// 
// public static void AdjustMarioVisualComponentFPS()
// {
//     if (marioVisualComponent != null)
//         marioVisualComponent.adjustFPS();
// }
// 
// public static void gameViewerTick()
// {
//     if (GameViewer != null)
//         GameViewer.tick();
// }
// 
// public static String getDateTime(Long d)
// {
//     final DateFormat dateFormat = (d == null) ? new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:ms") :
//             new SimpleDateFormat("HH:mm:ss:ms");
//     if (d != null)
//         dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
//     final Date date = (d == null) ? new Date() : new Date(d);
//     return dateFormat.format(date);
// }
// 
// final static private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
// 
// public static String getTimeStamp()
// {
//     return dateFormat.format(new Date());
// }
// 
// public static void changeScale2x()
// {
//     if (marioVisualComponent == null)
//         return;
// 
//     isScale2x = !isScale2x;
//     marioVisualComponent.width *= isScale2x ? 2 : 0.5;
//     marioVisualComponent.height *= isScale2x ? 2 : 0.5;
//     marioVisualComponent.changeScale2x();
// }
// }


import java.util.LinkedList;
import java.util.Queue;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import ch.idsia.benchmark.mario.engine.GlobalOptions;
import java.io.Serializable;
{
    String s = replays.poll();
    if (s == null)
        return null;

    String[] subgroups = s.split(";");
    if (subgroups.length == 0)
        return null;

    String fileName = subgroups[0];
    chunks.clear();

    if (subgroups.length > 1)
        for (int i = 1; i < subgroups.length; i++)
            chunks.add(new Interval(subgroups[i]));

    return fileName;
}

public Interval getNextIntervalInMarioseconds()
{
    return chunks.poll();
}

public Interval getNextIntervalInTicks()
{
    Interval i = chunks.poll();
    Interval res = null;

    if (i != null)
// Path: src/main/java/ch/idsia/benchmark/mario/engine/GlobalOptions.java
// public abstract class GlobalOptions
// {
// public static final int primaryVerionUID = 0;
// public static final int minorVerionUID = 1;
// public static final int minorSubVerionID = 9;
// 
// public static boolean areLabels = false;
// public static boolean isCameraCenteredOnMario = false;
// public static Integer FPS = 24;
// public static int MaxFPS = 100;
// public static boolean areFrozenCreatures = false;
// 
// public static boolean isVisualization = true;
// public static boolean isGameplayStopped = false;
// public static boolean isFly = false;
// 
// private static GameViewer GameViewer = null;
// //    public static boolean isTimer = true;
// 
// public static int mariosecondMultiplier = 15;
// 
// public static boolean isPowerRestoration;
// 
// // required for rendering grid in ch/idsia/benchmark/mario/engine/sprites/Sprite.java
// public static int receptiveFieldWidth = 19;
// public static int receptiveFieldHeight = 19;
// public static int marioEgoCol = 9;
// public static int marioEgoRow = 9;
// 
// private static MarioVisualComponent marioVisualComponent;
// public static int VISUAL_COMPONENT_WIDTH = 320;
// public static int VISUAL_COMPONENT_HEIGHT = 240;
// 
// public static boolean isShowReceptiveField = false;
// public static boolean isScale2x = false;
// public static boolean isRecording = false;
// public static boolean isReplaying = false;
// 
// public static int getPrimaryVersionUID()
// {
//     return primaryVerionUID;
// }
// 
// public static int getMinorVersionUID()
// {
//     return minorVerionUID;
// }
// 
// public static int getMinorSubVersionID()
// {
//     return minorSubVerionID;
// }
// 
// public static String getBenchmarkName()
// {
//     return "[~ Mario AI Benchmark ~" + GlobalOptions.getVersionUID() + "]";
// }
// 
// public static String getVersionUID()
// {
//     return " " + getPrimaryVersionUID() + "." + getMinorVersionUID() + "." + getMinorSubVersionID();
// }
// 
// public static void registerMarioVisualComponent(MarioVisualComponent mc)
// {
//     marioVisualComponent = mc;
// }
// 
// public static void registerGameViewer(GameViewer gv)
// {
//     GameViewer = gv;
// }
// 
// public static void AdjustMarioVisualComponentFPS()
// {
//     if (marioVisualComponent != null)
//         marioVisualComponent.adjustFPS();
// }
// 
// public static void gameViewerTick()
// {
//     if (GameViewer != null)
//         GameViewer.tick();
// }
// 
// public static String getDateTime(Long d)
// {
//     final DateFormat dateFormat = (d == null) ? new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:ms") :
//             new SimpleDateFormat("HH:mm:ss:ms");
//     if (d != null)
//         dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
//     final Date date = (d == null) ? new Date() : new Date(d);
//     return dateFormat.format(date);
// }
// 
// final static private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
// 
// public static String getTimeStamp()
// {
//     return dateFormat.format(new Date());
// }
// 
// public static void changeScale2x()
// {
//     if (marioVisualComponent == null)
//         return;
// 
//     isScale2x = !isScale2x;
//     marioVisualComponent.width *= isScale2x ? 2 : 0.5;
//     marioVisualComponent.height *= isScale2x ? 2 : 0.5;
//     marioVisualComponent.changeScale2x();
// }
// }


// Path: src/main/java/ch/idsia/tools/ReplayerOptions.java
import java.util.LinkedList;
import java.util.Queue;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import ch.idsia.benchmark.mario.engine.GlobalOptions;
import java.io.Serializable;

{
    String s = replays.poll();
    if (s == null)
        return null;

    String[] subgroups = s.split(";");
    if (subgroups.length == 0)
        return null;

    String fileName = subgroups[0];
    chunks.clear();

    if (subgroups.length > 1)
        for (int i = 1; i < subgroups.length; i++)
            chunks.add(new Interval(subgroups[i]));

    return fileName;
}

public Interval getNextIntervalInMarioseconds()
{
    return chunks.poll();
}

public Interval getNextIntervalInTicks()
{
    Interval i = chunks.poll();
    Interval res = null;

    if (i != null)
        res = new Interval(i.from * GlobalOptions.mariosecondMultiplier, i.to * GlobalOptions.mariosecondMultiplier);