digraph { start [label="C:\nCode\nManagement" style="dotted"] {rank=same; start S0} start -> S0 [style="invis"] S0 [label="S0:\nidle"] S0 -> P0_got_code [label="set_code"] P0_got_code [shape="box" label="B.got_code"] P0_got_code -> S3 S3 [label="S3: known" color="green"] {rank=same; S1_inputting S2_allocating} S0 -> P_input [label="input_code"] P_input [shape="box" label="I.start"] P_input -> S1_inputting S1_inputting [label="S1:\ninputting"] S1_inputting -> P0_got_code [label="finished_input"] S0 -> P_allocate [label="allocate_code"] P_allocate [shape="box" label="A.allocate"] P_allocate -> S2_allocating S2_allocating [label="S2:\nallocating"] S2_allocating -> P1_generate [label="allocated_nameplate"] P1_generate [shape="box" label="generate\nrandom words"] P1_generate -> P0_got_code }