package Ġorg . trust note . super wallet . biz . units Ċ Ċ import Ġcom . google . gson . JsonArray Ċ import Ġcom . google . gson . Json Element Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . google . gson . Json Primitive Ċ import Ġorg . json . JSON String er Ċ import Ġorg . trust note . db . Db Helper Ċ import Ġorg . trust note . db . F unded Address Ċ import Ġorg . trust note . db . Payload Ċ import Ġorg . trust note . db . entity .* Ċ import Ġorg . trust note . super wallet . biz . Activity Main Ċ import Ġorg . trust note . super wallet . biz . TTT Ċ import Ġorg . trust note . super wallet . biz . js . JS Api Ċ import Ġorg . trust note . super wallet . biz . wallet . Payment Info Ċ import Ġorg . trust note . super wallet . biz . wallet . Wallet Manager Ċ import Ġorg . trust note . super wallet . biz . wallet . W itness Manager Ċ import Ġorg . trust note . super wallet . network . Hub Manager Ċ import Ġorg . trust note . super wallet . network . Hub Model Ċ import Ġorg . trust note . super wallet . network . pojo . MSG _ TYPE Ċ import Ġorg . trust note . super wallet . network . pojo . Req Get Parents Ċ import Ġorg . trust note . super wallet . network . pojo . Req Post Joint Ċ import Ġorg . trust note . super wallet . util . My Thread Manager Ċ import Ġorg . trust note . super wallet . util . Utils Ċ Ċ class ĠUnit Composer ( val Ġsend Payment Info : ĠPayment Info ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġunits Ġ= ĠUnits () ĊĠĠĠ Ġprivate Ġval Ġmessages Ġ= ĠMessages () ĊĠĠĠ Ġprivate Ġval Ġpayload Ġ= ĠPayload () ĊĠĠĠ Ġprivate Ġval Ġreceiver Output Ġ= ĠOutputs () ĊĠĠĠ Ġprivate Ġval Ġchange Output Ġ= ĠOutputs () ĊĠĠĠ Ġprivate Ġval Ġauthors Ġ= Ġmutable ListOf < Auth ent ifiers >() ĊĊĠĠĠ Ġlateinit Ġvar Ġm Get Parent Request : ĠReq Get Parents ĊĊĠĠĠ Ġvar Ġhash To Sign Ġ= Ġ"" ĊĠĠĠ Ġvar Ġsign Failed Ġ= Ġfalse ĊĊĠĠĠ Ġlateinit Ġvar Ġchange Address : ĠString ĊĠĠĠ Ġprivate Ġval Ġjs Api Ġ= ĠJS Api () ĊĊĠĠĠ Ġfun Ġis Ok ToSend Tx (): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Wallet Manager . model . m Get Parent Request Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Get Parent Request Ġ= ĠWallet Manager . model . m Get Parent Request !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Get Parent Request . getResponse (). has Error ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Send Tx ( activity : ĠActivity Main , Ġpassword : ĠString Ġ= Ġ"") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( authors . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġthis Ġkind Ġof Ġfail ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Fail () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Maybe Ġre - generate Ġinput . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ ĠMy Thread Manager . instance . run In Back Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĠWallet Manager . model . find Wallet ( send Payment Info . wallet Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( password . isNotEmpty () Ġ&& Ġ! credential . is Ob serve Only ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign With Every Authors ( password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sign Failed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Fail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run In Back ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġunits . unit Ġ= Ġjs Api . get Unit Hash Sync ( Utils . to Gson String ( units )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( post New Unit To Hub ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunit Json Ġ= ĠUtils . to Gson Object ( units ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunit Ġ= ĠUnits Manager (). parse Unit FromJson ( unit Json , ĠlistOf ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWallet Manager . model . new Unit Accepted By Hub ( unit , Ġsend Payment Info . wallet Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Fail () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen Payload Inputs () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġpayload . inputs . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġfun ded Address Ġ= ĠDb Helper . query F unded Addresses By Amount ( send Payment Info . wallet Id , Ġsend Payment Info . amount ) ĊĠĠĠĠĠĠĠ Ġval Ġfilter F unded Address Ġ= Ġfilter Most F unded Addresses ( fun ded Address , Ġsend Payment Info . amount ) ĊĠĠĠĠĠĠĠ Ġval Ġaddresses Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠ Ġfilter F unded Address . forEach Ġ{ Ġaddresses . add ( it . address ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoutputs Ġ= ĠDb Helper . query U tx o By Address ( addresses , Ġsend Payment Info . last Ball M CI ) ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġmutable ListOf < Inputs >() ĊĠĠĠĠĠĠĠ Ġoutputs . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinputs Ġ= ĠInputs () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . src Unit Ġ= Ġit . unit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . src Message Index Ġ= Ġit . message Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . src Output Index Ġ= Ġit . output Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . amount Ġ= Ġit . amount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . address Ġ= Ġit . address ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( inputs ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpayload . inputs Ġ= Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Most F unded Addresses ( rows : ĠArray < F unded Address >, Ġestimated Amount : ĠLong ): ĠList < F unded Address > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( estimated Amount Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrows . asList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġmutable ListOf < F unded Address >() ĊĠĠĠĠĠĠĠ Ġvar Ġaccumulated Amount Ġ= Ġ 0 L ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġrows ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccumulated Amount Ġ+= Ġit . total ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( acc umulated Amount Ġ> Ġestimated Amount Ġ+ ĠT TT . MAX _ F EE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Units () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreceiver Output . address Ġ= Ġsend Payment Info . receiver Address ĊĠĠĠĠĠĠĠ Ġreceiver Output . amount Ġ= Ġsend Payment Info . amount ĊĊĠĠĠĠĠĠĠ Ġchange Address Ġ= Ġquery Or Issue Not Used Change Address () ĊĠĠĠĠĠĠĠ Ġchange Output . address Ġ= Ġchange Address ĊĠĠĠĠĠĠĠ Ġchange Output . amount Ġ= ĠT TT . PLACE HOLDER _ AMOUNT ĊĊĠĠĠĠĠĠĠ Ġpayload . outputs . clear () ĊĠĠĠĠĠĠĠ Ġpayload . outputs . clear () ĊĊĠĠĠĠĠĠĠ Ġpayload . outputs . add ( receiver Output ) ĊĠĠĠĠĠĠĠ Ġpayload . outputs . add ( change Output ) ĊĊĠĠĠĠĠĠĠ Ġpayload . outputs Ġ= Ġpayload . outputs . sorted By Ġ{ Ġit . address Ġ} ĊĊĠĠĠĠĠĠĠ Ġmessages . payload Ġ= Ġpayload ĊĠĠĠĠĠĠĠ Ġmessages . payload Hash Ġ= ĠT TT . PLACE HOLDER _ HASH ĊĠĠĠĠĠĠĠ Ġmessages . app Ġ= ĠT TT . unit MsgType Payment ĊĠĠĠĠĠĠĠ Ġmessages . payload Location Ġ= ĠT TT . unit Payload Lo ation Inline ĊĊĠĠĠĠĠĠĠ Ġunits . messages Ġ= Ġmutable ListOf < Messages >() ĊĠĠĠĠĠĠĠ Ġunits . messages . add ( messages ) ĊĊĠĠĠĠĠĠĠ Ġunits . auth en fi ers Ġ= Ġauthors ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcompose Units () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Json Ġ= Ġm Get Parent Request . getResponse (). response Json Ġas ĠJsonObject ĊĊĠĠĠĠĠĠĠ Ġsend Payment Info . last Ball M CI Ġ= Ġresponse Json . get (" last _ stable _ mc _ ball _ m ci "). as Int ĊĊĠĠĠĠĠĠĠ Ġinit Units () ĊĊĠĠĠĠĠĠĠ Ġunits . parent Units Ġ= Ġresponse Json . getAs JsonArray (" parent _ units ") ĊĠĠĠĠĠĠĠ Ġunits . last Ball Ġ= Ġresponse Json . get (" last _ stable _ mc _ ball "). asString ĊĠĠĠĠĠĠĠ Ġunits . last Ball Unit Ġ= Ġresponse Json . get (" last _ stable _ mc _ ball _ unit "). asString ĊĠĠĠĠĠĠĠ Ġunits . w itness List Unit Ġ= Ġresponse Json . get (" w itness _ list _ unit "). asString ĊĠĠĠĠĠĠĠ Ġunits . headers Com mission Ġ= ĠT TT . PLACE HOLDER _ AMOUNT ĊĠĠĠĠĠĠĠ Ġunits . payload Com mission Ġ= ĠT TT . PLACE HOLDER _ AMOUNT ĊĠĠĠĠĠĠĠ Ġunits . unit Ġ= ĠT TT . PLACE HOLDER _ HASH ĊĠĠĠĠĠĠĠ Ġunits . creation Date Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 L ĊĊĠĠĠĠĠĠĠ Ġgen Payload Inputs () ĊĠĠĠĠĠĠĠ Ġgen Authors () ĊĊĠĠĠĠĠĠĠ Ġgen Com mission () ĊĊĠĠĠĠĠĠĠ Ġupdate Transfer Value IfNot En ough Com mission () ĊĊĠĠĠĠĠĠĠ Ġgen Change () ĊĠĠĠĠĠĠĠ Ġgen Payload Hash () ĊĊĠĠĠĠĠĠĠ Ġhash To Sign Ġ= Ġjs Api . get Unit Hash To Sign Sync ( Utils . to Gson String ( units )) ĊĊĠĠĠĠĠĠĠ ĠUtils . debug Log ( Utils . to Gson String ( units )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġis Already Update Transfer Value : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Transfer Value IfNot En ough Com mission () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Already Update Transfer Value ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĠWallet Manager . model . find Wallet ( send Payment Info . wallet Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( credential . balance Ġ>= Ġsend Payment Info . amount Ġ+ Ġunits . headers Com mission Ġ+ Ġunits . payload Com mission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Payment Info . amount Ġ= Ġcredential . balance Ġ- Ġ( units . headers Com mission Ġ+ Ġunits . payload Com mission ) Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Output . amount Ġ= Ġsend Payment Info . amount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Output . amount Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Already Update Transfer Value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget One Un Signed Auth entifier (): ĠAuth ent ifiers ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġres : ĠAuth ent ifiers ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġauthors . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Sign Ġ= Ġit . auth ent ifiers . get (" r ") ?. asString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Sign . isNull Or Blank () Ġ|| Ġcurrent Sign Ġ== ĠT TT . PLACE HOLDER _ SIG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Input Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġpayload . inputs . forEach Ġ{ Ġtotal Input Ġ+= Ġit . amount Ġ} ĊĊĠĠĠĠĠĠĠ Ġchange Output . amount Ġ= Ġ( total Input Ġ- Ġsend Payment Info . amount Ġ- Ġunits . payload Com mission Ġ- Ġunits . headers Com mission ) ĊĊĠĠĠĠĠĠĠ ĠUtils . debug Log (" after Ġgen Change ") ĊĠĠĠĠĠĠĠ ĠUtils . debug Log ( Utils . to Gson String ( payload )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsign With Every Authors ( password : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġauthors . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Addresses Ġ= ĠDb Helper . query Address By Add res d Id ( it . address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsign Ġ= Ġjs Api . sign Sync ( hash To Sign , ĠWallet Manager . model . get Priv Key ( password ), ĠUtils . gen B ip 4 4 Path ( my Addresses )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sign . isEmpty () Ġ|| Ġ" 0 " Ġ== Ġsign ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign Failed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . auth ent ifiers . remove (" r ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . auth ent ifiers . addProperty (" r ", Ġsign ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen Payload Hash () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠUtils . debug Log (" be fro e Ġgen Payload Hash ") ĊĠĠĠĠĠĠĠ ĠUtils . debug Log ( Utils . to Gson String ( payload )) ĊĊĠĠĠĠĠĠĠ Ġmessages . payload Hash Ġ= ĠJS Api (). getBase 6 4 Hash Sync ( Utils . to Gson String ( payload )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen Com mission () Ġ{ ĊĠĠĠĠĠĠĠ Ġunits . headers Com mission Ġ= Ġjs Api . getHeaders Size Sync ( Utils . to Gson String ( units )). to Long () ĊĠĠĠĠĠĠĠ Ġunits . payload Com mission Ġ= Ġjs Api . getTotal Payload Size Sync ( Utils . to Gson String ( units )). to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen Authors () Ġ{ ĊĠĠĠĠĠĠĠ Ġauthors . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġaddress List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġpayload . inputs . forEach Ġ{ Ġaddress List . add ( it . address ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmy Addresses Array Ġ= ĠDb Helper . query Address ( address List . toList ()) ĊĠĠĠĠĠĠĠ Ġmy Addresses Array . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauth ent ifiers Ġ= ĠAuth ent ifiers () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth ent ifiers . address Ġ= Ġit . address ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Db Helper . has Definitions ( auth ent ifiers . address )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth ent ifiers . definition Ġ= ĠUtils . parse JsonArray ( it . definition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth ent ifiers . auth ent ifiers Ġ= ĠUtils . gen JsonObject (" r ", ĠT TT . PLACE HOLDER _ SIG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthors . add ( auth ent ifiers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( payload . inputs . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgen Com mission Receipt s () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgen Com mission Receipt s () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcom mission Recipient Ġ= ĠCom mission Recipients () ĊĠĠĠĠĠĠĠ Ġcom mission Recipient . address Ġ= Ġchange Address ĊĠĠĠĠĠĠĠ Ġunits . commission Recipients Ġ= ĠlistOf ( commission Recipient ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery Or Issue Not Used Change Address (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// How Ġabout Ġit Ġcannot Ġfind Ġunused Ġchange Ġaddress ĊĠĠĠĠĠĠĠ Ġreturn ĠWallet Manager . model . find Next Unused Change Address ( send Payment Info . wallet Id ). address ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost New Unit To Hub (): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= ĠReq Post Joint ( Utils . to Gson Object ( units )) ĊĠĠĠĠĠĠĠ ĠHub Model . instance . send Hub Msg ( req ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhub Response Ġ= Ġreq . getResponse () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġreq . is Accepted () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// TODO : Ġhow Ġto Ġnotify ĠUI . ĊĠĠĠ Ġfun Ġshow Fail () Ġ{ ĊĠĠĠĠĠĠĠ ĠUtils . toast Msg (" åıĳéĢģ å¤±è´¥ ") ĊĠĠĠ Ġ} Ċ Ċ }