package Ġcom . l hw dev Ċ Ċ import Ġcom . l hw dev . utils . Merge able ĊĊ Ċ inline Ġfun Ġ< re ified ĠT > ĠList <* >. last InstanceOf () Ġ= Ġlast Ġ{ Ġit Ġis ĠT Ġ} Ġas ĠT Ċ Ċ inline Ġfun Ġ< T , ĠR Ġ: ĠAny > ĠList < T >. choose NonNull ( transform : Ġ( T ) Ġ-> ĠR ?): ĠR Ġ{ Ċ ĉ for ( i Ġin Ġindices ) Ġ{ Ċĉ ĉ val Ġvalue Ġ= Ġtransform ( get ( i )) Ċĉ ĉ if ( value Ġ!= Ġnull ) Ġreturn Ġvalue Ċ ĉ } ĊĉĊ ĉ throw ĠIllegalStateException (" choose Last NonNull : Ġno Ġmatching Ġitem ") Ċ } Ċ Ċ inline Ġfun Ġ< T , ĠR Ġ: ĠAny > ĠList < T >. choose Last NonNull ( transform : Ġ( T ) Ġ-> ĠR ?): ĠR Ġ{ Ċ ĉ for ( i Ġin Ġsize Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ Ċĉ ĉ val Ġvalue Ġ= Ġtransform ( get ( i )) Ċĉ ĉ if ( value Ġ!= Ġnull ) Ġreturn Ġvalue Ċ ĉ } ĊĉĊ ĉ throw ĠIllegalStateException (" choose Last NonNull : Ġno Ġmatching Ġitem ") Ċ } Ċ Ċ inline Ġfun Ġ< T , ĠR Ġ: ĠMerge able < R >> ĠIterable < T >. fold Merged ( initial : ĠR , Ġoperation : Ġ( T ) Ġ-> ĠR ?) Ġ= Ġfold ( initial ) Ġ{ Ġacc , Ġelement Ġ-> Ċ ĉ val Ġvalue Ġ= Ġoperation ( element ) Ċ ĉ if ( value Ġ== Ġnull ) Ġacc Ġelse Ġacc . merge ( value ) Ċ } Ċ Ċ fun Ġ< T Ġ: ĠMerge able < T >> ĠIterable < T >. merge All ( initial : ĠT ) Ġ= Ġfold Merged ( initial ) Ġ{ Ġit Ġ} Ċ Ċ fun ĠString . pair ( by : ĠString ): ĠPair < String , ĠString > Ġ{ Ċ ĉ val Ġindex Ġ= ĠindexOf ( by ) Ċ ĉ if ( index Ġ== Ġ- 1 ) Ġerror (" co ul dn 't Ġfind Ġ$ by Ġin Ġ$ this ") Ċ ĉ return Ġsubstring ( 0 , Ġindex ) Ġto Ġdrop ( index Ġ+ Ġby . length ) Ċ } Ċ