library;
//
// Problems in library:
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:24:51: Error: Expected an identifier, but got '}'.
// class Fm1<Z> extends Object with Am1<Function({int}), Z> {}
//                                                   ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:48:45: Error: Expected an identifier, but got '}'.
// class Qm1<Z> = Object with Am1<Function({int}), Z>;
//                                             ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:79:51: Error: Expected an identifier, but got '}'.
// class Fm2<Z> extends Object with Am2<Function({int}), Z> {}
//                                                   ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:107:45: Error: Expected an identifier, but got '}'.
// class Qm2<Z> = Object with Am2<Function({int}), Z>;
//                                             ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:136:28: Error: Expected an identifier, but got '}'.
// typedef TdF = Function({int});
//                            ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:192:34: Error: Expected an identifier, but got '}'.
// class Ef1<X extends Function({int})> {
//                                  ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:69:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// Try changing type arguments so that they conform to the bounds.
// class Bm2<Z> extends Object with Am2<Function(int), Z> {}
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:66:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:72:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// Try changing type arguments so that they conform to the bounds.
// class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:66:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:88:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
//  - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Jm2<Z> extends Object with Am2<Function, Z> {}
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:66:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:91:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
//  - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:66:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:97:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
// Try changing type arguments so that they conform to the bounds.
// class Mm2<Z> = Object with Am2<Function(int), Z>;
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:66:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:100:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
// Try changing type arguments so that they conform to the bounds.
// class Nm2<Z> = Object with Am2<Function(int x), Z>;
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:66:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:116:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
//  - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Um2<Z> = Object with Am2<Function, Z>;
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:66:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:119:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
//  - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
//       ^
// pkg/front_end/testcases/general_nnbd_opt_out/clone_function_type.dart:66:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
import self as self;
import "dart:core" as core;

typedef TdB = (core::int*) →* dynamic;
typedef TdC = (core::int*) →* dynamic;
typedef TdD = () →* core::int*;
typedef TdE = () →* dynamic;
typedef TdF = () →* dynamic;
typedef TdG = ({x: core::int*}) →* dynamic;
typedef TdH = ([core::int*]) →* dynamic;
typedef TdI = ([core::int*]) →* dynamic;
typedef TdJ = (core::Function*) →* dynamic;
typedef TdK = () →* (() →* core::Function*) →* dynamic;
class Am1<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Am1<self::Am1::X*, self::Am1::Y*>*
    : super core::Object::•()
    ;
}
abstract class _Bm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::int*) →* dynamic, self::_Bm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Bm1&Object&Am1<self::_Bm1&Object&Am1::Z*>*
    : super core::Object::•()
    ;
}
class Bm1<Z extends core::Object* = dynamic> extends self::_Bm1&Object&Am1<self::Bm1::Z*> {
  synthetic constructor •() → self::Bm1<self::Bm1::Z*>*
    : super self::_Bm1&Object&Am1::•()
    ;
}
abstract class _Cm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::int*) →* dynamic, self::_Cm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Cm1&Object&Am1<self::_Cm1&Object&Am1::Z*>*
    : super core::Object::•()
    ;
}
class Cm1<Z extends core::Object* = dynamic> extends self::_Cm1&Object&Am1<self::Cm1::Z*> {
  synthetic constructor •() → self::Cm1<self::Cm1::Z*>*
    : super self::_Cm1&Object&Am1::•()
    ;
}
abstract class _Dm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* core::int*, self::_Dm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Dm1&Object&Am1<self::_Dm1&Object&Am1::Z*>*
    : super core::Object::•()
    ;
}
class Dm1<Z extends core::Object* = dynamic> extends self::_Dm1&Object&Am1<self::Dm1::Z*> {
  synthetic constructor •() → self::Dm1<self::Dm1::Z*>*
    : super self::_Dm1&Object&Am1::•()
    ;
}
abstract class _Em1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* dynamic, self::_Em1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Em1&Object&Am1<self::_Em1&Object&Am1::Z*>*
    : super core::Object::•()
    ;
}
class Em1<Z extends core::Object* = dynamic> extends self::_Em1&Object&Am1<self::Em1::Z*> {
  synthetic constructor •() → self::Em1<self::Em1::Z*>*
    : super self::_Em1&Object&Am1::•()
    ;
}
abstract class _Fm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* dynamic, self::_Fm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Fm1&Object&Am1<self::_Fm1&Object&Am1::Z*>*
    : super core::Object::•()
    ;
}
class Fm1<Z extends core::Object* = dynamic> extends self::_Fm1&Object&Am1<self::Fm1::Z*> {
  synthetic constructor •() → self::Fm1<self::Fm1::Z*>*
    : super self::_Fm1&Object&Am1::•()
    ;
}
abstract class _Gm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<({x: core::int*}) →* dynamic, self::_Gm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Gm1&Object&Am1<self::_Gm1&Object&Am1::Z*>*
    : super core::Object::•()
    ;
}
class Gm1<Z extends core::Object* = dynamic> extends self::_Gm1&Object&Am1<self::Gm1::Z*> {
  synthetic constructor •() → self::Gm1<self::Gm1::Z*>*
    : super self::_Gm1&Object&Am1::•()
    ;
}
abstract class _Hm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<([core::int*]) →* dynamic, self::_Hm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Hm1&Object&Am1<self::_Hm1&Object&Am1::Z*>*
    : super core::Object::•()
    ;
}
class Hm1<Z extends core::Object* = dynamic> extends self::_Hm1&Object&Am1<self::Hm1::Z*> {
  synthetic constructor •() → self::Hm1<self::Hm1::Z*>*
    : super self::_Hm1&Object&Am1::•()
    ;
}
abstract class _Im1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<([core::int*]) →* dynamic, self::_Im1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Im1&Object&Am1<self::_Im1&Object&Am1::Z*>*
    : super core::Object::•()
    ;
}
class Im1<Z extends core::Object* = dynamic> extends self::_Im1&Object&Am1<self::Im1::Z*> {
  synthetic constructor •() → self::Im1<self::Im1::Z*>*
    : super self::_Im1&Object&Am1::•()
    ;
}
abstract class _Jm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<core::Function*, self::_Jm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Jm1&Object&Am1<self::_Jm1&Object&Am1::Z*>*
    : super core::Object::•()
    ;
}
class Jm1<Z extends core::Object* = dynamic> extends self::_Jm1&Object&Am1<self::Jm1::Z*> {
  synthetic constructor •() → self::Jm1<self::Jm1::Z*>*
    : super self::_Jm1&Object&Am1::•()
    ;
}
abstract class _Km1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::Function*) →* dynamic, self::_Km1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Km1&Object&Am1<self::_Km1&Object&Am1::Z*>*
    : super core::Object::•()
    ;
}
class Km1<Z extends core::Object* = dynamic> extends self::_Km1&Object&Am1<self::Km1::Z*> {
  synthetic constructor •() → self::Km1<self::Km1::Z*>*
    : super self::_Km1&Object&Am1::•()
    ;
}
abstract class _Lm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* (() →* core::Function*) →* dynamic, self::_Lm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Lm1&Object&Am1<self::_Lm1&Object&Am1::Z*>*
    : super core::Object::•()
    ;
}
class Lm1<Z extends core::Object* = dynamic> extends self::_Lm1&Object&Am1<self::Lm1::Z*> {
  synthetic constructor •() → self::Lm1<self::Lm1::Z*>*
    : super self::_Lm1&Object&Am1::•()
    ;
}
class Mm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::int*) →* dynamic, self::Mm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Mm1<self::Mm1::Z*>*
    : super core::Object::•()
    ;
}
class Nm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::int*) →* dynamic, self::Nm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Nm1<self::Nm1::Z*>*
    : super core::Object::•()
    ;
}
class Om1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* core::int*, self::Om1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Om1<self::Om1::Z*>*
    : super core::Object::•()
    ;
}
class Pm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* dynamic, self::Pm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Pm1<self::Pm1::Z*>*
    : super core::Object::•()
    ;
}
class Qm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* dynamic, self::Qm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Qm1<self::Qm1::Z*>*
    : super core::Object::•()
    ;
}
class Rm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<({x: core::int*}) →* dynamic, self::Rm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Rm1<self::Rm1::Z*>*
    : super core::Object::•()
    ;
}
class Sm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<([core::int*]) →* dynamic, self::Sm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Sm1<self::Sm1::Z*>*
    : super core::Object::•()
    ;
}
class Tm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<([core::int*]) →* dynamic, self::Tm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Tm1<self::Tm1::Z*>*
    : super core::Object::•()
    ;
}
class Um1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<core::Function*, self::Um1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Um1<self::Um1::Z*>*
    : super core::Object::•()
    ;
}
class Vm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::Function*) →* dynamic, self::Vm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Vm1<self::Vm1::Z*>*
    : super core::Object::•()
    ;
}
class Wm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* (() →* core::Function*) →* dynamic, self::Wm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Wm1<self::Wm1::Z*>*
    : super core::Object::•()
    ;
}
class Am2<X extends () →* dynamic = () →* dynamic, Y extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Am2<self::Am2::X*, self::Am2::Y*>*
    : super core::Object::•()
    ;
}
abstract class _Bm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::int*) →* dynamic, self::_Bm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Bm2&Object&Am2<self::_Bm2&Object&Am2::Z*>*
    : super core::Object::•()
    ;
}
class Bm2<Z extends core::Object* = dynamic> extends self::_Bm2&Object&Am2<self::Bm2::Z*> {
  synthetic constructor •() → self::Bm2<self::Bm2::Z*>*
    : super self::_Bm2&Object&Am2::•()
    ;
}
abstract class _Cm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::int*) →* dynamic, self::_Cm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Cm2&Object&Am2<self::_Cm2&Object&Am2::Z*>*
    : super core::Object::•()
    ;
}
class Cm2<Z extends core::Object* = dynamic> extends self::_Cm2&Object&Am2<self::Cm2::Z*> {
  synthetic constructor •() → self::Cm2<self::Cm2::Z*>*
    : super self::_Cm2&Object&Am2::•()
    ;
}
abstract class _Dm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* core::int*, self::_Dm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Dm2&Object&Am2<self::_Dm2&Object&Am2::Z*>*
    : super core::Object::•()
    ;
}
class Dm2<Z extends core::Object* = dynamic> extends self::_Dm2&Object&Am2<self::Dm2::Z*> {
  synthetic constructor •() → self::Dm2<self::Dm2::Z*>*
    : super self::_Dm2&Object&Am2::•()
    ;
}
abstract class _Em2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* dynamic, self::_Em2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Em2&Object&Am2<self::_Em2&Object&Am2::Z*>*
    : super core::Object::•()
    ;
}
class Em2<Z extends core::Object* = dynamic> extends self::_Em2&Object&Am2<self::Em2::Z*> {
  synthetic constructor •() → self::Em2<self::Em2::Z*>*
    : super self::_Em2&Object&Am2::•()
    ;
}
abstract class _Fm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* dynamic, self::_Fm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Fm2&Object&Am2<self::_Fm2&Object&Am2::Z*>*
    : super core::Object::•()
    ;
}
class Fm2<Z extends core::Object* = dynamic> extends self::_Fm2&Object&Am2<self::Fm2::Z*> {
  synthetic constructor •() → self::Fm2<self::Fm2::Z*>*
    : super self::_Fm2&Object&Am2::•()
    ;
}
abstract class _Gm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<({x: core::int*}) →* dynamic, self::_Gm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Gm2&Object&Am2<self::_Gm2&Object&Am2::Z*>*
    : super core::Object::•()
    ;
}
class Gm2<Z extends core::Object* = dynamic> extends self::_Gm2&Object&Am2<self::Gm2::Z*> {
  synthetic constructor •() → self::Gm2<self::Gm2::Z*>*
    : super self::_Gm2&Object&Am2::•()
    ;
}
abstract class _Hm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<([core::int*]) →* dynamic, self::_Hm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Hm2&Object&Am2<self::_Hm2&Object&Am2::Z*>*
    : super core::Object::•()
    ;
}
class Hm2<Z extends core::Object* = dynamic> extends self::_Hm2&Object&Am2<self::Hm2::Z*> {
  synthetic constructor •() → self::Hm2<self::Hm2::Z*>*
    : super self::_Hm2&Object&Am2::•()
    ;
}
abstract class _Im2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<([core::int*]) →* dynamic, self::_Im2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Im2&Object&Am2<self::_Im2&Object&Am2::Z*>*
    : super core::Object::•()
    ;
}
class Im2<Z extends core::Object* = dynamic> extends self::_Im2&Object&Am2<self::Im2::Z*> {
  synthetic constructor •() → self::Im2<self::Im2::Z*>*
    : super self::_Im2&Object&Am2::•()
    ;
}
abstract class _Jm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<core::Function*, self::_Jm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Jm2&Object&Am2<self::_Jm2&Object&Am2::Z*>*
    : super core::Object::•()
    ;
}
class Jm2<Z extends core::Object* = dynamic> extends self::_Jm2&Object&Am2<self::Jm2::Z*> {
  synthetic constructor •() → self::Jm2<self::Jm2::Z*>*
    : super self::_Jm2&Object&Am2::•()
    ;
}
abstract class _Km2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::Function*) →* dynamic, self::_Km2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Km2&Object&Am2<self::_Km2&Object&Am2::Z*>*
    : super core::Object::•()
    ;
}
class Km2<Z extends core::Object* = dynamic> extends self::_Km2&Object&Am2<self::Km2::Z*> {
  synthetic constructor •() → self::Km2<self::Km2::Z*>*
    : super self::_Km2&Object&Am2::•()
    ;
}
abstract class _Lm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* (() →* core::Function*) →* dynamic, self::_Lm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Lm2&Object&Am2<self::_Lm2&Object&Am2::Z*>*
    : super core::Object::•()
    ;
}
class Lm2<Z extends core::Object* = dynamic> extends self::_Lm2&Object&Am2<self::Lm2::Z*> {
  synthetic constructor •() → self::Lm2<self::Lm2::Z*>*
    : super self::_Lm2&Object&Am2::•()
    ;
}
class Mm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::int*) →* dynamic, self::Mm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Mm2<self::Mm2::Z*>*
    : super core::Object::•()
    ;
}
class Nm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::int*) →* dynamic, self::Nm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Nm2<self::Nm2::Z*>*
    : super core::Object::•()
    ;
}
class Om2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* core::int*, self::Om2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Om2<self::Om2::Z*>*
    : super core::Object::•()
    ;
}
class Pm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* dynamic, self::Pm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Pm2<self::Pm2::Z*>*
    : super core::Object::•()
    ;
}
class Qm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* dynamic, self::Qm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Qm2<self::Qm2::Z*>*
    : super core::Object::•()
    ;
}
class Rm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<({x: core::int*}) →* dynamic, self::Rm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Rm2<self::Rm2::Z*>*
    : super core::Object::•()
    ;
}
class Sm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<([core::int*]) →* dynamic, self::Sm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Sm2<self::Sm2::Z*>*
    : super core::Object::•()
    ;
}
class Tm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<([core::int*]) →* dynamic, self::Tm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Tm2<self::Tm2::Z*>*
    : super core::Object::•()
    ;
}
class Um2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<core::Function*, self::Um2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Um2<self::Um2::Z*>*
    : super core::Object::•()
    ;
}
class Vm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::Function*) →* dynamic, self::Vm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Vm2<self::Vm2::Z*>*
    : super core::Object::•()
    ;
}
class Wm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* (() →* core::Function*) →* dynamic, self::Wm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Wm2<self::Wm2::Z*>*
    : super core::Object::•()
    ;
}
class Am3<L extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Am3<self::Am3::L*, self::Am3::Y*>*
    : super core::Object::•()
    ;
}
abstract class _Bm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<(core::int*) →* dynamic, self::_Bm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Bm3&Object&Am3<self::_Bm3&Object&Am3::Z*>*
    : super core::Object::•()
    ;
}
class Bm3<Z extends core::Object* = dynamic> extends self::_Bm3&Object&Am3<self::Bm3::Z*> {
  synthetic constructor •() → self::Bm3<self::Bm3::Z*>*
    : super self::_Bm3&Object&Am3::•()
    ;
}
abstract class _Cm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<(core::int*) →* dynamic, self::_Cm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Cm3&Object&Am3<self::_Cm3&Object&Am3::Z*>*
    : super core::Object::•()
    ;
}
class Cm3<Z extends core::Object* = dynamic> extends self::_Cm3&Object&Am3<self::Cm3::Z*> {
  synthetic constructor •() → self::Cm3<self::Cm3::Z*>*
    : super self::_Cm3&Object&Am3::•()
    ;
}
abstract class _Dm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<() →* core::int*, self::_Dm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Dm3&Object&Am3<self::_Dm3&Object&Am3::Z*>*
    : super core::Object::•()
    ;
}
class Dm3<Z extends core::Object* = dynamic> extends self::_Dm3&Object&Am3<self::Dm3::Z*> {
  synthetic constructor •() → self::Dm3<self::Dm3::Z*>*
    : super self::_Dm3&Object&Am3::•()
    ;
}
abstract class _Em3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<() →* dynamic, self::_Em3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Em3&Object&Am3<self::_Em3&Object&Am3::Z*>*
    : super core::Object::•()
    ;
}
class Em3<Z extends core::Object* = dynamic> extends self::_Em3&Object&Am3<self::Em3::Z*> {
  synthetic constructor •() → self::Em3<self::Em3::Z*>*
    : super self::_Em3&Object&Am3::•()
    ;
}
abstract class _Fm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<() →* dynamic, self::_Fm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Fm3&Object&Am3<self::_Fm3&Object&Am3::Z*>*
    : super core::Object::•()
    ;
}
class Fm3<Z extends core::Object* = dynamic> extends self::_Fm3&Object&Am3<self::Fm3::Z*> {
  synthetic constructor •() → self::Fm3<self::Fm3::Z*>*
    : super self::_Fm3&Object&Am3::•()
    ;
}
abstract class _Gm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<({x: core::int*}) →* dynamic, self::_Gm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Gm3&Object&Am3<self::_Gm3&Object&Am3::Z*>*
    : super core::Object::•()
    ;
}
class Gm3<Z extends core::Object* = dynamic> extends self::_Gm3&Object&Am3<self::Gm3::Z*> {
  synthetic constructor •() → self::Gm3<self::Gm3::Z*>*
    : super self::_Gm3&Object&Am3::•()
    ;
}
abstract class _Hm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<([core::int*]) →* dynamic, self::_Hm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Hm3&Object&Am3<self::_Hm3&Object&Am3::Z*>*
    : super core::Object::•()
    ;
}
class Hm3<Z extends core::Object* = dynamic> extends self::_Hm3&Object&Am3<self::Hm3::Z*> {
  synthetic constructor •() → self::Hm3<self::Hm3::Z*>*
    : super self::_Hm3&Object&Am3::•()
    ;
}
abstract class _Im3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<([core::int*]) →* dynamic, self::_Im3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Im3&Object&Am3<self::_Im3&Object&Am3::Z*>*
    : super core::Object::•()
    ;
}
class Im3<Z extends core::Object* = dynamic> extends self::_Im3&Object&Am3<self::Im3::Z*> {
  synthetic constructor •() → self::Im3<self::Im3::Z*>*
    : super self::_Im3&Object&Am3::•()
    ;
}
abstract class _Jm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<(core::Function*) →* dynamic, self::_Jm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Jm3&Object&Am3<self::_Jm3&Object&Am3::Z*>*
    : super core::Object::•()
    ;
}
class Jm3<Z extends core::Object* = dynamic> extends self::_Jm3&Object&Am3<self::Jm3::Z*> {
  synthetic constructor •() → self::Jm3<self::Jm3::Z*>*
    : super self::_Jm3&Object&Am3::•()
    ;
}
abstract class _Km3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<() →* (() →* core::Function*) →* dynamic, self::_Km3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Km3&Object&Am3<self::_Km3&Object&Am3::Z*>*
    : super core::Object::•()
    ;
}
class Km3<Z extends core::Object* = dynamic> extends self::_Km3&Object&Am3<self::Km3::Z*> {
  synthetic constructor •() → self::Km3<self::Km3::Z*>*
    : super self::_Km3&Object&Am3::•()
    ;
}
class Af1<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
  static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Af1<self::Af1::foo::X*>*
    return null;
}
class Bf1<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
  static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Bf1<self::Bf1::foo::X*>*
    return null;
}
class Cf1<X extends () →* core::int* = () →* core::int*> extends core::Object {
  static factory foo<X extends () →* core::int* = dynamic>() → self::Cf1<self::Cf1::foo::X*>*
    return null;
}
class Df1<X extends () →* dynamic = () →* dynamic> extends core::Object {
  static factory foo<X extends () →* dynamic = dynamic>() → self::Df1<self::Df1::foo::X*>*
    return null;
}
class Ef1<X extends () →* dynamic = () →* dynamic> extends core::Object {
  static factory foo<X extends () →* dynamic = dynamic>() → self::Ef1<self::Ef1::foo::X*>*
    return null;
}
class Ff1<X extends ({x: core::int*}) →* dynamic = ({x: core::int*}) →* dynamic> extends core::Object {
  static factory foo<X extends ({x: core::int*}) →* dynamic = dynamic>() → self::Ff1<self::Ff1::foo::X*>*
    return null;
}
class Gf1<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
  static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::Gf1<self::Gf1::foo::X*>*
    return null;
}
class Hf1<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
  static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::Hf1<self::Hf1::foo::X*>*
    return null;
}
class If1<X extends core::Function* = core::Function*> extends core::Object {
  static factory foo<X extends core::Function* = dynamic>() → self::If1<self::If1::foo::X*>*
    return null;
}
class Jf1<X extends (core::Function*) →* dynamic = (core::Function*) →* dynamic> extends core::Object {
  static factory foo<X extends (core::Function*) →* dynamic = dynamic>() → self::Jf1<self::Jf1::foo::X*>*
    return null;
}
class Kf1<X extends () →* (() →* core::Function*) →* dynamic = () →* (() →* core::Function*) →* dynamic> extends core::Object {
  static factory foo<X extends () →* (() →* core::Function*) →* dynamic = dynamic>() → self::Kf1<self::Kf1::foo::X*>*
    return null;
}
class Bf2<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
  static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Bf2<self::Bf2::foo::X*>*
    return null;
}
class Cf2<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
  static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Cf2<self::Cf2::foo::X*>*
    return null;
}
class Df2<X extends () →* core::int* = () →* core::int*> extends core::Object {
  static factory foo<X extends () →* core::int* = dynamic>() → self::Df2<self::Df2::foo::X*>*
    return null;
}
class Ef2<X extends () →* dynamic = () →* dynamic> extends core::Object {
  static factory foo<X extends () →* dynamic = dynamic>() → self::Ef2<self::Ef2::foo::X*>*
    return null;
}
class Ff2<X extends () →* dynamic = () →* dynamic> extends core::Object {
  static factory foo<X extends () →* dynamic = dynamic>() → self::Ff2<self::Ff2::foo::X*>*
    return null;
}
class Gf2<X extends ({x: core::int*}) →* dynamic = ({x: core::int*}) →* dynamic> extends core::Object {
  static factory foo<X extends ({x: core::int*}) →* dynamic = dynamic>() → self::Gf2<self::Gf2::foo::X*>*
    return null;
}
class Hf2<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
  static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::Hf2<self::Hf2::foo::X*>*
    return null;
}
class If2<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
  static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::If2<self::If2::foo::X*>*
    return null;
}
class Jf2<X extends (core::Function*) →* dynamic = (core::Function*) →* dynamic> extends core::Object {
  static factory foo<X extends (core::Function*) →* dynamic = dynamic>() → self::Jf2<self::Jf2::foo::X*>*
    return null;
}
class Kf2<X extends () →* (() →* core::Function*) →* dynamic = () →* (() →* core::Function*) →* dynamic> extends core::Object {
  static factory foo<X extends () →* (() →* core::Function*) →* dynamic = dynamic>() → self::Kf2<self::Kf2::foo::X*>*
    return null;
}
static method main() → dynamic {}
