Skip to content

Instantly share code, notes, and snippets.

@renecnielsen
Forked from emeeks/gexfd3.css
Last active August 29, 2015 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save renecnielsen/49dbbcae4019dd76d3b2 to your computer and use it in GitHub Desktop.
Save renecnielsen/49dbbcae4019dd76d3b2 to your computer and use it in GitHub Desktop.
#modal {
position:fixed;
left:150px;
top:20px;
z-index:1;
background: white;
border: 1px black solid;
box-shadow: 10px 10px 5px #888888;
display: none;
}
#content {
max-height: 400px;
overflow: auto;
}
#modalClose {
position: absolute;
top: -0px;
right: -0px;
z-index: 1;
}
tr {
border: 1px gray solid;
}
td {
font-size: 10px;
}
td.data {
font-weight: 900;
}
.tick line {
shape-rendering: crispEdges;
stroke: #000;
}
line.minor {
stroke: #777;
stroke-dasharray: 2,2;
}
path.domain {
fill: none;
stroke: black;
}
.inactive, .tentative {
stroke: darkgray;
stroke-width: 4px;
stroke-dasharray: 5 5;
}
.tentative {
opacity: .5;
}
.active {
stroke: black;
stroke-width: 4px;
stroke-dasharray: 0;
}
circle {
fill: red;
}
rect {
fill: darkgray;
}
#controls {
position: fixed;
bottom: 50px;
left: 20px;
}
#brushDiv {
position: fixed;
bottom: 100px;
left: 20px;
right: 20px;
height:50px;
background: white;
opacity: .75;
}
.brush .extent {
fill-opacity: .90;
shape-rendering: crispEdges;
}
svg {
width: 100%;
height:100%;
}
gexfD3 =
function () {
var nodes = [];
var links = [];
var linksFile = "";
var fileName = "";
var xExtent = [];
var yExtent = [];
var nodeScale = [1,10];
var layoutSize = [500,500];
var sizeExtent = [];
var dAtt = "";
var dynamicExtent = [];
var sizeScale, xScale, yScale, dynamicScale;
var gexfD3Brush = d3.svg.brush();
var linkAttributes = [];
var nodeAttributes = [];
var nodeHash = {};
this.graph = function(gexfParsed) {
if (!arguments.length) return true;
var gNodes = gexfParsed.nodes;
var gLinks = gexfParsed.edges;
nodes = [];
links = [];
nodeHash = {};
//Create JSON nodes array
var x = 0;
gNodes.forEach(function(gNode) {
var newNode = {id: x, properties: {}};
newNode.label = gNode.label || gNode.id;
newNode.rgbColor = gNode.viz.color || "rgb(122,122,122)";
newNode.x = gNode.viz.position.x;
newNode.y = gNode.viz.position.y;
newNode.z = gNode.viz.position.z;
newNode.originalX = newNode.x;
newNode.originalY = newNode.y;
newNode.size = gNode.viz.size;
nodeHash[gNode.id] = newNode;
for (y in gNode.attributes) {
if (!(typeof(gNode.attributes[y]) === "undefined") && !(gNode.attributes[y].toString() == "NaN" )) {
newNode.properties[y] = gNode.attributes[y];
}
}
nodes.push(newNode);
x++;
})
//get node attributes based on attributes in the first node
//this won't work for assymetrical node attributes
nodeAttributes = d3.keys(nodes[0].properties);
//Create JSON links array
var x = 0;
while (x < gLinks.length) {
var newLink = {id: x, properties: {}};
newLink.source = nodeHash[gLinks[x].source];
newLink.target = nodeHash[gLinks[x].target];
//process attributes
for (y in gLinks[x].attributes) {
newLink.properties[y] = gLinks[x].attributes[y];
y++;
}
links.push(newLink)
x++;
}
linkAttributes = d3.keys(links[0].properties);
sizeExtent = d3.extent(nodes, function(d) {return parseFloat(d.size)})
sizeScale = d3.scale.linear().domain(sizeExtent).range(nodeScale);
return this;
}
this.nodes = function(incNodes) {
if (!arguments.length) return nodes;
nodes = incNodes;
return this;
}
this.links = function(incLinks) {
if (!arguments.length) return links;
links = incLinks
return this;
}
this.linkAttributes = function(incAtts) {
if (!arguments.length) return linkAttributes;
linkAttributes = incAtts;
return this;
}
this.nodeAttributes = function(incAtts) {
if (!arguments.length) return nodeAttributes;
nodeAttributes = incAtts;
return this;
}
this.nodeScale = function(incScale) {
if (!arguments.length) return sizeScale;
nodeScale = incScale;
sizeScale = d3.scale.linear().domain(sizeExtent).range(nodeScale);
return this;
}
this.overwriteLinks = function(incLinks) {
if (!arguments.length) return nodes;
data = incLinks;
//OVERWRITE links for parallel links
links = [];
for (x in data) {
var newLink = {id: x, properties: {}};
newLink.source = nodeHash[data[x].source];
newLink.target = nodeHash[data[x].target];
newLink.id = x;
newLink.properties.type = "base";
newLink.properties.year = data[x].year;
//process attributes
if (newLink.source && newLink.target) {
links.push(newLink);
}
x++;
}
linkAttributes = d3.keys(links[0].properties);
return this;
}
this.size = function(incSize) {
if (!arguments.length) return layoutSize;
//Measure
layoutSize = incSize;
xExtent = d3.extent(nodes, function(d) {return parseFloat(d.x)})
yExtent = d3.extent(nodes, function(d) {return parseFloat(d.y)})
xScale = d3.scale.linear().domain(xExtent).range([0,layoutSize[0]]);
yScale = d3.scale.linear().domain(yExtent).range([layoutSize[1],0]);
return this;
}
this.dynamicAttribute = function(incAtt) {
if (!arguments.length) return dAtt;
dAtt = incAtt;
var nDE = [Infinity, -Infinity];
var lDE = [Infinity, -Infinity];
if (nodeAttributes.indexOf(dAtt) > -1) {
//currently filters out 0 entries
// nDE = d3.extent(nodes, function(d) {return parseInt(d.properties[dAtt])})
nDE = d3.extent(nodes.filter(function(p) {return p.properties[dAtt] != 0}), function(d) {return parseInt(d.properties[dAtt])})
}
if (linkAttributes.indexOf(dAtt) > -1) {
// lDE = d3.extent(links, function(d) {return parseInt(d.properties[dAtt])})
lDE = d3.extent(links.filter(function(p) {return p.properties[dAtt] != 0}), function(d) {return parseInt(d.properties[dAtt])})
}
dynamicExtent = [Math.min(nDE[0],lDE[0]), Math.max(nDE[1],lDE[1])]
dynamicScale = d3.scale.linear().domain(dynamicExtent).range([0,layoutSize[0]]);
return this;
}
this.dynamicBrush = function(incSelection) {
if (!arguments.length) return gexfD3Brush;
gexfD3Brush
.x(dynamicScale)
.extent(dynamicExtent)
var brushAxis = d3.svg.axis().scale(dynamicScale).orient("bottom").tickSize(-40).ticks(20);
incSelection.append("g").attr("id", "bgAxis").append("g").attr("transform", "translate(50,35)").call(brushAxis)
incSelection.append("g").attr("id", "fgBrush").attr("transform", "translate(50,0)")
.call(gexfD3Brush)
.selectAll("rect").attr("height", 35);
return this;
}
this.xScale = function(newScale) {
if (!arguments.length) return xScale;
xScale = newScale;
return this;
}
this.yScale = function(newScale) {
if (!arguments.length) return yScale;
yScale = newScale;
return this;
}
return this;
}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GEXF D3</title>
<meta charset="utf-8" />
<link type="text/css" rel="stylesheet" href="gexfd3.css" />
</head>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/colorbrewer.v1.min.js"></script>
<script src="parser.js" type="text/javascript">
</script>
<script src="gexfd3.js" type="text/javascript">
</script>
<body onload="loadGraph('lm.gexf')">
<div id="vizcontainer" style="width:100%;height:100%">
<svg id="graphSVG" style="border:1px lightgray solid;">
<g id="graphG" />
<div id="modal"><div id="content"></div><button id="modalClose" onclick="nodeFocus=false;nodeOut();d3.select('#modal').style('display','none');">X</button></div>
</div>
<div id="controls">
</div>
<footer>
<script>
nodeFocus = false;
currentBrush =[0,0];
docHash = {};
allLinks = [];
currentScale = 0;
function loadGraph(sourceGEXF) {
newGEXF = GexfParser.fetch(sourceGEXF);
gD3 = gexfD3().graph(newGEXF).size([1000,1000]).nodeScale([5,20]);
force = d3.layout.force()
.charge(-500)
.linkDistance(200)
.size([1000, 1000])
.gravity(.1)
.on("tick", redrawGraph)
zoom = d3.behavior.zoom()
.scaleExtent([.1, 10])
.on("zoom", zoomed);
allLinks = gD3.links();
d3.select("svg").call(zoom);
createControls();
zoomed();
draw();
}
function highlightNeighbors(d,i) {
var nodeNeighbors = findNeighbors(d,i);
d3.selectAll("g.node").each(function(p) {
var isNeighbor = nodeNeighbors.nodes.indexOf(p);
d3.select(this).select("circle")
.style("opacity", isNeighbor > -1 ? 1 : .25)
.style("stroke-width", isNeighbor > -1 ? 3 : 1)
.style("stroke", isNeighbor > -1 ? "blue" : "white")
})
d3.selectAll("line.link")
.style("stroke-width", function (d) {return nodeNeighbors.links.indexOf(d) > -1 ? 2 : 1})
.style("opacity", function (d) {return nodeNeighbors.links.indexOf(d) > -1 ? 1 : .25})
}
function findNeighbors(d,i) {
neighborArray = [d];
var linkArray = [];
var linksArray = d3.selectAll("line.link").filter(function(p) {return p.source == d || p.target == d}).each(function(p) {
neighborArray.indexOf(p.source) == -1 ? neighborArray.push(p.source) : null;
neighborArray.indexOf(p.target) == -1 ? neighborArray.push(p.target) : null;
linkArray.push(p);
})
// neighborArray = d3.set(neighborArray).keys();
return {nodes: neighborArray, links: linkArray};
}
function zoomed() {
force.stop();
var canvWidth = parseInt(d3.select("#vizcontainer").style("width"));
var canvHeight = parseInt(d3.select("#vizcontainer").style("height"));
if (currentScale != zoom.scale()) {
currentScale = zoom.scale();
var halfCanvas = canvHeight / 2;
var zoomLevel = halfCanvas * currentScale;
gD3.xScale().range([halfCanvas - zoomLevel, halfCanvas + zoomLevel]);
gD3.yScale().range([halfCanvas + zoomLevel, halfCanvas - zoomLevel]);
redrawGraph();
}
var canvasTranslate = zoom.translate();
d3.select("#graphG").attr("transform", "translate("+canvasTranslate[0]+","+canvasTranslate[1]+")")
}
function createControls() {
d3.select("#controls").append("button").attr("class", "origButton").html("Force On").on("click", function() {
force.start();})
d3.select("#controls").append("button").attr("class", "origButton").html("Force Off").on("click", function() {
force.stop();})
d3.select("#controls").append("button").attr("class", "origButton").html("Reset Layout").on("click", function() {
force.stop();
gD3.nodes().forEach(function (el) {el.x = el.originalX;el.px = el.originalX;el.y = el.originalY;el.py = el.originalY;});
currentBrush = [0,0];
draw();
redrawGraph();
})
d3.select("#controls").append("button").attr("class", "origButton").html("Reset Colors").on("click", function() {
var sizeScale = gD3.nodeScale();
d3.selectAll("circle")
.attr("r", function (d) {return sizeScale(d.size)})
.style("fill", function(d) {return d.rgbColor})
.style("opacity", 1);
d3.selectAll("line.link").style("stroke", "black");
})
d3.select("#controls").selectAll("button.nodeButtons").data(gD3.nodeAttributes())
.enter()
.append("button")
.attr("class", "nodeButtons")
.on("click", nodeButtonClick)
.html(function(d) {return d});
d3.select("#controls").selectAll("button.linkButtons").data(gD3.linkAttributes())
.enter()
.append("button")
.attr("class", "linkButtons")
.on("click", linkButtonClick)
.html(function(d) {return d});
}
function nodeButtonClick(d,i) {
var nodeAttExtent = d3.extent(gD3.nodes(), function(p) {return parseFloat(p.properties[d])});
var colorScale = d3.scale.quantize().domain(nodeAttExtent).range(colorbrewer.YlGnBu[6]);
d3.selectAll("circle").style("fill", function(p) {return colorScale(p.properties[d])}).style("opacity", 1)
}
function linkButtonClick(d,i) {
var linkAttExtent = d3.extent(gD3.links(), function(p) {return parseFloat(p.properties[d])});
var colorScale = d3.scale.quantize().domain(linkAttExtent).range(colorbrewer.YlGnBu[6]);
d3.selectAll("line").style("stroke", function(p) {return colorScale(p.properties[d])}).style("opacity", 1)
}
function redrawGraph() {
var xScale = gD3.xScale();
var yScale = gD3.yScale();
d3.selectAll("line.link")
.attr("x1", function (d) {return xScale(d.source.x)})
.attr("x2", function (d) {return xScale(d.target.x)})
.attr("y1", function (d) {return yScale(d.source.y)})
.attr("y2", function (d) {return yScale(d.target.y)});
d3.selectAll("g.node")
.attr("transform", function(d) {return "translate(" + xScale(d.x) + "," + yScale(d.y) + ")"});
}
function draw() {
var xScale = gD3.xScale();
var yScale = gD3.yScale();
var sizeScale = gD3.nodeScale();
var forceRunning = false;
if (force.alpha() > 0) {
force.stop();
forceRunning = true;
}
d3.select("#graphG").selectAll("line.link")
.data(gD3.links(), function (d) {return d.id})
.enter()
.insert("line", "g.node")
.attr("class","link")
.attr("x1", function (d) {return xScale(d.source.x)})
.attr("x2", function (d) {return xScale(d.target.x)})
.attr("y1", function (d) {return yScale(d.source.y)})
.attr("y2", function (d) {return yScale(d.target.y)})
.style("stroke", "black")
.style("stroke-width", "1px")
.style("opacity", .25)
d3.select("#graphG").selectAll("g.node").data(gD3.nodes(), function (d) {return d.id})
.enter()
.append("g")
.attr("class", "node")
.attr("transform", function(d) {return "translate(" + xScale(d.x) + "," + yScale(d.y) + ")"})
.on("mouseover", nodeOver)
.on("mouseout", nodeOut)
.on("click", nodeClick)
.append("circle")
.attr("r", function(d) {return sizeScale(d.size)})
.style("fill", function(d) {return d.rgbColor})
.style("stroke", "black")
.style("stroke-width", "1px")
.style("stroke-opacity", 1);
force
.nodes(gD3.nodes())
.links(gD3.links());
function nodeOver(d,i,e) {
var el = this;
if (!d3.event.fromElement) {
el = e;
}
if (nodeFocus) {
return;
}
//Only do the element stuff if this came from mouseover
el.parentNode.appendChild(el);
d3.select(el).append("text").attr("class", "hoverLabel").attr("stroke", "white").attr("stroke-width", "5px")
.style("opacity", .9)
.style("pointer-events", "none")
.text(d.label);
d3.select(el).append("text").attr("class", "hoverLabel")
.style("pointer-events", "none")
.text(d.label);
highlightNeighbors(d,i);
}
function nodeClick(d,i) {
nodeFocus = false;
nodeOut();
nodeOver(d,i,this);
nodeFocus = true;
var newContent = "<p>" + d.label + "</p>";
newContent += "<p>Attributes: </p><p><ul>";
for (x in gD3.nodeAttributes()) {
newContent += "<li>" + gD3.nodeAttributes()[x] + ": " + d.properties[gD3.nodeAttributes()[x]]+ "</li>";
}
newContent += "</ul></p><p>Connections:</p><ul>";
var neighbors = findNeighbors(d,i);
for (x in neighbors.nodes) {
if (neighbors.nodes[x] != d) {
newContent += "<li>" + neighbors.nodes[x].label + "</li>";
}
}
newContent += "</ul></p>";
d3.select("#modal").style("display", "block").select("#content").html(newContent);
}
}
function nodeOut() {
if (nodeFocus) {
return;
}
d3.selectAll(".hoverLabel").remove();
d3.selectAll("circle").style("opacity", 1).style("stroke", "black").style("stroke-width", "1px");
d3.selectAll("line").style("opacity", .25);
}
</script>
</footer>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.2draft" version="1.2" xmlns:viz="http://www.gexf.net/1.2draft/viz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.2draft http://www.gexf.net/1.2draft/gexf.xsd">
<meta lastmodifieddate="2014-03-04">
<creator>Gephi 0.8.1</creator>
<description></description>
</meta>
<graph defaultedgetype="undirected" mode="static">
<attributes class="node" mode="static">
<attribute id="modularity_class" title="Modularity Class" type="integer"></attribute>
<attribute id="closnesscentrality" title="Closeness Centrality" type="double">
<default>0.0</default>
</attribute>
<attribute id="betweenesscentrality" title="Betweenness Centrality" type="double">
<default>0.0</default>
</attribute>
<attribute id="newClusteringCoefficient" title="Local Clustering Coefficient" type="double">
<default>0.0</default>
</attribute>
<attribute id="eigencentrality" title="Eigenvector Centrality" type="double">
<default>0.0</default>
</attribute>
</attributes>
<attributes class="edge" mode="static">
<attribute id="Strength" title="Strength" type="float"></attribute>
</attributes>
<nodes>
<node id="0" label="Myriel">
<attvalues>
<attvalue for="modularity_class" value="0"></attvalue>
<attvalue for="closnesscentrality" value="0.4293785310734463"></attvalue>
<attvalue for="betweenesscentrality" value="0.17684210526315788"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.06666666666666667"></attvalue>
<attvalue for="eigencentrality" value="0.12589774854449567"></attvalue>
</attvalues>
<viz:size value="28.685715"></viz:size>
<viz:position x="-266.82776" y="-299.6904" z="0.0"></viz:position>
<viz:color r="91" g="91" b="245"></viz:color>
</node>
<node id="1" label="Napoleon">
<attvalues>
<attvalue for="modularity_class" value="0"></attvalue>
<attvalue for="closnesscentrality" value="0.30158730158730157"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.013644880522103907"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-418.08344" y="-446.8853" z="0.0"></viz:position>
<viz:color r="91" g="91" b="245"></viz:color>
</node>
<node id="2" label="MlleBaptistine">
<attvalues>
<attvalue for="modularity_class" value="1"></attvalue>
<attvalue for="closnesscentrality" value="0.41304347826086957"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.11188607125816913"></attvalue>
</attvalues>
<viz:size value="9.485714"></viz:size>
<viz:position x="-212.76357" y="-245.29176" z="0.0"></viz:position>
<viz:color r="245" g="91" b="91"></viz:color>
</node>
<node id="3" label="MmeMagloire">
<attvalues>
<attvalue for="modularity_class" value="1"></attvalue>
<attvalue for="closnesscentrality" value="0.41304347826086957"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.11188607125816913"></attvalue>
</attvalues>
<viz:size value="9.485714"></viz:size>
<viz:position x="-242.82404" y="-235.26283" z="0.0"></viz:position>
<viz:color r="245" g="91" b="91"></viz:color>
</node>
<node id="4" label="CountessDeLo">
<attvalues>
<attvalue for="modularity_class" value="0"></attvalue>
<attvalue for="closnesscentrality" value="0.30158730158730157"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.013644880522103907"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-379.30386" y="-429.06424" z="0.0"></viz:position>
<viz:color r="91" g="91" b="245"></viz:color>
</node>
<node id="5" label="Geborand">
<attvalues>
<attvalue for="modularity_class" value="0"></attvalue>
<attvalue for="closnesscentrality" value="0.30158730158730157"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.013644880522103907"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-417.26337" y="-406.03506" z="0.0"></viz:position>
<viz:color r="91" g="91" b="245"></viz:color>
</node>
<node id="6" label="Champtercier">
<attvalues>
<attvalue for="modularity_class" value="0"></attvalue>
<attvalue for="closnesscentrality" value="0.30158730158730157"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.013644880522103907"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-332.6012" y="-485.16974" z="0.0"></viz:position>
<viz:color r="91" g="91" b="245"></viz:color>
</node>
<node id="7" label="Cravatte">
<attvalues>
<attvalue for="modularity_class" value="0"></attvalue>
<attvalue for="closnesscentrality" value="0.30158730158730157"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.013644880522103907"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-382.69568" y="-475.09113" z="0.0"></viz:position>
<viz:color r="91" g="91" b="245"></viz:color>
</node>
<node id="8" label="Count">
<attvalues>
<attvalue for="modularity_class" value="0"></attvalue>
<attvalue for="closnesscentrality" value="0.30158730158730157"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.013644880522103907"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-320.384" y="-387.17325" z="0.0"></viz:position>
<viz:color r="91" g="91" b="245"></viz:color>
</node>
<node id="9" label="OldMan">
<attvalues>
<attvalue for="modularity_class" value="0"></attvalue>
<attvalue for="closnesscentrality" value="0.30158730158730157"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.013644880522103907"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-344.39832" y="-451.16772" z="0.0"></viz:position>
<viz:color r="91" g="91" b="245"></viz:color>
</node>
<node id="10" label="Labarre">
<attvalues>
<attvalue for="modularity_class" value="1"></attvalue>
<attvalue for="closnesscentrality" value="0.39378238341968913"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.08736417108874862"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-89.34107" y="-234.56128" z="0.0"></viz:position>
<viz:color r="245" g="91" b="91"></viz:color>
</node>
<node id="11" label="Valjean">
<attvalues>
<attvalue for="modularity_class" value="1"></attvalue>
<attvalue for="closnesscentrality" value="0.6440677966101696"></attvalue>
<attvalue for="betweenesscentrality" value="0.5699890527836184"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.12063492063492064"></attvalue>
<attvalue for="eigencentrality" value="1.0"></attvalue>
</attvalues>
<viz:size value="100.0"></viz:size>
<viz:position x="-87.93029" y="6.8120565" z="0.0"></viz:position>
<viz:color r="245" g="91" b="91"></viz:color>
</node>
<node id="12" label="Marguerite">
<attvalues>
<attvalue for="modularity_class" value="1"></attvalue>
<attvalue for="closnesscentrality" value="0.41304347826086957"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.1248881432416597"></attvalue>
</attvalues>
<viz:size value="6.742859"></viz:size>
<viz:position x="-339.77908" y="184.69139" z="0.0"></viz:position>
<viz:color r="245" g="91" b="91"></viz:color>
</node>
<node id="13" label="MmeDeR">
<attvalues>
<attvalue for="modularity_class" value="1"></attvalue>
<attvalue for="closnesscentrality" value="0.39378238341968913"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.08736417108874862"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-194.31313" y="-178.55301" z="0.0"></viz:position>
<viz:color r="245" g="91" b="91"></viz:color>
</node>
<node id="14" label="Isabeau">
<attvalues>
<attvalue for="modularity_class" value="1"></attvalue>
<attvalue for="closnesscentrality" value="0.39378238341968913"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.08736417108874862"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-158.05168" y="-201.99768" z="0.0"></viz:position>
<viz:color r="245" g="91" b="91"></viz:color>
</node>
<node id="15" label="Gervais">
<attvalues>
<attvalue for="modularity_class" value="1"></attvalue>
<attvalue for="closnesscentrality" value="0.39378238341968913"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.08736417108874862"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-127.701546" y="-242.55057" z="0.0"></viz:position>
<viz:color r="245" g="91" b="91"></viz:color>
</node>
<node id="16" label="Tholomyes">
<attvalues>
<attvalue for="modularity_class" value="2"></attvalue>
<attvalue for="closnesscentrality" value="0.3917525773195876"></attvalue>
<attvalue for="betweenesscentrality" value="0.040629348177335795"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.6111111111111112"></attvalue>
<attvalue for="eigencentrality" value="0.22502057525598232"></attvalue>
</attvalues>
<viz:size value="25.942856"></viz:size>
<viz:position x="-385.2226" y="393.5572" z="0.0"></viz:position>
<viz:color r="91" g="194" b="245"></viz:color>
</node>
<node id="17" label="Listolier">
<attvalues>
<attvalue for="modularity_class" value="2"></attvalue>
<attvalue for="closnesscentrality" value="0.34080717488789236"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.12757838866295002"></attvalue>
</attvalues>
<viz:size value="20.457146"></viz:size>
<viz:position x="-516.55884" y="393.98975" z="0.0"></viz:position>
<viz:color r="91" g="194" b="245"></viz:color>
</node>
<node id="18" label="Fameuil">
<attvalues>
<attvalue for="modularity_class" value="2"></attvalue>
<attvalue for="closnesscentrality" value="0.34080717488789236"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.12757838866295002"></attvalue>
</attvalues>
<viz:size value="20.457146"></viz:size>
<viz:position x="-464.79382" y="493.57944" z="0.0"></viz:position>
<viz:color r="91" g="194" b="245"></viz:color>
</node>
<node id="19" label="Blacheville">
<attvalues>
<attvalue for="modularity_class" value="2"></attvalue>
<attvalue for="closnesscentrality" value="0.34080717488789236"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.12757838866295002"></attvalue>
</attvalues>
<viz:size value="20.457146"></viz:size>
<viz:position x="-515.1624" y="456.9891" z="0.0"></viz:position>
<viz:color r="91" g="194" b="245"></viz:color>
</node>
<node id="20" label="Favourite">
<attvalues>
<attvalue for="modularity_class" value="2"></attvalue>
<attvalue for="closnesscentrality" value="0.34080717488789236"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.12757838866295002"></attvalue>
</attvalues>
<viz:size value="20.457146"></viz:size>
<viz:position x="-408.12122" y="464.5048" z="0.0"></viz:position>
<viz:color r="91" g="194" b="245"></viz:color>
</node>
<node id="21" label="Dahlia">
<attvalues>
<attvalue for="modularity_class" value="2"></attvalue>
<attvalue for="closnesscentrality" value="0.34080717488789236"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.12757838866295002"></attvalue>
</attvalues>
<viz:size value="20.457146"></viz:size>
<viz:position x="-456.44113" y="425.13303" z="0.0"></viz:position>
<viz:color r="91" g="194" b="245"></viz:color>
</node>
<node id="22" label="Zephine">
<attvalues>
<attvalue for="modularity_class" value="2"></attvalue>
<attvalue for="closnesscentrality" value="0.34080717488789236"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.12757838866295002"></attvalue>
</attvalues>
<viz:size value="20.457146"></viz:size>
<viz:position x="-459.1107" y="362.5133" z="0.0"></viz:position>
<viz:color r="91" g="194" b="245"></viz:color>
</node>
<node id="23" label="Fantine">
<attvalues>
<attvalue for="modularity_class" value="2"></attvalue>
<attvalue for="closnesscentrality" value="0.46060606060606063"></attvalue>
<attvalue for="betweenesscentrality" value="0.12964454098819425"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.3142857142857143"></attvalue>
<attvalue for="eigencentrality" value="0.4046733463057287"></attvalue>
</attvalues>
<viz:size value="42.4"></viz:size>
<viz:position x="-313.42786" y="289.44803" z="0.0"></viz:position>
<viz:color r="91" g="194" b="245"></viz:color>
</node>
<node id="24" label="MmeThenardier">
<attvalues>
<attvalue for="modularity_class" value="7"></attvalue>
<attvalue for="closnesscentrality" value="0.46060606060606063"></attvalue>
<attvalue for="betweenesscentrality" value="0.029002418730461763"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.4909090909090909"></attvalue>
<attvalue for="eigencentrality" value="0.4633759606776108"></attvalue>
</attvalues>
<viz:size value="31.428574"></viz:size>
<viz:position x="4.6313396" y="273.8517" z="0.0"></viz:position>
<viz:color r="91" g="245" b="194"></viz:color>
</node>
<node id="25" label="Thenardier">
<attvalues>
<attvalue for="modularity_class" value="7"></attvalue>
<attvalue for="closnesscentrality" value="0.5170068027210885"></attvalue>
<attvalue for="betweenesscentrality" value="0.07490122123424225"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.4083333333333333"></attvalue>
<attvalue for="eigencentrality" value="0.676494721845158"></attvalue>
</attvalues>
<viz:size value="45.142853"></viz:size>
<viz:position x="82.80825" y="203.1144" z="0.0"></viz:position>
<viz:color r="91" g="245" b="194"></viz:color>
</node>
<node id="26" label="Cosette">
<attvalues>
<attvalue for="modularity_class" value="6"></attvalue>
<attvalue for="closnesscentrality" value="0.4779874213836478"></attvalue>
<attvalue for="betweenesscentrality" value="0.02379625345414819"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.38181818181818183"></attvalue>
<attvalue for="eigencentrality" value="0.42094927831374934"></attvalue>
</attvalues>
<viz:size value="31.428574"></viz:size>
<viz:position x="78.64646" y="31.512747" z="0.0"></viz:position>
<viz:color r="194" g="91" b="245"></viz:color>
</node>
<node id="27" label="Javert">
<attvalues>
<attvalue for="modularity_class" value="7"></attvalue>
<attvalue for="closnesscentrality" value="0.5170068027210885"></attvalue>
<attvalue for="betweenesscentrality" value="0.05433155966478436"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.3235294117647059"></attvalue>
<attvalue for="eigencentrality" value="0.6765355896405886"></attvalue>
</attvalues>
<viz:size value="47.88571"></viz:size>
<viz:position x="-81.46074" y="204.20204" z="0.0"></viz:position>
<viz:color r="91" g="245" b="194"></viz:color>
</node>
<node id="28" label="Fauchelevent">
<attvalues>
<attvalue for="modularity_class" value="4"></attvalue>
<attvalue for="closnesscentrality" value="0.4021164021164021"></attvalue>
<attvalue for="betweenesscentrality" value="0.026491228070175437"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.3333333333333333"></attvalue>
<attvalue for="eigencentrality" value="0.1567411582284451"></attvalue>
</attvalues>
<viz:size value="12.228573"></viz:size>
<viz:position x="-225.73984" y="-82.41631" z="0.0"></viz:position>
<viz:color r="245" g="194" b="91"></viz:color>
</node>
<node id="29" label="Bamatabois">
<attvalues>
<attvalue for="modularity_class" value="3"></attvalue>
<attvalue for="closnesscentrality" value="0.42696629213483145"></attvalue>
<attvalue for="betweenesscentrality" value="0.008040935672514621"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.6428571428571429"></attvalue>
<attvalue for="eigencentrality" value="0.2676585868501075"></attvalue>
</attvalues>
<viz:size value="23.2"></viz:size>
<viz:position x="-385.6842" y="20.206686" z="0.0"></viz:position>
<viz:color r="194" g="245" b="91"></viz:color>
</node>
<node id="30" label="Perpetue">
<attvalues>
<attvalue for="modularity_class" value="2"></attvalue>
<attvalue for="closnesscentrality" value="0.3179916317991632"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.0545731260374156"></attvalue>
</attvalues>
<viz:size value="6.742859"></viz:size>
<viz:position x="-403.92447" y="197.69823" z="0.0"></viz:position>
<viz:color r="91" g="194" b="245"></viz:color>
</node>
<node id="31" label="Simplice">
<attvalues>
<attvalue for="modularity_class" value="2"></attvalue>
<attvalue for="closnesscentrality" value="0.41758241758241754"></attvalue>
<attvalue for="betweenesscentrality" value="0.008640295033483888"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.6666666666666666"></attvalue>
<attvalue for="eigencentrality" value="0.18823416532562146"></attvalue>
</attvalues>
<viz:size value="12.228573"></viz:size>
<viz:position x="-281.4253" y="158.45137" z="0.0"></viz:position>
<viz:color r="91" g="194" b="245"></viz:color>
</node>
<node id="32" label="Scaufflaire">
<attvalues>
<attvalue for="modularity_class" value="1"></attvalue>
<attvalue for="closnesscentrality" value="0.39378238341968913"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.08736417108874862"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-122.41348" y="-210.37503" z="0.0"></viz:position>
<viz:color r="245" g="91" b="91"></viz:color>
</node>
<node id="33" label="Woman1">
<attvalues>
<attvalue for="modularity_class" value="1"></attvalue>
<attvalue for="closnesscentrality" value="0.39583333333333337"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.14487866538812616"></attvalue>
</attvalues>
<viz:size value="6.742859"></viz:size>
<viz:position x="-234.6001" y="113.15067" z="0.0"></viz:position>
<viz:color r="245" g="91" b="91"></viz:color>
</node>
<node id="34" label="Judge">
<attvalues>
<attvalue for="modularity_class" value="3"></attvalue>
<attvalue for="closnesscentrality" value="0.40425531914893614"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.18012932101738532"></attvalue>
</attvalues>
<viz:size value="17.714287"></viz:size>
<viz:position x="-387.84915" y="-58.7059" z="0.0"></viz:position>
<viz:color r="194" g="245" b="91"></viz:color>
</node>
<node id="35" label="Champmathieu">
<attvalues>
<attvalue for="modularity_class" value="3"></attvalue>
<attvalue for="closnesscentrality" value="0.40425531914893614"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.18012932101738532"></attvalue>
</attvalues>
<viz:size value="17.714287"></viz:size>
<viz:position x="-338.2307" y="-87.48405" z="0.0"></viz:position>
<viz:color r="194" g="245" b="91"></viz:color>
</node>
<node id="36" label="Brevet">
<attvalues>
<attvalue for="modularity_class" value="3"></attvalue>
<attvalue for="closnesscentrality" value="0.40425531914893614"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.18012932101738532"></attvalue>
</attvalues>
<viz:size value="17.714287"></viz:size>
<viz:position x="-453.26874" y="-58.94648" z="0.0"></viz:position>
<viz:color r="194" g="245" b="91"></viz:color>
</node>
<node id="37" label="Chenildieu">
<attvalues>
<attvalue for="modularity_class" value="3"></attvalue>
<attvalue for="closnesscentrality" value="0.40425531914893614"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.18012932101738532"></attvalue>
</attvalues>
<viz:size value="17.714287"></viz:size>
<viz:position x="-386.44904" y="-140.05937" z="0.0"></viz:position>
<viz:color r="194" g="245" b="91"></viz:color>
</node>
<node id="38" label="Cochepaille">
<attvalues>
<attvalue for="modularity_class" value="3"></attvalue>
<attvalue for="closnesscentrality" value="0.40425531914893614"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.18012932101738532"></attvalue>
</attvalues>
<viz:size value="17.714287"></viz:size>
<viz:position x="-446.7876" y="-123.38005" z="0.0"></viz:position>
<viz:color r="194" g="245" b="91"></viz:color>
</node>
<node id="39" label="Pontmercy">
<attvalues>
<attvalue for="modularity_class" value="6"></attvalue>
<attvalue for="closnesscentrality" value="0.37254901960784315"></attvalue>
<attvalue for="betweenesscentrality" value="0.006925438596491229"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.3333333333333333"></attvalue>
<attvalue for="eigencentrality" value="0.1299042165780355"></attvalue>
</attvalues>
<viz:size value="9.485714"></viz:size>
<viz:position x="336.49738" y="269.55914" z="0.0"></viz:position>
<viz:color r="194" g="91" b="245"></viz:color>
</node>
<node id="40" label="Boulatruelle">
<attvalues>
<attvalue for="modularity_class" value="7"></attvalue>
<attvalue for="closnesscentrality" value="0.34234234234234234"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.05719593261755996"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="29.187843" y="460.13132" z="0.0"></viz:position>
<viz:color r="91" g="245" b="194"></viz:color>
</node>
<node id="41" label="Eponine">
<attvalues>
<attvalue for="modularity_class" value="7"></attvalue>
<attvalue for="closnesscentrality" value="0.39583333333333337"></attvalue>
<attvalue for="betweenesscentrality" value="0.011487550654163004"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.45454545454545453"></attvalue>
<attvalue for="eigencentrality" value="0.47754909177354526"></attvalue>
</attvalues>
<viz:size value="31.428574"></viz:size>
<viz:position x="238.36697" y="210.00926" z="0.0"></viz:position>
<viz:color r="91" g="245" b="194"></viz:color>
</node>
<node id="42" label="Anzelma">
<attvalues>
<attvalue for="modularity_class" value="7"></attvalue>
<attvalue for="closnesscentrality" value="0.35185185185185186"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.13682236713537643"></attvalue>
</attvalues>
<viz:size value="9.485714"></viz:size>
<viz:position x="189.69513" y="346.50662" z="0.0"></viz:position>
<viz:color r="91" g="245" b="194"></viz:color>
</node>
<node id="43" label="Woman2">
<attvalues>
<attvalue for="modularity_class" value="6"></attvalue>
<attvalue for="closnesscentrality" value="0.4021164021164021"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.1816046162480234"></attvalue>
</attvalues>
<viz:size value="9.485714"></viz:size>
<viz:position x="-187.00418" y="145.02663" z="0.0"></viz:position>
<viz:color r="194" g="91" b="245"></viz:color>
</node>
<node id="44" label="MotherInnocent">
<attvalues>
<attvalue for="modularity_class" value="4"></attvalue>
<attvalue for="closnesscentrality" value="0.3979057591623037"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.10173439965023601"></attvalue>
</attvalues>
<viz:size value="6.742859"></viz:size>
<viz:position x="-252.99521" y="-129.87549" z="0.0"></viz:position>
<viz:color r="245" g="194" b="91"></viz:color>
</node>
<node id="45" label="Gribier">
<attvalues>
<attvalue for="modularity_class" value="4"></attvalue>
<attvalue for="closnesscentrality" value="0.28787878787878785"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.014370228561487381"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="-296.07935" y="-163.11964" z="0.0"></viz:position>
<viz:color r="245" g="194" b="91"></viz:color>
</node>
<node id="46" label="Jondrette">
<attvalues>
<attvalue for="modularity_class" value="5"></attvalue>
<attvalue for="closnesscentrality" value="0.25675675675675674"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.007685164445947366"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="550.3201" y="-522.4031" z="0.0"></viz:position>
<viz:color r="245" g="91" b="194"></viz:color>
</node>
<node id="47" label="MmeBurgon">
<attvalues>
<attvalue for="modularity_class" value="5"></attvalue>
<attvalue for="closnesscentrality" value="0.3438914027149321"></attvalue>
<attvalue for="betweenesscentrality" value="0.02631578947368421"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.08317100295143207"></attvalue>
</attvalues>
<viz:size value="6.742859"></viz:size>
<viz:position x="488.13535" y="-356.8573" z="0.0"></viz:position>
<viz:color r="245" g="91" b="194"></viz:color>
</node>
<node id="48" label="Gavroche">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.5135135135135135"></attvalue>
<attvalue for="betweenesscentrality" value="0.16511250242584768"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.354978354978355"></attvalue>
<attvalue for="eigencentrality" value="0.9959418749764184"></attvalue>
</attvalues>
<viz:size value="61.600006"></viz:size>
<viz:position x="387.89572" y="-110.462326" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="49" label="Gillenormand">
<attvalues>
<attvalue for="modularity_class" value="6"></attvalue>
<attvalue for="closnesscentrality" value="0.4418604651162791"></attvalue>
<attvalue for="betweenesscentrality" value="0.02021062158319776"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.47619047619047616"></attvalue>
<attvalue for="eigencentrality" value="0.24207197686918017"></attvalue>
</attvalues>
<viz:size value="20.457146"></viz:size>
<viz:position x="126.4831" y="-68.10622" z="0.0"></viz:position>
<viz:color r="194" g="91" b="245"></viz:color>
</node>
<node id="50" label="Magnon">
<attvalues>
<attvalue for="modularity_class" value="6"></attvalue>
<attvalue for="closnesscentrality" value="0.33480176211453744"></attvalue>
<attvalue for="betweenesscentrality" value="2.1720969089390142E-4"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.06156342639684764"></attvalue>
</attvalues>
<viz:size value="6.742859"></viz:size>
<viz:position x="127.07365" y="113.05923" z="0.0"></viz:position>
<viz:color r="194" g="91" b="245"></viz:color>
</node>
<node id="51" label="MlleGillenormand">
<attvalues>
<attvalue for="modularity_class" value="6"></attvalue>
<attvalue for="closnesscentrality" value="0.4418604651162791"></attvalue>
<attvalue for="betweenesscentrality" value="0.04759892787524368"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.42857142857142855"></attvalue>
<attvalue for="eigencentrality" value="0.23481275890305936"></attvalue>
</attvalues>
<viz:size value="20.457146"></viz:size>
<viz:position x="162.63559" y="-117.6565" z="0.0"></viz:position>
<viz:color r="194" g="91" b="245"></viz:color>
</node>
<node id="52" label="MmePontmercy">
<attvalues>
<attvalue for="modularity_class" value="6"></attvalue>
<attvalue for="closnesscentrality" value="0.3153526970954357"></attvalue>
<attvalue for="betweenesscentrality" value="3.508771929824561E-4"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.03284459344820744"></attvalue>
</attvalues>
<viz:size value="6.742859"></viz:size>
<viz:position x="353.66415" y="205.89165" z="0.0"></viz:position>
<viz:color r="194" g="91" b="245"></viz:color>
</node>
<node id="53" label="MlleVaubois">
<attvalues>
<attvalue for="modularity_class" value="6"></attvalue>
<attvalue for="closnesscentrality" value="0.3076923076923077"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.021209021604697394"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="165.43939" y="-339.7736" z="0.0"></viz:position>
<viz:color r="194" g="91" b="245"></viz:color>
</node>
<node id="54" label="LtGillenormand">
<attvalues>
<attvalue for="modularity_class" value="6"></attvalue>
<attvalue for="closnesscentrality" value="0.36538461538461536"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.1484283980520337"></attvalue>
</attvalues>
<viz:size value="12.228573"></viz:size>
<viz:position x="137.69348" y="-196.1069" z="0.0"></viz:position>
<viz:color r="194" g="91" b="245"></viz:color>
</node>
<node id="55" label="Marius">
<attvalues>
<attvalue for="modularity_class" value="6"></attvalue>
<attvalue for="closnesscentrality" value="0.5314685314685315"></attvalue>
<attvalue for="betweenesscentrality" value="0.132032488621946"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.3333333333333333"></attvalue>
<attvalue for="eigencentrality" value="0.8289654718930218"></attvalue>
</attvalues>
<viz:size value="53.37143"></viz:size>
<viz:position x="206.44687" y="13.805411" z="0.0"></viz:position>
<viz:color r="194" g="91" b="245"></viz:color>
</node>
<node id="56" label="BaronessT">
<attvalues>
<attvalue for="modularity_class" value="6"></attvalue>
<attvalue for="closnesscentrality" value="0.35185185185185186"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.09049342558743917"></attvalue>
</attvalues>
<viz:size value="6.742859"></viz:size>
<viz:position x="194.82993" y="-224.78036" z="0.0"></viz:position>
<viz:color r="194" g="91" b="245"></viz:color>
</node>
<node id="57" label="Mabeuf">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.39583333333333337"></attvalue>
<attvalue for="betweenesscentrality" value="0.027661236424394317"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.6909090909090909"></attvalue>
<attvalue for="eigencentrality" value="0.5762557694358882"></attvalue>
</attvalues>
<viz:size value="31.428574"></viz:size>
<viz:position x="597.6618" y="-135.18481" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="58" label="Enjolras">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.4810126582278481"></attvalue>
<attvalue for="betweenesscentrality" value="0.042553356822177105"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.6095238095238096"></attvalue>
<attvalue for="eigencentrality" value="0.8162588169870529"></attvalue>
</attvalues>
<viz:size value="42.4"></viz:size>
<viz:position x="355.78366" y="74.882454" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="59" label="Combeferre">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.3917525773195876"></attvalue>
<attvalue for="betweenesscentrality" value="0.0012501455659350395"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.9272727272727272"></attvalue>
<attvalue for="eigencentrality" value="0.6131207361248003"></attvalue>
</attvalues>
<viz:size value="31.428574"></viz:size>
<viz:position x="515.2961" y="46.167564" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="60" label="Prouvaire">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.3568075117370892"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.506296820735366"></attvalue>
</attvalues>
<viz:size value="25.942856"></viz:size>
<viz:position x="614.29285" y="69.3104" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="61" label="Feuilly">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.3917525773195876"></attvalue>
<attvalue for="betweenesscentrality" value="0.0012501455659350395"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.9272727272727272"></attvalue>
<attvalue for="eigencentrality" value="0.6131207361248003"></attvalue>
</attvalues>
<viz:size value="31.428574"></viz:size>
<viz:position x="550.1917" y="128.17537" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="62" label="Courfeyrac">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.4"></attvalue>
<attvalue for="betweenesscentrality" value="0.00526702988198833"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.7564102564102564"></attvalue>
<attvalue for="eigencentrality" value="0.6803721982859926"></attvalue>
</attvalues>
<viz:size value="36.91429"></viz:size>
<viz:position x="436.17184" y="12.7286825" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="63" label="Bahorel">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.39378238341968913"></attvalue>
<attvalue for="betweenesscentrality" value="0.0021854883087570067"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.8636363636363636"></attvalue>
<attvalue for="eigencentrality" value="0.6436060005440674"></attvalue>
</attvalues>
<viz:size value="34.17143"></viz:size>
<viz:position x="602.55225" y="-16.421427" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="64" label="Bossuet">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.47500000000000003"></attvalue>
<attvalue for="betweenesscentrality" value="0.030753650179957823"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.7692307692307693"></attvalue>
<attvalue for="eigencentrality" value="0.7241400839567764"></attvalue>
</attvalues>
<viz:size value="36.91429"></viz:size>
<viz:position x="455.81955" y="115.45826" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="65" label="Joly">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.39378238341968913"></attvalue>
<attvalue for="betweenesscentrality" value="0.0021854883087570067"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.8636363636363636"></attvalue>
<attvalue for="eigencentrality" value="0.6436060005440672"></attvalue>
</attvalues>
<viz:size value="34.17143"></viz:size>
<viz:position x="516.40784" y="-47.242233" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="66" label="Grantaire">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.3584905660377359"></attvalue>
<attvalue for="betweenesscentrality" value="1.5037593984962405E-4"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.9333333333333333"></attvalue>
<attvalue for="eigencentrality" value="0.5367820851546334"></attvalue>
</attvalues>
<viz:size value="28.685715"></viz:size>
<viz:position x="646.4313" y="151.06331" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="67" label="MotherPlutarch">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.28464419475655434"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.0"></attvalue>
<attvalue for="eigencentrality" value="0.046647528201617036"></attvalue>
</attvalues>
<viz:size value="4.0"></viz:size>
<viz:position x="668.9568" y="-204.65488" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="68" label="Gueulemer">
<attvalues>
<attvalue for="modularity_class" value="7"></attvalue>
<attvalue for="closnesscentrality" value="0.46341463414634143"></attvalue>
<attvalue for="betweenesscentrality" value="0.004960383978389518"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.8"></attvalue>
<attvalue for="eigencentrality" value="0.5179939156546661"></attvalue>
</attvalues>
<viz:size value="28.685715"></viz:size>
<viz:position x="78.4799" y="347.15146" z="0.0"></viz:position>
<viz:color r="91" g="245" b="194"></viz:color>
</node>
<node id="69" label="Babet">
<attvalues>
<attvalue for="modularity_class" value="7"></attvalue>
<attvalue for="closnesscentrality" value="0.46341463414634143"></attvalue>
<attvalue for="betweenesscentrality" value="0.004960383978389518"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.8"></attvalue>
<attvalue for="eigencentrality" value="0.5179939156546661"></attvalue>
</attvalues>
<viz:size value="28.685715"></viz:size>
<viz:position x="150.35959" y="298.50797" z="0.0"></viz:position>
<viz:color r="91" g="245" b="194"></viz:color>
</node>
<node id="70" label="Claquesous">
<attvalues>
<attvalue for="modularity_class" value="7"></attvalue>
<attvalue for="closnesscentrality" value="0.45238095238095233"></attvalue>
<attvalue for="betweenesscentrality" value="0.00486180419559921"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.7111111111111111"></attvalue>
<attvalue for="eigencentrality" value="0.503856234703112"></attvalue>
</attvalues>
<viz:size value="28.685715"></viz:size>
<viz:position x="137.3717" y="410.2809" z="0.0"></viz:position>
<viz:color r="91" g="245" b="194"></viz:color>
</node>
<node id="71" label="Montparnasse">
<attvalues>
<attvalue for="modularity_class" value="7"></attvalue>
<attvalue for="closnesscentrality" value="0.45783132530120485"></attvalue>
<attvalue for="betweenesscentrality" value="0.003873829873829873"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.8333333333333334"></attvalue>
<attvalue for="eigencentrality" value="0.4812690923169401"></attvalue>
</attvalues>
<viz:size value="25.942856"></viz:size>
<viz:position x="234.87747" y="400.85983" z="0.0"></viz:position>
<viz:color r="91" g="245" b="194"></viz:color>
</node>
<node id="72" label="Toussaint">
<attvalues>
<attvalue for="modularity_class" value="1"></attvalue>
<attvalue for="closnesscentrality" value="0.4021164021164021"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.1816046162480234"></attvalue>
</attvalues>
<viz:size value="9.485714"></viz:size>
<viz:position x="40.942253" y="-113.78272" z="0.0"></viz:position>
<viz:color r="245" g="91" b="91"></viz:color>
</node>
<node id="73" label="Child1">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.34234234234234234"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.0896239218108394"></attvalue>
</attvalues>
<viz:size value="6.742859"></viz:size>
<viz:position x="437.939" y="-291.58234" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="74" label="Child2">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.34234234234234234"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.0896239218108394"></attvalue>
</attvalues>
<viz:size value="6.742859"></viz:size>
<viz:position x="466.04922" y="-283.3606" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
<node id="75" label="Brujon">
<attvalues>
<attvalue for="modularity_class" value="7"></attvalue>
<attvalue for="closnesscentrality" value="0.37999999999999995"></attvalue>
<attvalue for="betweenesscentrality" value="4.385964912280702E-4"></attvalue>
<attvalue for="newClusteringCoefficient" value="0.9047619047619048"></attvalue>
<attvalue for="eigencentrality" value="0.34760805302873393"></attvalue>
</attvalues>
<viz:size value="20.457146"></viz:size>
<viz:position x="238.79364" y="314.06345" z="0.0"></viz:position>
<viz:color r="91" g="245" b="194"></viz:color>
</node>
<node id="76" label="MmeHucheloup">
<attvalues>
<attvalue for="modularity_class" value="8"></attvalue>
<attvalue for="closnesscentrality" value="0.35348837209302325"></attvalue>
<attvalue for="betweenesscentrality" value="0.0"></attvalue>
<attvalue for="newClusteringCoefficient" value="1.0"></attvalue>
<attvalue for="eigencentrality" value="0.40771862915705165"></attvalue>
</attvalues>
<viz:size value="20.457146"></viz:size>
<viz:position x="712.18353" y="-4.8131495" z="0.0"></viz:position>
<viz:color r="91" g="245" b="91"></viz:color>
</node>
</nodes>
<edges>
<edge id="0" source="1" target="0">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="1" source="2" target="0" weight="8.0">
<attvalues>
<attvalue for="Strength" value="8.0"></attvalue>
</attvalues>
</edge>
<edge id="2" source="3" target="0" weight="10.0">
<attvalues>
<attvalue for="Strength" value="10.0"></attvalue>
</attvalues>
</edge>
<edge id="3" source="3" target="2" weight="6.0">
<attvalues>
<attvalue for="Strength" value="6.0"></attvalue>
</attvalues>
</edge>
<edge id="4" source="4" target="0">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="5" source="5" target="0">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="6" source="6" target="0">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="7" source="7" target="0">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="8" source="8" target="0" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="9" source="9" target="0">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="13" source="11" target="0" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge source="11" target="2" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="11" source="11" target="3" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="10" source="11" target="10">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="14" source="12" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="15" source="13" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="16" source="14" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="17" source="15" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="18" source="17" target="16" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="19" source="18" target="16" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="20" source="18" target="17" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="21" source="19" target="16" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="22" source="19" target="17" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="23" source="19" target="18" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="24" source="20" target="16" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="25" source="20" target="17" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="26" source="20" target="18" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="27" source="20" target="19" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="28" source="21" target="16" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="29" source="21" target="17" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="30" source="21" target="18" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="31" source="21" target="19" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="32" source="21" target="20" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="33" source="22" target="16" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="34" source="22" target="17" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="35" source="22" target="18" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="36" source="22" target="19" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="37" source="22" target="20" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="38" source="22" target="21" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="47" source="23" target="11" weight="9.0">
<attvalues>
<attvalue for="Strength" value="9.0"></attvalue>
</attvalues>
</edge>
<edge id="46" source="23" target="12" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="39" source="23" target="16" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="40" source="23" target="17" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="41" source="23" target="18" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="42" source="23" target="19" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="43" source="23" target="20" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="44" source="23" target="21" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="45" source="23" target="22" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge source="24" target="11" weight="7.0">
<attvalues>
<attvalue for="Strength" value="7.0"></attvalue>
</attvalues>
</edge>
<edge id="48" source="24" target="23" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="52" source="25" target="11" weight="12.0">
<attvalues>
<attvalue for="Strength" value="12.0"></attvalue>
</attvalues>
</edge>
<edge id="51" source="25" target="23">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="50" source="25" target="24" weight="13.0">
<attvalues>
<attvalue for="Strength" value="13.0"></attvalue>
</attvalues>
</edge>
<edge source="26" target="11" weight="31.0">
<attvalues>
<attvalue for="Strength" value="31.0"></attvalue>
</attvalues>
</edge>
<edge source="26" target="16">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="53" source="26" target="24" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="56" source="26" target="25">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="57" source="27" target="11" weight="17.0">
<attvalues>
<attvalue for="Strength" value="17.0"></attvalue>
</attvalues>
</edge>
<edge id="58" source="27" target="23" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge source="27" target="24">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="59" source="27" target="25" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="61" source="27" target="26">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="62" source="28" target="11" weight="8.0">
<attvalues>
<attvalue for="Strength" value="8.0"></attvalue>
</attvalues>
</edge>
<edge id="63" source="28" target="27">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="66" source="29" target="11" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="64" source="29" target="23">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="65" source="29" target="27">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="67" source="30" target="23">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge source="31" target="11" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge source="31" target="23" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge source="31" target="27">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="68" source="31" target="30" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="72" source="32" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="73" source="33" target="11" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="74" source="33" target="27">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="75" source="34" target="11" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="76" source="34" target="29" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="77" source="35" target="11" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge source="35" target="29" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="78" source="35" target="34" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="82" source="36" target="11" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="83" source="36" target="29">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="80" source="36" target="34" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="81" source="36" target="35" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="87" source="37" target="11" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="88" source="37" target="29">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="84" source="37" target="34" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="85" source="37" target="35" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="86" source="37" target="36" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="93" source="38" target="11" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="94" source="38" target="29">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="89" source="38" target="34" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="90" source="38" target="35" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="91" source="38" target="36" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="92" source="38" target="37" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="95" source="39" target="25">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="96" source="40" target="25">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="97" source="41" target="24" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="98" source="41" target="25" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="101" source="42" target="24">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="100" source="42" target="25" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="99" source="42" target="41" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="102" source="43" target="11" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="103" source="43" target="26">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="104" source="43" target="27">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge source="44" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="105" source="44" target="28" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="107" source="45" target="28" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="108" source="47" target="46">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="112" source="48" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="110" source="48" target="25">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="111" source="48" target="27">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="109" source="48" target="47" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge source="49" target="11" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="113" source="49" target="26" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge source="50" target="24">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="115" source="50" target="49">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="119" source="51" target="11" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="118" source="51" target="26" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="117" source="51" target="49" weight="9.0">
<attvalues>
<attvalue for="Strength" value="9.0"></attvalue>
</attvalues>
</edge>
<edge source="52" target="39">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="120" source="52" target="51">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="122" source="53" target="51">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="125" source="54" target="26">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="124" source="54" target="49">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="123" source="54" target="51" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="131" source="55" target="11" weight="19.0">
<attvalues>
<attvalue for="Strength" value="19.0"></attvalue>
</attvalues>
</edge>
<edge id="132" source="55" target="16">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="133" source="55" target="25" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge source="55" target="26" weight="21.0">
<attvalues>
<attvalue for="Strength" value="21.0"></attvalue>
</attvalues>
</edge>
<edge id="128" source="55" target="39">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="134" source="55" target="41" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="135" source="55" target="48" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="127" source="55" target="49" weight="12.0">
<attvalues>
<attvalue for="Strength" value="12.0"></attvalue>
</attvalues>
</edge>
<edge id="126" source="55" target="51" weight="6.0">
<attvalues>
<attvalue for="Strength" value="6.0"></attvalue>
</attvalues>
</edge>
<edge id="129" source="55" target="54">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="136" source="56" target="49">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="137" source="56" target="55">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge source="57" target="41">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge source="57" target="48">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="138" source="57" target="55">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="145" source="58" target="11" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge source="58" target="27" weight="6.0">
<attvalues>
<attvalue for="Strength" value="6.0"></attvalue>
</attvalues>
</edge>
<edge id="142" source="58" target="48" weight="7.0">
<attvalues>
<attvalue for="Strength" value="7.0"></attvalue>
</attvalues>
</edge>
<edge id="141" source="58" target="55" weight="7.0">
<attvalues>
<attvalue for="Strength" value="7.0"></attvalue>
</attvalues>
</edge>
<edge id="144" source="58" target="57">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="148" source="59" target="48" weight="6.0">
<attvalues>
<attvalue for="Strength" value="6.0"></attvalue>
</attvalues>
</edge>
<edge id="147" source="59" target="55" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge source="59" target="57" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="146" source="59" target="58" weight="15.0">
<attvalues>
<attvalue for="Strength" value="15.0"></attvalue>
</attvalues>
</edge>
<edge id="150" source="60" target="48">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="151" source="60" target="58" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="152" source="60" target="59" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="153" source="61" target="48" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="158" source="61" target="55">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="157" source="61" target="57">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="154" source="61" target="58" weight="6.0">
<attvalues>
<attvalue for="Strength" value="6.0"></attvalue>
</attvalues>
</edge>
<edge id="156" source="61" target="59" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="155" source="61" target="60" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="164" source="62" target="41">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="162" source="62" target="48" weight="7.0">
<attvalues>
<attvalue for="Strength" value="7.0"></attvalue>
</attvalues>
</edge>
<edge id="159" source="62" target="55" weight="9.0">
<attvalues>
<attvalue for="Strength" value="9.0"></attvalue>
</attvalues>
</edge>
<edge source="62" target="57" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="160" source="62" target="58" weight="17.0">
<attvalues>
<attvalue for="Strength" value="17.0"></attvalue>
</attvalues>
</edge>
<edge id="161" source="62" target="59" weight="13.0">
<attvalues>
<attvalue for="Strength" value="13.0"></attvalue>
</attvalues>
</edge>
<edge source="62" target="60" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="165" source="62" target="61" weight="6.0">
<attvalues>
<attvalue for="Strength" value="6.0"></attvalue>
</attvalues>
</edge>
<edge source="63" target="48" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="174" source="63" target="55">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge source="63" target="57" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge source="63" target="58" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="167" source="63" target="59" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge source="63" target="60" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="172" source="63" target="61" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="169" source="63" target="62" weight="6.0">
<attvalues>
<attvalue for="Strength" value="6.0"></attvalue>
</attvalues>
</edge>
<edge id="184" source="64" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge source="64" target="48" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="175" source="64" target="55" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="183" source="64" target="57">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="179" source="64" target="58" weight="10.0">
<attvalues>
<attvalue for="Strength" value="10.0"></attvalue>
</attvalues>
</edge>
<edge id="182" source="64" target="59" weight="9.0">
<attvalues>
<attvalue for="Strength" value="9.0"></attvalue>
</attvalues>
</edge>
<edge id="181" source="64" target="60" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="180" source="64" target="61" weight="6.0">
<attvalues>
<attvalue for="Strength" value="6.0"></attvalue>
</attvalues>
</edge>
<edge id="176" source="64" target="62" weight="12.0">
<attvalues>
<attvalue for="Strength" value="12.0"></attvalue>
</attvalues>
</edge>
<edge id="178" source="64" target="63" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="187" source="65" target="48" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="194" source="65" target="55" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="193" source="65" target="57">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge source="65" target="58" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="192" source="65" target="59" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge source="65" target="60" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="190" source="65" target="61" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="188" source="65" target="62" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="185" source="65" target="63" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="186" source="65" target="64" weight="7.0">
<attvalues>
<attvalue for="Strength" value="7.0"></attvalue>
</attvalues>
</edge>
<edge id="200" source="66" target="48">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="196" source="66" target="58" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="197" source="66" target="59">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="203" source="66" target="60">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="202" source="66" target="61">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="198" source="66" target="62" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="201" source="66" target="63">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="195" source="66" target="64" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="199" source="66" target="65" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="204" source="67" target="57" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge source="68" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge source="68" target="24">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="205" source="68" target="25" weight="5.0">
<attvalues>
<attvalue for="Strength" value="5.0"></attvalue>
</attvalues>
</edge>
<edge id="208" source="68" target="27">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge source="68" target="41">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="209" source="68" target="48">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="213" source="69" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="214" source="69" target="24">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="211" source="69" target="25" weight="6.0">
<attvalues>
<attvalue for="Strength" value="6.0"></attvalue>
</attvalues>
</edge>
<edge source="69" target="27" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="217" source="69" target="41">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="216" source="69" target="48">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="212" source="69" target="68" weight="6.0">
<attvalues>
<attvalue for="Strength" value="6.0"></attvalue>
</attvalues>
</edge>
<edge id="221" source="70" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="222" source="70" target="24">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="218" source="70" target="25" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="223" source="70" target="27">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="224" source="70" target="41">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="225" source="70" target="58">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="220" source="70" target="68" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="219" source="70" target="69" weight="4.0">
<attvalues>
<attvalue for="Strength" value="4.0"></attvalue>
</attvalues>
</edge>
<edge id="230" source="71" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="233" source="71" target="25">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="226" source="71" target="27">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="232" source="71" target="41">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge source="71" target="48">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="228" source="71" target="68" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="227" source="71" target="69" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="229" source="71" target="70" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="236" source="72" target="11">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="234" source="72" target="26" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="235" source="72" target="27">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="237" source="73" target="48" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="238" source="74" target="48" weight="2.0">
<attvalues>
<attvalue for="Strength" value="2.0"></attvalue>
</attvalues>
</edge>
<edge id="239" source="74" target="73" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="242" source="75" target="25" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="244" source="75" target="41">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge source="75" target="48">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="241" source="75" target="68" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="240" source="75" target="69" weight="3.0">
<attvalues>
<attvalue for="Strength" value="3.0"></attvalue>
</attvalues>
</edge>
<edge id="245" source="75" target="70">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="246" source="75" target="71">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="252" source="76" target="48">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="253" source="76" target="58">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="251" source="76" target="62">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="250" source="76" target="63">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="247" source="76" target="64">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="248" source="76" target="65">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
<edge id="249" source="76" target="66">
<attvalues>
<attvalue for="Strength" value="1.0"></attvalue>
</attvalues>
</edge>
</edges>
</graph>
</gexf>
;(function(undefined) {
'use strict';
/**
* GEXF Parser
* ============
*
* Author: PLIQUE Guillaume (Yomguithereal)
* URL: https://github.com/Yomguithereal/gexf-parser
* Version: 1.0
*/
/**
* Helper Namespace
* -----------------
*
* A useful batch of function dealing with DOM operations and types.
*/
var _helpers = {
nodeListToArray: function(nodeList) {
// Return array
var children = [];
// Iterating
for (var i = 0, len = nodeList.length; i < len; ++i) {
if (nodeList[i].nodeName !== '#text')
children.push(nodeList[i]);
}
return children;
},
nodeListEach: function(nodeList, func) {
// Iterating
for (var i = 0, len = nodeList.length; i < len; ++i) {
if (nodeList[i].nodeName !== '#text')
func(nodeList[i]);
}
},
nodeListToHash: function(nodeList, filter) {
// Return object
var children = {};
// Iterating
for (var i = 0; i < nodeList.length; i++) {
if (nodeList[i].nodeName !== '#text') {
var prop = filter(nodeList[i]);
children[prop.key] = prop.value;
}
}
return children;
},
namedNodeMapToObject: function(nodeMap) {
// Return object
var attributes = {};
// Iterating
for (var i = 0; i < nodeMap.length; i++) {
attributes[nodeMap[i].name] = nodeMap[i].value;
}
return attributes;
},
getFirstElementByTagNS: function(node, ns, tag) {
var el = node.getElementsByTagName(ns + ':' + tag)[0];
if (!el)
el = node.getElementsByTagNameNS(ns, tag)[0];
if (!el)
el = node.getElementsByTagName(tag)[0];
return el;
},
getAttributeNS: function(node, ns, attribute) {
var attr_value = node.getAttribute(ns + ':' + attribute);
if (attr_value === undefined)
attr_value = node.getAttributeNS(ns, attribute);
if (attr_value === undefined)
attr_value = node.getAttribute(attribute);
return attr_value;
},
enforceType: function(type, value) {
switch (type) {
case 'boolean':
value = (value === 'true');
break;
case 'integer':
case 'long':
case 'float':
case 'double':
value = +value;
break;
}
return value;
},
getRGB: function(values) {
return (values[3]) ?
'rgba(' + values.join(',') + ')' :
'rgb(' + values.slice(0, -1).join(',') + ')';
}
};
/**
* Parser Core Functions
* ----------------------
*
* The XML parser's functions themselves.
*/
/**
* Node structure.
* A function returning an object guarded with default value.
*
* @param {object} properties The node properties.
* @return {object} The guarded node object.
*/
function Node(properties) {
// Possible Properties
return {
id: properties.id,
label: properties.label,
attributes: properties.attributes || {},
viz: properties.viz || {}
};
}
/**
* Edge structure.
* A function returning an object guarded with default value.
*
* @param {object} properties The edge properties.
* @return {object} The guarded edge object.
*/
function Edge(properties) {
// Possible Properties
return {
id: properties.id,
type: properties.type || 'undirected',
label: properties.label || '',
source: properties.source,
target: properties.target,
weight: +properties.weight || 1.0,
viz: properties.viz || {}
};
}
/**
* Graph parser.
* This structure parse a gexf string and return an object containing the
* parsed graph.
*
* @param {string} xml The xml string of the gexf file to parse.
* @return {object} The parsed graph.
*/
function Graph(xml) {
var _xml = {};
// Basic Properties
//------------------
_xml.els = {
root: xml.getElementsByTagName('gexf')[0],
graph: xml.getElementsByTagName('graph')[0],
meta: xml.getElementsByTagName('meta')[0],
model: xml.getElementsByTagName('attribute'),
nodes: xml.getElementsByTagName('node'),
edges: xml.getElementsByTagName('edge')
};
_xml.hasViz = !!_helpers.getAttributeNS(_xml.els.root, 'xmlns', 'viz');
_xml.version = _xml.els.root.getAttribute('version') || '1.0';
_xml.mode = _xml.els.graph.getAttribute('mode') || 'static';
var edgeType = _xml.els.graph.getAttribute('defaultedgetype');
_xml.defaultEdgetype = edgeType || 'undirected';
// Parser Functions
//------------------
// Meta Data
function _metaData() {
var metas = {};
if (!_xml.els.meta)
return metas;
// Last modified date
metas.lastmodifieddate = _xml.els.meta.getAttribute('lastmodifieddate');
// Other information
_helpers.nodeListEach(_xml.els.meta.childNodes, function(child) {
metas[child.tagName.toLowerCase()] = child.textContent;
});
return metas;
}
// Model
function _model() {
var attributes = [];
// Iterating through attributes
_helpers.nodeListEach(_xml.els.model, function(attr) {
// Properties
var properties = {
id: attr.getAttribute('id') || attr.getAttribute('for'),
type: attr.getAttribute('type') || 'string',
title: attr.getAttribute('title') || ''
};
// Defaults
var default_el = _helpers.nodeListToArray(attr.childNodes);
if (default_el.length > 0)
properties.defaultValue = default_el[0].textContent;
// Creating attribute
attributes.push(properties);
});
return attributes;
}
// Nodes
function _nodes(model) {
var nodes = [];
// Iteration through nodes
_helpers.nodeListEach(_xml.els.nodes, function(n) {
// Basic properties
var properties = {
id: n.getAttribute('id'),
label: n.getAttribute('label') || ''
};
// Retrieving data from nodes if any
if (model.length > 0)
properties.attributes = _nodeData(model, n);
// Retrieving viz information
if (_xml.hasViz)
properties.viz = _nodeViz(n);
// Pushing node
nodes.push(Node(properties));
});
return nodes;
}
// Data from nodes
function _nodeData(model, node) {
var data = {};
var attvalues_els = node.getElementsByTagName('attvalue');
// Getting Node Indicated Attributes
var ah = _helpers.nodeListToHash(attvalues_els, function(el) {
var attributes = _helpers.namedNodeMapToObject(el.attributes);
var key = attributes.id || attributes['for'];
// Returning object
return {key: key, value: attributes.value};
});
// Iterating through model
model.map(function(a) {
// Default value?
var att_title = a.title.toLowerCase();
data[att_title] = !(a.id in ah) && 'defaultValue' in a ?
_helpers.enforceType(a.type, a.defaultValue) :
_helpers.enforceType(a.type, ah[a.id]);
});
return data;
}
// Viz information from nodes
function _nodeViz(node) {
var viz = {};
// Color
var color_el = _helpers.getFirstElementByTagNS(node, 'viz', 'color');
if (color_el) {
var color = ['r', 'g', 'b', 'a'].map(function(c) {
return color_el.getAttribute(c);
});
viz.color = _helpers.getRGB(color);
}
// Position
var pos_el = _helpers.getFirstElementByTagNS(node, 'viz', 'position');
if (pos_el) {
viz.position = {};
['x', 'y', 'z'].map(function(p) {
viz.position[p] = +pos_el.getAttribute(p);
});
}
// Size
var size_el = _helpers.getFirstElementByTagNS(node, 'viz', 'size');
if (size_el)
viz.size = +size_el.getAttribute('value');
// Shape
var shape_el = _helpers.getFirstElementByTagNS(node, 'viz', 'shape');
if (shape_el)
viz.shape = shape_el.getAttribute('value');
return viz;
}
// Edges
function _edges(default_type) {
var edges = [];
// Iteration through edges
_helpers.nodeListEach(_xml.els.edges, function(e) {
// Creating the edge
var properties = _helpers.namedNodeMapToObject(e.attributes);
if (!('type' in properties)) {
properties.type = default_type;
}
// Retrieving viz information
if (_xml.hasViz)
properties.viz = _edgeViz(e);
edges.push(Edge(properties));
});
return edges;
}
// Viz information from edges
function _edgeViz(edge) {
var viz = {};
// Color
var color_el = _helpers.getFirstElementByTagNS(edge, 'viz', 'color');
if (color_el) {
var color = ['r', 'g', 'b', 'a'].map(function(c) {
return color_el.getAttribute(c);
});
viz.color = _helpers.getRGB(color);
}
// Shape
var shape_el = _helpers.getFirstElementByTagNS(edge, 'viz', 'shape');
if (shape_el)
viz.shape = shape_el.getAttribute('value');
// Thickness
var thick_el = _helpers.getFirstElementByTagNS(edge, 'viz', 'thickness');
if (thick_el)
viz.thickness = +thick_el.getAttribute('value');
return viz;
}
// Returning the Graph
//---------------------
_xml.model = _model();
return {
version: _xml.version,
mode: _xml.mode,
defaultEdgeType: _xml.defaultEdgetype,
meta: _metaData(),
model: _xml.model,
nodes: _nodes(_xml.model),
edges: _edges(_xml.defaultEdgetype)
};
}
/**
* Public API
* -----------
*
* User-accessible functions.
*/
// Fetching GEXF with XHR
function fetch(gexf_url, callback) {
var xhr = (function() {
if (window.XMLHttpRequest)
return new XMLHttpRequest();
var names,
i;
if (window.ActiveXObject) {
names = [
'Msxml2.XMLHTTP.6.0',
'Msxml2.XMLHTTP.3.0',
'Msxml2.XMLHTTP',
'Microsoft.XMLHTTP'
];
for (i in names)
try {
return new ActiveXObject(names[i]);
} catch (e) {}
}
return null;
})();
if (!xhr)
throw 'XMLHttpRequest not supported, cannot load the file.';
// Async?
var async = (typeof callback === 'function'),
getResult;
// If we can't override MIME type, we are on IE 9
// We'll be parsing the response string then.
if (xhr.overrideMimeType) {
xhr.overrideMimeType('text/xml');
getResult = function(r) {
return r.responseXML;
};
}
else {
getResult = function(r) {
var p = new DOMParser();
return p.parseFromString(r.responseText, 'application/xml');
};
}
xhr.open('GET', gexf_url, async);
if (async)
xhr.onreadystatechange = function() {
if (xhr.readyState === 4)
callback(getResult(xhr));
};
xhr.send();
return (async) ? xhr : getResult(xhr);
}
// Parsing the GEXF File
function parse(gexf) {
return Graph(gexf);
}
// Fetch and parse the GEXF File
function fetchAndParse(gexf_url, callback) {
if (typeof callback === 'function') {
return fetch(gexf_url, function(gexf) {
callback(Graph(gexf));
});
} else
return Graph(fetch(gexf_url));
}
/**
* Exporting
* ----------
*/
this.GexfParser = {
// Functions
parse: parse,
fetch: fetchAndParse,
// Version
version: '0.1'
};
}).call(this);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment