package Ġru . n 1 ks . f 1 dashboard . reporting Ċ Ċ import Ġandroid . util . Base 6 4 Ċ import Ġorg . json . JSONArray Ċ Ċ internal Ġobject ĠReporting Keys Ġ{ ĊĠĠĠ Ġconst Ġval ĠLast Packets Data Ġ= Ġ" last _ packets " Ċ } Ċ Ċ object ĠPacket Tail Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval Ġtail Size Ġ= Ġ 1 0 ĊĠĠĠ Ġprivate Ġval Ġtail Ġ= ĠArray < ByteArray ? >( tail Size ) Ġ{ Ġnull Ġ} ĊĠĠĠ Ġprivate Ġvar Ġtail Idx Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġon Packet ( packet : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtail [ tail Idx ++] Ġ= Ġpacket ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tail Idx Ġ== Ġtail Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtail Idx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtail (): ĠArray < ByteArray > Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠArrayList < ByteArray >( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġidx Ġ= Ġtail Idx Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtail Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ== Ġtail Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= Ġtail [ idx ++] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( packet Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( packet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres . toArray ( Array ( 0 ) Ġ{ ĠByteArray ( 0 ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠByte Arrays JSON Utils Ġ{ ĊĊĠĠĠ Ġfun ĠtoJSON ( byte Arrays : ĠArray < ByteArray >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= ĠJSONArray () ĊĠĠĠĠĠĠĠ Ġbyte Arrays . forEach Ġ{ Ġjson Array . put ( Base 6 4 . encode ( it , ĠBase 6 4 . NO _ WRAP Ġor ĠBase 6 4 . DEFAULT ). decode ToString ()) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġjson Array . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfrom JSON ( json : ĠString ): ĠArray < ByteArray > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= ĠJSONArray ( json ) ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Sequence ( 0 ) Ġ{ Ġit Ġ+ Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( json Array . length ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠBase 6 4 . decode ( json Array . getString ( it ), ĠBase 6 4 . NO _ WRAP Ġor ĠBase 6 4 . DEFAULT ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList (). to Typed Array () ĊĠĠĠ Ġ} Ċ }