digraph yaml_state_machine {
	layout=neato;
	overlap=scale;

	node [shape=doublecircle, style=filled, width=0.1, color=grey11, fixedsize=shape] start[label=""];
	node [shape=ellipse, style=filled, color=cornflowerblue, fixedsize=false] idle, document, mapping;
	node [shape=ellipse, style=filled, color=coral2] set_name, hart_entry_points,
		u54_1, u54_2, u54_3, u54_4, payload_mapping, new_payload,
		exec_addr, owner_hart, secondary_hart, skip_opensbi, payload_name, priv_mode;

	idle[label="event::idle"];
	document[label="event::Document"];
	mapping[label="event::Mapping"];
	set_name[label="token::set-name"];
	hart_entry_points[label="token::hart-entry-points"];
	u54_1[label="token::u54_1"];
	u54_2[label="token::u54_2"];
	u54_3[label="token::u54_3"];
	u54_4[label="token::u54_4"];
	payload_mapping[label="token::payload"];
	new_payload[label="token::<elf_filename>"];
	exec_addr[label="token::exec-addr"];
	owner_hart[label="token::owner-hart"];
	secondary_hart[label="token::secondary-hart"];
	skip_opensbi[label="token::skip-opensbi"];
	payload_name[label="token::payload-name"];
	priv_mode[label="token::priv-mode"];

	start -> idle;
	idle -> document;
	document -> mapping;
	document -> idle;
	mapping -> document;

	mapping -> set_name;
	set_name -> mapping;

	mapping -> hart_entry_points;
	hart_entry_points -> mapping;
	hart_entry_points -> u54_1;
	u54_1 -> hart_entry_points;
	hart_entry_points -> u54_2;
	u54_2 -> hart_entry_points;
	hart_entry_points -> u54_3;
	u54_3 -> hart_entry_points;
	hart_entry_points -> u54_4;
	u54_4 -> hart_entry_points;

	mapping -> payload_mapping;
	payload_mapping -> mapping;
	payload_mapping -> new_payload;
	new_payload -> payload_mapping;
	new_payload -> exec_addr;
	exec_addr -> new_payload;
	new_payload -> owner_hart;
	owner_hart -> new_payload;
	new_payload -> secondary_hart;
	secondary_hart -> new_payload;
	new_payload -> skip_opensbi;
	skip_opensbi -> new_payload;
	new_payload -> priv_mode;
	priv_mode -> new_payload;
	new_payload -> payload_name;
	payload_name -> new_payload;
}	

