diff --git a/com.cisco.launcher.s.class b/com.cisco.launcher.s.class
new file mode 100644
index 000000000..aa16def30
--- /dev/null
+++ b/com.cisco.launcher.s.class
@@ -0,0 +1,1512 @@
+package com.cisco.launcher;
+
+import com.cisco.nm.dice.loader.Loader;
+import com.cisco.nm.dice.loader.ProgressIf;
+import com.cisco.nm.dice.loader.SgzApplet;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Desktop;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.FlowLayout;
+import java.awt.Frame;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.net.Authenticator;
+import java.net.HttpURLConnection;
+import java.net.PasswordAuthentication;
+import java.net.URI;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Vector;
+import javax.swing.AbstractAction;
+import javax.swing.Box;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JProgressBar;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JTextField;
+import javax.swing.JToolBar;
+import javax.swing.SwingUtilities;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import net.sourceforge.retroweaver.runtime.java.lang.String_;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+public class s extends JFrame implements ActionListener, KeyListener, FocusListener, WindowListener, ItemListener, ProgressIf {
+ JPanel W = new JPanel();
+
+ JPanel long = new JPanel();
+
+ JLabel Q = new JLabel();
+
+ JLabel s = new JLabel();
+
+ JPanel ac = new JPanel();
+
+ JLabel void = new JLabel();
+
+ JProgressBar ak = new JProgressBar();
+
+ JLabel am = new JLabel("Device IP Address / Name:");
+
+ a ag = new a();
+
+ JButton f = new JButton();
+
+ JLabel a = new JLabel("Enter username and password for {0}");
+
+ JLabel l = new JLabel("Username:");
+
+ JTextField v = new JTextField(15);
+
+ JLabel K = new JLabel("Password:");
+
+ JPasswordField Z = new JPasswordField(15);
+
+ JCheckBox O = new JCheckBox("Remember the username of the specified device on this computer");
+
+ x ae = new x();
+
+ JPanel m = new JPanel();
+
+ JButton N = new JButton("OK");
+
+ JButton u = new JButton("Close");
+
+ JToolBar h = new JToolBar();
+
+ JLabel null = new JLabel();
+
+ JButton j;
+
+ GridBagLayout H = new GridBagLayout();
+
+ GridBagLayout d = new GridBagLayout();
+
+ FlowLayout goto = new FlowLayout(1, 8, 8);
+
+ GridBagLayout char = new GridBagLayout();
+
+ BorderLayout aa = new BorderLayout();
+
+ boolean q = true;
+
+ private String b;
+
+ private PasswordAuthentication C;
+
+ static Exception r;
+
+ public final String A = "ASDM will start up using Java Web Start. For ASDM 7.3(1) and later, you will be prompted to follow the wizard to create a self-signed certficate. For earlier ASDM versions, follow the manual instructions to create a self-signed certificate.Would you like to continue with self-signed cert enrollment?";
+
+ private static final String af = "java.security.cert.CertificateException: Java couldn't trust Server";
+
+ private static final String S = "javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Java couldn't trust Server";
+
+ private String i;
+
+ static boolean w;
+
+ public static boolean do;
+
+ static boolean n;
+
+ static s ad;
+
+ static u ah;
+
+ private String p;
+
+ private String int;
+
+ private String Y;
+
+ private int M;
+
+ private String U;
+
+ private String case = "";
+
+ private String else;
+
+ private String e;
+
+ private Hashtable an = new Hashtable();
+
+ public static final String T = "Invalid username or password. Please try again.";
+
+ static final String[] X;
+
+ static final String g = "Loading cached software...";
+
+ static String F;
+
+ static String B;
+
+ static String new;
+
+ public static final String V = "ASDM-IDM";
+
+ public static String I;
+
+ public static String c;
+
+ public static String t;
+
+ public static String D;
+
+ public static String R;
+
+ private static final String ai = "ipAddress";
+
+ private static final String z = "userName";
+
+ private static final String byte = "preferredIP";
+
+ private static final String ab = "A newer version of the ASDM-IDM Launcher is available.";
+
+ private static final String G = "To upgrade, click the \"Upgrade Now\" button.";
+
+ private static final String k = "To upgrade, click the \"Download Now\" button.";
+
+ public static final int o = 64;
+
+ private static boolean if;
+
+ private static boolean for;
+
+ private static String E;
+
+ private static int L;
+
+ private static int try;
+
+ private int P = L;
+
+ private String aj = "asdm50-install.msi";
+
+ private static final String[] J;
+
+ private static final String al = "=";
+
+ public s() {
+ this.ae.a(this);
+ try {
+ void();
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ }
+ setIconImages(t.if());
+ char();
+ String str = "Cisco ASDM-IDM Launcher ";
+ if (this.int != null)
+ str = str + "v" + this.int;
+ setTitle(str);
+ h();
+ this.ae.byte();
+ b();
+ setResizable(false);
+ }
+
+ private static void j() {
+ String str = System.getProperty("java.version");
+ if (str != null && str.length() > 5) {
+ str = str.substring(0, 5);
+ if (str.compareTo("1.4.2") < 0) {
+ JOptionPane.showMessageDialog(new Frame(), "This machine does not have the required Java Runtime Environment (JRE).\nJRE 1.4.2 or higher is required.\n\n You can download the JRE from http://java.sun.com/j2se/downloads\n", "Error", 0);
+ System.exit(0);
+ }
+ }
+ }
+
+ public static void if(String[] paramArrayOfString) {
+ j();
+ String str = do(paramArrayOfString);
+ g();
+ i.a(for);
+ if (!for)
+ ClassUtil.initExecutionEnvironment();
+ if (str != null) {
+ d d = new d();
+ d.int(str);
+ }
+ k();
+ ad = new s();
+ ad.pack();
+ ad.setLocationRelativeTo(null);
+ SgzApplet.setProgressReceiver(ad);
+ ah = new u(null, ad);
+ Authenticator.setDefault(ah);
+ ad.setVisible(true);
+ ad.toFront();
+ if (if)
+ a(paramArrayOfString);
+ }
+
+ public void updateStatus(int paramInt1, int paramInt2, String paramString) {
+ if (paramInt1 == 2) {
+ do = true;
+ goto();
+ } else if (paramInt1 == 3) {
+ n = true;
+ }
+ a(a(paramInt1));
+ if (paramInt1 == 4) {
+ if (!this.ak.isVisible()) {
+ this.ak.setVisible(true);
+ this.ak.setStringPainted(true);
+ this.ak.setIndeterminate(false);
+ }
+ this.ak.setValue(paramInt2);
+ } else if (this.ak.isVisible()) {
+ this.ak.setVisible(false);
+ }
+ }
+
+ private void goto() {
+ String str1 = d.null(this.b);
+ String str2 = (this.O.isSelected() == true) ? this.v.getText().trim() : "";
+ this.an.put(str1, str2);
+ l();
+ }
+
+ private void void() throws Exception {
+ this.ag.setName("address");
+ this.v.setName("username");
+ this.Z.setName("password");
+ this.O.setName("rememberusername");
+ if (for) {
+ String str = this.a.getText();
+ str = MessageFormat.format(str, new Object[] { E });
+ this.a.setText(str);
+ } else {
+ this.a.setVisible(false);
+ }
+ this.ag.getAccessibleContext().setAccessibleName(this.am.getText());
+ this.v.getAccessibleContext().setAccessibleName(this.l.getText());
+ this.Z.getAccessibleContext().setAccessibleName(this.K.getText());
+ this.Q.setIcon(t.do);
+ this.s.setIcon(t.case);
+ getRootPane().setDefaultButton(this.N);
+ this.long.setBackground(Color.white);
+ this.long.setLayout(new GridBagLayout());
+ this.long.add(this.Q, new GridBagConstraints(0, 0, 1, 1, 1.0D, 0.0D, 10, 2, new Insets(0, 0, 0, 0), 0, 0));
+ this.long.add(this.s, new GridBagConstraints(1, 0, 1, 1, 0.0D, 0.0D, 13, 0, new Insets(0, 15, 0, 10), 0, 0));
+ this.ag.setEnabled(true);
+ this.ag.setEditable(true);
+ Dimension dimension = this.ag.getPreferredSize();
+ dimension.width = (this.v.getPreferredSize()).width;
+ this.ag.setPreferredSize(dimension);
+ this.f.setIcon(t.if);
+ this.f.setToolTipText("Clear device IP address/name list");
+ this.f.getAccessibleContext().setAccessibleName(this.f.getToolTipText());
+ this.ak.setName("progressBar");
+ this.ak.setStringPainted(true);
+ this.ac.setLayout(this.d);
+ this.ac.setName("progressPanel");
+ this.void.setName("errorLabel");
+ this.ac.add(this.void, new GridBagConstraints(0, 0, 1, 1, 1.0D, 0.0D, 17, 2, new Insets(0, 8, 8, 8), 0, 0));
+ this.ac.add(this.ak, new GridBagConstraints(1, 0, 1, 1, 0.0D, 0.0D, 17, 0, new Insets(0, 8, 8, 8), 0, 0));
+ this.ac.setPreferredSize(this.ac.getPreferredSize());
+ this.N.setPreferredSize(this.u.getPreferredSize());
+ this.W.setLayout(this.H);
+ this.W.add(this.long, new GridBagConstraints(0, 0, 3, 1, 1.0D, 0.0D, 11, 2, new Insets(0, 0, 8, 0), 0, 0));
+ this.W.add(this.ac, new GridBagConstraints(0, 1, 3, 1, 1.0D, 0.0D, 11, 2, new Insets(0, 0, 0, 0), 0, 0));
+ if (!for) {
+ this.W.add(this.am, new GridBagConstraints(0, 2, 1, 1, 0.0D, 0.0D, 17, 0, new Insets(0, 8, 8, 4), 0, 0));
+ this.W.add(this.ag, new GridBagConstraints(1, 2, 1, 1, 1.0D, 0.0D, 17, 2, new Insets(0, 0, 8, 8), 36, 2));
+ }
+ this.W.add(this.a, new GridBagConstraints(0, 3, 3, 1, 1.0D, 0.0D, 17, 2, new Insets(0, 8, 8, 8), 0, 0));
+ this.W.add(this.l, new GridBagConstraints(0, 4, 1, 1, 0.0D, 0.0D, 17, 0, new Insets(0, 8, 8, 4), 0, 0));
+ this.W.add(this.v, new GridBagConstraints(1, 4, 1, 1, 1.0D, 0.0D, 17, 2, new Insets(0, 0, 8, 8), 0, 0));
+ this.W.add(this.K, new GridBagConstraints(0, 5, 1, 1, 0.0D, 0.0D, 17, 0, new Insets(0, 8, 8, 4), 0, 0));
+ this.W.add(this.Z, new GridBagConstraints(1, 5, 1, 1, 1.0D, 0.0D, 17, 2, new Insets(0, 0, 8, 8), 0, 0));
+ this.W.add(this.O, new GridBagConstraints(1, 6, 1, 1, 1.0D, 0.0D, 17, 2, new Insets(0, 0, 8, 8), 0, 0));
+ this.m.setLayout(this.goto);
+ if (System.getProperty("os.name", "Windows").startsWith("Mac OS")) {
+ this.m.add(this.u);
+ this.m.add(this.N);
+ } else {
+ this.m.add(this.N);
+ this.m.add(this.u);
+ }
+ this.W.add(new JLabel(), new GridBagConstraints(0, 9, 3, 1, 1.0D, 1.0D, 10, 1, new Insets(0, 0, 0, 0), 0, 0));
+ this.W.add(this.m, new GridBagConstraints(0, 10, 3, 1, 1.0D, 0.0D, 17, 2, new Insets(0, 0, 0, 0), 0, 0));
+ this.null.setIcon(t.try);
+ this.null.setToolTipText("SSL secured");
+ this.j = new JButton(new AbstractAction("", t.new) {
+ public void actionPerformed(ActionEvent param1ActionEvent) {
+ i.a();
+ }
+ });
+ this.j.setToolTipText("Show Java console");
+ this.j.getAccessibleContext().setAccessibleName(this.j.getToolTipText());
+ this.h.setFloatable(false);
+ this.h.add(Box.createHorizontalGlue());
+ if (!for) {
+ this.h.addSeparator();
+ this.h.add(this.f);
+ }
+ this.h.addSeparator();
+ this.h.add(this.j);
+ this.h.addSeparator();
+ this.h.add(this.null);
+ this.W.add(new JSeparator(), new GridBagConstraints(0, 10, 3, 1, 1.0D, 0.0D, 17, 2, new Insets(0, 0, 0, 0), 0, 0));
+ this.W.add(this.h, new GridBagConstraints(0, 11, 3, 1, 1.0D, 0.0D, 17, 2, new Insets(0, 0, 0, 0), 0, 0));
+ this.ae.setVisible(false);
+ this.ak.setVisible(false);
+ getContentPane().setLayout(this.aa);
+ getContentPane().add(this.W, "Center");
+ }
+
+ private static String a(int paramInt) {
+ String str = "";
+ if (paramInt >= 0 && paramInt <= 7) {
+ try {
+ str = X[paramInt];
+ } catch (Exception exception) {
+ str = "";
+ }
+ if (n && paramInt == 4)
+ str = "Loading cached software...";
+ }
+ return str;
+ }
+
+ private static void do() {
+ System.out.println("\n---------------------------------------------\n");
+ System.out.println("Application Logging Ended at " + new Date());
+ }
+
+ public static void g() {
+ String str1 = System.getProperty("user.home");
+ if (str1 == null)
+ str1 = ".";
+ String str2 = str1 + File.separator + System.getProperty("applicationDir", ".asdm");
+ I = str2 + File.separator + "cache";
+ I = I.replace('\\', '/');
+ c = str2 + File.separator + "data";
+ t = c + File.separator + "deviceinfo.conf";
+ D = str2 + File.separator + "log";
+ String str3 = System.getProperty("user.dir");
+ if (str3 == null)
+ str3 = ".";
+ R = str3 + File.separator + "demo";
+ }
+
+ public static void k() {
+ t.a();
+ }
+
+ private void char() {
+ String str = "/version.prop";
+ try {
+ InputStream inputStream = Launcher.a(str);
+ Properties properties = new Properties();
+ properties.load(inputStream);
+ this.p = properties.getProperty("launcher.version");
+ inputStream.close();
+ System.out.println("Local Launcher Version = " + this.p);
+ this.int = int(this.p);
+ System.out.println("Local Launcher Version Display = " + this.int);
+ } catch (Exception exception) {
+ System.out.println("Exception in loadVersionInfo: Version file not found");
+ }
+ }
+
+ private void b() {
+ Properties properties = new Properties();
+ FileInputStream fileInputStream = null;
+ File file = new File(t);
+ try {
+ fileInputStream = new FileInputStream(file);
+ if (fileInputStream != null)
+ properties.load(fileInputStream);
+ } catch (FileNotFoundException fileNotFoundException) {
+ System.out.println("Cannot read profile file " + t + ".");
+ } catch (IOException iOException) {
+ System.out.println("Cannot read profile file " + t + ".");
+ iOException.printStackTrace(System.out);
+ } finally {
+ file = null;
+ if (fileInputStream != null)
+ try {
+ fileInputStream.close();
+ fileInputStream = null;
+ } catch (IOException iOException) {
+ System.out.println("Launcher: problem closing input stream.");
+ }
+ }
+ Vector vector = new Vector(properties.size());
+ for (byte b = 0; b < properties.size(); b++) {
+ String str1 = properties.getProperty("ipAddress" + b);
+ String str2 = properties.getProperty("userName" + b);
+ if (str1 != null) {
+ this.an.put(str1, (str2 != null) ? str2 : "");
+ vector.add(str1);
+ }
+ }
+ this.ag.a(vector);
+ String str = properties.getProperty("preferredIP");
+ if (str != null)
+ this.ag.configureEditor(this.ag.getEditor(), str);
+ itemStateChanged(new ItemEvent(this.ag, 0, "OK", 1));
+ }
+
+ private void l() {
+ Properties properties = new Properties();
+ Enumeration enumeration = this.an.keys();
+ for (byte b = 1; enumeration.hasMoreElements(); b++) {
+ String str1 = enumeration.nextElement();
+ String str2 = (String)this.an.get(str1);
+ if (str1 != null)
+ properties.setProperty("ipAddress" + b, str1);
+ if (str2 != null)
+ properties.setProperty("userName" + b, str2);
+ }
+ properties.setProperty("preferredIP", d.null(this.b));
+ FileOutputStream fileOutputStream = null;
+ File file = new File(t);
+ if (!file.exists())
+ file.getParentFile().mkdirs();
+ try {
+ fileOutputStream = new FileOutputStream(file);
+ properties.store(fileOutputStream, "Generated by Launcher. Please do not edit.");
+ } catch (FileNotFoundException fileNotFoundException) {
+ System.out.println("Cannot write to profile file " + t);
+ } catch (IOException iOException) {
+ System.out.println("Cannot write to profile file " + t);
+ } finally {
+ file = null;
+ if (fileOutputStream != null)
+ try {
+ fileOutputStream.close();
+ fileOutputStream = null;
+ } catch (IOException iOException) {
+ System.out.println("Launcher: problem closing output stream.");
+ }
+ }
+ }
+
+ private void h() {
+ addWindowListener(this);
+ this.v.addKeyListener(this);
+ this.v.addFocusListener(this);
+ this.Z.addKeyListener(this);
+ this.Z.addFocusListener(this);
+ this.N.addActionListener(this);
+ this.N.addKeyListener(this);
+ this.u.addActionListener(this);
+ this.ag.addItemListener(this);
+ this.f.addActionListener(this);
+ }
+
+ public void n() {
+ this.b = "http://localhost";
+ a("Contacting the local server. Please wait...");
+ try {
+ h h = new h();
+ h.try(this.ae.if());
+ String str = this.ae.a();
+ if (!h.a(str))
+ str = d.else(str);
+ h.new(str);
+ h.do();
+ this.b += ":" + h.if();
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ }
+ else();
+ }
+
+ public void actionPerformed(ActionEvent paramActionEvent) {
+ String str1 = null;
+ String str2 = null;
+ Object object = paramActionEvent.getSource();
+ if (object == this.N) {
+ if (ClassUtil.try == 6 && ClassUtil.a(this.v.getText(), new String(this.Z.getPassword()))) {
+ JOptionPane.showMessageDialog(this, " JRE 6 does not support long username/password. The recommendation is to upgrade to JRE 7. ", "Error", 0);
+ } else {
+ System.out.println("OK button clicked");
+ a("");
+ n = false;
+ this.b = a();
+ if (this.b.length() == 0) {
+ JOptionPane.showMessageDialog(this, "Please provide the IP address or hostname of the device to connect to.", "Error", 0);
+ return;
+ }
+ if (!this.b.startsWith("http") && this.b.indexOf("/admin") != -1) {
+ JOptionPane.showMessageDialog(this, this.b + " is not a valid IP address or hostname.", "Error", 0);
+ return;
+ }
+ d.try(this.b);
+ if (this.v.getText() != null && this.v.getText().length() > 64) {
+ JOptionPane.showMessageDialog(this, "Username must be less than 64 chars.", "Error", 0);
+ return;
+ }
+ a(false);
+ this.C = new PasswordAuthentication(this.v.getText(), this.Z.getPassword());
+ ah.a(this.C);
+ this.else = i();
+ this.e = long();
+ a("Contacting the device. Please wait...");
+ if (!w) {
+ if (!for)
+ w.a();
+ w = true;
+ }
+ if (this.b.startsWith("http")) {
+ if (String_.contains(this.b, "?")) {
+ str1 = this.b.substring(0, this.b.indexOf("?")) + "/idm/issue.net";
+ str2 = this.b.substring(0, this.b.indexOf("?")) + "/admin/login_banner";
+ } else {
+ str1 = this.b + "/idm/issue.net";
+ str2 = this.b + "/admin/login_banner";
+ }
+ } else {
+ str1 = "https://" + this.b + "/idm/issue.net";
+ str2 = "https://" + this.b + "/admin/login_banner";
+ }
+ if (d.else >= 4) {
+ System.out.println("System Parameters ---- Started-----");
+ for (Map.Entry