library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:13:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class ExtendsT1 extends F {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:15:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsT2 extends F<dynamic> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:17:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsT3 extends F<Class> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:19:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsT4 extends F<Class<dynamic>> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:25:25: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsT7 extends F<Object> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:27:25: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsT8 extends F<int> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:29:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class ExtendsS1 extends G {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:31:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsS2 extends G<dynamic> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:33:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsS3 extends G<Class> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:35:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsS4 extends G<Class<dynamic>> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:41:25: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsS7 extends G<Object> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:43:25: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsS8 extends G<int> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:45:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class ImplementsT1 implements F {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:47:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsT2 implements F<dynamic> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:49:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsT3 implements F<Class> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:51:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsT4 implements F<Class<dynamic>> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:57:31: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsT7 implements F<Object> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:59:31: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsT8 implements F<int> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:61:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class ImplementsS1 implements G {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:63:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsS2 implements G<dynamic> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:65:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsS3 implements G<Class> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:67:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsS4 implements G<Class<dynamic>> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:73:31: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsS7 implements G<Object> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:75:31: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsS8 implements G<int> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:77:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class WithT1 with F {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:79:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithT2 with F<dynamic> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:81:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithT3 with F<Class> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:83:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithT4 with F<Class<dynamic>> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:89:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithT7 with F<Object> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:91:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithT8 with F<int> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:109:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// enum EnumImplementsT1 implements F /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:111:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsT2 implements F<dynamic> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:113:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsT3 implements F<Class> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:115:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsT4 implements F<Class<dynamic>> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:121:34: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsT7 implements F<Object> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:123:34: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsT8 implements F<int> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:125:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// enum EnumImplementsS1 implements G /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:127:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsS2 implements G<dynamic> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:129:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsS3 implements G<Class> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:131:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsS4 implements G<Class<dynamic>> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:137:34: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsS7 implements G<Object> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:139:34: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsS8 implements G<int> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:141:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// enum EnumWithT1 with F /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:143:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithT2 with F<dynamic> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:145:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithT3 with F<Class> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:147:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithT4 with F<Class<dynamic>> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:153:22: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithT7 with F<Object> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:155:22: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithT8 with F<int> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:173:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// mixin MixinOnT1 on F {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:175:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnT2 on F<dynamic> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:177:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnT3 on F<Class> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:179:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnT4 on F<Class<dynamic>> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:185:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnT7 on F<Object> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:187:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnT8 on F<int> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:189:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// mixin MixinOnS1 on G {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:191:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnS2 on G<dynamic> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:193:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnS3 on G<Class> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:195:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnS4 on G<Class<dynamic>> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:201:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnS7 on G<Object> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:203:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnS8 on G<int> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:217:28: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// extension ExtensionOnT7 on F<Object> {} // Error
//                            ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:219:28: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// extension ExtensionOnT8 on F<int> {} // Error
//                            ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:233:28: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// extension ExtensionOnS7 on G<Object> {} // Error
//                            ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:235:28: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// extension ExtensionOnS8 on G<int> {} // Error
//                            ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:93:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class WithS1 with G {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:95:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithS2 with G<dynamic> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:97:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithS3 with G<Class> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:99:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithS4 with G<Class<dynamic>> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:105:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithS7 with G<Object> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:107:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithS8 with G<int> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:157:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// enum EnumWithS1 with G /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:159:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithS2 with G<dynamic> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:161:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithS3 with G<Class> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:163:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithS4 with G<Class<dynamic>> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:169:22: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithS7 with G<Object> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:171:22: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithS8 with G<int> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
import self as self;
import "dart:core" as core;

typedef F<X extends self::Class<X> = self::Class<dynamic>> = self::Class<X>;
class Class<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Class<self::Class::T%>
    : super core::Object::•()
    ;
}
class ConcreteClass extends core::Object implements self::Class<self::ConcreteClass> {
  synthetic constructor •() → self::ConcreteClass
    : super core::Object::•()
    ;
}
class G<X extends self::Class<self::G::X> = self::Class<dynamic>> extends core::Object {
  synthetic constructor •() → self::G<self::G::X>
    : super core::Object::•()
    ;
}
class ExtendsT1 extends self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsT1
    : super self::Class::•()
    ;
}
class ExtendsT2 extends self::Class<dynamic> {
  synthetic constructor •() → self::ExtendsT2
    : super self::Class::•()
    ;
}
class ExtendsT3 extends self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsT3
    : super self::Class::•()
    ;
}
class ExtendsT4 extends self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsT4
    : super self::Class::•()
    ;
}
class ExtendsT5 extends self::Class<self::ConcreteClass> {
  synthetic constructor •() → self::ExtendsT5
    : super self::Class::•()
    ;
}
class ExtendsT6 extends self::Class<self::Class<self::ConcreteClass>> {
  synthetic constructor •() → self::ExtendsT6
    : super self::Class::•()
    ;
}
class ExtendsT7 extends self::Class<core::Object> {
  synthetic constructor •() → self::ExtendsT7
    : super self::Class::•()
    ;
}
class ExtendsT8 extends self::Class<core::int> {
  synthetic constructor •() → self::ExtendsT8
    : super self::Class::•()
    ;
}
class ExtendsS1 extends self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsS1
    : super self::G::•()
    ;
}
class ExtendsS2 extends self::G<dynamic> {
  synthetic constructor •() → self::ExtendsS2
    : super self::G::•()
    ;
}
class ExtendsS3 extends self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsS3
    : super self::G::•()
    ;
}
class ExtendsS4 extends self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsS4
    : super self::G::•()
    ;
}
class ExtendsS5 extends self::G<self::ConcreteClass> {
  synthetic constructor •() → self::ExtendsS5
    : super self::G::•()
    ;
}
class ExtendsS6 extends self::G<self::Class<self::ConcreteClass>> {
  synthetic constructor •() → self::ExtendsS6
    : super self::G::•()
    ;
}
class ExtendsS7 extends self::G<core::Object> {
  synthetic constructor •() → self::ExtendsS7
    : super self::G::•()
    ;
}
class ExtendsS8 extends self::G<core::int> {
  synthetic constructor •() → self::ExtendsS8
    : super self::G::•()
    ;
}
class ImplementsT1 extends core::Object implements self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsT1
    : super core::Object::•()
    ;
}
class ImplementsT2 extends core::Object implements self::Class<dynamic> {
  synthetic constructor •() → self::ImplementsT2
    : super core::Object::•()
    ;
}
class ImplementsT3 extends core::Object implements self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsT3
    : super core::Object::•()
    ;
}
class ImplementsT4 extends core::Object implements self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsT4
    : super core::Object::•()
    ;
}
class ImplementsT5 extends core::Object implements self::Class<self::ConcreteClass> {
  synthetic constructor •() → self::ImplementsT5
    : super core::Object::•()
    ;
}
class ImplementsT6 extends core::Object implements self::Class<self::Class<self::ConcreteClass>> {
  synthetic constructor •() → self::ImplementsT6
    : super core::Object::•()
    ;
}
class ImplementsT7 extends core::Object implements self::Class<core::Object> {
  synthetic constructor •() → self::ImplementsT7
    : super core::Object::•()
    ;
}
class ImplementsT8 extends core::Object implements self::Class<core::int> {
  synthetic constructor •() → self::ImplementsT8
    : super core::Object::•()
    ;
}
class ImplementsS1 extends core::Object implements self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsS1
    : super core::Object::•()
    ;
}
class ImplementsS2 extends core::Object implements self::G<dynamic> {
  synthetic constructor •() → self::ImplementsS2
    : super core::Object::•()
    ;
}
class ImplementsS3 extends core::Object implements self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsS3
    : super core::Object::•()
    ;
}
class ImplementsS4 extends core::Object implements self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsS4
    : super core::Object::•()
    ;
}
class ImplementsS5 extends core::Object implements self::G<self::ConcreteClass> {
  synthetic constructor •() → self::ImplementsS5
    : super core::Object::•()
    ;
}
class ImplementsS6 extends core::Object implements self::G<self::Class<self::ConcreteClass>> {
  synthetic constructor •() → self::ImplementsS6
    : super core::Object::•()
    ;
}
class ImplementsS7 extends core::Object implements self::G<core::Object> {
  synthetic constructor •() → self::ImplementsS7
    : super core::Object::•()
    ;
}
class ImplementsS8 extends core::Object implements self::G<core::int> {
  synthetic constructor •() → self::ImplementsS8
    : super core::Object::•()
    ;
}
abstract class _WithT1&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT1&Object&F
    : super core::Object::•()
    ;
}
class WithT1 extends self::_WithT1&Object&F {
  synthetic constructor •() → self::WithT1
    : super self::_WithT1&Object&F::•()
    ;
}
abstract class _WithT2&Object&F = core::Object with self::Class<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT2&Object&F
    : super core::Object::•()
    ;
}
class WithT2 extends self::_WithT2&Object&F {
  synthetic constructor •() → self::WithT2
    : super self::_WithT2&Object&F::•()
    ;
}
abstract class _WithT3&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT3&Object&F
    : super core::Object::•()
    ;
}
class WithT3 extends self::_WithT3&Object&F {
  synthetic constructor •() → self::WithT3
    : super self::_WithT3&Object&F::•()
    ;
}
abstract class _WithT4&Object&F = core::Object with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT4&Object&F
    : super core::Object::•()
    ;
}
class WithT4 extends self::_WithT4&Object&F {
  synthetic constructor •() → self::WithT4
    : super self::_WithT4&Object&F::•()
    ;
}
abstract class _WithT5&Object&F = core::Object with self::Class<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT5&Object&F
    : super core::Object::•()
    ;
}
class WithT5 extends self::_WithT5&Object&F {
  synthetic constructor •() → self::WithT5
    : super self::_WithT5&Object&F::•()
    ;
}
abstract class _WithT6&Object&F = core::Object with self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT6&Object&F
    : super core::Object::•()
    ;
}
class WithT6 extends self::_WithT6&Object&F {
  synthetic constructor •() → self::WithT6
    : super self::_WithT6&Object&F::•()
    ;
}
abstract class _WithT7&Object&F = core::Object with self::Class<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT7&Object&F
    : super core::Object::•()
    ;
}
class WithT7 extends self::_WithT7&Object&F {
  synthetic constructor •() → self::WithT7
    : super self::_WithT7&Object&F::•()
    ;
}
abstract class _WithT8&Object&F = core::Object with self::Class<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT8&Object&F
    : super core::Object::•()
    ;
}
class WithT8 extends self::_WithT8&Object&F {
  synthetic constructor •() → self::WithT8
    : super self::_WithT8&Object&F::•()
    ;
}
abstract class _WithS1&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS1&Object&G
    : super core::Object::•()
    ;
}
class WithS1 extends self::_WithS1&Object&G {
  synthetic constructor •() → self::WithS1
    : super self::_WithS1&Object&G::•()
    ;
}
abstract class _WithS2&Object&G = core::Object with self::G<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS2&Object&G
    : super core::Object::•()
    ;
}
class WithS2 extends self::_WithS2&Object&G {
  synthetic constructor •() → self::WithS2
    : super self::_WithS2&Object&G::•()
    ;
}
abstract class _WithS3&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS3&Object&G
    : super core::Object::•()
    ;
}
class WithS3 extends self::_WithS3&Object&G {
  synthetic constructor •() → self::WithS3
    : super self::_WithS3&Object&G::•()
    ;
}
abstract class _WithS4&Object&G = core::Object with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS4&Object&G
    : super core::Object::•()
    ;
}
class WithS4 extends self::_WithS4&Object&G {
  synthetic constructor •() → self::WithS4
    : super self::_WithS4&Object&G::•()
    ;
}
abstract class _WithS5&Object&G = core::Object with self::G<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS5&Object&G
    : super core::Object::•()
    ;
}
class WithS5 extends self::_WithS5&Object&G {
  synthetic constructor •() → self::WithS5
    : super self::_WithS5&Object&G::•()
    ;
}
abstract class _WithS6&Object&G = core::Object with self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS6&Object&G
    : super core::Object::•()
    ;
}
class WithS6 extends self::_WithS6&Object&G {
  synthetic constructor •() → self::WithS6
    : super self::_WithS6&Object&G::•()
    ;
}
abstract class _WithS7&Object&G = core::Object with self::G<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS7&Object&G
    : super core::Object::•()
    ;
}
class WithS7 extends self::_WithS7&Object&G {
  synthetic constructor •() → self::WithS7
    : super self::_WithS7&Object&G::•()
    ;
}
abstract class _WithS8&Object&G = core::Object with self::G<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS8&Object&G
    : super core::Object::•()
    ;
}
class WithS8 extends self::_WithS8&Object&G {
  synthetic constructor •() → self::WithS8
    : super self::_WithS8&Object&G::•()
    ;
}
class EnumImplementsT1 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT1> values = #C4;
  static const field self::EnumImplementsT1 a = #C3;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsT1
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsT1.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT2 extends core::_Enum implements self::Class<dynamic> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT2> values = #C6;
  static const field self::EnumImplementsT2 a = #C5;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsT2
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsT2.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT3 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT3> values = #C8;
  static const field self::EnumImplementsT3 a = #C7;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsT3
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsT3.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT4 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT4> values = #C10;
  static const field self::EnumImplementsT4 a = #C9;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsT4
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsT4.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT5 extends core::_Enum implements self::Class<self::ConcreteClass> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT5> values = #C12;
  static const field self::EnumImplementsT5 a = #C11;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsT5
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsT5.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT6 extends core::_Enum implements self::Class<self::Class<self::ConcreteClass>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT6> values = #C14;
  static const field self::EnumImplementsT6 a = #C13;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsT6
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsT6.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT7 extends core::_Enum implements self::Class<core::Object> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT7> values = #C16;
  static const field self::EnumImplementsT7 a = #C15;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsT7
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsT7.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT8 extends core::_Enum implements self::Class<core::int> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT8> values = #C18;
  static const field self::EnumImplementsT8 a = #C17;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsT8
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsT8.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS1 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS1> values = #C20;
  static const field self::EnumImplementsS1 a = #C19;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsS1
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsS1.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS2 extends core::_Enum implements self::G<dynamic> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS2> values = #C22;
  static const field self::EnumImplementsS2 a = #C21;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsS2
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsS2.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS3 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS3> values = #C24;
  static const field self::EnumImplementsS3 a = #C23;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsS3
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsS3.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS4 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS4> values = #C26;
  static const field self::EnumImplementsS4 a = #C25;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsS4
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsS4.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS5 extends core::_Enum implements self::G<self::ConcreteClass> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS5> values = #C28;
  static const field self::EnumImplementsS5 a = #C27;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsS5
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsS5.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS6 extends core::_Enum implements self::G<self::Class<self::ConcreteClass>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS6> values = #C30;
  static const field self::EnumImplementsS6 a = #C29;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsS6
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsS6.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS7 extends core::_Enum implements self::G<core::Object> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS7> values = #C32;
  static const field self::EnumImplementsS7 a = #C31;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsS7
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsS7.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS8 extends core::_Enum implements self::G<core::int> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS8> values = #C34;
  static const field self::EnumImplementsS8 a = #C33;
  const constructor •(core::int #index, core::String #name) → self::EnumImplementsS8
    : super core::_Enum::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumImplementsS8.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT1&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT1&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT1 extends self::_EnumWithT1&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT1> values = #C36;
  static const field self::EnumWithT1 a = #C35;
  const constructor •(core::int #index, core::String #name) → self::EnumWithT1
    : super self::_EnumWithT1&_Enum&F::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithT1.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT2&_Enum&F = core::_Enum with self::Class<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT2&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT2 extends self::_EnumWithT2&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT2> values = #C38;
  static const field self::EnumWithT2 a = #C37;
  const constructor •(core::int #index, core::String #name) → self::EnumWithT2
    : super self::_EnumWithT2&_Enum&F::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithT2.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT3&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT3&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT3 extends self::_EnumWithT3&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT3> values = #C40;
  static const field self::EnumWithT3 a = #C39;
  const constructor •(core::int #index, core::String #name) → self::EnumWithT3
    : super self::_EnumWithT3&_Enum&F::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithT3.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT4&_Enum&F = core::_Enum with self::Class<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT4&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT4 extends self::_EnumWithT4&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT4> values = #C42;
  static const field self::EnumWithT4 a = #C41;
  const constructor •(core::int #index, core::String #name) → self::EnumWithT4
    : super self::_EnumWithT4&_Enum&F::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithT4.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT5&_Enum&F = core::_Enum with self::Class<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT5&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT5 extends self::_EnumWithT5&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT5> values = #C44;
  static const field self::EnumWithT5 a = #C43;
  const constructor •(core::int #index, core::String #name) → self::EnumWithT5
    : super self::_EnumWithT5&_Enum&F::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithT5.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT6&_Enum&F = core::_Enum with self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT6&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT6 extends self::_EnumWithT6&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT6> values = #C46;
  static const field self::EnumWithT6 a = #C45;
  const constructor •(core::int #index, core::String #name) → self::EnumWithT6
    : super self::_EnumWithT6&_Enum&F::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithT6.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT7&_Enum&F = core::_Enum with self::Class<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT7&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT7 extends self::_EnumWithT7&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT7> values = #C48;
  static const field self::EnumWithT7 a = #C47;
  const constructor •(core::int #index, core::String #name) → self::EnumWithT7
    : super self::_EnumWithT7&_Enum&F::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithT7.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT8&_Enum&F = core::_Enum with self::Class<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT8&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT8 extends self::_EnumWithT8&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT8> values = #C50;
  static const field self::EnumWithT8 a = #C49;
  const constructor •(core::int #index, core::String #name) → self::EnumWithT8
    : super self::_EnumWithT8&_Enum&F::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithT8.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS1&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS1&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS1 extends self::_EnumWithS1&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS1> values = #C52;
  static const field self::EnumWithS1 a = #C51;
  const constructor •(core::int #index, core::String #name) → self::EnumWithS1
    : super self::_EnumWithS1&_Enum&G::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithS1.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS2&_Enum&G = core::_Enum with self::G<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS2&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS2 extends self::_EnumWithS2&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS2> values = #C54;
  static const field self::EnumWithS2 a = #C53;
  const constructor •(core::int #index, core::String #name) → self::EnumWithS2
    : super self::_EnumWithS2&_Enum&G::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithS2.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS3&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS3&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS3 extends self::_EnumWithS3&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS3> values = #C56;
  static const field self::EnumWithS3 a = #C55;
  const constructor •(core::int #index, core::String #name) → self::EnumWithS3
    : super self::_EnumWithS3&_Enum&G::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithS3.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS4&_Enum&G = core::_Enum with self::G<self::Class<dynamic>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS4&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS4 extends self::_EnumWithS4&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS4> values = #C58;
  static const field self::EnumWithS4 a = #C57;
  const constructor •(core::int #index, core::String #name) → self::EnumWithS4
    : super self::_EnumWithS4&_Enum&G::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithS4.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS5&_Enum&G = core::_Enum with self::G<self::ConcreteClass> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS5&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS5 extends self::_EnumWithS5&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS5> values = #C60;
  static const field self::EnumWithS5 a = #C59;
  const constructor •(core::int #index, core::String #name) → self::EnumWithS5
    : super self::_EnumWithS5&_Enum&G::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithS5.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS6&_Enum&G = core::_Enum with self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS6&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS6 extends self::_EnumWithS6&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS6> values = #C62;
  static const field self::EnumWithS6 a = #C61;
  const constructor •(core::int #index, core::String #name) → self::EnumWithS6
    : super self::_EnumWithS6&_Enum&G::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithS6.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS7&_Enum&G = core::_Enum with self::G<core::Object> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS7&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS7 extends self::_EnumWithS7&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS7> values = #C64;
  static const field self::EnumWithS7 a = #C63;
  const constructor •(core::int #index, core::String #name) → self::EnumWithS7
    : super self::_EnumWithS7&_Enum&G::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithS7.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS8&_Enum&G = core::_Enum with self::G<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS8&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS8 extends self::_EnumWithS8&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS8> values = #C66;
  static const field self::EnumWithS8 a = #C65;
  const constructor •(core::int #index, core::String #name) → self::EnumWithS8
    : super self::_EnumWithS8&_Enum&G::•(#index, #name)
    ;
  method toString() → core::String
    return "EnumWithS8.${this.{core::_Enum::_name}{core::String}}";
}
abstract class MixinOnT1 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnT2 extends self::Class<dynamic> /*isMixinDeclaration*/  {
}
abstract class MixinOnT3 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnT4 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnT5 extends self::Class<self::ConcreteClass> /*isMixinDeclaration*/  {
}
abstract class MixinOnT6 extends self::Class<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
}
abstract class MixinOnT7 extends self::Class<core::Object> /*isMixinDeclaration*/  {
}
abstract class MixinOnT8 extends self::Class<core::int> /*isMixinDeclaration*/  {
}
abstract class MixinOnS1 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnS2 extends self::G<dynamic> /*isMixinDeclaration*/  {
}
abstract class MixinOnS3 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnS4 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnS5 extends self::G<self::ConcreteClass> /*isMixinDeclaration*/  {
}
abstract class MixinOnS6 extends self::G<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
}
abstract class MixinOnS7 extends self::G<core::Object> /*isMixinDeclaration*/  {
}
abstract class MixinOnS8 extends self::G<core::int> /*isMixinDeclaration*/  {
}
extension ExtensionOnT1 on self::Class<self::Class<dynamic>> {
}
extension ExtensionOnT2 on self::Class<dynamic> {
}
extension ExtensionOnT3 on self::Class<self::Class<dynamic>> {
}
extension ExtensionOnT4 on self::Class<self::Class<dynamic>> {
}
extension ExtensionOnT5 on self::Class<self::ConcreteClass> {
}
extension ExtensionOnT6 on self::Class<self::Class<self::ConcreteClass>> {
}
extension ExtensionOnT7 on self::Class<core::Object> {
}
extension ExtensionOnT8 on self::Class<core::int> {
}
extension ExtensionOnS1 on self::G<self::Class<dynamic>> {
}
extension ExtensionOnS2 on self::G<dynamic> {
}
extension ExtensionOnS3 on self::G<self::Class<dynamic>> {
}
extension ExtensionOnS4 on self::G<self::Class<dynamic>> {
}
extension ExtensionOnS5 on self::G<self::ConcreteClass> {
}
extension ExtensionOnS6 on self::G<self::Class<self::ConcreteClass>> {
}
extension ExtensionOnS7 on self::G<core::Object> {
}
extension ExtensionOnS8 on self::G<core::int> {
}
static method main() → dynamic {}
static method _#F#new#tearOff<X extends self::Class<self::_#F#new#tearOff::X> = self::Class<dynamic>>() → self::Class<self::_#F#new#tearOff::X>
  return new self::Class::•<self::_#F#new#tearOff::X>();

constants  {
  #C1 = 0
  #C2 = "a"
  #C3 = self::EnumImplementsT1 {index:#C1, _name:#C2}
  #C4 = <self::EnumImplementsT1*>[#C3]
  #C5 = self::EnumImplementsT2 {index:#C1, _name:#C2}
  #C6 = <self::EnumImplementsT2*>[#C5]
  #C7 = self::EnumImplementsT3 {index:#C1, _name:#C2}
  #C8 = <self::EnumImplementsT3*>[#C7]
  #C9 = self::EnumImplementsT4 {index:#C1, _name:#C2}
  #C10 = <self::EnumImplementsT4*>[#C9]
  #C11 = self::EnumImplementsT5 {index:#C1, _name:#C2}
  #C12 = <self::EnumImplementsT5*>[#C11]
  #C13 = self::EnumImplementsT6 {index:#C1, _name:#C2}
  #C14 = <self::EnumImplementsT6*>[#C13]
  #C15 = self::EnumImplementsT7 {index:#C1, _name:#C2}
  #C16 = <self::EnumImplementsT7*>[#C15]
  #C17 = self::EnumImplementsT8 {index:#C1, _name:#C2}
  #C18 = <self::EnumImplementsT8*>[#C17]
  #C19 = self::EnumImplementsS1 {index:#C1, _name:#C2}
  #C20 = <self::EnumImplementsS1*>[#C19]
  #C21 = self::EnumImplementsS2 {index:#C1, _name:#C2}
  #C22 = <self::EnumImplementsS2*>[#C21]
  #C23 = self::EnumImplementsS3 {index:#C1, _name:#C2}
  #C24 = <self::EnumImplementsS3*>[#C23]
  #C25 = self::EnumImplementsS4 {index:#C1, _name:#C2}
  #C26 = <self::EnumImplementsS4*>[#C25]
  #C27 = self::EnumImplementsS5 {index:#C1, _name:#C2}
  #C28 = <self::EnumImplementsS5*>[#C27]
  #C29 = self::EnumImplementsS6 {index:#C1, _name:#C2}
  #C30 = <self::EnumImplementsS6*>[#C29]
  #C31 = self::EnumImplementsS7 {index:#C1, _name:#C2}
  #C32 = <self::EnumImplementsS7*>[#C31]
  #C33 = self::EnumImplementsS8 {index:#C1, _name:#C2}
  #C34 = <self::EnumImplementsS8*>[#C33]
  #C35 = self::EnumWithT1 {index:#C1, _name:#C2}
  #C36 = <self::EnumWithT1*>[#C35]
  #C37 = self::EnumWithT2 {index:#C1, _name:#C2}
  #C38 = <self::EnumWithT2*>[#C37]
  #C39 = self::EnumWithT3 {index:#C1, _name:#C2}
  #C40 = <self::EnumWithT3*>[#C39]
  #C41 = self::EnumWithT4 {index:#C1, _name:#C2}
  #C42 = <self::EnumWithT4*>[#C41]
  #C43 = self::EnumWithT5 {index:#C1, _name:#C2}
  #C44 = <self::EnumWithT5*>[#C43]
  #C45 = self::EnumWithT6 {index:#C1, _name:#C2}
  #C46 = <self::EnumWithT6*>[#C45]
  #C47 = self::EnumWithT7 {index:#C1, _name:#C2}
  #C48 = <self::EnumWithT7*>[#C47]
  #C49 = self::EnumWithT8 {index:#C1, _name:#C2}
  #C50 = <self::EnumWithT8*>[#C49]
  #C51 = self::EnumWithS1 {index:#C1, _name:#C2}
  #C52 = <self::EnumWithS1*>[#C51]
  #C53 = self::EnumWithS2 {index:#C1, _name:#C2}
  #C54 = <self::EnumWithS2*>[#C53]
  #C55 = self::EnumWithS3 {index:#C1, _name:#C2}
  #C56 = <self::EnumWithS3*>[#C55]
  #C57 = self::EnumWithS4 {index:#C1, _name:#C2}
  #C58 = <self::EnumWithS4*>[#C57]
  #C59 = self::EnumWithS5 {index:#C1, _name:#C2}
  #C60 = <self::EnumWithS5*>[#C59]
  #C61 = self::EnumWithS6 {index:#C1, _name:#C2}
  #C62 = <self::EnumWithS6*>[#C61]
  #C63 = self::EnumWithS7 {index:#C1, _name:#C2}
  #C64 = <self::EnumWithS7*>[#C63]
  #C65 = self::EnumWithS8 {index:#C1, _name:#C2}
  #C66 = <self::EnumWithS8*>[#C65]
}


Constructor coverage from constants:
org-dartlang-testcase:///bounds_supertypes.dart:
- EnumImplementsT1. (from org-dartlang-testcase:///bounds_supertypes.dart:109:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- EnumImplementsT2. (from org-dartlang-testcase:///bounds_supertypes.dart:111:6)
- EnumImplementsT3. (from org-dartlang-testcase:///bounds_supertypes.dart:113:6)
- EnumImplementsT4. (from org-dartlang-testcase:///bounds_supertypes.dart:115:6)
- EnumImplementsT5. (from org-dartlang-testcase:///bounds_supertypes.dart:117:6)
- EnumImplementsT6. (from org-dartlang-testcase:///bounds_supertypes.dart:119:6)
- EnumImplementsT7. (from org-dartlang-testcase:///bounds_supertypes.dart:121:6)
- EnumImplementsT8. (from org-dartlang-testcase:///bounds_supertypes.dart:123:6)
- EnumImplementsS1. (from org-dartlang-testcase:///bounds_supertypes.dart:125:6)
- EnumImplementsS2. (from org-dartlang-testcase:///bounds_supertypes.dart:127:6)
- EnumImplementsS3. (from org-dartlang-testcase:///bounds_supertypes.dart:129:6)
- EnumImplementsS4. (from org-dartlang-testcase:///bounds_supertypes.dart:131:6)
- EnumImplementsS5. (from org-dartlang-testcase:///bounds_supertypes.dart:133:6)
- EnumImplementsS6. (from org-dartlang-testcase:///bounds_supertypes.dart:135:6)
- EnumImplementsS7. (from org-dartlang-testcase:///bounds_supertypes.dart:137:6)
- EnumImplementsS8. (from org-dartlang-testcase:///bounds_supertypes.dart:139:6)
- EnumWithT1. (from org-dartlang-testcase:///bounds_supertypes.dart:141:6)
- _EnumWithT1&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:141:6)
- EnumWithT2. (from org-dartlang-testcase:///bounds_supertypes.dart:143:6)
- _EnumWithT2&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:143:6)
- EnumWithT3. (from org-dartlang-testcase:///bounds_supertypes.dart:145:6)
- _EnumWithT3&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:145:6)
- EnumWithT4. (from org-dartlang-testcase:///bounds_supertypes.dart:147:6)
- _EnumWithT4&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:147:6)
- EnumWithT5. (from org-dartlang-testcase:///bounds_supertypes.dart:149:6)
- _EnumWithT5&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:149:6)
- EnumWithT6. (from org-dartlang-testcase:///bounds_supertypes.dart:151:6)
- _EnumWithT6&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:151:6)
- EnumWithT7. (from org-dartlang-testcase:///bounds_supertypes.dart:153:6)
- _EnumWithT7&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:153:6)
- EnumWithT8. (from org-dartlang-testcase:///bounds_supertypes.dart:155:6)
- _EnumWithT8&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:155:6)
- EnumWithS1. (from org-dartlang-testcase:///bounds_supertypes.dart:157:6)
- _EnumWithS1&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:157:6)
- EnumWithS2. (from org-dartlang-testcase:///bounds_supertypes.dart:159:6)
- _EnumWithS2&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:159:6)
- EnumWithS3. (from org-dartlang-testcase:///bounds_supertypes.dart:161:6)
- _EnumWithS3&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:161:6)
- EnumWithS4. (from org-dartlang-testcase:///bounds_supertypes.dart:163:6)
- _EnumWithS4&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:163:6)
- EnumWithS5. (from org-dartlang-testcase:///bounds_supertypes.dart:165:6)
- _EnumWithS5&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:165:6)
- EnumWithS6. (from org-dartlang-testcase:///bounds_supertypes.dart:167:6)
- _EnumWithS6&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:167:6)
- EnumWithS7. (from org-dartlang-testcase:///bounds_supertypes.dart:169:6)
- _EnumWithS7&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:169:6)
- EnumWithS8. (from org-dartlang-testcase:///bounds_supertypes.dart:171:6)
- _EnumWithS8&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:171:6)
