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

class A1 extends core::Object {
  constructor •(core::int x) → self::A1
    ;
}
class B1 extends self::A1 {
  constructor one(dynamic x) → self::B1
    ;
  constructor two(dynamic x) → self::B1
    ;
}
class A2 extends core::Object {
  constructor •({required core::String x = null}) → self::A2
    ;
}
class B2 extends self::A2 {
  constructor one({required dynamic x = null}) → self::B2
    ;
  constructor two({required dynamic x = null}) → self::B2
    ;
}
class A3 extends core::Object {
  constructor •((core::double) → core::num f) → self::A3
    ;
}
class B3 extends self::A3 {
  constructor one(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
    ;
  constructor two(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
    ;
}
class A4 extends core::Object {
  constructor •({required (core::double) → core::num f = null}) → self::A4
    ;
}
class B4 extends self::A4 {
  constructor one({required <X extends core::Object? = dynamic>(core::double) → X% f = null}) → self::B4
    ;
  constructor two({required <X extends core::Object? = dynamic>(core::double) → X% f = null}) → self::B4
    ;
}
abstract class C5 extends core::Object {
  synthetic constructor •() → self::C5
    ;
  abstract method call(core::int x, core::num y) → core::String;
}
class A5 extends core::Object {
  constructor •((core::int, core::num) → core::String f) → self::A5
    ;
}
class B5 extends self::A5 {
  constructor one(self::C5 f) → self::B5
    ;
  constructor two(self::C5 f) → self::B5
    ;
}
class A6 extends core::Object {
  constructor •({required (core::int, core::num) → core::String f = null}) → self::A6
    ;
}
class B6 extends self::A6 {
  constructor one({required self::C5 f = null}) → self::B6
    ;
  constructor two({required self::C5 f = null}) → self::B6
    ;
}
class A7 extends core::Object {
  constructor •({required core::int x1 = null, required core::int x2 = null, required (core::Object) → core::bool f1 = null, required (core::Object) → core::bool f2 = null, required (dynamic) → void g1 = null, required (dynamic) → void g2 = null}) → self::A7
    ;
}
class B7 extends self::A7 {
  constructor •({required dynamic x1 = null, required dynamic x2 = null, required <X extends core::Object? = dynamic>(core::Object) → X% f1 = null, required <X extends core::Object? = dynamic>(core::Object) → X% f2 = null, required <X extends core::Object? = dynamic>(X%) → void g1 = null, required <X extends core::Object? = dynamic>(X%) → void g2 = null}) → self::B7
    ;
}
static method main() → dynamic
  ;
