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

typedef E<invariant T extends core::Object? = dynamic> = (T%) → T%;
extension Ext<T extends core::Object? = dynamic> on T% {
  method st = self::Ext|st;
  method tearoff st = self::Ext|get#st;
}
static method main() → void {
  self::foo<core::num>(false, 0, 0);
}
static method foo<X extends core::Object? = dynamic>(core::bool test, self::foo::X% a, self::foo::X% b) → void {
  if(!(a is core::int))
    return;
  {
    self::foo::X% c = let final self::foo::X% & core::int /* '%' & '!' = '!' */ #t1 = test ?{self::foo::X% & core::int /* '%' & '!' = '!' */} a{self::foo::X% & core::int /* '%' & '!' = '!' */} : a{self::foo::X% & core::int /* '%' & '!' = '!' */} in block {
      #t1.{core::int::toRadixString}(2){(core::int) → core::String};
      self::Ext|st<self::foo::X%, (self::foo::X%) → self::foo::X%>(#t1);
    } =>#t1;
    {
      self::foo::X% v1 = c{self::foo::X% & core::int /* '%' & '!' = '!' */};
      core::int v2 = c{self::foo::X% & core::int /* '%' & '!' = '!' */};
      self::Ext|get#st<self::foo::X%>(c{self::foo::X% & core::int /* '%' & '!' = '!' */})<(self::foo::X%) → self::foo::X%>;
      c = a{self::foo::X% & core::int /* '%' & '!' = '!' */} as self::foo::X%;
    }
  }
  if(!(b is core::int))
    return;
  {
    self::foo::X% c = let final self::foo::X% & core::int /* '%' & '!' = '!' */ #t2 = test ?{self::foo::X% & core::int /* '%' & '!' = '!' */} a{self::foo::X% & core::int /* '%' & '!' = '!' */} : b{self::foo::X% & core::int /* '%' & '!' = '!' */} in block {
      #t2.{core::int::toRadixString}(2){(core::int) → core::String};
      self::Ext|st<self::foo::X%, (self::foo::X%) → self::foo::X%>(#t2);
    } =>#t2;
    {
      self::foo::X% v1 = c{self::foo::X% & core::int /* '%' & '!' = '!' */};
      core::int v2 = c{self::foo::X% & core::int /* '%' & '!' = '!' */};
      self::Ext|get#st<self::foo::X%>(c{self::foo::X% & core::int /* '%' & '!' = '!' */})<(self::foo::X%) → self::foo::X%>;
      c = a{self::foo::X% & core::int /* '%' & '!' = '!' */} as self::foo::X%;
    }
  }
}
static extension-member method Ext|st<T extends core::Object? = dynamic, S extends (self::Ext|st::T%) → self::Ext|st::T% = (dynamic) → dynamic>(lowered final self::Ext|st::T% #this) → void {}
static extension-member method Ext|get#st<T extends core::Object? = dynamic>(lowered final self::Ext|get#st::T% #this) → <S extends (self::Ext|get#st::T%) → self::Ext|get#st::T% = (dynamic) → dynamic>() → void
  return <S extends (self::Ext|get#st::T%) → self::Ext|get#st::T% = (dynamic) → dynamic>() → void => self::Ext|st<self::Ext|get#st::T%, S>(#this);
