// CHECK:
//   Mangled name: Pair
//   Public signature: /Pair|null[0]
data class Pair<A : Any?, B : Any?> {
  // CHECK:
  //   Mangled name: Pair{}first
  //   Public signature: /Pair.first|1497393077339299626[0]
  //   Public signature debug description: {}first
  val first: A
    // CHECK JVM_IR:
    //   Mangled name: Pair#<get-first>(){}1:0
    //   Public signature: /Pair.first.<get-first>|-2355525345180386541[0]
    //   Public signature debug description: <get-first>(){}1:0
    // CHECK JS_IR NATIVE:
    //   Mangled name: Pair#<get-first>(){}
    //   Public signature: /Pair.first.<get-first>|2605844787438953097[0]
    //   Public signature debug description: <get-first>(){}
    get

  // CHECK:
  //   Mangled name: Pair{}second
  //   Public signature: /Pair.second|8934636033843101515[0]
  //   Public signature debug description: {}second
  val second: B
    // CHECK JVM_IR:
    //   Mangled name: Pair#<get-second>(){}1:1
    //   Public signature: /Pair.second.<get-second>|-7108495346814383827[0]
    //   Public signature debug description: <get-second>(){}1:1
    // CHECK JS_IR NATIVE:
    //   Mangled name: Pair#<get-second>(){}
    //   Public signature: /Pair.second.<get-second>|-2939116233384777905[0]
    //   Public signature debug description: <get-second>(){}
    get

  // CHECK:
  //   Mangled name: Pair#<init>(1:0;1:1){}
  //   Public signature: /Pair.<init>|3086114026882374588[0]
  //   Public signature debug description: <init>(1:0;1:1){}
  constructor(first: A, second: B) /* primary */

  // CHECK JVM_IR:
  //   Mangled name: Pair#component1(){}1:0
  //   Public signature: /Pair.component1|2393470133763651536[0]
  //   Public signature debug description: component1(){}1:0
  // CHECK JS_IR NATIVE:
  //   Mangled name: Pair#component1(){}
  //   Public signature: /Pair.component1|162597135895221648[0]
  //   Public signature debug description: component1(){}
  operator fun component1(): A

  // CHECK JVM_IR:
  //   Mangled name: Pair#component2(){}1:1
  //   Public signature: /Pair.component2|319033347667924570[0]
  //   Public signature debug description: component2(){}1:1
  // CHECK JS_IR NATIVE:
  //   Mangled name: Pair#component2(){}
  //   Public signature: /Pair.component2|3796717572321500973[0]
  //   Public signature debug description: component2(){}
  operator fun component2(): B

  // CHECK JVM_IR:
  //   Mangled name: Pair#copy(1:0;1:1){}Pair<1:0,1:1>
  //   Public signature: /Pair.copy|7298985996422673194[0]
  //   Public signature debug description: copy(1:0;1:1){}Pair<1:0,1:1>
  // CHECK JS_IR NATIVE:
  //   Mangled name: Pair#copy(1:0;1:1){}
  //   Public signature: /Pair.copy|9164798229600019588[0]
  //   Public signature debug description: copy(1:0;1:1){}
  fun copy(first: A, second: B): Pair<A, B>

  // CHECK JVM_IR:
  //   Mangled name: Pair#equals(kotlin.Any?){}kotlin.Boolean
  //   Public signature: /Pair.equals|722809408929142791[0]
  //   Public signature debug description: equals(kotlin.Any?){}kotlin.Boolean
  // CHECK JS_IR NATIVE:
  //   Mangled name: Pair#equals(kotlin.Any?){}
  //   Public signature: /Pair.equals|4638265728071529943[0]
  //   Public signature debug description: equals(kotlin.Any?){}
  override operator fun equals(other: Any?): Boolean

  // CHECK JVM_IR:
  //   Mangled name: Pair#hashCode(){}kotlin.Int
  //   Public signature: /Pair.hashCode|-8048879360829830756[0]
  //   Public signature debug description: hashCode(){}kotlin.Int
  // CHECK JS_IR NATIVE:
  //   Mangled name: Pair#hashCode(){}
  //   Public signature: /Pair.hashCode|3409210261493131192[0]
  //   Public signature debug description: hashCode(){}
  override fun hashCode(): Int

  // CHECK JVM_IR:
  //   Mangled name: Pair#toString(){}kotlin.String
  //   Public signature: /Pair.toString|6958853723545266802[0]
  //   Public signature debug description: toString(){}kotlin.String
  // CHECK JS_IR NATIVE:
  //   Mangled name: Pair#toString(){}
  //   Public signature: /Pair.toString|-1522858123163872138[0]
  //   Public signature debug description: toString(){}
  override fun toString(): String

}

// CHECK JVM_IR:
//   Mangled name: #box(){}kotlin.String
//   Public signature: /box|-9347091776561469[0]
//   Public signature debug description: box(){}kotlin.String
// CHECK JS_IR NATIVE:
//   Mangled name: #box(){}
//   Public signature: /box|2173511048851971368[0]
//   Public signature debug description: box(){}
fun box(): String

// CHECK JVM_IR:
//   Mangled name: #compareTo!java.util.Comparator<0:0>@0:0(0:0){0§<kotlin.Any?>}kotlin.Int
//   Public signature: /compareTo|-4091974102091923679[0]
//   Public signature debug description: compareTo!java.util.Comparator<0:0>@0:0(0:0){0§<kotlin.Any?>}kotlin.Int
// CHECK JS_IR NATIVE:
//   Mangled name: #compareTo!kotlin.Comparator<0:0>@0:0(0:0){0§<kotlin.Any?>}
//   Public signature: /compareTo|-7485670540277582765[0]
//   Public signature debug description: compareTo!kotlin.Comparator<0:0>@0:0(0:0){0§<kotlin.Any?>}
infix operator fun <T : Any?> T.compareTo($context_receiver_0: Comparator<T>, other: T): Int

// CHECK:
//   Mangled name: @Pair<0:0,0:0>{0§<kotlin.Any?>}min
//   Public signature: /min|6885845668930107919[0]
//   Public signature debug description: @Pair<0:0,0:0>{0§<kotlin.Any?>}min
val <T : Any?> Pair<T, T>.min: T
  // CHECK JVM_IR:
  //   Mangled name: #<get-min>!java.util.Comparator<0:0>@Pair<0:0,0:0>(){0§<kotlin.Any?>}0:0
  //   Public signature: /min.<get-min>|6404877126791863503[0]
  //   Public signature debug description: <get-min>!java.util.Comparator<0:0>@Pair<0:0,0:0>(){0§<kotlin.Any?>}0:0
  // CHECK JS_IR NATIVE:
  //   Mangled name: #<get-min>!kotlin.Comparator<0:0>@Pair<0:0,0:0>(){0§<kotlin.Any?>}
  //   Public signature: /min.<get-min>|-660185634957956497[0]
  //   Public signature debug description: <get-min>!kotlin.Comparator<0:0>@Pair<0:0,0:0>(){0§<kotlin.Any?>}
  get($context_receiver_0: Comparator<T>): T

