FILE: simpleMostSpecific.kt
    public abstract interface A : R|kotlin/Any| {
        public abstract val x: R|kotlin/CharSequence|
            public get(): R|kotlin/CharSequence|

        public abstract fun foo(): R|kotlin/String?|

        public abstract fun <T, F> bar(x: R|T|, y: R|F|): R|F?|

    }
    public abstract interface B : R|kotlin/Any| {
        public abstract var x: R|kotlin/String|
            public get(): R|kotlin/String|
            public set(value: R|kotlin/String|): R|kotlin/Unit|

        public abstract fun foo(): R|kotlin/String|

        public abstract fun <X, Y> bar(x: R|X|, y: R|Y|): R|Y|

    }
    public abstract interface C : R|kotlin/Any| {
        public abstract val x: R|kotlin/String|
            public get(): R|kotlin/String|

    }
    public abstract interface D1 : R|A|, R|B| {
    }
    public abstract interface D2 : R|B|, R|A| {
    }
    public abstract interface D3 : R|A|, R|C| {
    }
    public final fun main(d1: R|D1|, d2: R|D2|, d3: R|D3|): R|kotlin/Unit| {
        R|<local>/d1|.R|/B.x|.R|/checkType|<R|kotlin/String|>(<L> = checkType@fun R|CheckTypeInv<kotlin/String>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
            this@R|special/anonymous|.R|/_|<R|kotlin/String|>()
        }
        )
        R|<local>/d1|.R|/B.x| = String()
        R|<local>/d1|.R|/B.foo|().R|/checkType|<R|kotlin/String|>(<L> = checkType@fun R|CheckTypeInv<kotlin/String>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
            this@R|special/anonymous|.R|/_|<R|kotlin/String|>()
        }
        )
        R|<local>/d1|.R|/B.bar|<R|kotlin/Int|, R|kotlin/String|>(Int(1), String()).R|/checkType|<R|kotlin/String|>(<L> = checkType@fun R|CheckTypeInv<kotlin/String>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
            this@R|special/anonymous|.R|/_|<R|kotlin/String|>()
        }
        )
        R|<local>/d2|.R|/B.x|.R|/checkType|<R|kotlin/String|>(<L> = checkType@fun R|CheckTypeInv<kotlin/String>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
            this@R|special/anonymous|.R|/_|<R|kotlin/String|>()
        }
        )
        R|<local>/d2|.R|/B.x| = String()
        R|<local>/d2|.R|/B.foo|().R|/checkType|<R|kotlin/String|>(<L> = checkType@fun R|CheckTypeInv<kotlin/String>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
            this@R|special/anonymous|.R|/_|<R|kotlin/String|>()
        }
        )
        R|<local>/d2|.R|/B.bar|<R|kotlin/Int|, R|kotlin/String|>(Int(1), String()).R|/checkType|<R|kotlin/String|>(<L> = checkType@fun R|CheckTypeInv<kotlin/String>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
            this@R|special/anonymous|.R|/_|<R|kotlin/String|>()
        }
        )
        R|<local>/d3|.R|/C.x|.R|/checkType|<R|kotlin/String|>(<L> = checkType@fun R|CheckTypeInv<kotlin/String>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
            this@R|special/anonymous|.R|/_|<R|kotlin/String|>()
        }
        )
        R|<local>/d3|.R|/C.x| = String()
        R|<local>/d3|.R|/A.foo|().R|/checkType|<R|kotlin/String?|>(<L> = checkType@fun R|CheckTypeInv<kotlin/String?>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
            this@R|special/anonymous|.R|/_|<R|kotlin/String?|>()
        }
        )
        R|<local>/d3|.R|/A.bar|<R|kotlin/Int|, R|kotlin/String|>(Int(1), String()).R|/checkType|<R|kotlin/String?|>(<L> = checkType@fun R|CheckTypeInv<kotlin/String?>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
            this@R|special/anonymous|.R|/_|<R|kotlin/String?|>()
        }
        )
    }
