// @dart = 2.6
Function<X extends Function(Function<T>())>() foo4() => throw 42;
Function<X extends Function<T>()>() foo3() => throw 42;
Function<X extends Function<T>()>() get corge1 => throw 42;
Function<X extends Function<T>()>() quuz1 = throw 42;

class A1<X extends Function<T>()> {
  A1(Function<X extends Function<T>()>() f);
  Function<X extends Function<T>()>() bar2() => throw 42;
  Function<X extends Function<T>()>() get baz1 => throw 42;
  Function<X extends Function<T>()>() quux1 = throw 42;
  bar1(Function<X extends Function<T>()>() f) {}
  static Function<X extends Function<T>()>() quux2 = throw 42;
  void set qux1(Function<X extends Function<T>()>() value) {}
}

class A2<X extends void Function<Y extends Function<T>()>()> {}

class A3<
    X extends Function(void Function<Y extends Function(Function<T>())>())> {}

class B1 {}

extension E1<X extends Function<T>()> on B1 {
  Function<X extends Function<T>()>() bar4() => throw 42;
  Function<X extends Function<T>()>() get baz2 => throw 42;
  bar3(Function<X extends Function<T>()>() f) {}
  static Function<X extends Function<T>()>() quux3 = throw 42;
  void set qux2(Function<X extends Function<T>()>() value) {}
}

foo1(Function<X extends Function<T>()>() f) {}
foo2(Function<X extends Function(Function<T>())>() f) {}
main() {}
typedef F1 = void Function<X extends void Function<T>()>();
typedef F2 = void Function<X extends Function(void Function<T>())>();
typedef F3<X extends Function<T>()> = Function();
typedef F4<X extends Function<Y extends Function<T>()>()> = Function();
typedef F5<X extends Function(Function<Y extends Function(Function<T>())>())>
    = Function();
void set grault1(Function<X extends Function<T>()>() value) {}
