package Ġru . spl ite . replic ator . atlas . state Ċ Ċ import Ġru . spl ite . replic ator . atlas . graph . Dependency Ċ import Ġru . spl ite . replic ator . transport . Node Identifier Ċ Ċ class ĠQu orum Dependencies Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġparticipants : ĠMutable Set < Node Identifier > Ġ= Ġmutable Set Of () ĊĊĠĠĠ Ġprivate Ġval Ġthreshold Dependencies : ĠMutable Map < Dependency , ĠInt > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġval Ġdependencies Union : ĠSet < Dependency > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthreshold Dependencies . keys ĊĊĠĠĠ Ġfun Ġadd Participant ( node Identifier : ĠNode Identifier , Ġdeps : ĠSet < Dependency >, Ġqu orum Size : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . participants . size Ġ>= Ġqu orum Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Fast Ġqu orum Ġinvariant Ġvi olated ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġis Added Ġ= Ġthis . participants . add ( node Identifier ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Dependencies Ġduplication Ġdetected Ġfor Ġnode Ġ$ node Identifier ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdeps . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . threshold Dependencies . merge ( it , Ġ 1 ) Ġ{ ĠoldValue , ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoldValue Ġ+ ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Qu orum Completed ( qu orum Size : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġqu orum Size Ġ== Ġthis . participants . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Threshold Union ( threshold : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . threshold Dependencies . all Ġ{ Ġit . value Ġ>= Ġthreshold Ġ} ĊĠĠĠ Ġ} Ċ }