FILE: nameBasedDestructuringFullForm.kt
    public final? class Tuple : R|kotlin/Any| {
        public? [ContainingClassKey=Tuple] constructor([CorrespondingProperty=/Tuple.first] first: String, [CorrespondingProperty=/Tuple.second] second: Int): R|Tuple| {
            super<R|kotlin/Any|>()
        }

        public? final? [IsFromPrimaryConstructor=true] val first: String = R|<local>/first|
            public? [ContainingClassKey=Tuple] get(): String

        public? final? [IsFromPrimaryConstructor=true] val second: Int = R|<local>/second|
            public? [ContainingClassKey=Tuple] get(): Int

    }
    public? final? fun declaration(x: Tuple): R|kotlin/Unit| {
        when () {
            Boolean(true) ->  {
                lval <destruct>: <implicit> = x#
                lval first: <implicit> = R|<local>/<destruct>|.first#
                lvar second: <implicit> = R|<local>/<destruct>|.second#
            }
        }

        when () {
            Boolean(true) ->  {
                lval <destruct>: <implicit> = x#
                lvar first: <implicit> = R|<local>/<destruct>|.first#
            }
        }

        when () {
            Boolean(true) ->  {
                lval <destruct>: <implicit> = x#
                lval first: String = R|<local>/<destruct>|.first#
            }
        }

        when () {
            Boolean(true) ->  {
                lval <destruct>: <implicit> = x#
                lval aa: <implicit> = R|<local>/<destruct>|.first#
            }
        }

        when () {
            Boolean(true) ->  {
                lval <destruct>: <implicit> = x#
                lval aa: String = R|<local>/<destruct>|.first#
            }
        }

    }
    public? final? fun loop(x: List<Tuple>): R|kotlin/Unit| {
         {
            lval <iterator>: <implicit> = x#.iterator#()
            while(R|<local>/<iterator>|.hasNext#()) {
                [IsForLoopParameterProperty=true] lval <destruct>: <implicit> = R|<local>/<iterator>|.next#()
                lval first: <implicit> = R|<local>/<destruct>|.first#
                lval second: <implicit> = R|<local>/<destruct>|.second#
                 {
                }

            }

        }

         {
            lval <iterator>: <implicit> = x#.iterator#()
            while(R|<local>/<iterator>|.hasNext#()) {
                [IsForLoopParameterProperty=true] lval <destruct>: <implicit> = R|<local>/<iterator>|.next#()
                lval first: <implicit> = R|<local>/<destruct>|.first#
                 {
                }

            }

        }

         {
            lval <iterator>: <implicit> = x#.iterator#()
            while(R|<local>/<iterator>|.hasNext#()) {
                [IsForLoopParameterProperty=true] lval <destruct>: <implicit> = R|<local>/<iterator>|.next#()
                lval first: String = R|<local>/<destruct>|.first#
                 {
                }

            }

        }

         {
            lval <iterator>: <implicit> = x#.iterator#()
            while(R|<local>/<iterator>|.hasNext#()) {
                [IsForLoopParameterProperty=true] lval <destruct>: <implicit> = R|<local>/<iterator>|.next#()
                lval aa: <implicit> = R|<local>/<destruct>|.first#
                 {
                }

            }

        }

         {
            lval <iterator>: <implicit> = x#.iterator#()
            while(R|<local>/<iterator>|.hasNext#()) {
                [IsForLoopParameterProperty=true] lval <destruct>: <implicit> = R|<local>/<iterator>|.next#()
                lval aa: String = R|<local>/<destruct>|.first#
                 {
                }

            }

        }

    }
    public? final? fun lambda(): R|kotlin/Unit| {
        local final? fun foo(f: ( (Tuple) -> Unit )): R|kotlin/Unit|

        foo#(<L> = foo@fun <implicit>.<anonymous>(<destruct>: <implicit>): <implicit> <inline=Unknown>  {
            lval first: <implicit> = R|<local>/<destruct>|.first#
            lval second: <implicit> = R|<local>/<destruct>|.second#
             {
                ^@foo Unit
            }

        }
        )
        foo#(<L> = foo@fun <implicit>.<anonymous>(<destruct>: <implicit>): <implicit> <inline=Unknown>  {
            lval first: <implicit> = R|<local>/<destruct>|.first#
             {
                ^@foo Unit
            }

        }
        )
        foo#(<L> = foo@fun <implicit>.<anonymous>(<destruct>: <implicit>): <implicit> <inline=Unknown>  {
            lval first: String = R|<local>/<destruct>|.first#
             {
                ^@foo Unit
            }

        }
        )
        foo#(<L> = foo@fun <implicit>.<anonymous>(<destruct>: <implicit>): <implicit> <inline=Unknown>  {
            lval aa: <implicit> = R|<local>/<destruct>|.first#
             {
                ^@foo Unit
            }

        }
        )
        foo#(<L> = foo@fun <implicit>.<anonymous>(<destruct>: <implicit>): <implicit> <inline=Unknown>  {
            lval aa: String = R|<local>/<destruct>|.first#
             {
                ^@foo Unit
            }

        }
        )
    }
