package Ġid . go . b pk . secure vpn . unit Ċ Ċ import Ġid . go . b pk . secure vpn . misc . Data Unit Parsing Error Ċ import Ġid . go . b pk . secure vpn . misc . Incoming Buffer Ċ import Ġjava . nio . ByteBuffer Ċ import Ġkotlin . properties . Deleg ates ĊĊ Ċ internal Ġabstract Ġclass ĠData Unit < T Ġ: ĠNumber > Ġ{ ĊĠĠĠ Ġinternal Ġvar Ġ_ length Ġby ĠDeleg ates . observable ( 0 ) Ġ{ Ġ_, Ġ_, Ġnew Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( new Ġ! in Ġvalid Length Range ) Ġthrow ĠData Unit Parsing Error () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġabstract Ġval Ġvalid Length Range : ĠInt Range ĊĊĠĠĠ Ġinternal Ġabstract Ġfun Ġget Typed Length (): ĠT ĊĊĠĠĠ Ġinternal Ġabstract Ġfun Ġset Typed Length ( value : ĠT ) ĊĊĠĠĠ Ġinternal Ġabstract Ġfun Ġread ( bytes : ĠIncoming Buffer ) Ġ// Ġreading Ġstart Ġafter Ġpart Ġwhich Ġtell Ġdata Ġunit 's Ġtype ĊĊĠĠĠ Ġinternal Ġabstract Ġfun Ġwrite ( bytes : ĠByteBuffer ) Ġ// Ġwriting Ġstart Ġwith Ġheader ĊĊĠĠĠ Ġinternal Ġabstract Ġfun Ġupdate () Ġ// Ġinvoke Ġafter Ġmodifying Ġproperties Ġto Ġrec orrect Ġheader Ċ } Ċ Ċ internal Ġabstract Ġclass ĠByte Length Data Unit Ġ: ĠData Unit < Byte >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Typed Length () Ġ= Ġ_ length . to Byte () ĊĊĠĠĠ Ġoverride Ġfun Ġset Typed Length ( value : ĠByte ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ length Ġ= Ġvalue . toInt () ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġabstract Ġclass ĠShort Length Data Unit Ġ: ĠData Unit < Short >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Typed Length () Ġ= Ġ_ length . to Short () ĊĊĠĠĠ Ġoverride Ġfun Ġset Typed Length ( value : ĠShort ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ length Ġ= Ġvalue . toInt () ĊĠĠĠ Ġ} Ċ } Ċ