package Ġio . github . binary foo . de coders . ap du Ċ Ċ import Ġio . github . binary foo . Decoded Data Ċ import Ġio . github . binary foo . E mv Tags Ċ import Ġio . github . binary foo . de coders . Decode Session Ċ import Ġio . github . binary foo . de coders . TL V Decoder Ċ import Ġio . github . binary foo . tl v . Tag Ċ import Ġjava . util .* Ċ Ċ class ĠReply AP DU Decoder ( private Ġval Ġt lv Decoder : ĠT LV Decoder ) Ġ{ ĊĊĠ Ġfun Ġdecode ( input : ĠString , ĠstartIndex InBytes : ĠInt , Ġsession : ĠDecode Session ): ĠDe coded Data Ġ{ ĊĠĠĠ Ġval Ġstatus Bytes Start Ġ= Ġinput . length Ġ- Ġ 4 ĊĠĠĠ Ġval Ġend Index : ĠInt ĊĠĠĠ Ġval Ġchildren : ĠList < Decoded Data > ĊĠĠĠ Ġval Ġdecoded Data : ĠString ĊĠĠĠ Ġif Ġ( input . length Ġ== Ġ 4 ) Ġ{ ĊĠĠĠĠĠ Ġval Ġresponse Code Ġ= ĠResponse Code . lookup ( input . substring ( status Bytes Start )) ĊĠĠĠĠĠ Ġdecoded Data Ġ= Ġresponse Code . get Hex () Ġ+ Ġ" Ġ" Ġ+ Ġresponse Code . description ĊĠĠĠĠĠ Ġchildren Ġ= ĠlistOf < Decoded Data >() ĊĠĠĠĠĠ Ġend Index Ġ= ĠstartIndex InBytes Ġ+ Ġ 2 ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġdecoded Data Ġ= Ġinput . substring ( status Bytes Start ) ĊĠĠĠĠĠ Ġchildren Ġ= Ġt lv Decoder . decode ( input . substring ( 0 , Ġstatus Bytes Start ), ĠstartIndex InBytes , Ġsession ) ĊĠĠĠĠĠ ĠaddTo Session ( session , Ġchildren , ĠArrays . asList ( E mv Tags . PDO L , ĠE mv Tags . C DO L _ 1 , ĠE mv Tags . C DO L _ 2 , ĠE mv Tags . D DO L )) ĊĠĠĠĠĠ Ġval Ġpayload Ġ= Ġchildren [ 0 ] ĊĠĠĠĠĠ Ġend Index Ġ= Ġpayload . end Index Ġ+ Ġ 2 ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠDe coded Data . construct ed (" R - AP DU ", Ġdecoded Data , ĠstartIndex InBytes , Ġend Index , Ġchildren ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠaddTo Session ( session : ĠDecode Session , Ġchildren : ĠList < Decoded Data >, Ġtags : ĠList < Tag >) Ġ{ ĊĠĠĠ Ġfor Ġ( child Ġin Ġchildren ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( child . tag Ġ!= Ġnull Ġ&& Ġtags . contains ( child . tag )) Ġ{ ĊĠĠĠĠĠĠĠ Ġsession . put ( child . tag , Ġchild . full Decoded Data ) ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( child . is Composite ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠaddTo Session ( session , Ġchild . children , Ġtags ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ