package Ġio . github . c row _ mis ia . li by uv Ċ Ċ import Ġjava . nio . ByteBuffer Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* ĠNV 2 1 ĠY UV ĠFormat . Ġ 4 : 2 : 0 Ġ 1 2 bpp Ċ Ġ*/ Ċ class ĠN v 2 1 Buffer Ġprivate Ġconstructor ( ĊĠĠĠ Ġbuffer : ĠByteBuffer ?, ĊĠĠĠ Ġoverride Ġval Ġplane Y : ĠPlane , ĊĠĠĠ Ġval Ġplane VU : ĠPlane , ĊĠĠĠ Ġoverride Ġval Ġwidth : ĠInt , ĊĠĠĠ Ġoverride Ġval Ġheight : ĠInt , ĊĠĠĠ Ġrelease Callback : ĠRunnable ?, Ċ ) Ġ: ĠAbstract Buffer ( buffer , ĠarrayOf ( plane Y , Ġplane VU ), Ġrelease Callback ), ĠBuffer Y < I 4 0 0 Buffer > Ġ{ ĊĠĠĠ Ġfun ĠconvertTo ( dst : ĠI 4 2 0 Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . convert NV 2 1 To I 4 2 0 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc VU Ġ= Ġplane VU . buffer , Ġsrc Stride VU Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst Y Ġ= Ġdst . plane Y . buffer , Ġdst Stride Y Ġ= Ġdst . plane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst U Ġ= Ġdst . plane U . buffer , Ġdst Stride U Ġ= Ġdst . plane U . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst V Ġ= Ġdst . plane V . buffer , Ġdst Stride V Ġ= Ġdst . plane V . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġmin ( width , Ġdst . width ), Ġheight Ġ= Ġmin ( height , Ġdst . height ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠconvertTo ( dst : ĠN v 1 2 Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . plan er NV 2 1 To NV 1 2 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc VU Ġ= Ġplane VU . buffer , Ġsrc Stride VU Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst Y Ġ= Ġdst . plane Y . buffer , Ġdst Stride Y Ġ= Ġdst . plane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst UV Ġ= Ġdst . plane UV . buffer , Ġdst Stride UV Ġ= Ġdst . plane UV . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġmin ( width , Ġdst . width ), Ġheight Ġ= Ġmin ( height , Ġdst . height ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠconvertTo ( dst : ĠN v 2 1 Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . plan er NV 1 2 Copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc VU Ġ= Ġplane VU . buffer , Ġsrc Stride VU Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst Y Ġ= Ġdst . plane Y . buffer , Ġdst Stride Y Ġ= Ġdst . plane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst UV Ġ= Ġdst . plane VU . buffer , Ġdst Stride UV Ġ= Ġdst . plane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġmin ( width , Ġdst . width ), Ġheight Ġ= Ġmin ( height , Ġdst . height ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠconvertTo ( dst : ĠArg b Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . convert NV 2 1 To ARGB ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc VU Ġ= Ġplane VU . buffer , Ġsrc Stride VU Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst ARGB Ġ= Ġdst . plane . buffer , Ġdst Stride ARGB Ġ= Ġdst . plane . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġmin ( width , Ġdst . width ), Ġheight Ġ= Ġmin ( height , Ġdst . height ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠconvertTo ( dst : ĠAb gr Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . convert NV 2 1 To AB GR ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc VU Ġ= Ġplane VU . buffer , Ġsrc Stride VU Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst AB GR Ġ= Ġdst . plane . buffer , Ġdst Stride AB GR Ġ= Ġdst . plane . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġmin ( width , Ġdst . width ), Ġheight Ġ= Ġmin ( height , Ġdst . height ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠconvertTo ( dst : ĠR gb 2 4 Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . convert NV 2 1 To RGB 2 4 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc VU Ġ= Ġplane VU . buffer , Ġsrc Stride VU Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst RGB 2 4 Ġ= Ġdst . plane . buffer , Ġdst Stride RGB 2 4 Ġ= Ġdst . plane . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġmin ( width , Ġdst . width ), Ġheight Ġ= Ġmin ( height , Ġdst . height ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠconvertTo ( dst : ĠY uv 2 4 Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . convert NV 2 1 To Y UV 2 4 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc VU Ġ= Ġplane VU . buffer , Ġsrc Stride VU Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst Y UV 2 4 Ġ= Ġdst . plane . buffer , Ġdst Stride Y UV 2 4 Ġ= Ġdst . plane . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġmin ( width , Ġdst . width ), Ġheight Ġ= Ġmin ( height , Ġdst . height ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠconvertTo ( dst : ĠRaw Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . convert NV 2 1 To RAW ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc VU Ġ= Ġplane VU . buffer , Ġsrc Stride VU Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst RAW Ġ= Ġdst . plane . buffer , Ġdst Stride RAW Ġ= Ġdst . plane . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġmin ( width , Ġdst . width ), Ġheight Ġ= Ġmin ( height , Ġdst . height ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmirror To ( dst : ĠN v 2 1 Buffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . plan er NV 1 2 Mirror ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc UV Ġ= Ġplane VU . buffer , Ġsrc Stride UV Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst Y Ġ= Ġdst . plane Y . buffer , Ġdst Stride Y Ġ= Ġdst . plane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst UV Ġ= Ġdst . plane VU . buffer , Ġdst Stride UV Ġ= Ġdst . plane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġmin ( width , Ġdst . width ), Ġheight Ġ= Ġmin ( height , Ġdst . height ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrotate ( dst : ĠI 4 2 0 Buffer , Ġrotate Mode : ĠRotate Mode ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . rotate NV 1 2 To I 4 2 0 Rotate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc UV Ġ= Ġplane VU . buffer , Ġsrc Stride UV Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst Y Ġ= Ġdst . plane Y . buffer , Ġdst Stride Y Ġ= Ġdst . plane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst U Ġ= Ġdst . plane V . buffer , Ġdst Stride U Ġ= Ġdst . plane V . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst V Ġ= Ġdst . plane U . buffer , Ġdst Stride V Ġ= Ġdst . plane U . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġrotate Mode . calculate Width ( this , Ġdst ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġrotate Mode . calculate Height ( this , Ġdst ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate Mode Ġ= Ġrotate Mode . degrees , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrotate ( dst : ĠN v 1 2 Buffer , Ġrotate Mode : ĠRotate Mode ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . rotate NV 1 2 To NV 2 1 Rotate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc UV Ġ= Ġplane VU . buffer , Ġsrc Stride UV Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst Y Ġ= Ġdst . plane Y . buffer , Ġdst Stride Y Ġ= Ġdst . plane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst VU Ġ= Ġdst . plane UV . buffer , Ġdst Stride VU Ġ= Ġdst . plane UV . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġrotate Mode . calculate Width ( this , Ġdst ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġrotate Mode . calculate Height ( this , Ġdst ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate Mode Ġ= Ġrotate Mode . degrees , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrotate ( dst : ĠN v 2 1 Buffer , Ġrotate Mode : ĠRotate Mode ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . rotate NV 2 1 Rotate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc VU Ġ= Ġplane VU . buffer , Ġsrc Stride VU Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst Y Ġ= Ġdst . plane Y . buffer , Ġdst Stride Y Ġ= Ġdst . plane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst VU Ġ= Ġdst . plane VU . buffer , Ġdst Stride VU Ġ= Ġdst . plane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġrotate Mode . calculate Width ( this , Ġdst ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġrotate Mode . calculate Height ( this , Ġdst ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate Mode Ġ= Ġrotate Mode . degrees , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġscale ( dst : ĠN v 2 1 Buffer , Ġfilter Mode : ĠFilter Mode ) Ġ{ ĊĠĠĠĠĠĠĠ ĠY uv . scale NV 1 2 Scale ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Y Ġ= Ġplane Y . buffer , Ġsrc Stride Y Ġ= Ġplane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc UV Ġ= Ġplane VU . buffer , Ġsrc Stride UV Ġ= Ġplane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Width Ġ= Ġwidth , Ġsrc Height Ġ= Ġheight , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst Y Ġ= Ġdst . plane Y . buffer , Ġdst Stride Y Ġ= Ġdst . plane Y . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst UV Ġ= Ġdst . plane VU . buffer , Ġdst Stride UV Ġ= Ġdst . plane VU . row Stride , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst Width Ġ= Ġdst . width , Ġdst Height Ġ= Ġdst . height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Mode Ġ= Ġfilter Mode . mode , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠFactory Ġ: ĠBuffer Factory < Nv 2 1 Buffer > Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Stride With Capacity ( width : ĠInt , Ġheight : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapacity Y Ġ= Ġwidth Ġ* Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapacity VU Ġ= Ġ( width Ġ+ Ġ 1 ). shr ( 1 ) Ġ* Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġint ArrayOf ( width , Ġcapacity Y , Ġwidth , Ġcapacity VU ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġallocate ( width : ĠInt , Ġheight : ĠInt ): ĠN v 2 1 Buffer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( stride Y , Ġcapacity Y , Ġstride VU , Ġcapacity VU ) Ġ= Ġget Stride With Capacity ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġcreate ByteBuffer ( capacity Y Ġ+ Ġcapacity VU ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( buffer Y , Ġbuffer VU ) Ġ= Ġbuffer . slice ( capacity Y , Ġcapacity VU ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠN v 2 1 Buffer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Ġ= Ġbuffer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplane Y Ġ= ĠPlane Primitive ( stride Y , Ġbuffer Y ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplane VU Ġ= ĠPlane Primitive ( stride VU , Ġbuffer VU ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠY uv . free Native Buffer ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrap ( buffer : ĠByteBuffer , Ġwidth : ĠInt , Ġheight : ĠInt ): ĠN v 2 1 Buffer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( buffer . is Direct ) Ġ{ Ġ" Unsupported Ġnon - direct ĠByteBuffer ." Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( stride Y , Ġcapacity Y , Ġstride VU , Ġcapacity VU ) Ġ= Ġget Stride With Capacity ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( buffer Y , Ġbuffer VU ) Ġ= Ġbuffer . slice ( capacity Y , Ġcapacity VU ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠN v 2 1 Buffer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Ġ= Ġbuffer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplane Y Ġ= ĠPlane Primitive ( stride Y , Ġbuffer Y ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplane VU Ġ= ĠPlane Primitive ( stride VU , Ġbuffer VU ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Callback Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwrap ( plane Y : ĠPlane , Ġplane VU : ĠPlane , Ġwidth : ĠInt , Ġheight : ĠInt ): ĠN v 2 1 Buffer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠN v 2 1 Buffer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplane Y Ġ= Ġplane Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplane VU Ġ= Ġplane VU , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Callback Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ