// Token: 0x06002664 RID: 9828 RVA: 0x00088ED0 File Offset: 0x000870D0
        private static int smethod_1(ref string s1, ref int s1Length, ref int i1, ref string s2, ref int s2Length, ref int i2, bool zeroesFirst)
        {
            int num  = i1;
            int num2 = i2;
            int num3 = i1;
            int num4 = i2;

            Class408.smethod_2(ref s1, ref s1Length, i1, ref num, ref num3);
            Class408.smethod_2(ref s2, ref s2Length, i2, ref num2, ref num4);
            int num5 = i1;

            i1 = num3 - 1;
            int num6 = i2;

            i2 = num4 - 1;
            if (zeroesFirst)
            {
                int num7 = num - num5;
                int num8 = num2 - num6;
                if (num7 > num8)
                {
                    return(-1);
                }
                if (num7 < num8)
                {
                    return(1);
                }
            }
            int num9  = num4 - num2;
            int num10 = num3 - num;

            if (num9 == num10)
            {
                int j     = num;
                int num11 = num2;
                while (j <= i1)
                {
                    int num12 = (int)(s1[j] - s2[num11]);
                    if (num12 != 0)
                    {
                        return(num12);
                    }
                    j++;
                    num11++;
                }
                num9  = num3 - num5;
                num10 = num4 - num6;
                if (num9 == num10)
                {
                    return(0);
                }
            }
            if (num9 > num10)
            {
                return(-1);
            }
            return(1);
        }
 // Token: 0x06002662 RID: 9826 RVA: 0x000110BB File Offset: 0x0000F2BB
 public int Compare(string x, string y)
 {
     if (x == null && y == null)
     {
         return(0);
     }
     if (x == null)
     {
         return(-1);
     }
     if (y == null)
     {
         return(1);
     }
     return(Class408.smethod_0(x, y, this.bool_0));
 }
        // Token: 0x06002661 RID: 9825 RVA: 0x00088D00 File Offset: 0x00086F00
        int IComparer.Compare(object x, object y)
        {
            if (x == null && y == null)
            {
                return(0);
            }
            if (x == null)
            {
                return(-1);
            }
            if (y == null)
            {
                return(1);
            }
            string text  = x as string;
            string text2 = y as string;

            if (text != null && text2 != null)
            {
                return(Class408.smethod_0(text, text2, this.bool_0));
            }
            return(Comparer.Default.Compare(x, y));
        }
        // Token: 0x06002663 RID: 9827 RVA: 0x00088D50 File Offset: 0x00086F50
        private static int smethod_0(string s1, string s2, bool zeroesFirst)
        {
            if (s1 != null && s1.Length != 0)
            {
                if (s2 == null || s2.Length == 0)
                {
                    return(1);
                }
                int  length  = s1.Length;
                int  length2 = s2.Length;
                bool flag    = char.IsLetterOrDigit(s1[0]);
                bool flag2   = char.IsLetterOrDigit(s2[0]);
                if (flag && !flag2)
                {
                    return(1);
                }
                if (!flag && flag2)
                {
                    return(-1);
                }
                int num  = 0;
                int num2 = 0;
                int num3;
                for (;;)
                {
                    char c  = s1[num];
                    char c2 = s2[num2];
                    flag  = char.IsDigit(c);
                    flag2 = char.IsDigit(c2);
                    if (!flag && !flag2)
                    {
                        if (c != c2)
                        {
                            bool flag3 = char.IsLetter(c);
                            bool flag4 = char.IsLetter(c2);
                            if (flag3 && flag4)
                            {
                                c    = char.ToUpper(c);
                                c2   = char.ToUpper(c2);
                                num3 = (int)(c - c2);
                                if (num3 != 0)
                                {
                                    return(num3);
                                }
                            }
                            else if (!flag3 && !flag4)
                            {
                                num3 = (int)(c - c2);
                                if (num3 != 0)
                                {
                                    return(num3);
                                }
                            }
                            else
                            {
                                if (flag3)
                                {
                                    return(1);
                                }
                                if (flag4)
                                {
                                    return(-1);
                                }
                            }
                        }
                    }
                    else if (flag && flag2)
                    {
                        num3 = Class408.smethod_1(ref s1, ref length, ref num, ref s2, ref length2, ref num2, zeroesFirst);
                        if (num3 != 0)
                        {
                            break;
                        }
                    }
                    else
                    {
                        if (flag)
                        {
                            return(-1);
                        }
                        if (flag2)
                        {
                            return(1);
                        }
                    }
                    num++;
                    num2++;
                    if (num >= length)
                    {
                        goto IL_156;
                    }
                    if (num2 >= length2)
                    {
                        return(1);
                    }
                }
                return(num3);

IL_156:
                if (num2 >= length2)
                {
                    return(0);
                }
                return(-1);
            }
            else
            {
                if (s2 != null && s2.Length != 0)
                {
                    return(-1);
                }
                return(0);
            }
        }