package Ġorg . t aw ek . crypto . tool Ċ Ċ import Ġorg . j line . terminal . Terminal Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . context . annotation . Lazy Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . t aw ek . crypto . tool . Data Format Ċ import Ġorg . t aw ek . crypto . tool . Data Format . TEXT Ċ import Ġjava . io . File Ċ Ċ @ Component Ċ class ĠIO Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġ@ Lazy ĊĠĠĠ Ġlateinit Ġvar Ġterminal : ĠTerminal ĊĊĠĠĠ Ġfun Ġwrite Output ( ĊĠĠĠĠĠĠĠ Ġresult : ĠByteArray , ĊĠĠĠĠĠĠĠ Ġoutput : ĠString ?, ĊĠĠĠĠĠĠĠ Ġoutput Format : ĠData Format ? Ġ= ĠTEXT ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( output Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeff Data Format Ġ= Ġoutput Format Ġ?: ĠData Format . HEX ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatted Result Ġ= Ġeff Data Format . encode ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" OUTPUT Ġ${ eff Data Format . name }: ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( formatted Result ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( output Format Ġ?: ĠTEXT ). writeFile ( File ( output ), Ġresult ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprintln ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġterminal . writer (). println ( s ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġread Input ( input : ĠString ?, Ġinput Data : ĠString ?, Ġinput Format : ĠData Format ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( input Data Ġ!= Ġnull Ġ&& Ġinput Ġ!= Ġnull ) Ġ-> Ġthrow ĠIllegalArgumentException (" Specify Ġ-- input - data Ġor Ġ-- input , Ġnot Ġboth ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Data Ġ!= Ġnull Ġ-> Ġinput Data ( input Data , Ġinput Format ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ!= Ġnull Ġ-> Ġinput File ( input , Ġinput Format ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Specify Ġ-- input - data Ġor Ġ-- input , Ġnone Ġwas Ġgiven ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinput Data ( input Data : ĠString , Ġinput Format : ĠData Format ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( input Format ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĠData Format . detect And Decode ( input Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġinput Format . decode ( input Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinput File ( fileName : ĠString , Ġfile Format : ĠData Format ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( file Format Ġ?: ĠTEXT ). readFile ( File ( fileName )) ĊĠĠĠ Ġ} Ċ Ċ }