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

static method _mergeSort<T extends core::Object = dynamic>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void {
  self::_mergeSort<self::_mergeSort::T>(list, compare, target);
  self::_mergeSort<self::_mergeSort::T>(list, compare, list);
  self::_mergeSort<self::_mergeSort::T>(target, compare, target);
  self::_mergeSort<self::_mergeSort::T>(target, compare, list);
}
static method main() → dynamic {}
