package Ġpw . bin om . network Ċ Ċ import Ġjava . net . Inet 4 Address Ċ import Ġjava . net . Inet 6 Address Ċ import Ġjava . net . Inet Address Ċ import Ġjava . net . Inet SocketAddress Ċ import Ġjava . net . Unknown Host Exception Ġas ĠJ Unknown Host Exception Ċ Ċ actual Ġsealed Ġclass ĠNetwork Address Ġ{ ĊĊĠĠĠ Ġvar Ġ_ native : ĠInet SocketAddress ? Ġ= Ġnull ĊĊĠĠĠ Ġactual Ġval Ġhost : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnative Ġ= Ġ_ native ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( native Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnative . address . host Address ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġval Ġport : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnative Ġ= Ġ_ native ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( native Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnative . port ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġval Ġtype : ĠType ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnative Ġ= Ġ_ native ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( native Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( native . address ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInet 4 Address Ġ-> ĠType . IPV 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInet 6 Address Ġ-> ĠType . IPV 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Unknown Ġnetwork Ġtype Ġ${ native . address :: class . java . name }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ"$ host :$ port " ĊĊĠĠĠ Ġprotected Ġfun Ġ_ reset ( host : ĠString , Ġport : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ native Ġ= ĠInet SocketAddress ( Inet Address . get ByName ( host ), Ġport ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJ Unknown Host Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnknown Host Exception ( host ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠNetwork Address ĊĊĠĠĠĠĠĠĠ Ġif Ġ( host Ġ!= Ġother . host ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( port Ġ!= Ġother . port ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġhost . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġport ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġenum Ġclass ĠType Ġ{ ĊĠĠĠĠĠĠĠ ĠIP V 4 , ĊĠĠĠĠĠĠĠ ĠIP V 6 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġclass ĠMutable Ġactual Ġconstructor () Ġ: ĠNetwork Address () Ġ{ ĊĠĠĠĠĠĠĠ Ġactual Ġfun Ġreset ( host : ĠString , Ġport : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ reset ( host , Ġport ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Immutable (): ĠImmutable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire (_ native Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠImmutable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres ._ native Ġ= Ġ_ native ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Mutable (): ĠMutable Ġ= Ġclone () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Mutable ( address : ĠMutable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress ._ native Ġ= Ġ_ native ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġactual Ġfun Ġclone (): ĠMutable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠMutable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Mutable ( res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġclass ĠImmutable Ġ: ĠNetwork Address Ġ{ ĊĠĠĠĠĠĠĠ Ġactual Ġconstructor ( host : ĠString , Ġport : ĠInt ) Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ reset ( host , Ġport ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconstructor () Ġ: Ġsuper () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Immutable (): ĠImmutable Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Mutable (): ĠMutable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠMutable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres ._ native Ġ= Ġ_ native ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Mutable ( address : ĠMutable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress ._ native Ġ= Ġ_ native ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġabstract Ġfun Ġto Immutable (): ĠImmutable ĊĠĠĠ Ġactual Ġabstract Ġfun Ġto Mutable (): ĠMutable ĊĠĠĠ Ġactual Ġabstract Ġfun Ġto Mutable ( address : ĠMutable ) Ċ }