package Ġcom . da im ler . mb proto kit . dto . car Ċ Ċ import Ġcom . da im ler . mb proto kit . dto . car . head unit . Day Time Ċ import Ġcom . da im ler . mb proto kit . dto . car . head unit . Week ly Profile Ċ import Ġcom . da im ler . mb proto kit . dto . car . vehicle data . Speed Alert Configuration Ċ import Ġcom . da im ler . mb proto kit . dto . car . ze v . Ch arging Power Control Ċ import Ġcom . da im ler . mb proto kit . dto . car . ze v . S oc Profile Ċ import Ġcom . da im ler . mb proto kit . dto . car . ze v . Temperature Zone Ċ import Ġcom . da im ler . mb proto kit . dto . car . ze v . Vehicle Ch arging Break Clock Timer Ċ import Ġcom . da im ler . mb proto kit . dto . car . ze v . Vehicle Ch arging Program Parameter Ċ import Ġcom . da im ler . mb proto kit . dto . car . ze v . Z ev Tar iff Ċ import Ġcom . da im ler . mb proto kit . generated . Vehicle Commands Ċ import Ġcom . da im ler . mb proto kit . generated . Vehicle Events Ċ import Ġkotlin . random . Random Ċ Ċ object ĠVehicle Event Util Ġ{ ĊĊĠĠĠ Ġfun Ġcreate Attribute ( boolean : ĠBoolean ): ĠVehicle Events . Vehicle Attribute Status Ġ= ĠVehicle Events . Vehicle Attribute Status ĊĠĠĠĠĠĠĠ Ġ. newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbool Value Ġ= Ġboolean ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Attribute ( int : ĠInt ): ĠVehicle Events . Vehicle Attribute Status Ġ= ĠVehicle Events . Vehicle Attribute Status ĊĠĠĠĠĠĠĠ Ġ. newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInt 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint Value Ġ= Ġint . to Long () ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Attribute ( double : ĠDouble ): ĠVehicle Events . Vehicle Attribute Status Ġ= ĠVehicle Events . Vehicle Attribute Status ĊĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Value Ġ= Ġdouble ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Attribute ( long : ĠLong ): ĠVehicle Events . Vehicle Attribute Status Ġ= ĠVehicle Events . Vehicle Attribute Status ĊĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInt 6 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint Value Ġ= Ġlong ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Attribute ( day Times : ĠList < Day Time >): ĠVehicle Events . Vehicle Attribute Status Ġ= ĠVehicle Events . Vehicle Attribute Status . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġweekly Settings Head Unit Value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . Week ly Settings Head Unit Value . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Times . forEach Ġ{ Ġday Time Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Week ly Settings ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . Week ly Setting . getDefaultInstance (). to Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Ġ= Ġday Time . day . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminutes Since Mid night Ġ= Ġday Time . time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Week ly Profile ( weekly Profile : ĠWeek ly Profile ): ĠVehicle Events . Vehicle Attribute Status Ġ= ĠVehicle Events . Vehicle Attribute Status . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġweekly Profile Value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . Week ly Profile Value . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Time Profile Entries Activ atable Ġ= Ġweekly Profile . single Entries Activ atable Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax NumberOf Week ly Time Profile Slots Ġ= Ġweekly Profile . max Slots Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax NumberOf Time Profiles Ġ= Ġweekly Profile . max Time Profiles Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NumberOf Time Profile Slots Ġ= Ġweekly Profile . current Slots Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent NumberOf Time Profiles Ġ= Ġweekly Profile . currentTime Profiles Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweekly Profile . all Time Profiles . forEach Ġ{ Ġtime Profile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Time Profiles ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . V VR Time Profile . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Ġ= Ġtime Profile . identifier Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhour Ġ= Ġtime Profile . hour ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminute Ġ= Ġtime Profile . minute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġtime Profile . active ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Profile . days . map Ġ{ ĠVehicle Commands . Time Profile Day . for Number ( it . id ) Ġ}. forEach Ġ{ Ġtime Profile Day Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Days ( time Profile Day ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Speed Alert ( speed Alert Configurations : ĠList < Speed Alert Configuration >): ĠVehicle Events . Vehicle Attribute Status Ġ= ĠVehicle Events . Vehicle Attribute Status ĊĠĠĠĠĠĠĠ Ġ. newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Alert Configuration Value Ġ= ĠVehicle Events . Speed Alert Configuration Value . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Alert Configurations . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Speed Alert Configurations ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . Speed Alert Configuration . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Timestamp In S Ġ= Ġit . end Timestamp InSeconds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthreshold In K ph Ġ= Ġit . threshold In K ilo meters Per Hour ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthreshold Display Value Ġ= Ġit . threshold Display Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Temperature Points ( points : ĠMap < Temperature Zone , ĠDouble ?> ): ĠVehicle Events . Vehicle Attribute Status Ġ= ĠVehicle Events . Vehicle Attribute Status ĊĠĠĠĠĠĠĠ Ġ. newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemperature Points Value Ġ= ĠVehicle Events . Temperature Points Value . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . forEach Ġ{ Ġ( temperature Zone , Ġtemperature Value ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Temperature Points ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . Temperature Point . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzone Ġ= Ġtemperature Zone . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemperature Ġ= Ġtemperature Value Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Week day Tar iff ( tar iffs : ĠList < Z ev Tar iff >): ĠVehicle Events . Vehicle Attribute Status Ġ= ĠVehicle Events . Vehicle Attribute Status ĊĠĠĠĠĠĠĠ Ġ. newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweek day Tar iff Value Ġ= ĠVehicle Events . Week day Tar iff Value . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtar iffs . forEach Ġ{ Ġz ev Tar iff Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Tar iffs ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . Tar iff . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrate Ġ= Ġz ev Tar iff . rate . end Inclusive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġz ev Tar iff . time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Week end Tar iff ( tar iffs : ĠList < Z ev Tar iff >): ĠVehicle Events . Vehicle Attribute Status Ġ= ĠVehicle Events ĊĠĠĠĠĠĠĠ Ġ. Vehicle Attribute Status . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweekend Tar iff Value Ġ= ĠVehicle Events . Week end Tar iff Value . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtar iffs . forEach Ġ{ Ġz ev Tar iff Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Tar iffs ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . Tar iff . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrate Ġ= Ġz ev Tar iff . rate . end Inclusive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġz ev Tar iff . time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate S oc Profile ( soc Profile : ĠList < S oc Profile >): ĠVehicle Events . Vehicle Attribute Status Ġ= ĠVehicle Events ĊĠĠĠĠĠĠĠ Ġ. Vehicle Attribute Status . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Of Charge Profile Value Ġ= ĠVehicle Events . State Of Charge Profile Value . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsoc Profile . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd States Of Charge ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . State Of Charge . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp In S Ġ= Ġit . time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Of Charge Ġ= Ġit . soc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Ch arging Prog ams ( params : ĠList < Vehicle Ch arging Program Parameter >): ĠVehicle Events . Vehicle Attribute Status Ġ= ĊĠĠĠĠĠĠĠ ĠVehicle Events . Vehicle Attribute Status . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharge Programs Value Ġ= ĠVehicle Events . Charge Programs Value . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Charge Program Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . Charge Program Parameters . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharge Program Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . Charge Program . for Number ( it . program ?. charge Program ?. number Ġ?: Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax S oc Ġ= Ġit . max S oc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Unlock Ġ= Ġit . auto Unlock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Based Ch arging Ġ= Ġit . location Based Ch arging ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweekly Profile Ġ= Ġit . weekly Profile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclock Timer Ġ= Ġit . clock Timer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ch arging Current Ġ= Ġit . max Ch arging Current ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeco Ch arging Ġ= Ġit . eco Ch arging ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Ch arging Break Clock Timer ( timers : ĠList < Vehicle Ch arging Break Clock Timer >): ĠVehicle Events . Vehicle Attribute Status Ġ= ĊĠĠĠĠĠĠĠ ĠVehicle Events . Vehicle Attribute Status . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch arging Break Clock Timer Ġ= ĠVehicle Events . Ch arging Break Clock Timer . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimers . forEach Ġ{ Ġtimer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Clock Timer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVehicle Events . Ch arging Break Clock Timer Entry . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= Ġtimer . action . action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Hour Ġ= Ġtimer . endTime Hour ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Min Ġ= Ġtimer . endTime Min ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Hour Ġ= Ġtimer . startTime Hour ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Min Ġ= Ġtimer . startTime Min ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Id Ġ= Ġtimer . timer Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġfun Ġcreate Ch arging Power Control ( control : ĠCh arging Power Control ): ĠVehicle Events . Vehicle Attribute Status Ġ= ĊĠĠĠĠĠĠĠ ĠVehicle Events . Vehicle Attribute Status . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch arging Power Control Ġ= ĠVehicle Events . Ch arging Power Control . newBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharge Status Ġ= Ġcontrol . ch arging Status . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctrl Duration Ġ= Ġcontrol . control Duration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctrl Info Ġ= Ġcontrol . control Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharge Power Ġ= Ġcontrol . ch arging Power ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserv Avail Ġ= Ġcontrol . service Available ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserv Stat Ġ= Ġcontrol . service Status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case Ġ= Ġcontrol . use Case ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġ}. build () Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠEnum < T >> Ġrandom () Ġ= Ġenum Values < T >() [ Random . nextInt ( 0 , Ġenum Values < T >(). size )] Ċ