// Path: core/src/main/java/com/justyoyo/contrast/WriterException.java
// public final class WriterException extends Exception {
// 
//     public WriterException() {
//     }
// 
//     public WriterException(String message) {
//         super(message);
//     }
// 
//     public WriterException(Throwable cause) {
//         super(cause);
//     }
// 
// }
// 
// Path: core/src/main/java/com/justyoyo/contrast/common/BarcodeMatrix.java
// public final class BarcodeMatrix {
// 
//     private final BarcodeRow[] matrix;
//     private int currentRow;
//     private final int height;
//     private final int width;
// 
//     /**
//      * @param height the height of the matrix (Rows)
//      * @param width  the width of the matrix (Cols)
//      */
//     public BarcodeMatrix(int height, int width) {
//         matrix = new BarcodeRow[height];
//         //Initializes the array to the correct width
//         for (int i = 0, matrixLength = matrix.length; i < matrixLength; i++) {
//             matrix[i] = new BarcodeRow((width + 4) * 17 + 1);
//         }
//         this.width = width * 17;
//         this.height = height;
//         this.currentRow = -1;
//     }
// 
//     public void set(int x, int y, byte value) {
//         matrix[y].set(x, value);
//     }
// 
//       /*
//       void setMatrix(int x, int y, boolean black) {
//         set(x, y, (byte) (black ? 1 : 0));
//       }
//        */
// 
//     public void startRow() {
//         ++currentRow;
//     }
// 
//     public BarcodeRow getCurrentRow() {
//         return matrix[currentRow];
//     }
// 
//     public byte[][] getMatrix() {
//         return getScaledMatrix(1, 1);
//     }
// 
//       /*
//       public byte[][] getScaledMatrix(int scale) {
//         return getScaledMatrix(scale, scale);
//       }
//        */
// 
//     public byte[][] getScaledMatrix(int xScale, int yScale) {
//         byte[][] matrixOut = new byte[height * yScale][width * xScale];
//         int yMax = height * yScale;
//         for (int i = 0; i < yMax; i++) {
//             matrixOut[yMax - i - 1] = matrix[i / yScale].getScaledRow(xScale);
//         }
//         return matrixOut;
//     }
// }
// 
// Path: core/src/main/java/com/justyoyo/contrast/common/BarcodeRow.java
// public final class BarcodeRow {
// 
//     private final byte[] row;
//     //A tacker for position in the bar
//     private int currentLocation;
// 
//     /**
//      * Creates a Barcode row of the width
//      */
//     BarcodeRow(int width) {
//         this.row = new byte[width];
//         currentLocation = 0;
//     }
// 
//     /**
//      * Sets a specific location in the bar
//      *
//      * @param x The location in the bar
//      * @param value Black if true, white if false;
//      */
//     void set(int x, byte value) {
//         row[x] = value;
//     }
// 
//     /**
//      * Sets a specific location in the bar
//      *
//      * @param x The location in the bar
//      * @param black Black if true, white if false;
//      */
//     private void set(int x, boolean black) {
//         row[x] = (byte) (black ? 1 : 0);
//     }
// 
//     /**
//      * @param black A boolean which is true if the bar black false if it is white
//      * @param width How many spots wide the bar is.
//      */
//     public void addBar(boolean black, int width) {
//         for (int ii = 0; ii < width; ii++) {
//             set(currentLocation++, black);
//         }
//     }
// 
//       /*
//       byte[] getRow() {
//         return row;
//       }
//        */
// 
//     /**
//      * This function scales the row
//      *
//      * @param scale How much you want the image to be scaled, must be greater than or equal to 1.
//      * @return the scaled row
//      */
//     byte[] getScaledRow(int scale) {
//         byte[] output = new byte[row.length * scale];
//         for (int i = 0; i < output.length; i++) {
//             output[i] = row[i / scale];
//         }
//         return output;
//     }
// }
// 
// Path: core/src/main/java/com/justyoyo/contrast/common/Compaction.java
// public enum Compaction {
// 
//     AUTO,
//     TEXT,
//     BYTE,
//     NUMERIC
// 
// }


import com.justyoyo.contrast.WriterException;
import com.justyoyo.contrast.common.BarcodeMatrix;
import com.justyoyo.contrast.common.BarcodeRow;
import com.justyoyo.contrast.common.Compaction;
import java.nio.charset.Charset;
                    0x107a4, 0x107a2, 0x10396, 0x107b6, 0x187d4, 0x187d2,
                    0x10794, 0x10fb4, 0x10792, 0x10fb2, 0x1c7ea}};

    private static final float PREFERRED_RATIO = 3.0f;
    private static final float DEFAULT_MODULE_WIDTH = 0.357f; //1px in mm
    private static final float HEIGHT = 2.0f; //mm

    private BarcodeMatrix barcodeMatrix;
    private boolean compact;
    private Compaction compaction;
    private Charset encoding;
    private int minCols;
    private int maxCols;
    private int maxRows;
    private int minRows;

    public PDF417() {
        this(false);
    }

    public PDF417(boolean compact) {
        this.compact = compact;
        compaction = Compaction.AUTO;
        encoding = null; // Use default
        minCols = 2;
        maxCols = 30;
        maxRows = 30;
        minRows = 2;
    }

// Path: core/src/main/java/com/justyoyo/contrast/WriterException.java
// public final class WriterException extends Exception {
// 
//     public WriterException() {
//     }
// 
//     public WriterException(String message) {
//         super(message);
//     }
// 
//     public WriterException(Throwable cause) {
//         super(cause);
//     }
// 
// }
// 
// Path: core/src/main/java/com/justyoyo/contrast/common/BarcodeMatrix.java
// public final class BarcodeMatrix {
// 
//     private final BarcodeRow[] matrix;
//     private int currentRow;
//     private final int height;
//     private final int width;
// 
//     /**
//      * @param height the height of the matrix (Rows)
//      * @param width  the width of the matrix (Cols)
//      */
//     public BarcodeMatrix(int height, int width) {
//         matrix = new BarcodeRow[height];
//         //Initializes the array to the correct width
//         for (int i = 0, matrixLength = matrix.length; i < matrixLength; i++) {
//             matrix[i] = new BarcodeRow((width + 4) * 17 + 1);
//         }
//         this.width = width * 17;
//         this.height = height;
//         this.currentRow = -1;
//     }
// 
//     public void set(int x, int y, byte value) {
//         matrix[y].set(x, value);
//     }
// 
//       /*
//       void setMatrix(int x, int y, boolean black) {
//         set(x, y, (byte) (black ? 1 : 0));
//       }
//        */
// 
//     public void startRow() {
//         ++currentRow;
//     }
// 
//     public BarcodeRow getCurrentRow() {
//         return matrix[currentRow];
//     }
// 
//     public byte[][] getMatrix() {
//         return getScaledMatrix(1, 1);
//     }
// 
//       /*
//       public byte[][] getScaledMatrix(int scale) {
//         return getScaledMatrix(scale, scale);
//       }
//        */
// 
//     public byte[][] getScaledMatrix(int xScale, int yScale) {
//         byte[][] matrixOut = new byte[height * yScale][width * xScale];
//         int yMax = height * yScale;
//         for (int i = 0; i < yMax; i++) {
//             matrixOut[yMax - i - 1] = matrix[i / yScale].getScaledRow(xScale);
//         }
//         return matrixOut;
//     }
// }
// 
// Path: core/src/main/java/com/justyoyo/contrast/common/BarcodeRow.java
// public final class BarcodeRow {
// 
//     private final byte[] row;
//     //A tacker for position in the bar
//     private int currentLocation;
// 
//     /**
//      * Creates a Barcode row of the width
//      */
//     BarcodeRow(int width) {
//         this.row = new byte[width];
//         currentLocation = 0;
//     }
// 
//     /**
//      * Sets a specific location in the bar
//      *
//      * @param x The location in the bar
//      * @param value Black if true, white if false;
//      */
//     void set(int x, byte value) {
//         row[x] = value;
//     }
// 
//     /**
//      * Sets a specific location in the bar
//      *
//      * @param x The location in the bar
//      * @param black Black if true, white if false;
//      */
//     private void set(int x, boolean black) {
//         row[x] = (byte) (black ? 1 : 0);
//     }
// 
//     /**
//      * @param black A boolean which is true if the bar black false if it is white
//      * @param width How many spots wide the bar is.
//      */
//     public void addBar(boolean black, int width) {
//         for (int ii = 0; ii < width; ii++) {
//             set(currentLocation++, black);
//         }
//     }
// 
//       /*
//       byte[] getRow() {
//         return row;
//       }
//        */
// 
//     /**
//      * This function scales the row
//      *
//      * @param scale How much you want the image to be scaled, must be greater than or equal to 1.
//      * @return the scaled row
//      */
//     byte[] getScaledRow(int scale) {
//         byte[] output = new byte[row.length * scale];
//         for (int i = 0; i < output.length; i++) {
//             output[i] = row[i / scale];
//         }
//         return output;
//     }
// }
// 
// Path: core/src/main/java/com/justyoyo/contrast/common/Compaction.java
// public enum Compaction {
// 
//     AUTO,
//     TEXT,
//     BYTE,
//     NUMERIC
// 
// }


// Path: pdf417/src/main/java/com/justyoyo/contrast/pdf417/PDF417.java
import com.justyoyo.contrast.WriterException;
import com.justyoyo.contrast.common.BarcodeMatrix;
import com.justyoyo.contrast.common.BarcodeRow;
import com.justyoyo.contrast.common.Compaction;
import java.nio.charset.Charset;

                    0x107a4, 0x107a2, 0x10396, 0x107b6, 0x187d4, 0x187d2,
                    0x10794, 0x10fb4, 0x10792, 0x10fb2, 0x1c7ea}};

    private static final float PREFERRED_RATIO = 3.0f;
    private static final float DEFAULT_MODULE_WIDTH = 0.357f; //1px in mm
    private static final float HEIGHT = 2.0f; //mm

    private BarcodeMatrix barcodeMatrix;
    private boolean compact;
    private Compaction compaction;
    private Charset encoding;
    private int minCols;
    private int maxCols;
    private int maxRows;
    private int minRows;

    public PDF417() {
        this(false);
    }

    public PDF417(boolean compact) {
        this.compact = compact;
        compaction = Compaction.AUTO;
        encoding = null; // Use default
        minCols = 2;
        maxCols = 30;
        maxRows = 30;
        minRows = 2;
    }

    public BarcodeMatrix getBarcodeMatrix() {