// Path: src/main/java/org/asdfjkl/jerryfx/gui/PgnDatabaseEntry.java
// public class PgnDatabaseEntry {
// 
//     private long offset = 0;
//     private long index = 0;
//     private String event = "";
//     private String site = "";
//     private String date = "";
//     private String round = "";
//     private String white = "";
//     private String black = "";
//     private String result = "";
//     private String eco = "";
//     private boolean modifiedFlag = false;
//     Game modifiedGame = null;
// 
//     private boolean foundAtLeast1Tag = false;
// 
//     public long getOffset() { return offset; }
// 
//     public void setOffset(long offset) { this.offset = offset; }
// 
//     public long getIndex() { return index; }
//     public void setIndex(long index) { this.index = index; }
// 
//     public String getEvent() { return event; }
//     public void setEvent(String event) { this.event = event; }
// 
//     public String getSite() { return site; }
//     public void setSite(String site) { this.site = site; }
// 
//     public String getDate() { return date; }
//     public void setDate(String date) { this.date = date; }
// 
//     public String getRound() { return round; }
//     public void setRound(String round ) { this.round = round; }
// 
//     public String getWhite() { return white; }
//     public void setWhite(String white) { this.white = white; }
// 
//     public String getBlack() { return black; }
//     public void setBlack(String black) { this.black = black; }
// 
//     public String getResult() { return result; }
//     public void setResult(String result) { this.result = result; }
// 
//     public String getEco() { return eco; }
//     public void setEco(String eco) { this.eco = eco; }
// 
//     public void markValid() {
//         foundAtLeast1Tag = true;
//     }
// 
//     public void markAsModified() { modifiedFlag = true; }
//     public boolean wasModified() { return modifiedFlag; }
//     public void markAsUnmodified() {
//         modifiedFlag = false;
//         modifiedGame = null;
//     }
// 
//     public void setModifiedGame(Game game) { modifiedGame = game; }
//     public Game getModifiedGame() { return modifiedGame; }
// 
//     public boolean isValid() {
//         return foundAtLeast1Tag;
//     }
// 
// }


import com.ibm.icu.text.CharsetDetector;
import com.ibm.icu.text.CharsetMatch;
import org.asdfjkl.jerryfx.gui.PgnDatabaseEntry;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Stack;
            return true;
        }
        QDataStream in(&file);
        // init some char array to read bytes
        char first100arr[100];
        for(int i=0;i<100;i++) {
            first100arr[i] = 0x00;
        }
        char *first100 = first100arr;
        // prep conversion tools
        QTextCodec::ConverterState state;
        QTextCodec *codec = QTextCodec::codecForName("UTF-8");

        int iterations = 40;
        int i=0;
        int l = 100;
        bool isUtf8 = true;
        while(i<iterations && l>=100) {
            l = in.readRawData(first100, 100);
        const QString text = codec->toUnicode(first100, 100, &state);
            if (state.invalidChars > 0) {
                isUtf8 = false;
                break;
            }
            i++;
        }
        return isUtf8;
    }
    */

// Path: src/main/java/org/asdfjkl/jerryfx/gui/PgnDatabaseEntry.java
// public class PgnDatabaseEntry {
// 
//     private long offset = 0;
//     private long index = 0;
//     private String event = "";
//     private String site = "";
//     private String date = "";
//     private String round = "";
//     private String white = "";
//     private String black = "";
//     private String result = "";
//     private String eco = "";
//     private boolean modifiedFlag = false;
//     Game modifiedGame = null;
// 
//     private boolean foundAtLeast1Tag = false;
// 
//     public long getOffset() { return offset; }
// 
//     public void setOffset(long offset) { this.offset = offset; }
// 
//     public long getIndex() { return index; }
//     public void setIndex(long index) { this.index = index; }
// 
//     public String getEvent() { return event; }
//     public void setEvent(String event) { this.event = event; }
// 
//     public String getSite() { return site; }
//     public void setSite(String site) { this.site = site; }
// 
//     public String getDate() { return date; }
//     public void setDate(String date) { this.date = date; }
// 
//     public String getRound() { return round; }
//     public void setRound(String round ) { this.round = round; }
// 
//     public String getWhite() { return white; }
//     public void setWhite(String white) { this.white = white; }
// 
//     public String getBlack() { return black; }
//     public void setBlack(String black) { this.black = black; }
// 
//     public String getResult() { return result; }
//     public void setResult(String result) { this.result = result; }
// 
//     public String getEco() { return eco; }
//     public void setEco(String eco) { this.eco = eco; }
// 
//     public void markValid() {
//         foundAtLeast1Tag = true;
//     }
// 
//     public void markAsModified() { modifiedFlag = true; }
//     public boolean wasModified() { return modifiedFlag; }
//     public void markAsUnmodified() {
//         modifiedFlag = false;
//         modifiedGame = null;
//     }
// 
//     public void setModifiedGame(Game game) { modifiedGame = game; }
//     public Game getModifiedGame() { return modifiedGame; }
// 
//     public boolean isValid() {
//         return foundAtLeast1Tag;
//     }
// 
// }


// Path: src/main/java/org/asdfjkl/jerryfx/lib/PgnReader.java
import com.ibm.icu.text.CharsetDetector;
import com.ibm.icu.text.CharsetMatch;
import org.asdfjkl.jerryfx.gui.PgnDatabaseEntry;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Stack;

            return true;
        }
        QDataStream in(&file);
        // init some char array to read bytes
        char first100arr[100];
        for(int i=0;i<100;i++) {
            first100arr[i] = 0x00;
        }
        char *first100 = first100arr;
        // prep conversion tools
        QTextCodec::ConverterState state;
        QTextCodec *codec = QTextCodec::codecForName("UTF-8");

        int iterations = 40;
        int i=0;
        int l = 100;
        bool isUtf8 = true;
        while(i<iterations && l>=100) {
            l = in.readRawData(first100, 100);
        const QString text = codec->toUnicode(first100, 100, &state);
            if (state.invalidChars > 0) {
                isUtf8 = false;
                break;
            }
            i++;
        }
        return isUtf8;
    }
    */

    ArrayList<PgnDatabaseEntry> scanPgnGetSTR(String filename) {