// Token: 0x06000380 RID: 896 RVA: 0x000173A8 File Offset: 0x000155A8
 public Class_152(string str_0, bool bool_0)
 {
     if (!string.IsNullOrEmpty(str_0))
     {
         this.field_0 = Class_152.pmethod_499(str_0);
     }
     this.prop_1 = bool_0;
 }
        // Token: 0x06000386 RID: 902 RVA: 0x00017684 File Offset: 0x00015884
        private static Class_145 pmethod_499(string str_0)
        {
            if (str_0 == null)
            {
                return(null);
            }
            str_0 = Class_152.lmethod_498(str_0);
            if (str_0.IndexOf(" ") == -1)
            {
                str_0 = "name = " + str_0;
            }
            string[] array = str_0.Trim().Split(new char[]
            {
                ' ',
                '\t'
            });
            if (array.Length < 3)
            {
                throw new ArgumentException(str_0);
            }
            Class_145 class_ = null;
            Stack <Class_152.NClass_0> stack  = new Stack <Class_152.NClass_0>();
            Stack <Class_145>          stack2 = new Stack <Class_145>();

            stack.Push(Class_152.NClass_0.field_4);
            int i = 0;

            while (i < array.Length)
            {
                string text = array[i].ToLower();
                string key;
                if ((key = text) != null)
                {
                    if (Class_217.field_0 == null)
                    {
                        Class_217.field_0 = new Dictionary <string, int>(16)
                        {
                            {
                                "and",
                                0
                            },
                            {
                                "xor",
                                1
                            },
                            {
                                "or",
                                2
                            },
                            {
                                "(",
                                3
                            },
                            {
                                ")",
                                4
                            },
                            {
                                "atime",
                                5
                            },
                            {
                                "ctime",
                                6
                            },
                            {
                                "mtime",
                                7
                            },
                            {
                                "length",
                                8
                            },
                            {
                                "size",
                                9
                            },
                            {
                                "filename",
                                10
                            },
                            {
                                "name",
                                11
                            },
                            {
                                "attrs",
                                12
                            },
                            {
                                "attributes",
                                13
                            },
                            {
                                "type",
                                14
                            },
                            {
                                "",
                                15
                            }
                        };
                    }
                    int num;
                    if (Class_217.field_0.TryGetValue(key, out num))
                    {
                        Class_152.NClass_0 nclass_;
                        switch (num)
                        {
                        case 0:
                        case 1:
                        case 2:
                        {
                            nclass_ = stack.Peek();
                            if (nclass_ != Class_152.NClass_0.field_6)
                            {
                                throw new ArgumentException(string.Join(" ", array, i, array.Length - i));
                            }
                            if (array.Length <= i + 3)
                            {
                                throw new ArgumentException(string.Join(" ", array, i, array.Length - i));
                            }
                            Class_142 class_2 = (Class_142)Enum.Parse(typeof(Class_142), array[i].ToUpper(), true);
                            class_ = new Class_151
                            {
                                field_1 = class_,
                                prop_0  = null,
                                field_0 = class_2
                            };
                            stack.Push(nclass_);
                            stack.Push(Class_152.NClass_0.field_7);
                            stack2.Push(class_);
                            break;
                        }

                        case 3:
                            nclass_ = stack.Peek();
                            if (nclass_ != Class_152.NClass_0.field_4 && nclass_ != Class_152.NClass_0.field_7 && nclass_ != Class_152.NClass_0.field_5)
                            {
                                throw new ArgumentException(string.Join(" ", array, i, array.Length - i));
                            }
                            if (array.Length <= i + 4)
                            {
                                throw new ArgumentException(string.Join(" ", array, i, array.Length - i));
                            }
                            stack.Push(Class_152.NClass_0.field_5);
                            break;

                        case 4:
                            nclass_ = stack.Pop();
                            if (stack.Peek() != Class_152.NClass_0.field_5)
                            {
                                throw new ArgumentException(string.Join(" ", array, i, array.Length - i));
                            }
                            stack.Pop();
                            stack.Push(Class_152.NClass_0.field_6);
                            break;

                        case 5:
                        case 6:
                        case 7:
                        {
                            if (array.Length <= i + 2)
                            {
                                throw new ArgumentException(string.Join(" ", array, i, array.Length - i));
                            }
                            DateTime dateTime;
                            try
                            {
                                dateTime = DateTime.ParseExact(array[i + 2], "yyyy-MM-dd-HH:mm:ss", null);
                            }
                            catch (FormatException)
                            {
                                try
                                {
                                    dateTime = DateTime.ParseExact(array[i + 2], "yyyy/MM/dd-HH:mm:ss", null);
                                }
                                catch (FormatException)
                                {
                                    try
                                    {
                                        dateTime = DateTime.ParseExact(array[i + 2], "yyyy/MM/dd", null);
                                    }
                                    catch (FormatException)
                                    {
                                        try
                                        {
                                            dateTime = DateTime.ParseExact(array[i + 2], "MM/dd/yyyy", null);
                                        }
                                        catch (FormatException)
                                        {
                                            dateTime = DateTime.ParseExact(array[i + 2], "yyyy-MM-dd", null);
                                        }
                                    }
                                }
                            }
                            dateTime = DateTime.SpecifyKind(dateTime, DateTimeKind.Local).ToUniversalTime();
                            class_   = new Class_147
                            {
                                field_1 = (Class_143)Enum.Parse(typeof(Class_143), array[i], true),
                                field_0 = (Class_144)Class_153.Parse(typeof(Class_144), array[i + 1]),
                                field_2 = dateTime
                            };
                            i += 2;
                            stack.Push(Class_152.NClass_0.field_6);
                            break;
                        }

                        case 8:
                        case 9:
                        {
                            if (array.Length <= i + 2)
                            {
                                throw new ArgumentException(string.Join(" ", array, i, array.Length - i));
                            }
                            string text2 = array[i + 2];
                            long   num2;
                            if (text2.ToUpper().EndsWith("K"))
                            {
                                num2 = long.Parse(text2.Substring(0, text2.Length - 1)) * 1024L;
                            }
                            else if (text2.ToUpper().EndsWith("KB"))
                            {
                                num2 = long.Parse(text2.Substring(0, text2.Length - 2)) * 1024L;
                            }
                            else if (text2.ToUpper().EndsWith("M"))
                            {
                                num2 = long.Parse(text2.Substring(0, text2.Length - 1)) * 1024L * 1024L;
                            }
                            else if (text2.ToUpper().EndsWith("MB"))
                            {
                                num2 = long.Parse(text2.Substring(0, text2.Length - 2)) * 1024L * 1024L;
                            }
                            else if (text2.ToUpper().EndsWith("G"))
                            {
                                num2 = long.Parse(text2.Substring(0, text2.Length - 1)) * 1024L * 1024L * 1024L;
                            }
                            else if (text2.ToUpper().EndsWith("GB"))
                            {
                                num2 = long.Parse(text2.Substring(0, text2.Length - 2)) * 1024L * 1024L * 1024L;
                            }
                            else
                            {
                                num2 = long.Parse(array[i + 2]);
                            }
                            class_ = new Class_146
                            {
                                field_1 = num2,
                                field_0 = (Class_144)Class_153.Parse(typeof(Class_144), array[i + 1])
                            };
                            i += 2;
                            stack.Push(Class_152.NClass_0.field_6);
                            break;
                        }

                        case 10:
                        case 11:
                        {
                            if (array.Length <= i + 2)
                            {
                                throw new ArgumentException(string.Join(" ", array, i, array.Length - i));
                            }
                            Class_144 class_3 = (Class_144)Class_153.Parse(typeof(Class_144), array[i + 1]);
                            if (class_3 != Class_144.NotEqualTo && class_3 != Class_144.EqualTo)
                            {
                                throw new ArgumentException(string.Join(" ", array, i, array.Length - i));
                            }
                            string text3 = array[i + 2];
                            if (text3.StartsWith("'") && text3.EndsWith("'"))
                            {
                                text3 = text3.Substring(1, text3.Length - 2).Replace("\u0006", " ");
                            }
                            class_ = new Class_148
                            {
                                prop_0  = text3,
                                field_2 = class_3
                            };
                            i += 2;
                            stack.Push(Class_152.NClass_0.field_6);
                            break;
                        }

                        case 12:
                        case 13:
                        case 14:
                        {
                            if (array.Length <= i + 2)
                            {
                                throw new ArgumentException(string.Join(" ", array, i, array.Length - i));
                            }
                            Class_144 class_4 = (Class_144)Class_153.Parse(typeof(Class_144), array[i + 1]);
                            if (class_4 != Class_144.NotEqualTo && class_4 != Class_144.EqualTo)
                            {
                                throw new ArgumentException(string.Join(" ", array, i, array.Length - i));
                            }
                            class_ = ((text == "type") ? new Class_149
                                {
                                    prop_0 = array[i + 2],
                                    field_1 = class_4
                                } : new Class_150
                                {
                                    prop_0 = array[i + 2],
                                    field_1 = class_4
                                });
                            i += 2;
                            stack.Push(Class_152.NClass_0.field_6);
                            break;
                        }

                        case 15:
                            stack.Push(Class_152.NClass_0.field_8);
                            break;

                        default:
                            goto IL_86F;
                        }
                        nclass_ = stack.Peek();
                        if (nclass_ == Class_152.NClass_0.field_6)
                        {
                            stack.Pop();
                            if (stack.Peek() == Class_152.NClass_0.field_7)
                            {
                                while (stack.Peek() == Class_152.NClass_0.field_7)
                                {
                                    Class_151 class_5 = stack2.Pop() as Class_151;
                                    class_5.prop_0 = class_;
                                    class_         = class_5;
                                    stack.Pop();
                                    nclass_ = stack.Pop();
                                    if (nclass_ != Class_152.NClass_0.field_6)
                                    {
                                        throw new ArgumentException("??");
                                    }
                                }
                            }
                            else
                            {
                                stack.Push(Class_152.NClass_0.field_6);
                            }
                        }
                        if (nclass_ == Class_152.NClass_0.field_8)
                        {
                            stack.Pop();
                        }
                        i++;
                        continue;
                    }
                }
IL_86F:
                throw new ArgumentException("'" + array[i] + "'");
            }
            return(class_);
        }