abstract class A {
  late int ;
  property4;
  late int;
  operator? (){}
  property5;
  covariant late int ;
  property6;
  A(this.property4, this.property5, this.property6);
}
abstract class B1 {
  late ;
  final int property4;
  late ;
  final int property5;
  late ;
  final int? property6;
  B1(this.property4, this.property5, this.property6);
}
abstract class B2 implements B1 {
  void set property4(int i);
  void set property5(int? i);
  void set property6(int i);
}
abstract class C1 {
  late int ;
  property4;
  late int ;
  property5;
  late int ;
  property6;
  C1(this.property4, this.property5, this.property6);
}
abstract class C2 implements C1 {
  int get property4;
  int get property5;
  int? get property6;
}
main() {}
