abstract class A {
  String get property3;
  covariant String property6;
  int get property1;
  int get property2b;
  int property4;
  int property5;
  num get property2a;
  static int get property7 => 0;
  static int get property8a => 0;
  static num get property8b => 0;
  static num get property9 => 0;
  static void set property7(int value) {}
  static void set property8a(num value) {}
  static void set property8b(int value) {}
  static void set property9(String value) {}
  void set property1(int i);
  void set property2a(int i);
  void set property2b(num i);
  void set property3(int i);
}

abstract class B1 {
  B1(this.property4, this.property5, this.property6);
  String get property3;
  final String property6;
  final int property4;
  final int property5;
  int get property1;
  int get property2;
}

abstract class B2 implements B1 {
  void set property1(int i);
  void set property2(String i);
  void set property3(int i);
  void set property4(int i);
  void set property5(String i);
  void set property6(int i);
}

abstract class C1 {
  String property5;
  int property4;
  int property6;
  void set property1(int i);
  void set property2(String i);
  void set property3(int i);
}

abstract class C2 implements C1 {
  String get property3;
  String get property6;
  int get property1;
  int get property2;
  int get property4;
  int get property5;
}

abstract class D1 {
  String get property3;
  int get property1;
  int get property2;
}

abstract class D2 {
  void set property1(int i);
  void set property2(String i);
  void set property3(int i);
}

abstract class D3 implements D1, D2 {}

abstract class D4 implements D3 {}

main() {}
