digraph web_server {
	overlap=false;
//	overlap=scale;
	splines=true;
//	rankdir=BT;

	"Memory Mapper (4)" [shape=octagon,fillcolor="#dddddd",style=filled];
	"Terminal Printer (5)" [shape=octagon,fillcolor="#dddddd",style=filled];
	{
		rank=same;

		"Network Driver" [shape=box,fillcolor="#dddddd",style=filled];
		"Timer Driver" [shape=box,fillcolor="#dddddd",style=filled];
	};
//	{
//		rank=same;
		"Connection Manager (10)" [fillcolor="#dddddd",style=filled];
		"File Desc. API (9)" [fillcolor="#dddddd",style=filled];
//	};

//	"UDP" [fillcolor="#dddddd",style=filled];
	"TCP (7)" [fillcolor="#dddddd",style=filled];

	"HTTP Parser (11)" [fillcolor="#dddddd",style=filled];
	"CGI Service A (21)" [fillcolor="#dddddd",style=dashed];
	"CGI Service B (23)" [fillcolor="#dddddd",style=dashed];
	"CGI FD API A (20)" [fillcolor="#dddddd",style=filled];	
	"CGI FD API B (22)" [fillcolor="#dddddd",style=filled];	
	"Content Manager (14)" [fillcolor="#dddddd",style=filled];
	"Async Invs. A (18)" [fillcolor="#dddddd",style=filled];
	"Async Invs. B (25)" [fillcolor="#dddddd",style=filled];
	"Static Content (15)" [style=dashed,fillcolor="#dddddd"];
//	"Plugins" [fillcolor="#dddddd",style=filled];
	"Scheduler (1)" [fillcolor="#dddddd",style=filled];
	{
		rank=same;
		"IP (17)" [fillcolor="#dddddd",style=filled];
		"Port Manager (24)" [fillcolor="#dddddd",style=filled];
		"Event Manager (8)" [fillcolor="#dddddd",style=filled];
	} 
	{
		rank=same;
		"MPD Manager (2)" [fillcolor="#dddddd",style=filled];
		"Lock (3)" [fillcolor="#dddddd",style=filled];
	}
	{
		rank=same;
		"Timed Block (6)" [fillcolor="#dddddd",style=filled];
		"vNIC (16)" [fillcolor="#dddddd",style=filled];
	}

	// Edges
	"Connection Manager (10)" -> "File Desc. API (9)";
	"File Desc. API (9)" -> "TCP (7)";
//	"File Desc. API (9)" -> "UDP";
	"File Desc. API (9)" -> "Event Manager (8)";
	"HTTP Parser (11)" -> "Content Manager (14)";
	"HTTP Parser (11)" -> "Timed Block (6)";
//	"Content Manager (14)" -> "Plugins";
	"Content Manager (14)" -> "Static Content (15)";
	"Static Content (15)" -> "Event Manager (8)";
	"Content Manager (14)" -> "Async Invs. A (18)";
	"Content Manager (14)" -> "Async Invs. B (25)";
	"CGI Service A (21)" -> "CGI FD API A (20)";
	"CGI Service B (23)" -> "CGI FD API B (22)";
	"CGI FD API A (20)" -> "Event Manager (8)";
	"CGI FD API B (22)" -> "Event Manager (8)";
	"CGI FD API A (20)" -> "Async Invs. A (18)";
	"CGI FD API B (22)" -> "Async Invs. B (25)";
	"Async Invs. A (18)" -> "Event Manager (8)";
	"Async Invs. B (25)" -> "Event Manager (8)";
	"Async Invs. A (18)" -> "Scheduler (1)";
	"Async Invs. B (25)" -> "Scheduler (1)";
	"Async Invs. A (18)" -> "Lock (3)";
	"Async Invs. B (25)" -> "Lock (3)";
//	"UDP" -> "IP (17)";
	"TCP (7)" -> "IP (17)";
	"TCP (7)" -> "Timed Block (6)";
//	"UDP" -> "Event Manager (8)";
	"TCP (7)" -> "Event Manager (8)";
//	"UDP" -> "Port Manager (24)";
	"TCP (7)" -> "Port Manager (24)";
	"Port Manager (24)" -> "Lock (3)";
//	"Port Manager (24)" -> "Net Demuxer";
	"Event Manager (8)" -> "Scheduler (1)";
	"Event Manager (8)" -> "Lock (3)";
	"Lock (3)" -> "Timed Block (6)";
	"Lock (3)" -> "Scheduler (1)";
	"Timed Block (6)" -> "Scheduler (1)";
//	"UDP" -> "Lock (3)";
	"TCP (7)" -> "Lock (3)";
	"IP (17)" -> "Lock (3)";
//	"File Desc. API (9)" -> "Lock (3)";
//	"IP (17)" -> "Net Demultiplexer";
	"IP (17)" -> "vNIC (16)";
//	"IP (17)" -> "Network Driver";
	"vNIC (16)" -> "Network Driver";
	"vNIC (16)" -> "Lock (3)";
	"Scheduler (1)" -> "Timer Driver";
	"File Desc. API (9)" -> "HTTP Parser (11)";

	"MPD Manager (2)" -> "Timed Block (6)";	
}
