library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class B<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::B<self::B::X%, self::B::Y%>
    ;
}
class C1<X extends (self::C1::Y) → self::C1::X = (Never) → dynamic, Y extends (self::C1::Y) → self::C1::X = (Never) → dynamic> extends core::Object {
  synthetic constructor •() → self::C1<self::C1::X, self::C1::Y>
    ;
}
class C2<X extends (self::C2::Y) → self::C2::X = (Never) → dynamic, Y extends (self::C2::X) → self::C2::Y = (Never) → dynamic> extends core::Object {
  synthetic constructor •() → self::C2<self::C2::X, self::C2::Y>
    ;
}
class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (Never, Never) → dynamic> extends core::Object {
  synthetic constructor •() → self::C3<self::C3::X, self::C3::Y>
    ;
}
class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (Never, Never) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (Never, Never) → dynamic> extends core::Object {
  synthetic constructor •() → self::C4<self::C4::X, self::C4::Y>
    ;
}
class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (Never) → dynamic> extends core::Object {
  synthetic constructor •() → self::D1<self::D1::X, self::D1::Y>
    ;
}
class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (Never) → dynamic> extends core::Object {
  synthetic constructor •() → self::D2<self::D2::X, self::D2::Y>
    ;
}
class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (Never, Never) → dynamic> extends core::Object {
  synthetic constructor •() → self::D3<self::D3::X, self::D3::Y>
    ;
}
class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (Never, Never) → dynamic> extends core::Object {
  synthetic constructor •() → self::D4<self::D4::X, self::D4::Y>
    ;
}
class E<X extends (self::E::X) → self::E::X = (Never) → dynamic> extends core::Object {
  synthetic constructor •() → self::E<self::E::X>
    ;
}
static field self::C1<(Never) → dynamic, (Never) → dynamic> c1;
static field self::C2<(Never) → dynamic, (Never) → dynamic> c2;
static field self::C3<(Never, Never) → dynamic, (Never, Never) → dynamic> c3;
static field self::C4<(Never, Never) → dynamic, (Never, Never) → dynamic> c4;
static field self::D1<self::B<dynamic, dynamic>, (Never) → dynamic> d1;
static field self::D2<self::B<dynamic, dynamic>, (Never) → dynamic> d2;
static field self::D3<self::B<dynamic, dynamic>, (Never, Never) → dynamic> d3;
static field self::D4<self::B<dynamic, dynamic>, (Never, Never) → dynamic> d4;
static field self::E<(Never) → dynamic> e;
static method main() → dynamic
  ;
