class ĠCustom Set ( var arg Ġelements : ĠInt ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġhash To Element Ġ= Ġelements . associate By Ġ{ Ġit . hashCode () Ġ}. to Mutable Map () ĊĊĠĠĠ Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġhash To Element . isEmpty () ĊĊĠĠĠ Ġfun Ġis Subset ( other : ĠCustom Set ) Ġ= Ġhash To Element . keys . all Ġ{ Ġit Ġin Ġother . hash To Element Ġ} ĊĊĠĠĠ Ġfun Ġis Dis joint ( other : ĠCustom Set ) Ġ= Ġhash To Element . keys . all Ġ{ Ġit Ġ! in Ġother . hash To Element Ġ} ĊĊĠĠĠ Ġfun Ġcontains ( other : ĠInt ) Ġ= Ġother . hashCode () Ġin Ġhash To Element ĊĊĠĠĠ Ġfun Ġadd ( other : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhash To Element . put If Absent ( other . hashCode (), Ġother ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġwhen ( other ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠCustom Set Ġ-> Ġother . is Subset ( this ) Ġ&& Ġthis . is Subset ( other ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġintersection ( other : ĠCustom Set ) Ġ= ĠCustom Set (). also Ġ{ Ġnew Set Ġ-> ĊĠĠĠĠĠĠĠ Ġhash To Element . filter Ġ{ Ġit . key Ġin Ġother . hash To Element Ġ}. values . forEach Ġ{ Ġnew Set . add ( it ) Ġ} Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġplus ( other : ĠCustom Set ) Ġ= ĠCustom Set (). also Ġ{ Ġnew Set Ġ-> ĊĠĠĠĠĠĠĠ Ġhash To Element . values . forEach Ġ{ Ġnew Set . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġother . hash To Element . values . forEach Ġ{ Ġnew Set . add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġminus ( other : ĠCustom Set ) Ġ= ĠCustom Set (). also Ġ{ Ġnew Set Ġ-> ĊĠĠĠĠĠĠĠ Ġhash To Element . filter Ġ{ Ġit . key Ġ! in Ġother . hash To Element Ġ}. values . forEach Ġ{ Ġnew Set . add ( it ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ