package Ġcom . mem fault . b ort . parsers Ċ Ċ import Ġcom . mem fault . b ort . shared . Log cat Command Ċ import Ġcom . mem fault . b ort . shared . Log cat Format Ċ import Ġcom . mem fault . b ort . shared . Log cat Format Modifier Ċ import Ġjava . time . Instant Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠLog cat Parser Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlast Line Ok () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . of Epoch Second ( 1 6 1 0 9 7 3 2 4 2 , Ġ 1 6 8 2 7 3 0 8 7 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 9 0 0 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 4 : 0 2 . 1 6 8 2 7 3 0 8 7 Ġ+ 0 0 0 0 ĠĠ 9 0 0 8 ĠĠ 9 0 0 9 ĠI ĠService Manager : Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Waiting Ġfor Ġservice ĠAt Cmd F wd ...", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 3 : 1 7 . 7 1 8 8 6 0 2 2 4 Ġ+ 0 0 0 0 ĠĠĠĠĠ 0 ĠĠĠĠĠ 0 ĠI Ġchat ty Ġ Ġ: Ġuid = 0 ( root ) Ġlog d Ġidentical Ġ 1 1 Ġlines ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 4 : 0 2 . 1 6 8 2 7 3 0 8 7 Ġ+ 0 0 0 0 ĠĠ 9 0 0 8 ĠĠ 9 0 0 9 ĠI ĠService Manager : ĠWaiting Ġfor Ġservice ĠAt Cmd F wd ...", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOMMAND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: dummy Uid Parser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). parse (). as Iterable (). last () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġuid De coding () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 0 , Ġ 2 0 0 0 , Ġnull , Ġ 1 0 0 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 3 : 1 7 . 7 1 8 8 6 0 2 2 4 Ġ+ 0 0 0 0 Ġ Ġroot ĠĠĠĠĠĠ 0 ĠI Ġchat ty Ġ Ġ: Ġuid = 0 ( root ) Ġlog d Ġidentical Ġ 1 1 Ġlines ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 4 : 0 2 . 1 6 8 2 7 3 0 8 7 Ġ+ 0 0 0 0 Ġ Ġshell ĠĠ 9 0 0 9 ĠI ĠService Manager : ĠWaiting Ġ... ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 4 : 0 2 . 1 6 8 2 7 3 0 8 7 Ġ+ 0 0 0 0 Ġ Ġunknown ĠĠ 9 0 0 9 ĠI ĠService Manager : ĠWaiting Ġ... ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 4 : 0 2 . 1 6 8 2 7 3 0 8 7 Ġ+ 0 0 0 0 Ġ Ġradio ĠĠ 9 0 0 9 ĠI ĠService Manager : ĠWaiting Ġ... ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOMMAND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: dummy Uid Parser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). parse (). map Ġ{ Ġit . uid Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Separ ators () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . of Epoch Second ( 1 6 1 0 9 7 3 1 9 7 , Ġ 7 1 8 8 6 0 2 2 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 3 : 1 7 . 7 1 8 8 6 0 2 2 4 Ġ+ 0 0 0 0 Ġ Ġroot ĠĠĠĠĠ 0 ĠI Ġchat ty Ġ Ġ: Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uid = 0 ( root ) Ġlog d Ġidentical Ġ 1 1 Ġlines " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Line ( null , Ġnull , Ġnull , Ġ" --------- Ġbeginning Ġof Ġkernel ", Ġ" kernel "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . of Epoch Second ( 1 6 1 0 9 7 3 2 4 2 , Ġ 1 6 8 2 7 3 0 8 7 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 9 0 0 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 4 : 0 2 . 1 6 8 2 7 3 0 8 7 Ġ+ 0 0 0 0 ĠĠ 9 0 0 8 ĠĠ 9 0 0 9 ĠI ĠService Manager : Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Waiting Ġfor Ġservice ĠAt Cmd F wd ...", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kernel " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Line ( null , Ġnull , Ġnull , Ġ" --------- Ġswitch Ġto Ġmain ", Ġ" main "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . of Epoch Second ( 1 6 1 0 9 7 3 3 1 3 , Ġ 2 2 4 7 1 8 8 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 5 : 1 3 . 0 2 2 4 7 1 8 8 6 Ġ+ 0 0 0 0 Ġ Ġroot ĠĠĠĠĠ 0 ĠE Ġfoo Ġ Ġ: Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" bar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" main " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 3 : 1 7 . 7 1 8 8 6 0 2 2 4 Ġ+ 0 0 0 0 Ġ Ġroot ĠĠĠĠĠ 0 ĠI Ġchat ty Ġ Ġ: Ġuid = 0 ( root ) Ġlog d Ġidentical Ġ 1 1 Ġlines ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" --------- Ġbeginning Ġof Ġkernel ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 4 : 0 2 . 1 6 8 2 7 3 0 8 7 Ġ+ 0 0 0 0 ĠĠ 9 0 0 8 ĠĠ 9 0 0 9 ĠI ĠService Manager : ĠWaiting Ġfor Ġservice ĠAt Cmd F wd ...", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" --------- Ġswitch Ġto Ġmain ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 5 : 1 3 . 0 2 2 4 7 1 8 8 6 Ġ+ 0 0 0 0 Ġ Ġroot ĠĠĠĠĠ 0 ĠE Ġfoo Ġ Ġ: Ġbar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOMMAND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: dummy Uid Parser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). parse (). toList () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Line With Pid Tid () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . of Epoch Second ( 1 6 1 0 9 7 3 2 4 2 , Ġ 1 6 8 2 7 3 0 8 7 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 4 : 0 2 . 1 6 8 2 7 3 0 8 7 Ġ+ 0 0 0 0 Ġshell Ġ 9 0 0 8 ĠĠ 9 0 0 9 ĠI ĠService Manager : Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Waiting ...", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 2 1 - 0 1 - 1 8 Ġ 1 2 : 3 4 : 0 2 . 1 6 8 2 7 3 0 8 7 Ġ+ 0 0 0 0 Ġshell Ġ 9 0 0 8 ĠĠ 9 0 0 9 ĠI ĠService Manager : ĠWaiting ...", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOMMAND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: dummy Uid Parser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). parse (). toList () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlast Line Not Ok () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Log cat Line ( message Ġ= Ġ" 0 1 - 1 8 Ġ 1 2 : 3 4 : 0 2 . 1 6 8 2 7 3 0 8 7 ĠĠ 9 0 0 8 ĠĠ 9 0 0 8 ĠI ĠService Manager : ĠWaiting ... ")), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of (" 0 1 - 1 8 Ġ 1 2 : 3 4 : 0 2 . 1 6 8 2 7 3 0 8 7 ĠĠ 9 0 0 8 ĠĠ 9 0 0 8 ĠI ĠService Manager : ĠWaiting ... "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOMMAND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: dummy Uid Parser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). parse (). toList () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġempty Input () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < Log cat Line >(), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog cat Parser ( sequence Of (), ĠCOMMAND , Ġ:: dummy Uid Parser ). parse (). toList () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠCOMMAND Ġ= ĠLog cat Command ( ĊĠĠĠ Ġformat Ġ= ĠLog cat Format . THREAD TIME , ĊĠĠĠ Ġformat Modifiers Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠLog cat Format Modifier . N SEC , ĊĠĠĠĠĠĠĠ ĠLog cat Format Modifier . UTC , ĊĠĠĠĠĠĠĠ ĠLog cat Format Modifier . YEAR , ĊĠĠĠĠĠĠĠ ĠLog cat Format Modifier . UID , ĊĠĠĠ Ġ), Ċ ) Ċ Ċ // ĠOn Ġreal Ġdevices Ġwe Ġuse Ġandroid . os . Process . get Uid For Name Ġbut Ġhere Ġwe 'll Ġuse Ċ // Ġ Ġa Ġdummy Ġlookup Ġtable Ċ private Ġfun Ġdummy Uid Parser ( uid : ĠString ) Ġ= Ġwhen Ġ( uid ) Ġ{ ĊĠĠĠ Ġ" root " Ġ-> Ġ 0 ĊĠĠĠ Ġ" radio " Ġ-> Ġ 1 0 0 1 ĊĠĠĠ Ġ" shell " Ġ-> Ġ 2 0 0 0 ĊĠĠĠ Ġelse Ġ-> Ġ- 1 Ċ } Ċ