public final class nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks extends java.lang.Object
{
private static final java.util.regex.Pattern MISSING_SPACE;
private static final java.util.regex.Pattern MULTIPLE_SPACES;
private static final java.util.regex.Pattern AVOID_BASE64_MATCH;
private static final java.util.regex.Pattern ANDROID_DASH_VERSION;
private static final java.util.regex.Pattern PROPERTY_PRODUCT_VERSION_FIX;
private static final java.util.regex.Pattern GLUED_VERSION_FIX;
private static final java.util.regex.Pattern GLUED_VERSION_FIX_2;
private static final java.util.regex.Pattern MISSING_COMMENT_BRACES;
private static final java.util.regex.Pattern MISSING_COMMENT_BRACES_OPERA;
private static final java.util.regex.Pattern STRIP_SURROUNDING_QUOTES;
private void <init>()
{
nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks v;
v := @this: nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks;
specialinvoke v.<java.lang.Object: void <init>()>();
return;
}
public static java.lang.String fixIt(java.lang.String)
{
java.util.regex.Matcher v, v, v, v, v, v, v, v, v, v;
boolean v, v, v, v, v, v, v, v;
java.lang.Exception v;
java.util.regex.Pattern v, v, v, v, v, v, v, v, v, v;
int v, v;
java.lang.String v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v;
char v, v;
v := @parameter: java.lang.String;
if v == null goto label;
v = virtualinvoke v.<java.lang.String: boolean isEmpty()>();
if v == 0 goto label;
label:
return v;
label:
v = <nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern MULTIPLE_SPACES>;
v = virtualinvoke v.<java.util.regex.Pattern: java.util.regex.Matcher matcher(java.lang.CharSequence)>(v);
v = virtualinvoke v.<java.util.regex.Matcher: java.lang.String replaceAll(java.lang.String)>(" ");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "\u2002", " ");
v = virtualinvoke v.<java.lang.String: char charAt(int)>(0);
if v != 32 goto label;
v = virtualinvoke v.<java.lang.String: java.lang.String trim()>();
label:
v = <nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern STRIP_SURROUNDING_QUOTES>;
v = virtualinvoke v.<java.util.regex.Pattern: java.util.regex.Matcher matcher(java.lang.CharSequence)>(v);
v = virtualinvoke v.<java.util.regex.Matcher: java.lang.String replaceAll(java.lang.String)>("$1");
v = <nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern MISSING_COMMENT_BRACES>;
v = virtualinvoke v.<java.util.regex.Pattern: java.util.regex.Matcher matcher(java.lang.CharSequence)>(v);
v = virtualinvoke v.<java.util.regex.Matcher: java.lang.String replaceAll(java.lang.String)>("$1 ($2)$3");
v = <nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern MISSING_COMMENT_BRACES_OPERA>;
v = virtualinvoke v.<java.util.regex.Pattern: java.util.regex.Matcher matcher(java.lang.CharSequence)>(v);
v = virtualinvoke v.<java.util.regex.Matcher: java.lang.String replaceAll(java.lang.String)>("$1 ($2)$3");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "Channel/App Store", "()Channel/App Store()");
v = <nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern PROPERTY_PRODUCT_VERSION_FIX>;
v = virtualinvoke v.<java.util.regex.Pattern: java.util.regex.Matcher matcher(java.lang.CharSequence)>(v);
v = virtualinvoke v.<java.util.regex.Matcher: java.lang.String replaceAll(java.lang.String)>("() $1/$2()");
v = virtualinvoke v.<java.lang.String: boolean startsWith(java.lang.String)>("()");
if v == 0 goto label;
v = virtualinvoke v.<java.lang.String: java.lang.String substring(int)>(2);
v = virtualinvoke v.<java.lang.String: java.lang.String trim()>();
label:
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "SSL/TLS", "SSL TLS");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "QwantMobile", " QwantMobile");
v = virtualinvoke v.<java.lang.String: boolean contains(java.lang.CharSequence)>("MSIE");
if v == 0 goto label;
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "MSIE7", "MSIE 7");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "MSIE8", "MSIE 8");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "MSIE9", "MSIE 9");
label:
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "MSOffice", "MS-Office");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "Ant.com Toolbar", "Ant.com_Toolbar");
v = <nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern ANDROID_DASH_VERSION>;
v = virtualinvoke v.<java.util.regex.Pattern: java.util.regex.Matcher matcher(java.lang.CharSequence)>(v);
v = virtualinvoke v.<java.util.regex.Matcher: java.lang.String replaceAll(java.lang.String)>("$1 $2");
v = <nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern MISSING_SPACE>;
v = virtualinvoke v.<java.util.regex.Pattern: java.util.regex.Matcher matcher(java.lang.CharSequence)>(v);
v = virtualinvoke v.<java.util.regex.Matcher: java.lang.String replaceAll(java.lang.String)>("$1 $2");
v = <nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern AVOID_BASE64_MATCH>;
v = virtualinvoke v.<java.util.regex.Pattern: java.util.regex.Matcher matcher(java.lang.CharSequence)>(v);
v = virtualinvoke v.<java.util.regex.Matcher: java.lang.String replaceAll(java.lang.String)>("$1 $2");
v = <nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern GLUED_VERSION_FIX>;
v = virtualinvoke v.<java.util.regex.Pattern: java.util.regex.Matcher matcher(java.lang.CharSequence)>(v);
v = virtualinvoke v.<java.util.regex.Matcher: java.lang.String replaceAll(java.lang.String)>("$1 $2");
v = <nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern GLUED_VERSION_FIX_2>;
v = virtualinvoke v.<java.util.regex.Pattern: java.util.regex.Matcher matcher(java.lang.CharSequence)>(v);
v = virtualinvoke v.<java.util.regex.Matcher: java.lang.String replaceAll(java.lang.String)>("$1 $2 ");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, " (Macintosh); ", " (Macintosh; ");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "Microsoft Windows NT 6.2.9200.0);", "Microsoft Windows NT 6.2.9200.0;");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "You Build/VM", "You Build/VM)");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "(/", "(Unknown/");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "; /", "; Unknown/");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, ", _TV_", " _TV_");
v = virtualinvoke v.<java.lang.String: char charAt(int)>(0);
if v == 40 goto label;
if v != 91 goto label;
label:
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("FakeYauaaProduct/3.14 \u0001");
goto label;
label:
if v != 47 goto label;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("FakeYauaaProduct\u0001");
label:
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, ",gzip(gfe)", "");
v = staticinvoke <nl.basjes.parse.useragent.utils.Normalize: java.lang.String replaceString(java.lang.String,java.lang.String,java.lang.String)>(v, "__", " ");
v = virtualinvoke v.<java.lang.String: int indexOf(int)>(37);
v = (int) -1;
if v == v goto label;
v = virtualinvoke v.<java.lang.String: boolean contains(java.lang.CharSequence)>("%20");
if v != 0 goto label;
v = virtualinvoke v.<java.lang.String: boolean contains(java.lang.CharSequence)>("%3B");
if v != 0 goto label;
v = virtualinvoke v.<java.lang.String: boolean contains(java.lang.CharSequence)>("%25");
if v != 0 goto label;
v = virtualinvoke v.<java.lang.String: boolean contains(java.lang.CharSequence)>("%2F");
if v != 0 goto label;
v = virtualinvoke v.<java.lang.String: boolean contains(java.lang.CharSequence)>("%28");
if v == 0 goto label;
label:
v = staticinvoke <java.net.URLDecoder: java.lang.String decode(java.lang.String,java.lang.String)>(v, "UTF-8");
label:
goto label;
label:
v := @caughtexception;
label:
return v;
catch java.io.UnsupportedEncodingException from label to label with label;
catch java.lang.IllegalArgumentException from label to label with label;
}
static void <clinit>()
{
java.util.regex.Pattern v, v, v, v, v, v, v, v, v, v;
v = staticinvoke <java.util.regex.Pattern: java.util.regex.Pattern compile(java.lang.String)>("(/\\d+\\.\\d+)([A-Z][a-z][a-z][a-z]+ )");
<nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern MISSING_SPACE> = v;
v = staticinvoke <java.util.regex.Pattern: java.util.regex.Pattern compile(java.lang.String)>(" {2,}");
<nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern MULTIPLE_SPACES> = v;
v = staticinvoke <java.util.regex.Pattern: java.util.regex.Pattern compile(java.lang.String,int)>("(android/\\d+)(/)", 2);
<nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern AVOID_BASE64_MATCH> = v;
v = staticinvoke <java.util.regex.Pattern: java.util.regex.Pattern compile(java.lang.String,int)>("(android)-(\\d+)", 2);
<nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern ANDROID_DASH_VERSION> = v;
v = staticinvoke <java.util.regex.Pattern: java.util.regex.Pattern compile(java.lang.String,int)>("(NetType|Language|AppName|app_version|ByteLocale|ByteFullLocale|Region)/([\\da-z._-]+)", 2);
<nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern PROPERTY_PRODUCT_VERSION_FIX> = v;
v = staticinvoke <java.util.regex.Pattern: java.util.regex.Pattern compile(java.lang.String,int)>("(Java|Wazzup)(\\d)", 2);
<nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern GLUED_VERSION_FIX> = v;
v = staticinvoke <java.util.regex.Pattern: java.util.regex.Pattern compile(java.lang.String,int)>("(OS|[a-z][a-z_][a-z_][a-z_]+[a-z])_([\\d_.]+) ", 2);
<nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern GLUED_VERSION_FIX_2> = v;
v = staticinvoke <java.util.regex.Pattern: java.util.regex.Pattern compile(java.lang.String,int)>("^(Mozilla/[^ ]+) ([^(][^)]+?)( Gecko/| AppleWebKit/| Safari/| Mobile Safari/)", 2);
<nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern MISSING_COMMENT_BRACES> = v;
v = staticinvoke <java.util.regex.Pattern: java.util.regex.Pattern compile(java.lang.String,int)>("^(Opera/[^ ]+) ([^(][^)]+?)( Presto/| Version/)", 2);
<nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern MISSING_COMMENT_BRACES_OPERA> = v;
v = staticinvoke <java.util.regex.Pattern: java.util.regex.Pattern compile(java.lang.String,int)>("^\'(.*)\'$", 2);
<nl.basjes.parse.useragent.parse.EvilManualUseragentStringHacks: java.util.regex.Pattern STRIP_SURROUNDING_QUOTES> = v;
return;
}
}