public GUI3() {
        Dimension screenSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().getSize();
        try {
            INGRESS_FONT = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("Coda.ttf"));
        } catch(Exception e) {
            INGRESS_FONT = new Font("Courier New", Font.PLAIN, 15);
        }
        this.random = new Random().nextInt(3);
        if(random == 0) guiColor = new Color(0, 191, 1);//green
        else if(random == 1) guiColor = new Color(0, 147, 207);//blue
        else guiColor = new Color(205, 106, 0);//orange
        mainFrame = new JFrame();
        mainPanel = new JPanel(new MigLayout("gap 0, insets 0, fill"));
        mainPanel.setBackground(Color.BLACK);

        Handler handler = new Handler(this);

        menuPanel = new MenuPanel(handler, random);

        mainPanel.add(titlePanel = new TitlePanel(handler), "dock north");
        mainPanel.add(getMenuPanel(), "dock west, width " + menuPanelWidth + "!");

        decoderPanel = new DecoderPanel(mainPanel.getWidth(), random);
        scrollPanel = new JScrollPane(getDecoderPanel());

        scrollPanel.setBorder(new EmptyBorder(0, 0, 0, 0));
        scrollPanel.getVerticalScrollBar().setUnitIncrement(16);

        mainPanel.add(codePanel = new CodePanel(handler, random), "growx,wrap");
        mainPanel.add(scrollPanel, "grow, push");
        mainFrame.add(mainPanel);
        mainFrame.setMinimumSize(new Dimension(600, 400));
        mainFrame.pack();

        mainFrame.addComponentListener(new ComponentListener() {

            @Override
            public void componentResized(ComponentEvent e) {
                updateDecoderPanel();
            }

            @Override
            public void componentMoved(ComponentEvent e) {

            }

            @Override
            public void componentShown(ComponentEvent e) {
                mainPanel.revalidate();
            }

            @Override
            public void componentHidden(ComponentEvent e) {
                mainPanel.invalidate();
            }
        });

        mainFrame.setSize((int) screenSize.getWidth() / 2, (int) screenSize.getHeight() / 2);
        mainFrame.setLocation((int) screenSize.getWidth() / 4, (int) screenSize.getHeight() / 4);
        mainFrame.setTitle("Ingress Cipher Tool");
        mainFrame.setIconImage(makeImageIcon("/images/Ingress_Dual_middle.png").getImage());
        mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        mainFrame.setVisible(true);
    }