class Value<T : Any?, IT : IR<T>> {
  constructor(value1: T, value2: IT) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  var value1: T
    field = value1
    get
    set

  val value2: IT
    field = value2
    get

}

interface IDelegate1<T1 : Any?, R1 : Any?> {
  abstract operator fun getValue(t: T1, p: KProperty<*>): R1

}

interface IDelegate2<T2 : Any?, R2 : Any?> {
  abstract operator fun getValue(t: T2, p: KProperty<*>): R2

}

interface IR<R : Any?> {
  abstract fun foo(): R

}

class CR<R : Any?> : IR<R> {
  constructor(r: R) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val r: R
    field = r
    get

  override fun foo(): R {
    return <this>.<get-r>()
  }

}

class P<P1 : Any?, P2 : Any?> {
  constructor(p1: P1, p2: P2) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val p1: P1
    field = p1
    get

  val p2: P2
    field = p2
    get

}

val <T : Any?> Value<T, CR<T>>.additionalText: P<T, T> /* by */
  field = { // BLOCK
    local class <no name provided> : IDelegate1<Value<T, CR<T>>, P<T, T>> {
      private constructor() /* primary */ {
        super/*Any*/()
        /* <init>() */

      }

      fun <F11T : Any?> qux11(t: F11T): F11T {
        return t
      }

      fun <F12T : IR<T>> qux12(t: F12T): T {
        return t.foo()
      }

      private val Value<T, CR<T>>.deepO: T /* by */
        field = { // BLOCK
          local class <no name provided> : IDelegate1<Value<T, CR<T>>, T> {
            private constructor() /* primary */ {
              super/*Any*/()
              /* <init>() */

            }

            override operator fun getValue(t: Value<T, CR<T>>, p: KProperty<*>): T {
              return t.<get-value1>()
            }

            fun <F21T : Any?> qux21(t: F21T): F21T {
              return t
            }

            fun <F22T : IR<T>> qux22(t: F22T): T {
              return t.foo()
            }

          }

          <no name provided>()
        }
        private get(): T {
          return <this> /*as <no name provided> */.#deepO$delegate.getValue(t = <this>, p = <no name provided>::deepO)
        }

      private val Value<T, CR<T>>.deepK: T /* by */
        field = { // BLOCK
          local class <no name provided> : IDelegate1<Value<T, CR<T>>, T> {
            private constructor() /* primary */ {
              super/*Any*/()
              /* <init>() */

            }

            override operator fun getValue(t: Value<T, CR<T>>, p: KProperty<*>): T {
              return t.<get-value2>().foo()
            }

          }

          <no name provided>()
        }
        private get(): T {
          return <this> /*as <no name provided> */.#deepK$delegate.getValue(t = <this>, p = <no name provided>::deepK)
        }

      override operator fun getValue(t: Value<T, CR<T>>, p: KProperty<*>): P<T, T> {
        return P<T, T>(p1 = (<this>, t).<get-deepO>(), p2 = (<this>, t).<get-deepK>())
      }

    }

    <no name provided>()
  }
  get(): P<T, T> {
    return #additionalText$delegate.getValue(t = <this>, p = ::additionalText/*</* null */>()*/)
  }
