// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected static final char ANSI_CODE_COLOR_END = 'm';
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// public static final DecimalFormatSymbols DECIMALS_FORMAT_SYMBOLS =
//         DecimalFormatSymbols.getInstance(Locale.ROOT);
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected static final char UNICODE_CTRL = '\u001b';
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// public static String spaces(
//         int n) {
// 
//     return repeatString(" ", n);
// 
// }
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected enum AnsiCodeColors {
// 
//     /**
//      * Red font color.
//      */
//     RED_FONT(31),
// 
//     /**
//      * Green font color.
//      */
//     GREEN_FONT(32),
// 
//     /**
//      * Blue font color.
//      */
//     BLUE_FONT(34),
// 
//     /**
//      * Reset color.
//      */
//     RESET(0);
// 
//     /**
//      * Color number.
//      */
//     private int number;
// 
//     /**
//      * Color code.
//      */
//     private String code;
// 
//     /**
//      * Constructor.
//      * 
//      * @param number Color number.
//      */
//     AnsiCodeColors(
//             int number) {
// 
//         this.number = number;
//         this.code = Character.toString(UNICODE_CTRL)
//                 + Character.toString(ANSI_CODE_START)
//                 + Integer.toString(number)
//                 + Character.toString(ANSI_CODE_COLOR_END);
// 
//     }
// 
//     /**
//      * @return The color number.
//      */
//     protected int getNumber() {
//         return number;
//     }
// 
//     /**
//      * @return The color code.
//      */
//     protected String getCode() {
//         return code;
//     }
// 
//     /**
//      * Removes all ANSI code colors from a string.
//      * 
//      * @param string A string.
//      * @return The string without any ANSI code colors.
//      */
//     protected static String remove(
//             String string) {
// 
//         return ANSI_CODE_COLOR_PATTERN.matcher(string).replaceAll("");
// 
//     }
// 
// }


import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.ANSI_CODE_COLOR_END;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.DECIMALS_FORMAT_SYMBOLS;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.UNICODE_CTRL;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.spaces;
import org.apache.commons.io.IOUtils;
import org.fusesource.jansi.AnsiConsole;
import com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.AnsiCodeColors;
import java.io.PrintStream;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.text.DecimalFormat;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

     * Uniform Fuzzy Hash with a different color to the ones which are not.
     * 
     * @param hash1 The Uniform Fuzzy Hash.
     * @param hash2 The Uniform Fuzzy Hash to which the first one will be compared.
     * @param base The characters base which will be used to represent the blocks.
     * @param factorDivisor Amount of characters per factor size for each block.
     * @param lineWrap Amount of characters per line. If this argument is lower than 1, no line wrap
     *        is performed and the full representation is printed in one line.
     * @param concatenatePercent In case line wrap is performed, true to concatenate to each line
     *        its relative percent to the total length.
     */
    public static void printCompared(
            UniformFuzzyHash hash1,
            UniformFuzzyHash hash2,
            char[] base,
            int factorDivisor,
            int lineWrap,
            boolean concatenatePercent) {

        // Representations.
        String representation1 = representCompared(hash1, hash2, base, factorDivisor);
        String representation2 = representCompared(hash2, hash1, base, factorDivisor).replace(
                BLOCK_IN_FIRST_HASH_ANSI_CODE_FORMAT, BLOCK_IN_SECOND_HASH_ANSI_CODE_FORMAT);

        List<String> wrappedRepresentation1 =
                wrapStringRespectingAnsiCodeFormat(representation1, lineWrap, concatenatePercent);
        List<String> wrappedRepresentation2 =
                wrapStringRespectingAnsiCodeFormat(representation2, lineWrap, concatenatePercent);

        String wrapLengthSpaces = concatenatePercent

// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected static final char ANSI_CODE_COLOR_END = 'm';
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// public static final DecimalFormatSymbols DECIMALS_FORMAT_SYMBOLS =
//         DecimalFormatSymbols.getInstance(Locale.ROOT);
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected static final char UNICODE_CTRL = '\u001b';
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// public static String spaces(
//         int n) {
// 
//     return repeatString(" ", n);
// 
// }
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected enum AnsiCodeColors {
// 
//     /**
//      * Red font color.
//      */
//     RED_FONT(31),
// 
//     /**
//      * Green font color.
//      */
//     GREEN_FONT(32),
// 
//     /**
//      * Blue font color.
//      */
//     BLUE_FONT(34),
// 
//     /**
//      * Reset color.
//      */
//     RESET(0);
// 
//     /**
//      * Color number.
//      */
//     private int number;
// 
//     /**
//      * Color code.
//      */
//     private String code;
// 
//     /**
//      * Constructor.
//      * 
//      * @param number Color number.
//      */
//     AnsiCodeColors(
//             int number) {
// 
//         this.number = number;
//         this.code = Character.toString(UNICODE_CTRL)
//                 + Character.toString(ANSI_CODE_START)
//                 + Integer.toString(number)
//                 + Character.toString(ANSI_CODE_COLOR_END);
// 
//     }
// 
//     /**
//      * @return The color number.
//      */
//     protected int getNumber() {
//         return number;
//     }
// 
//     /**
//      * @return The color code.
//      */
//     protected String getCode() {
//         return code;
//     }
// 
//     /**
//      * Removes all ANSI code colors from a string.
//      * 
//      * @param string A string.
//      * @return The string without any ANSI code colors.
//      */
//     protected static String remove(
//             String string) {
// 
//         return ANSI_CODE_COLOR_PATTERN.matcher(string).replaceAll("");
// 
//     }
// 
// }


// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/VisualRepresentation.java
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.ANSI_CODE_COLOR_END;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.DECIMALS_FORMAT_SYMBOLS;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.UNICODE_CTRL;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.spaces;
import org.apache.commons.io.IOUtils;
import org.fusesource.jansi.AnsiConsole;
import com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.AnsiCodeColors;
import java.io.PrintStream;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.text.DecimalFormat;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

     * Uniform Fuzzy Hash with a different color to the ones which are not.
     * 
     * @param hash1 The Uniform Fuzzy Hash.
     * @param hash2 The Uniform Fuzzy Hash to which the first one will be compared.
     * @param base The characters base which will be used to represent the blocks.
     * @param factorDivisor Amount of characters per factor size for each block.
     * @param lineWrap Amount of characters per line. If this argument is lower than 1, no line wrap
     *        is performed and the full representation is printed in one line.
     * @param concatenatePercent In case line wrap is performed, true to concatenate to each line
     *        its relative percent to the total length.
     */
    public static void printCompared(
            UniformFuzzyHash hash1,
            UniformFuzzyHash hash2,
            char[] base,
            int factorDivisor,
            int lineWrap,
            boolean concatenatePercent) {

        // Representations.
        String representation1 = representCompared(hash1, hash2, base, factorDivisor);
        String representation2 = representCompared(hash2, hash1, base, factorDivisor).replace(
                BLOCK_IN_FIRST_HASH_ANSI_CODE_FORMAT, BLOCK_IN_SECOND_HASH_ANSI_CODE_FORMAT);

        List<String> wrappedRepresentation1 =
                wrapStringRespectingAnsiCodeFormat(representation1, lineWrap, concatenatePercent);
        List<String> wrappedRepresentation2 =
                wrapStringRespectingAnsiCodeFormat(representation2, lineWrap, concatenatePercent);

        String wrapLengthSpaces = concatenatePercent

                ? spaces(lineWrap + formatAccumulatedWrapLength("", 0).length())
