library;
import self as self;
import "dart:core" as core;

class A1 extends core::Object {
  synthetic constructor •() → self::A1
    : super core::Object::•()
    ;
}
class B1<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::B1<self::B1::T%>
    : super core::Object::•()
    ;
}
extension A2 on self::A1 {
  method method1 = self::A2|method1;
  method tearoff method1 = self::A2|get#method1;
  method method2 = self::A2|method2;
  method tearoff method2 = self::A2|get#method2;
}
extension B2<T extends core::Object? = dynamic> on self::B1<T%> {
  method method1 = self::B2|method1;
  method tearoff method1 = self::B2|get#method1;
  method method2 = self::B2|method2;
  method tearoff method2 = self::B2|get#method2;
}
static extension-member method A2|method1(lowered final self::A1 #this) → self::A1 {
  return #this;
}
static extension-member method A2|get#method1(lowered final self::A1 #this) → () → self::A1
  return () → self::A1 => self::A2|method1(#this);
static extension-member method A2|method2<T extends core::Object? = dynamic>(lowered final self::A1 #this, self::A2|method2::T% o) → self::A1 {
  core::print(o);
  return #this;
}
static extension-member method A2|get#method2(lowered final self::A1 #this) → <T extends core::Object? = dynamic>(T%) → self::A1
  return <T extends core::Object? = dynamic>(T% o) → self::A1 => self::A2|method2<T%>(#this, o);
static extension-member method B2|method1<T extends core::Object? = dynamic>(lowered final self::B1<self::B2|method1::T%> #this) → self::B1<self::B2|method1::T%> {
  return #this;
}
static extension-member method B2|get#method1<T extends core::Object? = dynamic>(lowered final self::B1<self::B2|get#method1::T%> #this) → () → self::B1<self::B2|get#method1::T%>
  return () → self::B1<self::B2|get#method1::T%> => self::B2|method1<self::B2|get#method1::T%>(#this);
static extension-member method B2|method2<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::B1<self::B2|method2::T%> #this, self::B2|method2::S% o) → self::B1<self::B2|method2::T%> {
  core::print(o);
  return #this;
}
static extension-member method B2|get#method2<T extends core::Object? = dynamic>(lowered final self::B1<self::B2|get#method2::T%> #this) → <S extends core::Object? = dynamic>(S%) → self::B1<self::B2|get#method2::T%>
  return <S extends core::Object? = dynamic>(S% o) → self::B1<self::B2|get#method2::T%> => self::B2|method2<self::B2|get#method2::T%, S%>(#this, o);
static method main() → dynamic {}
