@startuml
!include <material/shield_half_full>
!include <material/transfer>
!include <material/fire>

left to right direction
skinparam defaultTextAlignment center

node "<$ma_transfer>\nQueue" as block #DeepSkyBlue
rectangle "<$ma_fire>\nSingle Fire" as fire #LightGreen
rectangle "<$ma_shield_half_full>\nGuard" as guard #LightPink

interface " " as q1
interface " " as q2
interface " " as q3
interface " " as q4
interface " " as q5
interface " " as q6
interface " " as q7
interface " " as q8

interface " " as g1
interface " " as g2
interface " " as g3
interface " " as g4
interface " " as g5
interface " " as g6

q1 --> block: enqueue
q2 -> block: requestdequeue
q3 -l-> block: requestrenege
q4 --> block: dd
q5 --> block: dr
block -d-> q6: dequeue
block --> q7: renege
block --> q8: overflow

fire -> q2: output

q6 --> guard: input
g2 -l-> guard: leave
guard --> g3: guarded
guard -l-> g4: unguarded
guard -u-> g5: blocked

g4 -u-> g1
g1 -u-> q2
g4 -d-> g6: unguarded
@enduml
