fun interface Base {
    fun doStuff(): String
}

fun interface I : Base

fun interface Proxy : I {

    override fun doStuff(): String = doStuffInt().toString()

    fun doStuffInt(): Int
}

fun runBase(b: Base) = b.doStuff()

fun runI(i: I) = i.doStuff()

fun runProxy(p: Proxy) = p.doStuff()

fun box(): String {

    if (runI { "i" } != "i") return "fail1"

    if (runProxy { 10 } != "10") return "fail2"

    return runBase { "OK" }
}
