diff --git a/domain_specific_language/graphical/examples-graphical/.project b/domain_specific_language/graphical/examples-graphical/.project
new file mode 100644
index 0000000000000000000000000000000000000000..c2a42168baabda9d0d78e2ca109b6df76cb922ba
--- /dev/null
+++ b/domain_specific_language/graphical/examples-graphical/.project
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>examples-graphical</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.sirius.nature.modelingproject</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+	</natures>
+</projectDescription>
diff --git a/domain_specific_language/graphical/examples-graphical/garagedoor.statemachine b/domain_specific_language/graphical/examples-graphical/garagedoor.statemachine
new file mode 100644
index 0000000000000000000000000000000000000000..7e44c6fd1941ac4b5bb590516b2ae01299c04221
--- /dev/null
+++ b/domain_specific_language/graphical/examples-graphical/garagedoor.statemachine
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<statemachine:StateMachine xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:statemachine="http://www.swt.org/most/statemachine" name="Garage Door">
+  <states name="Closed"/>
+  <states name="Open"/>
+  <states name="Opening"/>
+  <states name="Closing"/>
+  <finalstates name="final"/>
+  <initialstate name="initial"/>
+  <transitions from="//@initialstate" to="//@states.0"/>
+  <transitions from="//@states.0" to="//@states.2">
+    <trigger content="openDoor"/>
+    <action content="motor.upwards"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.1">
+    <guard content="stopper"/>
+    <action content="motor.stop"/>
+  </transitions>
+  <transitions from="//@states.1" to="//@states.3">
+    <trigger content="closeDoor"/>
+    <action content="motor.downwards"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.0">
+    <guard content="stopper"/>
+    <action content="motor.stop"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.2">
+    <trigger content="openDoor"/>
+    <action content="motor.upwards"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.3">
+    <trigger content="closeDoor"/>
+    <action content="motor.downwards"/>
+  </transitions>
+  <transitions from="//@states.0" to="//@finalstates.0">
+    <guard content="shutdown"/>
+  </transitions>
+  <transitions from="//@states.0" to="//@states.0">
+    <trigger content="closeDoor"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.3">
+    <trigger content="closeDoor"/>
+  </transitions>
+  <transitions from="//@states.1" to="//@states.1">
+    <trigger content="openDoor"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.2">
+    <trigger content="openDoor"/>
+  </transitions>
+</statemachine:StateMachine>
diff --git a/domain_specific_language/graphical/examples-graphical/representations.aird b/domain_specific_language/graphical/examples-graphical/representations.aird
new file mode 100644
index 0000000000000000000000000000000000000000..7e2a339f433a646c4db8985a2f3e0e16d8a636aa
--- /dev/null
+++ b/domain_specific_language/graphical/examples-graphical/representations.aird
@@ -0,0 +1,1345 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.3/notation" xmlns:statemachine="http://www.swt.org/most/statemachine" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style">
+  <viewpoint:DAnalysis uid="_5tKpMDi-Eeye8b2tisBcrw" selectedViews="_oLtYsGmrEe2AsN_q_tUe-Q" version="15.2.0.202303281325">
+    <semanticResources>garagedoor.statemachine</semanticResources>
+    <semanticResources>switch.statemachine</semanticResources>
+    <ownedViews xmi:type="viewpoint:DView" uid="_gqxQ0DjAEeyN-qrgse1YLA">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']"/>
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_ipQWwDjAEeyN-qrgse1YLA" name="garagedoor" repPath="#_io_4EDjAEeyN-qrgse1YLA" changeId="1718630191745">
+        <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']"/>
+        <target xmi:type="statemachine:StateMachine" href="garagedoor.statemachine#Garage Door"/>
+      </ownedRepresentationDescriptors>
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_2azhQDyHEeytPeWyzOo0bw" name="switch" repPath="#_2axsEDyHEeytPeWyzOo0bw" changeId="1718630191745">
+        <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']"/>
+        <target xmi:type="statemachine:StateMachine" href="switch.statemachine#Switch"/>
+      </ownedRepresentationDescriptors>
+    </ownedViews>
+    <ownedViews xmi:type="viewpoint:DView" uid="_oLtYsGmrEe2AsN_q_tUe-Q">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']"/>
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_ydkZYCysEe-4er9RFtOKtQ" name="garagedoor" repPath="#_ydRecCysEe-4er9RFtOKtQ" changeId="1718630934966">
+        <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']"/>
+        <target xmi:type="statemachine:StateMachine" href="garagedoor.statemachine#/"/>
+      </ownedRepresentationDescriptors>
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_lETcwCytEe-4er9RFtOKtQ" name="switch" repPath="#_lERnkCytEe-4er9RFtOKtQ" changeId="1718631032652">
+        <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']"/>
+        <target xmi:type="statemachine:StateMachine" href="switch.statemachine#Switch"/>
+      </ownedRepresentationDescriptors>
+    </ownedViews>
+  </viewpoint:DAnalysis>
+  <diagram:DSemanticDiagram uid="_io_4EDjAEeyN-qrgse1YLA">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_iprNgDjAEeyN-qrgse1YLA" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_iprNgTjAEeyN-qrgse1YLA" type="Sirius" element="_io_4EDjAEeyN-qrgse1YLA" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_lU7S0DjAEeyN-qrgse1YLA" type="2003" element="_yIYsUDjCEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_lU9IADjAEeyN-qrgse1YLA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_lU-WIDjAEeyN-qrgse1YLA" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_lU-WITjAEeyN-qrgse1YLA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_lU-WIjjAEeyN-qrgse1YLA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_lU7S0TjAEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lU7S0jjAEeyN-qrgse1YLA" x="319" y="276"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_lU-9MDjAEeyN-qrgse1YLA" type="2003" element="_yIZTYzjCEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_lU-9MzjAEeyN-qrgse1YLA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_lU-9NDjAEeyN-qrgse1YLA" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_lU-9NTjAEeyN-qrgse1YLA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_lU-9NjjAEeyN-qrgse1YLA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_lU-9MTjAEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lU-9MjjAEeyN-qrgse1YLA" x="864" y="276"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_lU_kQDjAEeyN-qrgse1YLA" type="2003" element="_yIZ6cjjCEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_lU_kQzjAEeyN-qrgse1YLA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_lU_kRDjAEeyN-qrgse1YLA" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_lU_kRTjAEeyN-qrgse1YLA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_lU_kRjjAEeyN-qrgse1YLA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_lU_kQTjAEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lU_kQjjAEeyN-qrgse1YLA" x="583" y="162"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_lU_kRzjAEeyN-qrgse1YLA" type="2003" element="_yIZ6dzjCEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_lVALUDjAEeyN-qrgse1YLA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_lVALUTjAEeyN-qrgse1YLA" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_lVALUjjAEeyN-qrgse1YLA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_lVALUzjAEeyN-qrgse1YLA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_lU_kSDjAEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lU_kSTjAEeyN-qrgse1YLA" x="588" y="378"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_wfK9sDjAEeyN-qrgse1YLA" type="2001" element="_werOcDjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_wfLkwDjAEeyN-qrgse1YLA" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_wfLkwTjAEeyN-qrgse1YLA" x="-4" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_0QyOIDjAEeyN-qrgse1YLA" type="3002" element="_0QWwUDjAEeyN-qrgse1YLA">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_0QyOITjAEeyN-qrgse1YLA" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0QyOIjjAEeyN-qrgse1YLA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_wfK9sTjAEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wfK9sjjAEeyN-qrgse1YLA" x="312" y="42" width="40" height="40"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_hsv1wDjBEeyN-qrgse1YLA" type="2001" element="_hsCEETjBEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_hsv1wzjBEeyN-qrgse1YLA" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_hsv1xDjBEeyN-qrgse1YLA" x="1" y="41"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_82fqQDjBEeyN-qrgse1YLA" type="3002" element="_82BJITjBEeyN-qrgse1YLA">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_82fqQTjBEeyN-qrgse1YLA" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_82fqQjjBEeyN-qrgse1YLA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_hsv1wTjBEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hsv1wjjBEeyN-qrgse1YLA" x="312" y="450" width="40" height="40"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_gzLxcDvrEeyeeflsfjx5ZA" type="2002" element="_gzKjWzvrEeyeeflsfjx5ZA">
+          <children xmi:type="notation:Node" xmi:id="_gzLxczvrEeyeeflsfjx5ZA" type="5006"/>
+          <children xmi:type="notation:Node" xmi:id="_gzLxdDvrEeyeeflsfjx5ZA" type="7001">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_gzLxdTvrEeyeeflsfjx5ZA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_gzLxdjvrEeyeeflsfjx5ZA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_gzLxcTvrEeyeeflsfjx5ZA" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gzLxcjvrEeyeeflsfjx5ZA" x="468" y="36"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_iprNgjjAEeyN-qrgse1YLA"/>
+        <edges xmi:type="notation:Edge" xmi:id="_WdvUwjjDEeyN-qrgse1YLA" type="4001" element="_WbLI8DjDEeyN-qrgse1YLA" source="_lU7S0DjAEeyN-qrgse1YLA" target="_lU_kQDjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_Wdv70DjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdv70TjDEeyN-qrgse1YLA" x="33" y="-17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wdv70jjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdv70zjDEeyN-qrgse1YLA" x="-12"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wdv71DjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdv71TjDEeyN-qrgse1YLA" x="8" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_WdvUwzjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_WdvUxDjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_WdvUxTjDEeyN-qrgse1YLA" points="[-1, -25, -274, 89]$[-1, -114, -274, 0]$[232, -114, -41, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wdv71jjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wdv71zjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_WdyYHjjDEeyN-qrgse1YLA" type="4001" element="_WbMXEjjDEeyN-qrgse1YLA" source="_lU7S0DjAEeyN-qrgse1YLA" target="_hsv1wDjBEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_Wdy_IDjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdy_ITjDEeyN-qrgse1YLA" x="4" y="52"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wdy_IjjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdy_IzjDEeyN-qrgse1YLA" x="13"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wdy_JDjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdy_JTjDEeyN-qrgse1YLA" x="15"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_WdyYHzjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_WdyYIDjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_WdyYITjDEeyN-qrgse1YLA" points="[-20, 26, -1, -143]$[-20, 149, -1, -20]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wdy_JjjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wdy_JzjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_Wdy_KDjDEeyN-qrgse1YLA" type="4001" element="_WbMXFzjDEeyN-qrgse1YLA" source="_lU7S0DjAEeyN-qrgse1YLA" target="_lU7S0DjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_Wdy_LDjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdy_LTjDEeyN-qrgse1YLA" x="28" y="24"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wdy_LjjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdy_LzjDEeyN-qrgse1YLA" x="-1" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wdy_MDjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdy_MTjDEeyN-qrgse1YLA" x="1" y="20"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_Wdy_KTjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_Wdy_KjjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Wdy_KzjDEeyN-qrgse1YLA" points="[-32, 11, -32, 11]$[-123, 11, -123, 11]$[-123, -13, -123, -13]$[-32, -13, -32, -13]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdzmMDjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdzmMTjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_WdoAADjDEeyN-qrgse1YLA" type="4001" element="_WbG3gDjDEeyN-qrgse1YLA" source="_wfK9sDjAEeyN-qrgse1YLA" target="_lU7S0DjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_WdpOIDjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdpOITjDEeyN-qrgse1YLA" x="-15" y="23"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdpOIjjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdpOIzjDEeyN-qrgse1YLA" x="9"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdpOJDjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdpOJTjDEeyN-qrgse1YLA" x="-41"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_WdoAATjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_WdoAAjjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_WdoAAzjDEeyN-qrgse1YLA" points="[-2, 20, -21, -219]$[-2, 214, -21, -25]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdvUwDjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdvUwTjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_WdxJ8jjDEeyN-qrgse1YLA" type="4001" element="_WbLwAjjDEeyN-qrgse1YLA" source="_lU_kRzjAEeyN-qrgse1YLA" target="_lU7S0DjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_WdxJ9jjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdxJ9zjDEeyN-qrgse1YLA" x="-47" y="15"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdxJ-DjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdxxADjDEeyN-qrgse1YLA" x="-11" y="11"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdxxATjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdxxAjjDEeyN-qrgse1YLA" x="-41" y="86"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_WdxJ8zjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_WdxJ9DjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_WdxJ9TjDEeyN-qrgse1YLA" points="[-35, 26, 237, 128]$[-273, 29, -1, 131]$[-273, -76, -1, 26]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdxxAzjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdxxBDjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_Wdwi6DjDEeyN-qrgse1YLA" type="4001" element="_WbLI-jjDEeyN-qrgse1YLA" source="_lU-9MDjAEeyN-qrgse1YLA" target="_lU_kRzjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_Wdwi7DjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdwi7TjDEeyN-qrgse1YLA" x="42" y="16"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wdwi7jjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdwi7zjDEeyN-qrgse1YLA" x="25" y="91"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wdwi8DjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdwi8TjDEeyN-qrgse1YLA" x="9" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_Wdwi6TjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_Wdwi6jjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Wdwi6zjDEeyN-qrgse1YLA" points="[-1, 26, 266, -76]$[-1, 107, 266, 5]$[-231, 107, 36, 5]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdxJ8DjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdxJ8TjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_WdzmPjjDEeyN-qrgse1YLA" type="4001" element="_WbMXITjDEeyN-qrgse1YLA" source="_lU-9MDjAEeyN-qrgse1YLA" target="_lU-9MDjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_WdzmQjjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdzmQzjDEeyN-qrgse1YLA" x="-28" y="12"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdzmRDjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdzmRTjDEeyN-qrgse1YLA" x="19" y="20"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdzmRjjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdzmRzjDEeyN-qrgse1YLA" x="2" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_WdzmPzjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_WdzmQDjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_WdzmQTjDEeyN-qrgse1YLA" points="[26, -13, 26, -13]$[88, -13, 88, -13]$[88, 11, 88, 11]$[26, 11, 26, 11]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdzmSDjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdzmSTjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_Wdv72DjDEeyN-qrgse1YLA" type="4001" element="_WbLI9TjDEeyN-qrgse1YLA" source="_lU_kQDjAEeyN-qrgse1YLA" target="_lU-9MDjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_Wdwi4DjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdwi4TjDEeyN-qrgse1YLA" x="-52" y="-17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wdwi4jjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdwi4zjDEeyN-qrgse1YLA" x="-10" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wdwi5DjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdwi5TjDEeyN-qrgse1YLA" x="18"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_Wdv72TjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_Wdv72jjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Wdv72zjDEeyN-qrgse1YLA" points="[41, 0, -225, -114]$[267, 0, 1, -114]$[267, 89, 1, -25]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wdwi5jjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wdwi5zjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_WdyYEjjDEeyN-qrgse1YLA" type="4001" element="_WbLwDDjDEeyN-qrgse1YLA" source="_lU_kQDjAEeyN-qrgse1YLA" target="_lU_kRzjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_WdyYFjjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdyYFzjDEeyN-qrgse1YLA" x="6" y="-95"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdyYGDjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdyYGTjDEeyN-qrgse1YLA" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdyYGjjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdyYGzjDEeyN-qrgse1YLA" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_WdyYEzjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_WdyYFDjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_WdyYFTjDEeyN-qrgse1YLA" points="[12, 26, 13, -190]$[12, 191, 13, -25]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdyYHDjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdyYHTjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_Wd0NQDjDEeyN-qrgse1YLA" type="4001" element="_WbM-JDjDEeyN-qrgse1YLA" source="_lU_kQDjAEeyN-qrgse1YLA" target="_lU_kQDjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_Wd0NRDjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wd0NRTjDEeyN-qrgse1YLA" x="1" y="22"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wd0NRjjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wd0NRzjDEeyN-qrgse1YLA" x="8"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_Wd0NSDjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wd0NSTjDEeyN-qrgse1YLA" x="-3" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_Wd0NQTjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_Wd0NQjjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Wd0NQzjDEeyN-qrgse1YLA" points="[24, -25, 24, -25]$[24, -55, 24, -55]$[-24, -55, -24, -55]$[-24, -25, -24, -25]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wd0NSjjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wd0NSzjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_WdxxBTjDEeyN-qrgse1YLA" type="4001" element="_WbLwBzjDEeyN-qrgse1YLA" source="_lU_kRzjAEeyN-qrgse1YLA" target="_lU_kQDjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_WdxxCTjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdxxCjjDEeyN-qrgse1YLA" x="-5" y="-86"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdxxCzjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdxxDDjDEeyN-qrgse1YLA" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdxxDTjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdxxDjjDEeyN-qrgse1YLA" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_WdxxBjjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_WdxxBzjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_WdxxCDjDEeyN-qrgse1YLA" points="[0, -25, -1, 191]$[0, -190, -1, 26]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdyYEDjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdyYETjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_WdzmMjjDEeyN-qrgse1YLA" type="4001" element="_WbMXHDjDEeyN-qrgse1YLA" source="_lU_kRzjAEeyN-qrgse1YLA" target="_lU_kRzjAEeyN-qrgse1YLA">
+          <children xmi:type="notation:Node" xmi:id="_WdzmNjjDEeyN-qrgse1YLA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdzmNzjDEeyN-qrgse1YLA" x="4" y="-19"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdzmODjDEeyN-qrgse1YLA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdzmOTjDEeyN-qrgse1YLA" x="2"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_WdzmOjjDEeyN-qrgse1YLA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WdzmOzjDEeyN-qrgse1YLA" x="-5" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_WdzmMzjDEeyN-qrgse1YLA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_WdzmNDjDEeyN-qrgse1YLA" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_WdzmNTjDEeyN-qrgse1YLA" points="[25, 26, 25, 26]$[25, 59, 25, 59]$[-17, 59, -17, 59]$[-17, 26, -17, 26]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdzmPDjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WdzmPTjDEeyN-qrgse1YLA" id="(0.5,0.5)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_ip86UDjAEeyN-qrgse1YLA" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_ip86UTjAEeyN-qrgse1YLA"/>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_werOcDjAEeyN-qrgse1YLA" name="initial" outgoingEdges="_WbG3gDjDEeyN-qrgse1YLA" width="4" height="4">
+      <target xmi:type="statemachine:InitialState" href="garagedoor.statemachine#initial"/>
+      <semanticElements xmi:type="statemachine:InitialState" href="garagedoor.statemachine#initial"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_0QWwUDjAEeyN-qrgse1YLA" labelSize="12" showIcon="false" backgroundColor="0,0,0">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_hsCEETjBEeyN-qrgse1YLA" name="final" incomingEdges="_WbMXEjjDEeyN-qrgse1YLA" width="4" height="4">
+      <target xmi:type="statemachine:FinalState" href="garagedoor.statemachine#final"/>
+      <semanticElements xmi:type="statemachine:FinalState" href="garagedoor.statemachine#final"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_82BJITjBEeyN-qrgse1YLA" labelSize="12" showIcon="false" borderSize="10" borderSizeComputationExpression="10" backgroundColor="255,255,255">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Final%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Final%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yIYsUDjCEeyN-qrgse1YLA" name="Closed" outgoingEdges="_WbLI8DjDEeyN-qrgse1YLA _WbMXEjjDEeyN-qrgse1YLA _WbMXFzjDEeyN-qrgse1YLA" incomingEdges="_WbG3gDjDEeyN-qrgse1YLA _WbLwAjjDEeyN-qrgse1YLA _WbMXFzjDEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Closed"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Closed"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yIYsUTjCEeyN-qrgse1YLA" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yIZTYzjCEeyN-qrgse1YLA" name="Open" outgoingEdges="_WbLI-jjDEeyN-qrgse1YLA _WbMXITjDEeyN-qrgse1YLA" incomingEdges="_WbLI9TjDEeyN-qrgse1YLA _WbMXITjDEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Open"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Open"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yIZTZDjCEeyN-qrgse1YLA" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yIZ6cjjCEeyN-qrgse1YLA" name="Opening" outgoingEdges="_WbLI9TjDEeyN-qrgse1YLA _WbLwDDjDEeyN-qrgse1YLA _WbM-JDjDEeyN-qrgse1YLA" incomingEdges="_WbLI8DjDEeyN-qrgse1YLA _WbLwBzjDEeyN-qrgse1YLA _WbM-JDjDEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Opening"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Opening"/>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yIZ6czjCEeyN-qrgse1YLA" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yIZ6dzjCEeyN-qrgse1YLA" name="Closing" outgoingEdges="_WbLwAjjDEeyN-qrgse1YLA _WbLwBzjDEeyN-qrgse1YLA _WbMXHDjDEeyN-qrgse1YLA" incomingEdges="_WbLI-jjDEeyN-qrgse1YLA _WbLwDDjDEeyN-qrgse1YLA _WbMXHDjDEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Closing"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Closing"/>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yIahgDjCEeyN-qrgse1YLA" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbG3gDjDEeyN-qrgse1YLA" sourceNode="_werOcDjAEeyN-qrgse1YLA" targetNode="_yIYsUDjCEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.0"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbKh4DjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbKh4TjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbLI8DjDEeyN-qrgse1YLA" name="openDoor / motor.upwards" sourceNode="_yIYsUDjCEeyN-qrgse1YLA" targetNode="_yIZ6cjjCEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.1"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.1"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbLI8TjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbLI8jjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbLI9TjDEeyN-qrgse1YLA" name=" [stopper] / motor.stop" sourceNode="_yIZ6cjjCEeyN-qrgse1YLA" targetNode="_yIZTYzjCEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.2"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.2"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbLI9jjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbLI9zjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbLI-jjDEeyN-qrgse1YLA" name="closeDoor / motor.downwards" sourceNode="_yIZTYzjCEeyN-qrgse1YLA" targetNode="_yIZ6dzjCEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.3"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.3"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbLI-zjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbLI_DjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbLwAjjDEeyN-qrgse1YLA" name=" [stopper] / motor.stop" sourceNode="_yIZ6dzjCEeyN-qrgse1YLA" targetNode="_yIYsUDjCEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.4"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.4"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbLwAzjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbLwBDjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbLwBzjDEeyN-qrgse1YLA" name="openDoor / motor.upwards" sourceNode="_yIZ6dzjCEeyN-qrgse1YLA" targetNode="_yIZ6cjjCEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.5"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.5"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbLwCDjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbLwCTjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbLwDDjDEeyN-qrgse1YLA" name="closeDoor / motor.downwards" sourceNode="_yIZ6cjjCEeyN-qrgse1YLA" targetNode="_yIZ6dzjCEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.6"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.6"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbLwDTjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbLwDjjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbMXEjjDEeyN-qrgse1YLA" name=" [shutdown]" sourceNode="_yIYsUDjCEeyN-qrgse1YLA" targetNode="_hsCEETjBEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.7"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.7"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbMXEzjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbMXFDjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbMXFzjDEeyN-qrgse1YLA" name="closeDoor" sourceNode="_yIYsUDjCEeyN-qrgse1YLA" targetNode="_yIYsUDjCEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.8"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.8"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbMXGDjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbMXGTjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbMXHDjDEeyN-qrgse1YLA" name="closeDoor" sourceNode="_yIZ6dzjCEeyN-qrgse1YLA" targetNode="_yIZ6dzjCEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.9"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.9"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbMXHTjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbMXHjjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbMXITjDEeyN-qrgse1YLA" name="openDoor" sourceNode="_yIZTYzjCEeyN-qrgse1YLA" targetNode="_yIZTYzjCEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.10"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.10"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbM-IDjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbM-ITjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WbM-JDjDEeyN-qrgse1YLA" name="openDoor" sourceNode="_yIZ6cjjCEeyN-qrgse1YLA" targetNode="_yIZ6cjjCEeyN-qrgse1YLA">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.11"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.11"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_WbM-JTjDEeyN-qrgse1YLA" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_WbM-JjjDEeyN-qrgse1YLA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeContainer" uid="_gzKjWzvrEeyeeflsfjx5ZA" name="State Machine: Garage Door" height="4">
+      <target xmi:type="statemachine:StateMachine" href="garagedoor.statemachine#Garage Door"/>
+      <semanticElements xmi:type="statemachine:StateMachine" href="garagedoor.statemachine#Garage Door"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_gzKjXDvrEeyeeflsfjx5ZA" labelSize="12" showIcon="false" borderColor="255,255,255" backgroundStyle="Liquid" foregroundColor="255,255,255">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']"/>
+    </ownedDiagramElements>
+    <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']"/>
+    <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_ipJCADjAEeyN-qrgse1YLA"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer"/>
+    <target xmi:type="statemachine:StateMachine" href="garagedoor.statemachine#Garage Door"/>
+  </diagram:DSemanticDiagram>
+  <diagram:DSemanticDiagram uid="_2axsEDyHEeytPeWyzOo0bw">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_2a5A0DyHEeytPeWyzOo0bw" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_2a5A0TyHEeytPeWyzOo0bw" type="Sirius" element="_2axsEDyHEeytPeWyzOo0bw" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_2a_HcDyHEeytPeWyzOo0bw" type="2001" element="_2a5n4DyHEeytPeWyzOo0bw">
+          <children xmi:type="notation:Node" xmi:id="_2bA8oDyHEeytPeWyzOo0bw" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_2bA8oTyHEeytPeWyzOo0bw" x="-4" y="41"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_2bJfgzyHEeytPeWyzOo0bw" type="3002" element="_2a6O8DyHEeytPeWyzOo0bw">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_2bJfhDyHEeytPeWyzOo0bw" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bJfhTyHEeytPeWyzOo0bw"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_2a_HcTyHEeytPeWyzOo0bw" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2a_HcjyHEeytPeWyzOo0bw" x="306" y="360" width="40" height="40"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_2bGcMDyHEeytPeWyzOo0bw" type="2003" element="_2a62ATyHEeytPeWyzOo0bw">
+          <children xmi:type="notation:Node" xmi:id="_2bHDQDyHEeytPeWyzOo0bw" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_2bHqUDyHEeytPeWyzOo0bw" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_2bKGkDyHEeytPeWyzOo0bw" type="3010" element="_2a7dFDyHEeytPeWyzOo0bw">
+              <styles xmi:type="notation:FontStyle" xmi:id="_2bKGkTyHEeytPeWyzOo0bw" fontName="Segoe UI" fontHeight="12"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_2bKGkjyHEeytPeWyzOo0bw"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_2bHqUTyHEeytPeWyzOo0bw"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_2bHqUjyHEeytPeWyzOo0bw"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_2bGcMTyHEeytPeWyzOo0bw" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bGcMjyHEeytPeWyzOo0bw" x="432" y="156"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_2bHqUzyHEeytPeWyzOo0bw" type="2003" element="_2a7dETyHEeytPeWyzOo0bw">
+          <children xmi:type="notation:Node" xmi:id="_2bIRYDyHEeytPeWyzOo0bw" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_2bIRYTyHEeytPeWyzOo0bw" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_2bKtoDyHEeytPeWyzOo0bw" type="3010" element="_2a8EIDyHEeytPeWyzOo0bw">
+              <styles xmi:type="notation:FontStyle" xmi:id="_2bKtoTyHEeytPeWyzOo0bw" fontName="Segoe UI" fontHeight="12"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_2bKtojyHEeytPeWyzOo0bw"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_2bIRYjyHEeytPeWyzOo0bw"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_2bIRYzyHEeytPeWyzOo0bw"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_2bHqVDyHEeytPeWyzOo0bw" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bHqVTyHEeytPeWyzOo0bw" x="438" y="342"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_2bI4cDyHEeytPeWyzOo0bw" type="2002" element="_2a8EIjyHEeytPeWyzOo0bw">
+          <children xmi:type="notation:Node" xmi:id="_2bI4czyHEeytPeWyzOo0bw" type="5006"/>
+          <children xmi:type="notation:Node" xmi:id="_2bJfgDyHEeytPeWyzOo0bw" type="7001">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_2bJfgTyHEeytPeWyzOo0bw"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_2bJfgjyHEeytPeWyzOo0bw"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_2bI4cTyHEeytPeWyzOo0bw" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bI4cjyHEeytPeWyzOo0bw" x="423" y="72"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_2a5A0jyHEeytPeWyzOo0bw"/>
+        <edges xmi:type="notation:Edge" xmi:id="_2bKtozyHEeytPeWyzOo0bw" type="4001" element="_2a8rMDyHEeytPeWyzOo0bw" source="_2a_HcDyHEeytPeWyzOo0bw" target="_2bHqUzyHEeytPeWyzOo0bw">
+          <children xmi:type="notation:Node" xmi:id="_2bKtpzyHEeytPeWyzOo0bw" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bKtqDyHEeytPeWyzOo0bw" x="-43" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_2bLUsDyHEeytPeWyzOo0bw" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bLUsTyHEeytPeWyzOo0bw" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_2bLUsjyHEeytPeWyzOo0bw" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bLUszyHEeytPeWyzOo0bw" x="-45" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_2bKtpDyHEeytPeWyzOo0bw" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_2bKtpTyHEeytPeWyzOo0bw" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2bKtpjyHEeytPeWyzOo0bw" points="[20, 20, -177, -31]$[112, 20, -85, -31]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2bNJ4DyHEeytPeWyzOo0bw" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2bNJ4TyHEeytPeWyzOo0bw" id="(0.5059523809523809,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_2bNw_DyHEeytPeWyzOo0bw" type="4001" element="_2a9SQjyHEeytPeWyzOo0bw" source="_2bGcMDyHEeytPeWyzOo0bw" target="_2bHqUzyHEeytPeWyzOo0bw">
+          <children xmi:type="notation:Node" xmi:id="_2bOYADyHEeytPeWyzOo0bw" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bOYATyHEeytPeWyzOo0bw" x="-11" y="21"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_2bOYAjyHEeytPeWyzOo0bw" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bOYAzyHEeytPeWyzOo0bw" x="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_2bOYBDyHEeytPeWyzOo0bw" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bOYBTyHEeytPeWyzOo0bw" x="-29"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_2bNw_TyHEeytPeWyzOo0bw" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_2bNw_jyHEeytPeWyzOo0bw" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2bNw_zyHEeytPeWyzOo0bw" points="[-43, 69, -37, -186]$[-43, 186, -37, -69]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2bOYBjyHEeytPeWyzOo0bw" id="(0.5052083333333334,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2bOYBzyHEeytPeWyzOo0bw" id="(0.5059523809523809,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_2bNw8DyHEeytPeWyzOo0bw" type="4001" element="_2a8rNTyHEeytPeWyzOo0bw" source="_2bHqUzyHEeytPeWyzOo0bw" target="_2bGcMDyHEeytPeWyzOo0bw">
+          <children xmi:type="notation:Node" xmi:id="_2bNw9DyHEeytPeWyzOo0bw" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bNw9TyHEeytPeWyzOo0bw" x="12" y="21"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_2bNw9jyHEeytPeWyzOo0bw" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bNw9zyHEeytPeWyzOo0bw" x="28"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_2bNw-DyHEeytPeWyzOo0bw" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2bNw-TyHEeytPeWyzOo0bw" x="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_2bNw8TyHEeytPeWyzOo0bw" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_2bNw8jyHEeytPeWyzOo0bw" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2bNw8zyHEeytPeWyzOo0bw" points="[34, -69, 28, 186]$[34, -186, 28, 69]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2bNw-jyHEeytPeWyzOo0bw" id="(0.5059523809523809,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2bNw-zyHEeytPeWyzOo0bw" id="(0.5052083333333334,0.0)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_2a9SRzyHEeytPeWyzOo0bw" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_2a9SSDyHEeytPeWyzOo0bw"/>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_2a5n4DyHEeytPeWyzOo0bw" name="initial" outgoingEdges="_2a8rMDyHEeytPeWyzOo0bw" width="4" height="4">
+      <target xmi:type="statemachine:InitialState" href="switch.statemachine#initial"/>
+      <semanticElements xmi:type="statemachine:InitialState" href="switch.statemachine#initial"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_2a6O8DyHEeytPeWyzOo0bw" labelSize="12" showIcon="false" backgroundColor="0,0,0">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_2a62ATyHEeytPeWyzOo0bw" name="on" outgoingEdges="_2a9SQjyHEeytPeWyzOo0bw" incomingEdges="_2a8rNTyHEeytPeWyzOo0bw">
+      <target xmi:type="statemachine:NormalState" href="switch.statemachine#on"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="switch.statemachine#on"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_2a62AjyHEeytPeWyzOo0bw" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_2a7dFDyHEeytPeWyzOo0bw" name="do/     do_something">
+        <target xmi:type="statemachine:Action" href="switch.statemachine#//@states.0/@do_"/>
+        <semanticElements xmi:type="statemachine:Action" href="switch.statemachine#//@states.0/@do_"/>
+        <ownedStyle xmi:type="diagram:Square" uid="_2a7dFTyHEeytPeWyzOo0bw" labelSize="12" showIcon="false" labelAlignment="LEFT" labelPosition="node" color="255,245,181">
+          <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_2a7dETyHEeytPeWyzOo0bw" name="off" outgoingEdges="_2a8rNTyHEeytPeWyzOo0bw" incomingEdges="_2a8rMDyHEeytPeWyzOo0bw _2a9SQjyHEeytPeWyzOo0bw">
+      <target xmi:type="statemachine:NormalState" href="switch.statemachine#off"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="switch.statemachine#off"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_2a7dEjyHEeytPeWyzOo0bw" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_2a8EIDyHEeytPeWyzOo0bw" name="do/     do_nothing">
+        <target xmi:type="statemachine:Action" href="switch.statemachine#//@states.1/@do_"/>
+        <semanticElements xmi:type="statemachine:Action" href="switch.statemachine#//@states.1/@do_"/>
+        <ownedStyle xmi:type="diagram:Square" uid="_2a8EITyHEeytPeWyzOo0bw" labelSize="12" showIcon="false" labelAlignment="LEFT" labelPosition="node" color="255,245,181">
+          <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeContainer" uid="_2a8EIjyHEeytPeWyzOo0bw" name="State Machine: Switch" height="4">
+      <target xmi:type="statemachine:StateMachine" href="switch.statemachine#Switch"/>
+      <semanticElements xmi:type="statemachine:StateMachine" href="switch.statemachine#Switch"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_2a8EIzyHEeytPeWyzOo0bw" labelSize="12" showIcon="false" borderColor="255,255,255" backgroundStyle="Liquid" foregroundColor="255,255,255">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_2a8rMDyHEeytPeWyzOo0bw" sourceNode="_2a5n4DyHEeytPeWyzOo0bw" targetNode="_2a7dETyHEeytPeWyzOo0bw">
+      <target xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.0"/>
+      <semanticElements xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_2a8rMTyHEeytPeWyzOo0bw" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_2a8rMjyHEeytPeWyzOo0bw" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_2a8rNTyHEeytPeWyzOo0bw" name="flip" sourceNode="_2a7dETyHEeytPeWyzOo0bw" targetNode="_2a62ATyHEeytPeWyzOo0bw">
+      <target xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.1"/>
+      <semanticElements xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.1"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_2a8rNjyHEeytPeWyzOo0bw" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_2a8rNzyHEeytPeWyzOo0bw" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_2a9SQjyHEeytPeWyzOo0bw" name="flip" sourceNode="_2a62ATyHEeytPeWyzOo0bw" targetNode="_2a7dETyHEeytPeWyzOo0bw">
+      <target xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.2"/>
+      <semanticElements xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.2"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_2a9SQzyHEeytPeWyzOo0bw" targetArrow="InputFillClosedArrow" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_2a9SRDyHEeytPeWyzOo0bw" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']"/>
+    <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_2ayTIDyHEeytPeWyzOo0bw"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/resource/swt.most.statemachine.gDSL/description/gDSL.odesign#//@ownedViewpoints[name='DSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer"/>
+    <target xmi:type="statemachine:StateMachine" href="switch.statemachine#Switch"/>
+  </diagram:DSemanticDiagram>
+  <diagram:DSemanticDiagram uid="_ydRecCysEe-4er9RFtOKtQ">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_yd5JgCysEe-4er9RFtOKtQ" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_yd5wkCysEe-4er9RFtOKtQ" type="Sirius" element="_ydRecCysEe-4er9RFtOKtQ" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_ygS9QCysEe-4er9RFtOKtQ" type="2001" element="_yfV7ACysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_ygcuQCysEe-4er9RFtOKtQ" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_ygcuQSysEe-4er9RFtOKtQ" x="-14" y="-33"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_ygvpMCysEe-4er9RFtOKtQ" type="3002" element="_yfaMcCysEe-4er9RFtOKtQ">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_ygvpMSysEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ygvpMiysEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_ygS9QSysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ygS9QiysEe-4er9RFtOKtQ" x="49" y="224" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_ygntYCysEe-4er9RFtOKtQ" type="2001" element="_yfed4CysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_ygoUcCysEe-4er9RFtOKtQ" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_ygoUcSysEe-4er9RFtOKtQ" x="-8" y="-33"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_ygwQQCysEe-4er9RFtOKtQ" type="3002" element="_yffE8CysEe-4er9RFtOKtQ">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_ygwQQSysEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ygwQQiysEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_ygntYSysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ygntYiysEe-4er9RFtOKtQ" x="78" y="294" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_ygqJoCysEe-4er9RFtOKtQ" type="2003" element="_yffsACysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_ygqwsCysEe-4er9RFtOKtQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_ygrXwCysEe-4er9RFtOKtQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_ygrXwSysEe-4er9RFtOKtQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_ygrXwiysEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_ygqJoSysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ygqJoiysEe-4er9RFtOKtQ" x="196" y="343"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_ygr-0CysEe-4er9RFtOKtQ" type="2003" element="_yfg6ICysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_ygsl4CysEe-4er9RFtOKtQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_ygsl4SysEe-4er9RFtOKtQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_ygsl4iysEe-4er9RFtOKtQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_ygsl4yysEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_ygr-0SysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ygr-0iysEe-4er9RFtOKtQ" x="777" y="336"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_ygsl5CysEe-4er9RFtOKtQ" type="2003" element="_yfhhMSysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_ygtM8CysEe-4er9RFtOKtQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_ygtM8SysEe-4er9RFtOKtQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_ygtM8iysEe-4er9RFtOKtQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_ygtM8yysEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_ygsl5SysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ygsl5iysEe-4er9RFtOKtQ" x="441" y="161" width="150"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_ygtM9CysEe-4er9RFtOKtQ" type="2003" element="_yfivUSysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_ygtM9yysEe-4er9RFtOKtQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_ygt0ACysEe-4er9RFtOKtQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_ygt0ASysEe-4er9RFtOKtQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_ygt0AiysEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_ygtM9SysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ygtM9iysEe-4er9RFtOKtQ" x="448" y="539" width="150"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_ygt0AyysEe-4er9RFtOKtQ" type="2003" element="_yfkkgCysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_ygt0BiysEe-4er9RFtOKtQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_ygubECysEe-4er9RFtOKtQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_ygubESysEe-4er9RFtOKtQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_ygubEiysEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_ygt0BCysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="10" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ygt0BSysEe-4er9RFtOKtQ" x="21" y="54" width="311" height="40"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_yd5wkSysEe-4er9RFtOKtQ"/>
+        <edges xmi:type="notation:Edge" xmi:id="_yg9roCysEe-4er9RFtOKtQ" type="4001" element="_yfym8CysEe-4er9RFtOKtQ" source="_ygS9QCysEe-4er9RFtOKtQ" target="_ygqJoCysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yg-5wCysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yg-5wSysEe-4er9RFtOKtQ" x="-9" y="-87"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhAH4CysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhAH4SysEe-4er9RFtOKtQ" x="-18" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhAu8CysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhAu8SysEe-4er9RFtOKtQ" x="-99" y="-89"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yg9roSysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yg9roiysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yg9royysEe-4er9RFtOKtQ" points="[-4, 15, -175, -116]$[-4, 146, -175, 15]$[132, 146, -39, 15]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhIDsCysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhIDsSysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yhIDsiysEe-4er9RFtOKtQ" type="4001" element="_yf5UoCysEe-4er9RFtOKtQ" source="_ygqJoCysEe-4er9RFtOKtQ" target="_ygsl5CysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yhIqwCysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhIqwSysEe-4er9RFtOKtQ" x="59" y="-17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhIqwiysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhIqwyysEe-4er9RFtOKtQ" x="-13"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhIqxCysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhIqxSysEe-4er9RFtOKtQ" x="28" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yhIDsyysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yhIDtCysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yhIDtSysEe-4er9RFtOKtQ" points="[-1, -27, -257, 155]$[-1, -182, -257, 0]$[206, -182, -50, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhJR0CysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhJR0SysEe-4er9RFtOKtQ" id="(0.33783783783783783,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yhJR0iysEe-4er9RFtOKtQ" type="4001" element="_yf57sCysEe-4er9RFtOKtQ" source="_ygsl5CysEe-4er9RFtOKtQ" target="_ygr-0CysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yhJR1iysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhJR1yysEe-4er9RFtOKtQ" x="-51" y="-17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhJR2CysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhJR2SysEe-4er9RFtOKtQ" x="-8" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhJR2iysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhJR2yysEe-4er9RFtOKtQ" x="7"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yhJR0yysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yhJR1CysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yhJR1SysEe-4er9RFtOKtQ" points="[98, 0, -219, -175]$[318, 0, 1, -175]$[318, 148, 1, -27]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhJ44CysEe-4er9RFtOKtQ" id="(0.33783783783783783,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhJ44SysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yhJ44iysEe-4er9RFtOKtQ" type="4001" element="_yf6iwiysEe-4er9RFtOKtQ" source="_ygr-0CysEe-4er9RFtOKtQ" target="_ygtM9CysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yhKf8CysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhKf8SysEe-4er9RFtOKtQ" x="55" y="-17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhKf8iysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhKf8yysEe-4er9RFtOKtQ" x="-56" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhKf9CysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhKf9SysEe-4er9RFtOKtQ" x="-97" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yhJ44yysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yhJ45CysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yhJ45SysEe-4er9RFtOKtQ" points="[-2, 28, 315, -175]$[-2, 203, 315, 0]$[-212, 203, 105, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhLHACysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhLHASysEe-4er9RFtOKtQ" id="(0.2939189189189189,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yhLHAiysEe-4er9RFtOKtQ" type="4001" element="_yf7J1CysEe-4er9RFtOKtQ" source="_ygtM9CysEe-4er9RFtOKtQ" target="_ygqJoCysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yhLHBiysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhLHByysEe-4er9RFtOKtQ" x="-86" y="-17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhLHCCysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhLHCSysEe-4er9RFtOKtQ" x="-39" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhLHCiysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhLHCyysEe-4er9RFtOKtQ" x="-21"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yhLHAyysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yhLHBCysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yhLHBSysEe-4er9RFtOKtQ" points="[-43, 0, 213, 196]$[-255, 0, 1, 196]$[-255, -168, 1, 28]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhLuECysEe-4er9RFtOKtQ" id="(0.2939189189189189,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhLuESysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yhLuEiysEe-4er9RFtOKtQ" type="4001" element="_yf8X8CysEe-4er9RFtOKtQ" source="_ygtM9CysEe-4er9RFtOKtQ" target="_ygsl5CysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yhLuFiysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhLuFyysEe-4er9RFtOKtQ" x="-22" y="-108"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhMVICysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhMVISysEe-4er9RFtOKtQ" x="-6"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhMVIiysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhMVIyysEe-4er9RFtOKtQ" x="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yhLuEyysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yhLuFCysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yhLuFSysEe-4er9RFtOKtQ" points="[6, -27, 6, 351]$[6, -350, 6, 28]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhM8MCysEe-4er9RFtOKtQ" id="(0.2939189189189189,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhM8MSysEe-4er9RFtOKtQ" id="(0.33783783783783783,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yhM8MiysEe-4er9RFtOKtQ" type="4001" element="_yf8_ACysEe-4er9RFtOKtQ" source="_ygsl5CysEe-4er9RFtOKtQ" target="_ygtM9CysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yhM8NiysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhM8NyysEe-4er9RFtOKtQ" x="23" y="-116"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhM8OCysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhM8OSysEe-4er9RFtOKtQ" x="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhM8OiysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhM8OyysEe-4er9RFtOKtQ" x="-176" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yhM8MyysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yhM8NCysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yhM8NSysEe-4er9RFtOKtQ" points="[23, 28, 23, -350]$[23, 351, 23, -27]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhOKUCysEe-4er9RFtOKtQ" id="(0.33783783783783783,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhOKUSysEe-4er9RFtOKtQ" id="(0.2939189189189189,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yhOKUiysEe-4er9RFtOKtQ" type="4001" element="_yf9mECysEe-4er9RFtOKtQ" source="_ygqJoCysEe-4er9RFtOKtQ" target="_ygntYCysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yhOKViysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhOKVyysEe-4er9RFtOKtQ" x="-27" y="18"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhOxYCysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhOxYSysEe-4er9RFtOKtQ" x="13" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhOxYiysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhOxYyysEe-4er9RFtOKtQ" x="7"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yhOKUyysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yhOKVCysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yhOKVSysEe-4er9RFtOKtQ" points="[-39, 1, 103, 62]$[-143, 1, -1, 62]$[-143, -46, -1, 15]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhOxZCysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhPYcCysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yhPYcSysEe-4er9RFtOKtQ" type="4001" element="_yf-NIiysEe-4er9RFtOKtQ" source="_ygqJoCysEe-4er9RFtOKtQ" target="_ygqJoCysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yhPYdSysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhPYdiysEe-4er9RFtOKtQ" x="-2" y="21"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhPYdyysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhPYeCysEe-4er9RFtOKtQ" x="1" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhPYeSysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhPYeiysEe-4er9RFtOKtQ" x="-4" y="-4"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yhPYciysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yhPYcyysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yhPYdCysEe-4er9RFtOKtQ" points="[39, -13, 39, -13]$[73, -13, 73, -13]$[73, -41, 73, -41]$[20, -41, 20, -41]$[20, -27, 20, -27]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhP_gCysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhP_gSysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yhP_giysEe-4er9RFtOKtQ" type="4001" element="_yf-0MiysEe-4er9RFtOKtQ" source="_ygtM9CysEe-4er9RFtOKtQ" target="_ygtM9CysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yhP_hiysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhP_hyysEe-4er9RFtOKtQ" x="-4" y="-17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhQmkCysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhQmkSysEe-4er9RFtOKtQ" x="-6"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhQmkiysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhQmkyysEe-4er9RFtOKtQ" x="-2" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yhP_gyysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yhP_hCysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yhP_hSysEe-4er9RFtOKtQ" points="[62, 28, 62, 28]$[62, 57, 62, 57]$[-8, 57, -8, 57]$[-8, 28, -8, 28]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhQmlCysEe-4er9RFtOKtQ" id="(0.2939189189189189,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhQmlSysEe-4er9RFtOKtQ" id="(0.2939189189189189,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yhRNoCysEe-4er9RFtOKtQ" type="4001" element="_yf_bQiysEe-4er9RFtOKtQ" source="_ygr-0CysEe-4er9RFtOKtQ" target="_ygr-0CysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yhRNpCysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhRNpSysEe-4er9RFtOKtQ" x="-1" y="-49"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhRNpiysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhRNpyysEe-4er9RFtOKtQ" x="25" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhR0sCysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhR0sSysEe-4er9RFtOKtQ" x="2" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yhRNoSysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yhRNoiysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yhRNoyysEe-4er9RFtOKtQ" points="[32, -13, 32, -13]$[74, -13, 74, -13]$[74, 15, 74, 15]$[32, 15, 32, 15]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhSbwCysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhSbwSysEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yhSbwiysEe-4er9RFtOKtQ" type="4001" element="_ygBQcCysEe-4er9RFtOKtQ" source="_ygsl5CysEe-4er9RFtOKtQ" target="_ygsl5CysEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_yhSbxiysEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhSbxyysEe-4er9RFtOKtQ" x="-7" y="21"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhSbyCysEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhSbySysEe-4er9RFtOKtQ" x="2"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yhTC0CysEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yhTC0SysEe-4er9RFtOKtQ" x="-3" y="-51"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yhSbwyysEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yhSbxCysEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yhSbxSysEe-4er9RFtOKtQ" points="[48, -27, 48, -27]$[48, -55, 48, -55]$[-15, -55, -15, -55]$[-15, -27, -15, -27]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhTC0iysEe-4er9RFtOKtQ" id="(0.33783783783783783,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yhTC0yysEe-4er9RFtOKtQ" id="(0.33783783783783783,0.5)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_ygDFoCysEe-4er9RFtOKtQ" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_ygDFoSysEe-4er9RFtOKtQ"/>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_yfV7ACysEe-4er9RFtOKtQ" name="initial" outgoingEdges="_yfym8CysEe-4er9RFtOKtQ" width="3" height="3">
+      <target xmi:type="statemachine:InitialState" href="garagedoor.statemachine#initial"/>
+      <semanticElements xmi:type="statemachine:InitialState" href="garagedoor.statemachine#initial"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_yfaMcCysEe-4er9RFtOKtQ" labelSize="12" showIcon="false" backgroundColor="0,0,0">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_yfed4CysEe-4er9RFtOKtQ" name="final" incomingEdges="_yf9mECysEe-4er9RFtOKtQ" width="3" height="3">
+      <target xmi:type="statemachine:FinalState" href="garagedoor.statemachine#final"/>
+      <semanticElements xmi:type="statemachine:FinalState" href="garagedoor.statemachine#final"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_yffE8CysEe-4er9RFtOKtQ" labelSize="12" showIcon="false" backgroundColor="209,209,209">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Final%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Final%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yffsACysEe-4er9RFtOKtQ" name="Closed" outgoingEdges="_yf5UoCysEe-4er9RFtOKtQ _yf9mECysEe-4er9RFtOKtQ _yf-NIiysEe-4er9RFtOKtQ" incomingEdges="_yfym8CysEe-4er9RFtOKtQ _yf7J1CysEe-4er9RFtOKtQ _yf-NIiysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Closed"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Closed"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yffsASysEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yfg6ICysEe-4er9RFtOKtQ" name="Open" outgoingEdges="_yf6iwiysEe-4er9RFtOKtQ _yf_bQiysEe-4er9RFtOKtQ" incomingEdges="_yf57sCysEe-4er9RFtOKtQ _yf_bQiysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Open"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Open"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yfg6ISysEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yfhhMSysEe-4er9RFtOKtQ" name="Opening" outgoingEdges="_yf57sCysEe-4er9RFtOKtQ _yf8_ACysEe-4er9RFtOKtQ _ygBQcCysEe-4er9RFtOKtQ" incomingEdges="_yf5UoCysEe-4er9RFtOKtQ _yf8X8CysEe-4er9RFtOKtQ _ygBQcCysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Opening"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Opening"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yfiIQCysEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yfivUSysEe-4er9RFtOKtQ" name="Closing" outgoingEdges="_yf7J1CysEe-4er9RFtOKtQ _yf8X8CysEe-4er9RFtOKtQ _yf-0MiysEe-4er9RFtOKtQ" incomingEdges="_yf6iwiysEe-4er9RFtOKtQ _yf8_ACysEe-4er9RFtOKtQ _yf-0MiysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Closing"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="garagedoor.statemachine#Closing"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yfjWYCysEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yfkkgCysEe-4er9RFtOKtQ" name="State Machine: Garage Door" height="4">
+      <target xmi:type="statemachine:StateMachine" href="garagedoor.statemachine#Garage Door"/>
+      <semanticElements xmi:type="statemachine:StateMachine" href="garagedoor.statemachine#Garage Door"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yfsgUCysEe-4er9RFtOKtQ" labelSize="10" showIcon="false" borderColor="209,209,209" backgroundStyle="Liquid" backgroundColor="209,209,209">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yfym8CysEe-4er9RFtOKtQ" sourceNode="_yfV7ACysEe-4er9RFtOKtQ" targetNode="_yffsACysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.0"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yfzOACysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yfzOASysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yf5UoCysEe-4er9RFtOKtQ" name="openDoor / motor.upwards" sourceNode="_yffsACysEe-4er9RFtOKtQ" targetNode="_yfhhMSysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.1"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.1"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yf5UoSysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yf5UoiysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yf57sCysEe-4er9RFtOKtQ" name=" [stopper] / motor.stop" sourceNode="_yfhhMSysEe-4er9RFtOKtQ" targetNode="_yfg6ICysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.2"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.2"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yf57sSysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yf57siysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yf6iwiysEe-4er9RFtOKtQ" name="closeDoor / motor.downwards" sourceNode="_yfg6ICysEe-4er9RFtOKtQ" targetNode="_yfivUSysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.3"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.3"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yf7J0CysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yf7J0SysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yf7J1CysEe-4er9RFtOKtQ" name=" [stopper] / motor.stop" sourceNode="_yfivUSysEe-4er9RFtOKtQ" targetNode="_yffsACysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.4"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.4"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yf7w4CysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yf7w4SysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yf8X8CysEe-4er9RFtOKtQ" name="openDoor / motor.upwards" sourceNode="_yfivUSysEe-4er9RFtOKtQ" targetNode="_yfhhMSysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.5"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.5"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yf8X8SysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yf8X8iysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yf8_ACysEe-4er9RFtOKtQ" name="closeDoor / motor.downwards" sourceNode="_yfhhMSysEe-4er9RFtOKtQ" targetNode="_yfivUSysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.6"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.6"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yf8_ASysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yf8_AiysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yf9mECysEe-4er9RFtOKtQ" name=" [shutdown]" sourceNode="_yffsACysEe-4er9RFtOKtQ" targetNode="_yfed4CysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.7"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.7"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yf9mESysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yf9mEiysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yf-NIiysEe-4er9RFtOKtQ" name="closeDoor" sourceNode="_yffsACysEe-4er9RFtOKtQ" targetNode="_yffsACysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.8"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.8"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yf-NIyysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yf-NJCysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yf-0MiysEe-4er9RFtOKtQ" name="closeDoor" sourceNode="_yfivUSysEe-4er9RFtOKtQ" targetNode="_yfivUSysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.9"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.9"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yf-0MyysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yf-0NCysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yf_bQiysEe-4er9RFtOKtQ" name="openDoor" sourceNode="_yfg6ICysEe-4er9RFtOKtQ" targetNode="_yfg6ICysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.10"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.10"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_ygACUCysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_ygACUSysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ygBQcCysEe-4er9RFtOKtQ" name="openDoor" sourceNode="_yfhhMSysEe-4er9RFtOKtQ" targetNode="_yfhhMSysEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.11"/>
+      <semanticElements xmi:type="statemachine:Transition" href="garagedoor.statemachine#//@transitions.11"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_ygB3gCysEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_ygB3gSysEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']"/>
+    <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_ydW-ACysEe-4er9RFtOKtQ"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer"/>
+    <target xmi:type="statemachine:StateMachine" href="garagedoor.statemachine#Garage Door"/>
+  </diagram:DSemanticDiagram>
+  <diagram:DSemanticDiagram uid="_lERnkCytEe-4er9RFtOKtQ">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_lEUq4CytEe-4er9RFtOKtQ" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_lEUq4SytEe-4er9RFtOKtQ" type="Sirius" element="_lERnkCytEe-4er9RFtOKtQ" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_lEcmsCytEe-4er9RFtOKtQ" type="2001" element="_lEVR8CytEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_lEdNwCytEe-4er9RFtOKtQ" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_lEdNwSytEe-4er9RFtOKtQ" x="-14" y="-33"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_lEgRECytEe-4er9RFtOKtQ" type="3002" element="_lEVR8SytEe-4er9RFtOKtQ">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_lEgRESytEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEgREiytEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_lEcmsSytEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEcmsiytEe-4er9RFtOKtQ" x="581" y="150" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_lEeb4CytEe-4er9RFtOKtQ" type="2003" element="_lEV5ACytEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_lEeb4yytEe-4er9RFtOKtQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_lEfC8CytEe-4er9RFtOKtQ" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_lEg4ICytEe-4er9RFtOKtQ" type="3010" element="_lEWgESytEe-4er9RFtOKtQ">
+              <styles xmi:type="notation:FontStyle" xmi:id="_lEg4ISytEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_lEg4IiytEe-4er9RFtOKtQ"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_lEfC8SytEe-4er9RFtOKtQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_lEfC8iytEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_lEeb4SytEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEeb4iytEe-4er9RFtOKtQ" x="287" y="364"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_lEfC8yytEe-4er9RFtOKtQ" type="2003" element="_lEV5AyytEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_lEfC9iytEe-4er9RFtOKtQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_lEfC9yytEe-4er9RFtOKtQ" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_lEhfMCytEe-4er9RFtOKtQ" type="3010" element="_lEXuMCytEe-4er9RFtOKtQ">
+              <styles xmi:type="notation:FontStyle" xmi:id="_lEhfMSytEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_lEhfMiytEe-4er9RFtOKtQ"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_lEfC-CytEe-4er9RFtOKtQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_lEfC-SytEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_lEfC9CytEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEfC9SytEe-4er9RFtOKtQ" x="302" y="126" width="221"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_lEfqACytEe-4er9RFtOKtQ" type="2003" element="_lEYVQCytEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_lEfqAyytEe-4er9RFtOKtQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_lEfqBCytEe-4er9RFtOKtQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_lEfqBSytEe-4er9RFtOKtQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_lEfqBiytEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_lEfqASytEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="10" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEfqAiytEe-4er9RFtOKtQ" x="36" y="84" height="40"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_lEUq4iytEe-4er9RFtOKtQ"/>
+        <edges xmi:type="notation:Edge" xmi:id="_lEhfMyytEe-4er9RFtOKtQ" type="4001" element="_lEY8UCytEe-4er9RFtOKtQ" source="_lEcmsCytEe-4er9RFtOKtQ" target="_lEfC8yytEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_lEiGQCytEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEiGQSytEe-4er9RFtOKtQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_lEiGQiytEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEiGQyytEe-4er9RFtOKtQ" x="-4" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_lEiGRCytEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEiGRSytEe-4er9RFtOKtQ" x="-13" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_lEhfNCytEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_lEhfNSytEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lEhfNiytEe-4er9RFtOKtQ" points="[-15, 15, 176, -38]$[-75, 15, 116, -38]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lEitUCytEe-4er9RFtOKtQ" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lEitUSytEe-4er9RFtOKtQ" id="(0.4703196347031963,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_lEitUiytEe-4er9RFtOKtQ" type="4001" element="_lEZjYCytEe-4er9RFtOKtQ" source="_lEfC8yytEe-4er9RFtOKtQ" target="_lEeb4CytEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_lEjUYCytEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEjUYSytEe-4er9RFtOKtQ" x="7" y="-39"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_lEjUYiytEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEjUYyytEe-4er9RFtOKtQ" x="-3" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_lEjUZCytEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEjUZSytEe-4er9RFtOKtQ" x="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_lEitUyytEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_lEitVCytEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lEitVSytEe-4er9RFtOKtQ" points="[30, 39, 30, -199]$[30, 200, 30, -38]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lEjUZiytEe-4er9RFtOKtQ" id="(0.4657534246575342,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lEj7cCytEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_lEj7cSytEe-4er9RFtOKtQ" type="4001" element="_lEaKcCytEe-4er9RFtOKtQ" source="_lEeb4CytEe-4er9RFtOKtQ" target="_lEfC8yytEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_lEj7dSytEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEj7diytEe-4er9RFtOKtQ" x="1" y="-24"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_lEj7dyytEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEj7eCytEe-4er9RFtOKtQ" x="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_lEj7eSytEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lEj7eiytEe-4er9RFtOKtQ" x="-2" y="-4"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_lEj7ciytEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_lEj7cyytEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lEj7dCytEe-4er9RFtOKtQ" points="[-40, -38, -40, 200]$[-40, -199, -40, 39]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lEkigCytEe-4er9RFtOKtQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lEkigSytEe-4er9RFtOKtQ" id="(0.4657534246575342,0.5)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_lEbYkCytEe-4er9RFtOKtQ" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_lEbYkSytEe-4er9RFtOKtQ"/>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_lEVR8CytEe-4er9RFtOKtQ" name="initial" outgoingEdges="_lEY8UCytEe-4er9RFtOKtQ" width="3" height="3">
+      <target xmi:type="statemachine:InitialState" href="switch.statemachine#initial"/>
+      <semanticElements xmi:type="statemachine:InitialState" href="switch.statemachine#initial"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_lEVR8SytEe-4er9RFtOKtQ" labelSize="12" showIcon="false" backgroundColor="0,0,0">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_lEV5ACytEe-4er9RFtOKtQ" name="on" outgoingEdges="_lEaKcCytEe-4er9RFtOKtQ" incomingEdges="_lEZjYCytEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:NormalState" href="switch.statemachine#on"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="switch.statemachine#on"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_lEV5ASytEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_lEWgESytEe-4er9RFtOKtQ" name="do/     do_something">
+        <target xmi:type="statemachine:Action" href="switch.statemachine#//@states.0/@do_"/>
+        <semanticElements xmi:type="statemachine:Action" href="switch.statemachine#//@states.0/@do_"/>
+        <ownedStyle xmi:type="diagram:Square" uid="_lEXHICytEe-4er9RFtOKtQ" labelSize="12" showIcon="false" labelAlignment="LEFT" labelPosition="node" color="255,245,181">
+          <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_lEV5AyytEe-4er9RFtOKtQ" name="off" outgoingEdges="_lEZjYCytEe-4er9RFtOKtQ" incomingEdges="_lEY8UCytEe-4er9RFtOKtQ _lEaKcCytEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:NormalState" href="switch.statemachine#off"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="switch.statemachine#off"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_lEV5BCytEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_lEXuMCytEe-4er9RFtOKtQ" name="do/     do_nothing">
+        <target xmi:type="statemachine:Action" href="switch.statemachine#//@states.1/@do_"/>
+        <semanticElements xmi:type="statemachine:Action" href="switch.statemachine#//@states.1/@do_"/>
+        <ownedStyle xmi:type="diagram:Square" uid="_lEXuMSytEe-4er9RFtOKtQ" labelSize="12" showIcon="false" labelAlignment="LEFT" labelPosition="node" color="255,245,181">
+          <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_lEYVQCytEe-4er9RFtOKtQ" name="State Machine: Switch" height="4">
+      <target xmi:type="statemachine:StateMachine" href="switch.statemachine#Switch"/>
+      <semanticElements xmi:type="statemachine:StateMachine" href="switch.statemachine#Switch"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_lEYVQSytEe-4er9RFtOKtQ" labelSize="10" showIcon="false" borderColor="209,209,209" backgroundStyle="Liquid" backgroundColor="209,209,209">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_lEY8UCytEe-4er9RFtOKtQ" sourceNode="_lEVR8CytEe-4er9RFtOKtQ" targetNode="_lEV5AyytEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.0"/>
+      <semanticElements xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_lEY8USytEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_lEY8UiytEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_lEZjYCytEe-4er9RFtOKtQ" name="flip" sourceNode="_lEV5AyytEe-4er9RFtOKtQ" targetNode="_lEV5ACytEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.1"/>
+      <semanticElements xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.1"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_lEZjYSytEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_lEZjYiytEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_lEaKcCytEe-4er9RFtOKtQ" name="flip" sourceNode="_lEV5ACytEe-4er9RFtOKtQ" targetNode="_lEV5AyytEe-4er9RFtOKtQ">
+      <target xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.2"/>
+      <semanticElements xmi:type="statemachine:Transition" href="switch.statemachine#//@transitions.2"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_lEaKcSytEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_lEaKciytEe-4er9RFtOKtQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']"/>
+    <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_lESOoCytEe-4er9RFtOKtQ"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer"/>
+    <target xmi:type="statemachine:StateMachine" href="switch.statemachine#Switch"/>
+  </diagram:DSemanticDiagram>
+</xmi:XMI>
diff --git a/domain_specific_language/graphical/examples-graphical/switch.statemachine b/domain_specific_language/graphical/examples-graphical/switch.statemachine
new file mode 100644
index 0000000000000000000000000000000000000000..adbc574168f4eaff22326088d182925254a1c84e
--- /dev/null
+++ b/domain_specific_language/graphical/examples-graphical/switch.statemachine
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<statemachine:StateMachine xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:statemachine="http://www.swt.org/most/statemachine" name="Switch">
+  <states name="on">
+    <do_ content="do_something"/>
+  </states>
+  <states name="off">
+    <do_ content="do_nothing"/>
+  </states>
+  <initialstate name="initial"/>
+  <transitions from="initial" to="off"/>
+  <transitions from="off" to="on">
+    <trigger content="flip"/>
+  </transitions>
+  <transitions from="on" to="off">
+    <trigger content="flip"/>
+  </transitions>
+</statemachine:StateMachine>
diff --git a/domain_specific_language/graphical/swt.most.petrinet.sirius/.classpath b/domain_specific_language/graphical/swt.most.petrinet.sirius/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..39810b7d6c9a484a6a57381a7dabe4abf230ae84
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.petrinet.sirius/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+  <classpathentry kind="src" path="src"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+  <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/domain_specific_language/graphical/swt.most.petrinet.sirius/.gitignore b/domain_specific_language/graphical/swt.most.petrinet.sirius/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..ae3c1726048cd06b9a143e0376ed46dd9b9a8d53
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.petrinet.sirius/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/domain_specific_language/graphical/swt.most.petrinet.sirius/.project b/domain_specific_language/graphical/swt.most.petrinet.sirius/.project
new file mode 100644
index 0000000000000000000000000000000000000000..f634706b0c66f86ca217aa9e3711d126ef9f04b4
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.petrinet.sirius/.project
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+  <name>swt.most.sirius.petrinet</name>
+  <comment></comment>
+  <projects></projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+      <arguments></arguments>
+    </buildCommand>
+    <buildCommand>
+      <name>org.eclipse.pde.ManifestBuilder</name>
+      <arguments></arguments>
+    </buildCommand>
+    <buildCommand>
+      <name>org.eclipse.pde.SchemaBuilder</name>
+      <arguments></arguments>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.pde.PluginNature</nature>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>
diff --git a/domain_specific_language/graphical/swt.most.petrinet.sirius/.settings/org.eclipse.core.resources.prefs b/domain_specific_language/graphical/swt.most.petrinet.sirius/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.petrinet.sirius/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/domain_specific_language/graphical/swt.most.petrinet.sirius/META-INF/MANIFEST.MF b/domain_specific_language/graphical/swt.most.petrinet.sirius/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..9cfaac3a12a72a40f48cb2eb60db71c06ef93f9f
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.petrinet.sirius/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: swt.most.sirius.petrinet;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: swt.most.sirius.petrinet.Activator
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.sirius,
+ org.eclipse.sirius.common.acceleo.aql
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Bundle-Vendor: %providerName
+Automatic-Module-Name: swt.most.sirius.petrinet
diff --git a/domain_specific_language/graphical/swt.most.petrinet.sirius/build.properties b/domain_specific_language/graphical/swt.most.petrinet.sirius/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..1ab7df2cb6e75b94c2d79c15e09b3aa2b753fa11
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.petrinet.sirius/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               description/,\
+               plugin.properties,\
+               plugin.xml
diff --git a/domain_specific_language/graphical/swt.most.petrinet.sirius/description/petrinet.odesign b/domain_specific_language/graphical/swt.most.petrinet.sirius/description/petrinet.odesign
new file mode 100644
index 0000000000000000000000000000000000000000..cc81b6d935fe811b0a5f62c5b47737c523acd0de
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.petrinet.sirius/description/petrinet.odesign
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<description:Group xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" name="petrinet" version="12.0.0.2017041100">
+  <ownedViewpoints name="Viewer" modelFileExtension="petrinet">
+    <ownedRepresentations xsi:type="description_1:DiagramDescription" name="Petrinet Viewer" domainClass="petrinet::PetriNet" enablePopupBars="true">
+      <metamodel href="http://www.example.org/petrinet#/"/>
+      <defaultLayer name="Default">
+        <nodeMappings name="Place" semanticCandidatesExpression="feature:elements" domainClass="petrinet::Place">
+          <borderedNodeMappings name="Token" semanticCandidatesExpression="feature:token" domainClass="petrinet::Token">
+            <style xsi:type="style:DotDescription" labelSize="12" showIcon="false" labelExpression="''" labelAlignment="LEFT" sizeComputationExpression="2" labelPosition="node">
+              <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+              <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+              <forbiddenSides>WEST</forbiddenSides>
+              <forbiddenSides>SOUTH</forbiddenSides>
+              <forbiddenSides>NORTH</forbiddenSides>
+              <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            </style>
+          </borderedNodeMappings>
+          <style xsi:type="style:DotDescription" borderSizeComputationExpression="1" labelSize="12" showIcon="false" labelExpression="feature:identifier" strokeSizeComputationExpression="3">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/>
+          </style>
+        </nodeMappings>
+        <nodeMappings name="Transition" semanticCandidatesExpression="feature:elements" domainClass="petrinet::Transition">
+          <style xsi:type="style:SquareDescription" borderSizeComputationExpression="1" labelSize="12" showIcon="false" labelExpression="feature:identifier" width="2" height="6">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <color xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_orange']"/>
+          </style>
+        </nodeMappings>
+        <edgeMappings name="IncomingArc" sourceMapping="//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']" targetMapping="//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']" targetFinderExpression="feature:target" sourceFinderExpression="feature:source" domainClass="petrinet::IncomingArc" useDomainElement="true">
+          <style sizeComputationExpression="2" routingStyle="manhattan">
+            <strokeColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <centerLabelStyleDescription labelSize="12">
+              <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            </centerLabelStyleDescription>
+          </style>
+        </edgeMappings>
+        <edgeMappings name="OutgoingArc" sourceMapping="//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']" targetMapping="//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']" targetFinderExpression="feature:target" sourceFinderExpression="feature:source" domainClass="petrinet::OutgoingArc" useDomainElement="true">
+          <style sizeComputationExpression="2" routingStyle="manhattan">
+            <strokeColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <centerLabelStyleDescription labelSize="12">
+              <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            </centerLabelStyleDescription>
+          </style>
+        </edgeMappings>
+      </defaultLayer>
+      <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_gray']"/>
+    </ownedRepresentations>
+    <ownedJavaExtensions qualifiedClassName="swt.most.sirius.petrinet.Services"/>
+  </ownedViewpoints>
+</description:Group>
diff --git a/domain_specific_language/graphical/swt.most.petrinet.sirius/plugin.properties b/domain_specific_language/graphical/swt.most.petrinet.sirius/plugin.properties
new file mode 100644
index 0000000000000000000000000000000000000000..6ed75806c30feea3f5e7c380c5a86bb66ebac483
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.petrinet.sirius/plugin.properties
@@ -0,0 +1,3 @@
+pluginName = swt.most.sirius.petrinet
+providerName = Eclipse Modeling Project
+viewpointName = MyViewpoint
diff --git a/domain_specific_language/graphical/swt.most.petrinet.sirius/plugin.xml b/domain_specific_language/graphical/swt.most.petrinet.sirius/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1ba8bc649eb4079293ea0bfda6dcfc2ff542ea41
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.petrinet.sirius/plugin.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+  <extension point="org.eclipse.sirius.componentization">
+    <component class="swt.most.sirius.petrinet.Activator"
+               id="swt.most.sirius.petrinet"
+	       name="petrinet">
+    </component>
+  </extension>
+</plugin>
diff --git a/domain_specific_language/graphical/swt.most.petrinet.sirius/src/swt/most/sirius/petrinet/Activator.java b/domain_specific_language/graphical/swt.most.petrinet.sirius/src/swt/most/sirius/petrinet/Activator.java
new file mode 100644
index 0000000000000000000000000000000000000000..a8dc249d0bf3d39897fa2ab9a7257058ffb04249
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.petrinet.sirius/src/swt/most/sirius/petrinet/Activator.java
@@ -0,0 +1,66 @@
+package swt.most.sirius.petrinet;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.sirius.business.api.componentization.ViewpointRegistry;
+import org.eclipse.sirius.viewpoint.description.Viewpoint;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+    // The plug-in ID
+    public static final String PLUGIN_ID = "swt.most.sirius.petrinet";
+
+    // The shared instance
+    private static Activator plugin;
+
+    private static Set<Viewpoint> viewpoints; 
+
+    /**
+     * The constructor
+     */
+    public Activator() {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+     */
+    public void start(BundleContext context) throws Exception {
+      super.start(context);
+	  plugin = this;
+	  viewpoints = new HashSet<Viewpoint>();
+	  viewpoints.addAll(ViewpointRegistry.getInstance().registerFromPlugin(PLUGIN_ID + "/description/petrinet.odesign")); 
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+     */
+    public void stop(BundleContext context) throws Exception {
+	plugin = null;
+	if (viewpoints != null) {
+	    for (final Viewpoint viewpoint: viewpoints) {
+		ViewpointRegistry.getInstance().disposeFromPlugin(viewpoint);
+	    }
+	    viewpoints.clear();
+	    viewpoints = null; 
+	}
+	super.stop(context);
+    }
+
+    /**
+     * Returns the shared instance
+     * 
+     * @return the shared instance
+     */
+    public static Activator getDefault() {
+	return plugin;
+    }
+}
diff --git a/domain_specific_language/graphical/swt.most.petrinet.sirius/src/swt/most/sirius/petrinet/Services.java b/domain_specific_language/graphical/swt.most.petrinet.sirius/src/swt/most/sirius/petrinet/Services.java
new file mode 100644
index 0000000000000000000000000000000000000000..dd45d8dcb756f566c91dd74dabda227e3ef01eb2
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.petrinet.sirius/src/swt/most/sirius/petrinet/Services.java
@@ -0,0 +1,17 @@
+package swt.most.sirius.petrinet;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * The services class used by VSM.
+ */
+public class Services {
+    
+    /**
+    * See http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.sirius.doc%2Fdoc%2Findex.html&cp=24 for documentation on how to write service methods.
+    */
+    public EObject myService(EObject self, String arg) {
+       // TODO Auto-generated code
+      return self;
+    }
+}
diff --git a/domain_specific_language/graphical/swt.most.statemachine.sirius/.classpath b/domain_specific_language/graphical/swt.most.statemachine.sirius/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..39810b7d6c9a484a6a57381a7dabe4abf230ae84
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.statemachine.sirius/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+  <classpathentry kind="src" path="src"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+  <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/domain_specific_language/graphical/swt.most.statemachine.sirius/.gitignore b/domain_specific_language/graphical/swt.most.statemachine.sirius/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..ae3c1726048cd06b9a143e0376ed46dd9b9a8d53
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.statemachine.sirius/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/domain_specific_language/graphical/swt.most.statemachine.sirius/.project b/domain_specific_language/graphical/swt.most.statemachine.sirius/.project
new file mode 100644
index 0000000000000000000000000000000000000000..eb60f9eb711238b927daca662c881fb71c6ce044
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.statemachine.sirius/.project
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+  <name>swt.most.sirius.statemachine</name>
+  <comment></comment>
+  <projects></projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+      <arguments></arguments>
+    </buildCommand>
+    <buildCommand>
+      <name>org.eclipse.pde.ManifestBuilder</name>
+      <arguments></arguments>
+    </buildCommand>
+    <buildCommand>
+      <name>org.eclipse.pde.SchemaBuilder</name>
+      <arguments></arguments>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.pde.PluginNature</nature>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>
diff --git a/domain_specific_language/graphical/swt.most.statemachine.sirius/.settings/org.eclipse.core.resources.prefs b/domain_specific_language/graphical/swt.most.statemachine.sirius/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.statemachine.sirius/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/domain_specific_language/graphical/swt.most.statemachine.sirius/META-INF/MANIFEST.MF b/domain_specific_language/graphical/swt.most.statemachine.sirius/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..f0489cfb3542b95cfde9b8d2c08d57e3e0e0c920
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.statemachine.sirius/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: swt.most.sirius.statemachine;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: swt.most.sirius.statemachine.Activator
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.sirius,
+ org.eclipse.sirius.common.acceleo.aql
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Bundle-Vendor: %providerName
+Automatic-Module-Name: swt.most.sirius.statemachine
diff --git a/domain_specific_language/graphical/swt.most.statemachine.sirius/build.properties b/domain_specific_language/graphical/swt.most.statemachine.sirius/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..1ab7df2cb6e75b94c2d79c15e09b3aa2b753fa11
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.statemachine.sirius/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               description/,\
+               plugin.properties,\
+               plugin.xml
diff --git a/domain_specific_language/graphical/swt.most.statemachine.sirius/description/statemachine.odesign b/domain_specific_language/graphical/swt.most.statemachine.sirius/description/statemachine.odesign
new file mode 100644
index 0000000000000000000000000000000000000000..508c2f84e792316e9408f311e820dd23a371269c
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.statemachine.sirius/description/statemachine.odesign
@@ -0,0 +1,292 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<description:Group xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:tool="http://www.eclipse.org/sirius/diagram/description/tool/1.1.0" xmlns:tool_1="http://www.eclipse.org/sirius/description/tool/1.1.0" name="statemachine" version="12.0.0.2017041100">
+  <ownedViewpoints endUserDocumentation="Graphical editors for the models used in the exercise in the MOST course (TU Dresden, Computer Science)." name="gDSL" modelFileExtension="statemachine">
+    <ownedRepresentations xsi:type="description_1:DiagramDescription" endUserDocumentation="This is an example graphical editor for state machines. Can be used for state machine models defined in the exercise of the MOST course (TU Dresden, Computer Science)." name="StateMachine" showOnStartup="true" domainClass="statemachine::StateMachine" preconditionExpression="var:self" enablePopupBars="true">
+      <metamodel href="http://www.swt.org/most/statemachine#/"/>
+      <defaultLayer name="Default" label="Default View">
+        <nodeMappings name="Initial State" deletionDescription="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Deletion']/@ownedTools[name='Delete%20Element%20with%20Transitions']" labelDirectEdit="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Label%20Edit']/@ownedTools[name='Initial%20State%20LE']" semanticCandidatesExpression="feature:initialstate" domainClass="statemachine::InitialState">
+          <style xsi:type="style:DotDescription" labelSize="12" showIcon="false">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </style>
+        </nodeMappings>
+        <nodeMappings name="Final State" deletionDescription="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Deletion']/@ownedTools[name='Delete%20Element%20with%20Transitions']" labelDirectEdit="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Label%20Edit']/@ownedTools[name='Final%20State%20LE']" semanticCandidatesExpression="feature:finalstates" domainClass="statemachine::FinalState">
+          <style xsi:type="style:DotDescription" labelSize="12" showIcon="false">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_gray']"/>
+          </style>
+        </nodeMappings>
+        <edgeMappings name="Transition" labelDirectEdit="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Label%20Edit']/@ownedTools[name='Transition%20LE']" semanticCandidatesExpression="feature:transitions" sourceMapping="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State'] //@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']" targetMapping="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State'] //@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Final%20State']" targetFinderExpression="feature:to" sourceFinderExpression="feature:from" domainClass="statemachine::Transition" useDomainElement="true">
+          <style sizeComputationExpression="2" routingStyle="manhattan">
+            <strokeColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <centerLabelStyleDescription showIcon="false" labelExpression="aql:  if(self.trigger &lt;> null then self.trigger.content else '' endif  + if(self.guard &lt;> null) then ' ['+ self.guard.content+']' else '' endif  + if(self.action &lt;> null)' / ' + self.action.content else '' endif ">
+              <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            </centerLabelStyleDescription>
+          </style>
+        </edgeMappings>
+        <containerMappings name="Normal State" deletionDescription="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Deletion']/@ownedTools[name='Delete%20Element%20with%20Transitions']" labelDirectEdit="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Label%20Edit']/@ownedTools[name='Normal%20State%20LE']" semanticCandidatesExpression="feature:states" domainClass="statemachine::NormalState" childrenPresentation="List">
+          <subNodeMappings name="Entry Activity" labelDirectEdit="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Label%20Edit']/@ownedTools[name='Activity%20LE']" semanticCandidatesExpression="feature:entry_" domainClass="statemachine::Action">
+            <style xsi:type="style:SquareDescription" labelSize="12" showIcon="false" labelExpression="aql:'entry/ ' + self.content" labelAlignment="LEFT" labelPosition="node" resizeKind="NSEW">
+              <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+              <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+              <color xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/>
+            </style>
+          </subNodeMappings>
+          <subNodeMappings name="Do Activity" labelDirectEdit="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Label%20Edit']/@ownedTools[name='Activity%20LE']" semanticCandidatesExpression="feature:do_" domainClass="statemachine::Action">
+            <style xsi:type="style:SquareDescription" labelSize="12" showIcon="false" labelExpression="aql:'do/     ' + self.content" labelAlignment="LEFT" labelPosition="node" resizeKind="NSEW">
+              <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+              <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+              <color xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/>
+            </style>
+          </subNodeMappings>
+          <subNodeMappings name="Exit Activity" labelDirectEdit="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Label%20Edit']/@ownedTools[name='Activity%20LE']" semanticCandidatesExpression="feature:exit_" domainClass="statemachine::Action">
+            <style xsi:type="style:SquareDescription" labelSize="12" showIcon="false" labelExpression="aql:'exit/   ' + self.content" labelAlignment="LEFT" labelPosition="node" resizeKind="NSEW">
+              <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+              <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+              <color xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/>
+            </style>
+          </subNodeMappings>
+          <style xsi:type="style:FlatContainerStyleDescription" borderSizeComputationExpression="1" labelSize="12" showIcon="false" roundedCorner="true" backgroundStyle="Liquid">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelFormat>bold</labelFormat>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/>
+            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/>
+          </style>
+        </containerMappings>
+        <containerMappings name="State Machine Label" deletionDescription="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Deletion']/@ownedTools[name='No%20Model%20Delete']" labelDirectEdit="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@toolSections.3/@subSections[name='Label%20Edit']/@ownedTools[name='State%20Machine%20LE']" semanticCandidatesExpression="aql:self" domainClass="statemachine::StateMachine" childrenPresentation="List">
+          <style xsi:type="style:FlatContainerStyleDescription" labelSize="10" showIcon="false" labelExpression="aql:'State Machine: ' + self.name" roundedCorner="true" heightComputationExpression="4" backgroundStyle="Liquid">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_gray']"/>
+            <labelFormat>bold</labelFormat>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_gray']"/>
+            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_gray']"/>
+          </style>
+        </containerMappings>
+        <toolSections name="Element Creation" label="Elements">
+          <ownedTools xsi:type="tool:NodeCreationDescription" name="Initial State" precondition="aql:self.initialstate == null" nodeMappings="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']">
+            <variable name="container"/>
+            <viewVariable name="containerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                <subModelOperations xsi:type="tool_1:CreateInstance" typeName="statemachine::InitialState" referenceName="initialstate">
+                  <subModelOperations xsi:type="tool_1:SetValue" featureName="name" valueExpression="aql:'I_initial'"/>
+                </subModelOperations>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool:ContainerCreationDescription" name="State" containerMappings="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']">
+            <variable name="container"/>
+            <viewVariable name="containerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                <subModelOperations xsi:type="tool_1:CreateInstance" typeName="statemachine::NormalState" referenceName="states">
+                  <subModelOperations xsi:type="tool_1:SetValue" featureName="name" valueExpression="aql:'State' + container.states->size()"/>
+                </subModelOperations>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool:NodeCreationDescription" name="Final State" nodeMappings="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Final%20State']">
+            <variable name="container"/>
+            <viewVariable name="containerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                <subModelOperations xsi:type="tool_1:CreateInstance" typeName="statemachine::FinalState" referenceName="finalstates">
+                  <subModelOperations xsi:type="tool_1:SetValue" featureName="name" valueExpression="aql:'F_final'+container.finalstates->size()"/>
+                </subModelOperations>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+        </toolSections>
+        <toolSections name="Activities Creation" label="Activities">
+          <ownedTools xsi:type="tool:NodeCreationDescription" name="Entry" precondition="aql:container.entry_ == null" nodeMappings="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Entry%20Activity']">
+            <variable name="container"/>
+            <viewVariable name="containerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                <subModelOperations xsi:type="tool_1:CreateInstance" typeName="statemachine::Action" referenceName="entry_">
+                  <subModelOperations xsi:type="tool_1:SetValue" featureName="content" valueExpression="aql:'activity'"/>
+                </subModelOperations>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool:NodeCreationDescription" name="Do" precondition="aql:container.do_ == null" forceRefresh="true" nodeMappings="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']">
+            <variable name="container"/>
+            <viewVariable name="containerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                <subModelOperations xsi:type="tool_1:CreateInstance" typeName="statemachine::Action" referenceName="do_">
+                  <subModelOperations xsi:type="tool_1:SetValue" featureName="content" valueExpression="aql:'activity'"/>
+                </subModelOperations>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool:NodeCreationDescription" name="Exit" precondition="aql:container.exit_ == null" nodeMappings="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Exit%20Activity']">
+            <variable name="container"/>
+            <viewVariable name="containerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                <subModelOperations xsi:type="tool_1:CreateInstance" typeName="statemachine::Action" referenceName="exit_">
+                  <subModelOperations xsi:type="tool_1:SetValue" featureName="content" valueExpression="aql:'activity'"/>
+                </subModelOperations>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+        </toolSections>
+        <toolSections name="Relationship Creation" label="Relationships">
+          <ownedTools xsi:type="tool:EdgeCreationDescription" name="Transition" edgeMappings="//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']">
+            <sourceVariable name="source"/>
+            <targetVariable name="target"/>
+            <sourceViewVariable name="sourceView"/>
+            <targetViewVariable name="targetView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:source.eContainer()">
+                <subModelOperations xsi:type="tool_1:CreateInstance" typeName="statemachine::Transition" referenceName="transitions">
+                  <subModelOperations xsi:type="tool_1:SetValue" featureName="from" valueExpression="var:source"/>
+                  <subModelOperations xsi:type="tool_1:SetValue" featureName="to" valueExpression="var:target"/>
+                </subModelOperations>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+        </toolSections>
+        <toolSections name="Edit Tools">
+          <subSections documentation="For most elements we use the default delete functionality" name="Deletion">
+            <ownedTools xsi:type="tool:DeleteElementDescription" documentation="Only there to forbid the deletion of the model itself.&#xD;&#xA;For all other elements we use the default delete functionality" name="No Model Delete">
+              <element name="element"/>
+              <elementView name="elementView"/>
+              <containerView name="containerView"/>
+              <initialOperation/>
+            </ownedTools>
+            <ownedTools xsi:type="tool:DeleteElementDescription" name="Delete Element with Transitions">
+              <element name="element"/>
+              <elementView name="elementView"/>
+              <containerView name="containerView"/>
+              <initialOperation>
+                <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self.eContainer()">
+                  <subModelOperations xsi:type="tool_1:For" expression="aql:self.transitions">
+                    <subModelOperations xsi:type="tool_1:If" conditionExpression="aql: (i.from == element) or (i.to == element)">
+                      <subModelOperations xsi:type="tool_1:ChangeContext" browseExpression="var:i">
+                        <subModelOperations xsi:type="tool_1:RemoveElement"/>
+                      </subModelOperations>
+                    </subModelOperations>
+                  </subModelOperations>
+                  <subModelOperations xsi:type="tool_1:ChangeContext" browseExpression="var:element">
+                    <subModelOperations xsi:type="tool_1:RemoveElement"/>
+                  </subModelOperations>
+                </firstModelOperations>
+              </initialOperation>
+            </ownedTools>
+          </subSections>
+          <subSections name="Label Edit">
+            <ownedTools xsi:type="tool:DirectEditLabel" name="State Machine LE" inputLabelExpression="aql:self.identifier">
+              <mask mask="{0}"/>
+              <initialOperation>
+                <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                  <subModelOperations xsi:type="tool_1:SetValue" featureName="identifier" valueExpression="var:0"/>
+                </firstModelOperations>
+              </initialOperation>
+            </ownedTools>
+            <ownedTools xsi:type="tool:DirectEditLabel" name="Normal State LE" inputLabelExpression="aql:self.name">
+              <mask mask="{0}"/>
+              <initialOperation>
+                <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                  <subModelOperations xsi:type="tool_1:SetValue" featureName="name" valueExpression="var:0"/>
+                </firstModelOperations>
+              </initialOperation>
+            </ownedTools>
+            <ownedTools xsi:type="tool:DirectEditLabel" name="Initial State LE" inputLabelExpression="aql:self.name">
+              <mask mask="{0}"/>
+              <initialOperation>
+                <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                  <subModelOperations xsi:type="tool_1:If" conditionExpression="aql: arg0.startsWith('I_')">
+                    <subModelOperations xsi:type="tool_1:SetValue" featureName="name" valueExpression="var:0"/>
+                  </subModelOperations>
+                  <subModelOperations xsi:type="tool_1:If" conditionExpression="aql: not arg0.startsWith('I_')">
+                    <subModelOperations xsi:type="tool_1:SetValue" featureName="name" valueExpression="aql: 'I_' + arg0"/>
+                  </subModelOperations>
+                </firstModelOperations>
+              </initialOperation>
+            </ownedTools>
+            <ownedTools xsi:type="tool:DirectEditLabel" name="Final State LE" inputLabelExpression="aql:self.name">
+              <mask mask="{0}"/>
+              <initialOperation>
+                <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                  <subModelOperations xsi:type="tool_1:If" conditionExpression="aql: arg0.startsWith('F_')">
+                    <subModelOperations xsi:type="tool_1:SetValue" featureName="name" valueExpression="var:0"/>
+                  </subModelOperations>
+                  <subModelOperations xsi:type="tool_1:If" conditionExpression="aql: not arg0.startsWith('F_')">
+                    <subModelOperations xsi:type="tool_1:SetValue" featureName="name" valueExpression="aql: 'F_' + arg0"/>
+                  </subModelOperations>
+                </firstModelOperations>
+              </initialOperation>
+            </ownedTools>
+            <ownedTools xsi:type="tool:DirectEditLabel" name="Activity LE" inputLabelExpression="feature:content">
+              <mask mask="{0}"/>
+              <initialOperation>
+                <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                  <subModelOperations xsi:type="tool_1:SetValue" featureName="content" valueExpression="var:0"/>
+                </firstModelOperations>
+              </initialOperation>
+            </ownedTools>
+            <ownedTools xsi:type="tool:DirectEditLabel" name="Transition LE" inputLabelExpression="aql: self.trigger.content + ' [ '+ self.guard.content + ' ] ' + '/ ' + self.action.content">
+              <mask mask="{0}[{1}] /{2}"/>
+              <initialOperation>
+                <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="aql:self">
+                  <subModelOperations xsi:type="tool_1:If" conditionExpression="aql: (arg0 == null) or (arg0.trim().size() == 0)">
+                    <subModelOperations xsi:type="tool_1:Unset" featureName="trigger"/>
+                  </subModelOperations>
+                  <subModelOperations xsi:type="tool_1:If" conditionExpression="aql: (arg1 == null) or (arg1.trim().size() == 0)">
+                    <subModelOperations xsi:type="tool_1:Unset" featureName="guard"/>
+                  </subModelOperations>
+                  <subModelOperations xsi:type="tool_1:If" conditionExpression="aql: (arg2 == null) or (arg2.trim().size() == 0)">
+                    <subModelOperations xsi:type="tool_1:Unset" featureName="action"/>
+                  </subModelOperations>
+                  <subModelOperations xsi:type="tool_1:If" conditionExpression="aql: (arg0 &lt;> null) and (arg0.trim().size() &lt;> 0)">
+                    <subModelOperations xsi:type="tool_1:If" conditionExpression="aql:self.trigger &lt;> null ">
+                      <subModelOperations xsi:type="tool_1:ChangeContext" browseExpression="feature:trigger">
+                        <subModelOperations xsi:type="tool_1:SetValue" featureName="content" valueExpression="aql:arg0.trim()"/>
+                      </subModelOperations>
+                    </subModelOperations>
+                    <subModelOperations xsi:type="tool_1:If" conditionExpression="aql:self.trigger == null ">
+                      <subModelOperations xsi:type="tool_1:CreateInstance" typeName="statemachine::Trigger" referenceName="trigger">
+                        <subModelOperations xsi:type="tool_1:SetValue" featureName="content" valueExpression="aql:arg0.trim()"/>
+                      </subModelOperations>
+                    </subModelOperations>
+                  </subModelOperations>
+                  <subModelOperations xsi:type="tool_1:If" conditionExpression="aql: (arg1 &lt;> null) and (arg1.trim().size() &lt;> 0)">
+                    <subModelOperations xsi:type="tool_1:If" conditionExpression="aql:self.guard &lt;> null ">
+                      <subModelOperations xsi:type="tool_1:ChangeContext" browseExpression="feature:guard">
+                        <subModelOperations xsi:type="tool_1:SetValue" featureName="content" valueExpression="aql:arg1.trim()"/>
+                      </subModelOperations>
+                    </subModelOperations>
+                    <subModelOperations xsi:type="tool_1:If" conditionExpression="aql:self.guard == null ">
+                      <subModelOperations xsi:type="tool_1:CreateInstance" typeName="statemachine::Guard" referenceName="guard">
+                        <subModelOperations xsi:type="tool_1:SetValue" featureName="content" valueExpression="aql:arg1.trim()"/>
+                      </subModelOperations>
+                    </subModelOperations>
+                  </subModelOperations>
+                  <subModelOperations xsi:type="tool_1:If" conditionExpression="aql: (arg2 &lt;> null) and (arg2.trim().size() &lt;> 0)">
+                    <subModelOperations xsi:type="tool_1:If" conditionExpression="aql:self.action &lt;> null ">
+                      <subModelOperations xsi:type="tool_1:ChangeContext" browseExpression="feature:action">
+                        <subModelOperations xsi:type="tool_1:SetValue" featureName="content" valueExpression="aql:arg2.trim()"/>
+                      </subModelOperations>
+                    </subModelOperations>
+                    <subModelOperations xsi:type="tool_1:If" conditionExpression="aql:self.action == null ">
+                      <subModelOperations xsi:type="tool_1:CreateInstance" typeName="statemachine::Action" referenceName="action">
+                        <subModelOperations xsi:type="tool_1:SetValue" featureName="content" valueExpression="aql:arg2.trim()"/>
+                      </subModelOperations>
+                    </subModelOperations>
+                  </subModelOperations>
+                </firstModelOperations>
+              </initialOperation>
+            </ownedTools>
+          </subSections>
+        </toolSections>
+      </defaultLayer>
+      <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_gray']"/>
+    </ownedRepresentations>
+    <ownedJavaExtensions qualifiedClassName="swt.most.sirius.statemachine.Services"/>
+  </ownedViewpoints>
+</description:Group>
diff --git a/domain_specific_language/graphical/swt.most.statemachine.sirius/plugin.properties b/domain_specific_language/graphical/swt.most.statemachine.sirius/plugin.properties
new file mode 100644
index 0000000000000000000000000000000000000000..70e2607d0a1de2eb6b87f6273ba60f1e98aa2abc
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.statemachine.sirius/plugin.properties
@@ -0,0 +1,3 @@
+pluginName = swt.most.sirius.statemachine
+providerName = Eclipse Modeling Project
+viewpointName = MyViewpoint
diff --git a/domain_specific_language/graphical/swt.most.statemachine.sirius/plugin.xml b/domain_specific_language/graphical/swt.most.statemachine.sirius/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..21792387f047e3de90da72a51f18b768e86361b0
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.statemachine.sirius/plugin.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+  <extension point="org.eclipse.sirius.componentization">
+    <component class="swt.most.sirius.statemachine.Activator"
+               id="swt.most.sirius.statemachine"
+	       name="statemachine">
+    </component>
+  </extension>
+</plugin>
diff --git a/domain_specific_language/graphical/swt.most.statemachine.sirius/src/swt/most/sirius/statemachine/Activator.java b/domain_specific_language/graphical/swt.most.statemachine.sirius/src/swt/most/sirius/statemachine/Activator.java
new file mode 100644
index 0000000000000000000000000000000000000000..eed533c5707cad19bb01262a1d82fe27b8dc4cff
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.statemachine.sirius/src/swt/most/sirius/statemachine/Activator.java
@@ -0,0 +1,66 @@
+package swt.most.sirius.statemachine;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.sirius.business.api.componentization.ViewpointRegistry;
+import org.eclipse.sirius.viewpoint.description.Viewpoint;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+    // The plug-in ID
+    public static final String PLUGIN_ID = "swt.most.sirius.statemachine";
+
+    // The shared instance
+    private static Activator plugin;
+
+    private static Set<Viewpoint> viewpoints; 
+
+    /**
+     * The constructor
+     */
+    public Activator() {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+     */
+    public void start(BundleContext context) throws Exception {
+      super.start(context);
+	  plugin = this;
+	  viewpoints = new HashSet<Viewpoint>();
+	  viewpoints.addAll(ViewpointRegistry.getInstance().registerFromPlugin(PLUGIN_ID + "/description/statemachine.odesign")); 
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+     */
+    public void stop(BundleContext context) throws Exception {
+	plugin = null;
+	if (viewpoints != null) {
+	    for (final Viewpoint viewpoint: viewpoints) {
+		ViewpointRegistry.getInstance().disposeFromPlugin(viewpoint);
+	    }
+	    viewpoints.clear();
+	    viewpoints = null; 
+	}
+	super.stop(context);
+    }
+
+    /**
+     * Returns the shared instance
+     * 
+     * @return the shared instance
+     */
+    public static Activator getDefault() {
+	return plugin;
+    }
+}
diff --git a/domain_specific_language/graphical/swt.most.statemachine.sirius/src/swt/most/sirius/statemachine/Services.java b/domain_specific_language/graphical/swt.most.statemachine.sirius/src/swt/most/sirius/statemachine/Services.java
new file mode 100644
index 0000000000000000000000000000000000000000..4d22d4227822de056385e00fcc3466fe6d884fa8
--- /dev/null
+++ b/domain_specific_language/graphical/swt.most.statemachine.sirius/src/swt/most/sirius/statemachine/Services.java
@@ -0,0 +1,17 @@
+package swt.most.sirius.statemachine;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * The services class used by VSM.
+ */
+public class Services {
+    
+    /**
+    * See http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.sirius.doc%2Fdoc%2Findex.html&cp=24 for documentation on how to write service methods.
+    */
+    public EObject myService(EObject self, String arg) {
+       // TODO Auto-generated code
+      return self;
+    }
+}
diff --git a/domain_specific_language/textual/runtime/examples-xtext/.project b/domain_specific_language/textual/runtime/examples-xtext/.project
new file mode 100644
index 0000000000000000000000000000000000000000..421660760d02000efd25e5017a75e494d5e3d778
--- /dev/null
+++ b/domain_specific_language/textual/runtime/examples-xtext/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>examples-xtext</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+	</natures>
+</projectDescription>
diff --git a/domain_specific_language/textual/runtime/examples-xtext/garagedoor.statemachine b/domain_specific_language/textual/runtime/examples-xtext/garagedoor.statemachine
new file mode 100644
index 0000000000000000000000000000000000000000..7a304189ad16a9717e98349f504e302bb2271eab
--- /dev/null
+++ b/domain_specific_language/textual/runtime/examples-xtext/garagedoor.statemachine
@@ -0,0 +1,33 @@
+StateMachine "Garage Door"{
+	
+	start I_initial
+	end F_final
+	
+	state Open
+	state Opening
+	state Closed
+	state Closing
+	
+	I_initial --> Closed
+	Closed --> F_final
+	
+	Closed - openDoor / motor.upwards -> Opening
+	Opening - stopper /motor.stop-> Open
+	Open - closeDoor / motor.downwards -> Closing
+	Closing - stopper /motor.stop -> Closed
+	
+	Opening - closeDoor / motor.downwards -> Closing
+	Closing - openDoor / motor.upwards -> Opening
+	
+	
+	Open - openDoor-> Open
+	Opening - openDoor -> Opening
+	
+	Closed - closeDoor -> Closed
+	Closing - closeDoor-> Closing
+	
+	//Error
+	//F_final --> Closed
+	//Closed --> I_initial 
+	
+}
\ No newline at end of file
diff --git a/domain_specific_language/textual/runtime/examples-xtext/switch.statemachine b/domain_specific_language/textual/runtime/examples-xtext/switch.statemachine
new file mode 100644
index 0000000000000000000000000000000000000000..88eaecf775abf4323323d293f33068366a725bf3
--- /dev/null
+++ b/domain_specific_language/textual/runtime/examples-xtext/switch.statemachine
@@ -0,0 +1,10 @@
+StateMachine Switch{
+	
+	start I_initial
+	state on{ do: do_something }
+	state off{ do: do_nothing } 
+	
+	I_initial --> off
+	off - flip -> on
+	on - flip -> off
+}
\ No newline at end of file
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/.classpath b/domain_specific_language/textual/swt.most.statemachine.xtext/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..4e12da8fbda9296c7f887bacc83d00c948fdfe7b
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/.classpath
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="src" path="swt.most.xtext.statemachine/src"/>
+	<classpathentry kind="src" path="swt.most.xtext.statemachine/src-gen"/>
+	<classpathentry kind="src" path="swt.most.xtext.statemachine/xtend-gen"/>
+	<classpathentry kind="src" path="swt.most.xtext.statemachine.ide/src"/>
+	<classpathentry kind="src" path="swt.most.xtext.statemachine.ide/src-gen"/>
+	<classpathentry kind="src" path="swt.most.xtext.statemachine.tests/src-gen"/>
+	<classpathentry kind="src" path="swt.most.xtext.statemachine.tests/xtend-gen"/>
+	<classpathentry kind="src" path="swt.most.xtext.statemachine.ui/src"/>
+	<classpathentry kind="src" path="swt.most.xtext.statemachine.ui/src-gen"/>
+	<classpathentry kind="src" path="swt.most.xtext.statemachine.ui.tests/src-gen"/>
+	<classpathentry kind="lib" path="swt.most.xtext.statemachine/.antlr-generator-3.2.0-patch.jar"/>
+	<classpathentry kind="output" path="swt.most.xtext.statemachine/bin"/>
+</classpath>
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/.project b/domain_specific_language/textual/swt.most.statemachine.xtext/.project
new file mode 100644
index 0000000000000000000000000000000000000000..14671007c67750ac258034caaeb1d5d3c7e47b47
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.xtext.statemachine</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+	</natures>
+</projectDescription>
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.classpath b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..7994b693843c3539027c7d53e955031340c68cf2
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="xtend-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.project b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.project
new file mode 100644
index 0000000000000000000000000000000000000000..3a5c187bd9ba803aa99c4554ff50c5c106108dbf
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.statemachine.xtext.ide</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.settings/org.eclipse.core.resources.prefs b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.settings/org.eclipse.jdt.core.prefs b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..3a79233b1335743cc32ed3638c1a2d0c1f52d303
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
+org.eclipse.jdt.core.compiler.compliance=21
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=21
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/META-INF/MANIFEST.MF b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..c67d6059f513cf3725224f044bdfb880802fed3c
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: swt.most.statemachine.xtext.ide
+Bundle-ManifestVersion: 2
+Bundle-Name: swt.most.statemachine.xtext.ide
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.qualifier
+Bundle-SymbolicName: swt.most.statemachine.xtext.ide; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: swt.most.statemachine.xtext,
+ swt.most.statemachine,
+ org.eclipse.xtext.ide,
+ org.eclipse.xtext.xbase.ide,
+ org.antlr.runtime;bundle-version="[3.2.0,3.2.1)"
+Bundle-RequiredExecutionEnvironment: JavaSE-21
+Export-Package: swt.most.statemachine.xtext.ide.contentassist.antlr,
+ swt.most.statemachine.xtext.ide.contentassist.antlr.internal
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/META-INF/services/org.eclipse.xtext.ISetup b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/META-INF/services/org.eclipse.xtext.ISetup
new file mode 100644
index 0000000000000000000000000000000000000000..34f9d12eaee5910599fef7d1d585b837658ef273
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/META-INF/services/org.eclipse.xtext.ISetup
@@ -0,0 +1 @@
+swt.most.statemachine.xtext.ide.ParserIdeSetup
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/AbstractParserIdeModule.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/AbstractParserIdeModule.class
new file mode 100644
index 0000000000000000000000000000000000000000..81ebcb02af551e548fca96baf762687c95d9238a
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/AbstractParserIdeModule.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/ParserIdeModule.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/ParserIdeModule.class
new file mode 100644
index 0000000000000000000000000000000000000000..99c38bc0c4df78be9a4b6f37dd95ecc0fca99289
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/ParserIdeModule.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/ParserIdeSetup.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/ParserIdeSetup.class
new file mode 100644
index 0000000000000000000000000000000000000000..21a6ae48ae09386828a2130bbbd680fdcd744195
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/ParserIdeSetup.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/ParserParser$NameMappings.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/ParserParser$NameMappings.class
new file mode 100644
index 0000000000000000000000000000000000000000..f90105a184a15e9bb23dad1ac34f95298e48eaee
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/ParserParser$NameMappings.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/ParserParser.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/ParserParser.class
new file mode 100644
index 0000000000000000000000000000000000000000..0dcd667581d0bc509f10045ba53b7ddb3ca81657
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/ParserParser.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/PartialParserContentAssistParser.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/PartialParserContentAssistParser.class
new file mode 100644
index 0000000000000000000000000000000000000000..298e47d63fefe556cd7738518d450697e4fe31a7
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/PartialParserContentAssistParser.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.g b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.g
new file mode 100644
index 0000000000000000000000000000000000000000..2991bbc88c13fdb67d1c920ad4c7894b37a68785
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.g
@@ -0,0 +1,1969 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+grammar InternalParser;
+
+options {
+	superClass=AbstractInternalContentAssistParser;
+}
+
+@lexer::header {
+package swt.most.statemachine.xtext.ide.contentassist.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.Lexer;
+}
+
+@parser::header {
+package swt.most.statemachine.xtext.ide.contentassist.antlr.internal;
+
+import java.io.InputStream;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.DFA;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+
+}
+@parser::members {
+	private ParserGrammarAccess grammarAccess;
+
+	public void setGrammarAccess(ParserGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+
+	@Override
+	protected Grammar getGrammar() {
+		return grammarAccess.getGrammar();
+	}
+
+	@Override
+	protected String getValueForTokenName(String tokenName) {
+		return tokenName;
+	}
+}
+
+// Entry rule entryRuleStateMachine
+entryRuleStateMachine
+:
+{ before(grammarAccess.getStateMachineRule()); }
+	 ruleStateMachine
+{ after(grammarAccess.getStateMachineRule()); } 
+	 EOF 
+;
+
+// Rule StateMachine
+ruleStateMachine 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getGroup()); }
+		(rule__StateMachine__Group__0)
+		{ after(grammarAccess.getStateMachineAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleNormalState
+entryRuleNormalState
+:
+{ before(grammarAccess.getNormalStateRule()); }
+	 ruleNormalState
+{ after(grammarAccess.getNormalStateRule()); } 
+	 EOF 
+;
+
+// Rule NormalState
+ruleNormalState 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getNormalStateAccess().getGroup()); }
+		(rule__NormalState__Group__0)
+		{ after(grammarAccess.getNormalStateAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleFinalState
+entryRuleFinalState
+:
+{ before(grammarAccess.getFinalStateRule()); }
+	 ruleFinalState
+{ after(grammarAccess.getFinalStateRule()); } 
+	 EOF 
+;
+
+// Rule FinalState
+ruleFinalState 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getFinalStateAccess().getGroup()); }
+		(rule__FinalState__Group__0)
+		{ after(grammarAccess.getFinalStateAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleInitialState
+entryRuleInitialState
+:
+{ before(grammarAccess.getInitialStateRule()); }
+	 ruleInitialState
+{ after(grammarAccess.getInitialStateRule()); } 
+	 EOF 
+;
+
+// Rule InitialState
+ruleInitialState 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getInitialStateAccess().getGroup()); }
+		(rule__InitialState__Group__0)
+		{ after(grammarAccess.getInitialStateAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleTransition
+entryRuleTransition
+:
+{ before(grammarAccess.getTransitionRule()); }
+	 ruleTransition
+{ after(grammarAccess.getTransitionRule()); } 
+	 EOF 
+;
+
+// Rule Transition
+ruleTransition 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getTransitionAccess().getGroup()); }
+		(rule__Transition__Group__0)
+		{ after(grammarAccess.getTransitionAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleAction
+entryRuleAction
+:
+{ before(grammarAccess.getActionRule()); }
+	 ruleAction
+{ after(grammarAccess.getActionRule()); } 
+	 EOF 
+;
+
+// Rule Action
+ruleAction 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getActionAccess().getGroup()); }
+		(rule__Action__Group__0)
+		{ after(grammarAccess.getActionAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleTrigger
+entryRuleTrigger
+:
+{ before(grammarAccess.getTriggerRule()); }
+	 ruleTrigger
+{ after(grammarAccess.getTriggerRule()); } 
+	 EOF 
+;
+
+// Rule Trigger
+ruleTrigger 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getTriggerAccess().getGroup()); }
+		(rule__Trigger__Group__0)
+		{ after(grammarAccess.getTriggerAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleGuard
+entryRuleGuard
+:
+{ before(grammarAccess.getGuardRule()); }
+	 ruleGuard
+{ after(grammarAccess.getGuardRule()); } 
+	 EOF 
+;
+
+// Rule Guard
+ruleGuard 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getGuardAccess().getGroup()); }
+		(rule__Guard__Group__0)
+		{ after(grammarAccess.getGuardAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleActivityContent
+entryRuleActivityContent
+:
+{ before(grammarAccess.getActivityContentRule()); }
+	 ruleActivityContent
+{ after(grammarAccess.getActivityContentRule()); } 
+	 EOF 
+;
+
+// Rule ActivityContent
+ruleActivityContent 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getActivityContentAccess().getAlternatives()); }
+		(rule__ActivityContent__Alternatives)
+		{ after(grammarAccess.getActivityContentAccess().getAlternatives()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleEString
+entryRuleEString
+:
+{ before(grammarAccess.getEStringRule()); }
+	 ruleEString
+{ after(grammarAccess.getEStringRule()); } 
+	 EOF 
+;
+
+// Rule EString
+ruleEString 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getEStringAccess().getAlternatives()); }
+		(rule__EString__Alternatives)
+		{ after(grammarAccess.getEStringAccess().getAlternatives()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Alternatives_5
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getStatesAssignment_5_0()); }
+		(rule__StateMachine__StatesAssignment_5_0)
+		{ after(grammarAccess.getStateMachineAccess().getStatesAssignment_5_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getStateMachineAccess().getFinalstatesAssignment_5_1()); }
+		(rule__StateMachine__FinalstatesAssignment_5_1)
+		{ after(grammarAccess.getStateMachineAccess().getFinalstatesAssignment_5_1()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getStateMachineAccess().getTransitionsAssignment_5_2()); }
+		(rule__StateMachine__TransitionsAssignment_5_2)
+		{ after(grammarAccess.getStateMachineAccess().getTransitionsAssignment_5_2()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ActivityContent__Alternatives
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getActivityContentAccess().getSTRINGTerminalRuleCall_0()); }
+		RULE_STRING
+		{ after(grammarAccess.getActivityContentAccess().getSTRINGTerminalRuleCall_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getActivityContentAccess().getIDTerminalRuleCall_1()); }
+		RULE_ID
+		{ after(grammarAccess.getActivityContentAccess().getIDTerminalRuleCall_1()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getActivityContentAccess().getCALLTerminalRuleCall_2()); }
+		RULE_CALL
+		{ after(grammarAccess.getActivityContentAccess().getCALLTerminalRuleCall_2()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EString__Alternatives
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); }
+		RULE_STRING
+		{ after(grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); }
+		RULE_ID
+		{ after(grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getEStringAccess().getINITIALSTATENAMETerminalRuleCall_2()); }
+		RULE_INITIALSTATENAME
+		{ after(grammarAccess.getEStringAccess().getINITIALSTATENAMETerminalRuleCall_2()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getEStringAccess().getFINALSTATENAMETerminalRuleCall_3()); }
+		RULE_FINALSTATENAME
+		{ after(grammarAccess.getEStringAccess().getFINALSTATENAMETerminalRuleCall_3()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__0__Impl
+	rule__StateMachine__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getStateMachineAction_0()); }
+	()
+	{ after(grammarAccess.getStateMachineAccess().getStateMachineAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__1__Impl
+	rule__StateMachine__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getStateMachineKeyword_1()); }
+	'StateMachine'
+	{ after(grammarAccess.getStateMachineAccess().getStateMachineKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__2__Impl
+	rule__StateMachine__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getNameAssignment_2()); }
+	(rule__StateMachine__NameAssignment_2)
+	{ after(grammarAccess.getStateMachineAccess().getNameAssignment_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__3__Impl
+	rule__StateMachine__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getLeftCurlyBracketKeyword_3()); }
+	'{'
+	{ after(grammarAccess.getStateMachineAccess().getLeftCurlyBracketKeyword_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__4__Impl
+	rule__StateMachine__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__4__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getInitialstateAssignment_4()); }
+	(rule__StateMachine__InitialstateAssignment_4)
+	{ after(grammarAccess.getStateMachineAccess().getInitialstateAssignment_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__5
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__5__Impl
+	rule__StateMachine__Group__6
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__5__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getAlternatives_5()); }
+	(rule__StateMachine__Alternatives_5)*
+	{ after(grammarAccess.getStateMachineAccess().getAlternatives_5()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__6
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__6__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__6__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getRightCurlyBracketKeyword_6()); }
+	'}'
+	{ after(grammarAccess.getStateMachineAccess().getRightCurlyBracketKeyword_6()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__NormalState__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group__0__Impl
+	rule__NormalState__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getNormalStateAction_0()); }
+	()
+	{ after(grammarAccess.getNormalStateAccess().getNormalStateAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group__1__Impl
+	rule__NormalState__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getStateKeyword_1()); }
+	'state'
+	{ after(grammarAccess.getNormalStateAccess().getStateKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group__2__Impl
+	rule__NormalState__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getNameAssignment_2()); }
+	(rule__NormalState__NameAssignment_2)
+	{ after(grammarAccess.getNormalStateAccess().getNameAssignment_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getGroup_3()); }
+	(rule__NormalState__Group_3__0)?
+	{ after(grammarAccess.getNormalStateAccess().getGroup_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__NormalState__Group_3__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3__0__Impl
+	rule__NormalState__Group_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getLeftCurlyBracketKeyword_3_0()); }
+	'{'
+	{ after(grammarAccess.getNormalStateAccess().getLeftCurlyBracketKeyword_3_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3__1__Impl
+	rule__NormalState__Group_3__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getGroup_3_1()); }
+	(rule__NormalState__Group_3_1__0)?
+	{ after(grammarAccess.getNormalStateAccess().getGroup_3_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3__2__Impl
+	rule__NormalState__Group_3__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getGroup_3_2()); }
+	(rule__NormalState__Group_3_2__0)?
+	{ after(grammarAccess.getNormalStateAccess().getGroup_3_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3__3__Impl
+	rule__NormalState__Group_3__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getGroup_3_3()); }
+	(rule__NormalState__Group_3_3__0)?
+	{ after(grammarAccess.getNormalStateAccess().getGroup_3_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3__4__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__4__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getRightCurlyBracketKeyword_3_4()); }
+	'}'
+	{ after(grammarAccess.getNormalStateAccess().getRightCurlyBracketKeyword_3_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__NormalState__Group_3_1__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_1__0__Impl
+	rule__NormalState__Group_3_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_1__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getEntryKeyword_3_1_0()); }
+	'entry:'
+	{ after(grammarAccess.getNormalStateAccess().getEntryKeyword_3_1_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_1__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_1__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getEntry_Assignment_3_1_1()); }
+	(rule__NormalState__Entry_Assignment_3_1_1)
+	{ after(grammarAccess.getNormalStateAccess().getEntry_Assignment_3_1_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__NormalState__Group_3_2__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_2__0__Impl
+	rule__NormalState__Group_3_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_2__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getDoKeyword_3_2_0()); }
+	'do:'
+	{ after(grammarAccess.getNormalStateAccess().getDoKeyword_3_2_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_2__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_2__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_2__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getDo_Assignment_3_2_1()); }
+	(rule__NormalState__Do_Assignment_3_2_1)
+	{ after(grammarAccess.getNormalStateAccess().getDo_Assignment_3_2_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__NormalState__Group_3_3__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_3__0__Impl
+	rule__NormalState__Group_3_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_3__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getExitKeyword_3_3_0()); }
+	'exit:'
+	{ after(grammarAccess.getNormalStateAccess().getExitKeyword_3_3_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_3__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_3__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_3__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getExit_Assignment_3_3_1()); }
+	(rule__NormalState__Exit_Assignment_3_3_1)
+	{ after(grammarAccess.getNormalStateAccess().getExit_Assignment_3_3_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__FinalState__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__FinalState__Group__0__Impl
+	rule__FinalState__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getFinalStateAccess().getFinalStateAction_0()); }
+	()
+	{ after(grammarAccess.getFinalStateAccess().getFinalStateAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__FinalState__Group__1__Impl
+	rule__FinalState__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getFinalStateAccess().getEndKeyword_1()); }
+	'end'
+	{ after(grammarAccess.getFinalStateAccess().getEndKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__FinalState__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getFinalStateAccess().getNameAssignment_2()); }
+	(rule__FinalState__NameAssignment_2)
+	{ after(grammarAccess.getFinalStateAccess().getNameAssignment_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__InitialState__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__InitialState__Group__0__Impl
+	rule__InitialState__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getInitialStateAccess().getInitialStateAction_0()); }
+	()
+	{ after(grammarAccess.getInitialStateAccess().getInitialStateAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__InitialState__Group__1__Impl
+	rule__InitialState__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getInitialStateAccess().getStartKeyword_1()); }
+	'start'
+	{ after(grammarAccess.getInitialStateAccess().getStartKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__InitialState__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getInitialStateAccess().getNameAssignment_2()); }
+	(rule__InitialState__NameAssignment_2)
+	{ after(grammarAccess.getInitialStateAccess().getNameAssignment_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Transition__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__0__Impl
+	rule__Transition__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getTransitionAction_0()); }
+	()
+	{ after(grammarAccess.getTransitionAccess().getTransitionAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__1__Impl
+	rule__Transition__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getFromAssignment_1()); }
+	(rule__Transition__FromAssignment_1)
+	{ after(grammarAccess.getTransitionAccess().getFromAssignment_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__2__Impl
+	rule__Transition__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getHyphenMinusKeyword_2()); }
+	'-'
+	{ after(grammarAccess.getTransitionAccess().getHyphenMinusKeyword_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__3__Impl
+	rule__Transition__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getTriggerAssignment_3()); }
+	(rule__Transition__TriggerAssignment_3)?
+	{ after(grammarAccess.getTransitionAccess().getTriggerAssignment_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__4__Impl
+	rule__Transition__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__4__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getGroup_4()); }
+	(rule__Transition__Group_4__0)?
+	{ after(grammarAccess.getTransitionAccess().getGroup_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__5
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__5__Impl
+	rule__Transition__Group__6
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__5__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getGroup_5()); }
+	(rule__Transition__Group_5__0)?
+	{ after(grammarAccess.getTransitionAccess().getGroup_5()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__6
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__6__Impl
+	rule__Transition__Group__7
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__6__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getHyphenMinusGreaterThanSignKeyword_6()); }
+	'->'
+	{ after(grammarAccess.getTransitionAccess().getHyphenMinusGreaterThanSignKeyword_6()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__7
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__7__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__7__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getToAssignment_7()); }
+	(rule__Transition__ToAssignment_7)
+	{ after(grammarAccess.getTransitionAccess().getToAssignment_7()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Transition__Group_4__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group_4__0__Impl
+	rule__Transition__Group_4__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_4__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getLeftSquareBracketKeyword_4_0()); }
+	'['
+	{ after(grammarAccess.getTransitionAccess().getLeftSquareBracketKeyword_4_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_4__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group_4__1__Impl
+	rule__Transition__Group_4__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_4__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getGuardAssignment_4_1()); }
+	(rule__Transition__GuardAssignment_4_1)
+	{ after(grammarAccess.getTransitionAccess().getGuardAssignment_4_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_4__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group_4__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_4__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getRightSquareBracketKeyword_4_2()); }
+	']'
+	{ after(grammarAccess.getTransitionAccess().getRightSquareBracketKeyword_4_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Transition__Group_5__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group_5__0__Impl
+	rule__Transition__Group_5__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_5__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getSolidusKeyword_5_0()); }
+	'/'
+	{ after(grammarAccess.getTransitionAccess().getSolidusKeyword_5_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_5__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group_5__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_5__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getActionAssignment_5_1()); }
+	(rule__Transition__ActionAssignment_5_1)
+	{ after(grammarAccess.getTransitionAccess().getActionAssignment_5_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Action__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Action__Group__0__Impl
+	rule__Action__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Action__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getActionAccess().getActionAction_0()); }
+	()
+	{ after(grammarAccess.getActionAccess().getActionAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Action__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Action__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Action__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getActionAccess().getContentAssignment_1()); }
+	(rule__Action__ContentAssignment_1)
+	{ after(grammarAccess.getActionAccess().getContentAssignment_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Trigger__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Trigger__Group__0__Impl
+	rule__Trigger__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Trigger__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTriggerAccess().getTriggerAction_0()); }
+	()
+	{ after(grammarAccess.getTriggerAccess().getTriggerAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Trigger__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Trigger__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Trigger__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTriggerAccess().getContentAssignment_1()); }
+	(rule__Trigger__ContentAssignment_1)
+	{ after(grammarAccess.getTriggerAccess().getContentAssignment_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Guard__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Guard__Group__0__Impl
+	rule__Guard__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Guard__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getGuardAccess().getGuardAction_0()); }
+	()
+	{ after(grammarAccess.getGuardAccess().getGuardAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Guard__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Guard__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Guard__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getGuardAccess().getContentAssignment_1()); }
+	(rule__Guard__ContentAssignment_1)
+	{ after(grammarAccess.getGuardAccess().getContentAssignment_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__StateMachine__NameAssignment_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getNameEStringParserRuleCall_2_0()); }
+		ruleEString
+		{ after(grammarAccess.getStateMachineAccess().getNameEStringParserRuleCall_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__InitialstateAssignment_4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getInitialstateInitialStateParserRuleCall_4_0()); }
+		ruleInitialState
+		{ after(grammarAccess.getStateMachineAccess().getInitialstateInitialStateParserRuleCall_4_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__StatesAssignment_5_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getStatesNormalStateParserRuleCall_5_0_0()); }
+		ruleNormalState
+		{ after(grammarAccess.getStateMachineAccess().getStatesNormalStateParserRuleCall_5_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__FinalstatesAssignment_5_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getFinalstatesFinalStateParserRuleCall_5_1_0()); }
+		ruleFinalState
+		{ after(grammarAccess.getStateMachineAccess().getFinalstatesFinalStateParserRuleCall_5_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__TransitionsAssignment_5_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getTransitionsTransitionParserRuleCall_5_2_0()); }
+		ruleTransition
+		{ after(grammarAccess.getStateMachineAccess().getTransitionsTransitionParserRuleCall_5_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__NameAssignment_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getNormalStateAccess().getNameEStringParserRuleCall_2_0()); }
+		ruleEString
+		{ after(grammarAccess.getNormalStateAccess().getNameEStringParserRuleCall_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Entry_Assignment_3_1_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getNormalStateAccess().getEntry_ActionParserRuleCall_3_1_1_0()); }
+		ruleAction
+		{ after(grammarAccess.getNormalStateAccess().getEntry_ActionParserRuleCall_3_1_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Do_Assignment_3_2_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getNormalStateAccess().getDo_ActionParserRuleCall_3_2_1_0()); }
+		ruleAction
+		{ after(grammarAccess.getNormalStateAccess().getDo_ActionParserRuleCall_3_2_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Exit_Assignment_3_3_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getNormalStateAccess().getExit_ActionParserRuleCall_3_3_1_0()); }
+		ruleAction
+		{ after(grammarAccess.getNormalStateAccess().getExit_ActionParserRuleCall_3_3_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__NameAssignment_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getFinalStateAccess().getNameFINALSTATENAMETerminalRuleCall_2_0()); }
+		RULE_FINALSTATENAME
+		{ after(grammarAccess.getFinalStateAccess().getNameFINALSTATENAMETerminalRuleCall_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__NameAssignment_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getInitialStateAccess().getNameINITIALSTATENAMETerminalRuleCall_2_0()); }
+		RULE_INITIALSTATENAME
+		{ after(grammarAccess.getInitialStateAccess().getNameINITIALSTATENAMETerminalRuleCall_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__FromAssignment_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTransitionAccess().getFromStateCrossReference_1_0()); }
+		(
+			{ before(grammarAccess.getTransitionAccess().getFromStateEStringParserRuleCall_1_0_1()); }
+			ruleEString
+			{ after(grammarAccess.getTransitionAccess().getFromStateEStringParserRuleCall_1_0_1()); }
+		)
+		{ after(grammarAccess.getTransitionAccess().getFromStateCrossReference_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__TriggerAssignment_3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTransitionAccess().getTriggerTriggerParserRuleCall_3_0()); }
+		ruleTrigger
+		{ after(grammarAccess.getTransitionAccess().getTriggerTriggerParserRuleCall_3_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__GuardAssignment_4_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTransitionAccess().getGuardGuardParserRuleCall_4_1_0()); }
+		ruleGuard
+		{ after(grammarAccess.getTransitionAccess().getGuardGuardParserRuleCall_4_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__ActionAssignment_5_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTransitionAccess().getActionActionParserRuleCall_5_1_0()); }
+		ruleAction
+		{ after(grammarAccess.getTransitionAccess().getActionActionParserRuleCall_5_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__ToAssignment_7
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTransitionAccess().getToStateCrossReference_7_0()); }
+		(
+			{ before(grammarAccess.getTransitionAccess().getToStateEStringParserRuleCall_7_0_1()); }
+			ruleEString
+			{ after(grammarAccess.getTransitionAccess().getToStateEStringParserRuleCall_7_0_1()); }
+		)
+		{ after(grammarAccess.getTransitionAccess().getToStateCrossReference_7_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Action__ContentAssignment_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getActionAccess().getContentActivityContentParserRuleCall_1_0()); }
+		ruleActivityContent
+		{ after(grammarAccess.getActionAccess().getContentActivityContentParserRuleCall_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Trigger__ContentAssignment_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTriggerAccess().getContentActivityContentParserRuleCall_1_0()); }
+		ruleActivityContent
+		{ after(grammarAccess.getTriggerAccess().getContentActivityContentParserRuleCall_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Guard__ContentAssignment_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getGuardAccess().getContentEStringParserRuleCall_1_0()); }
+		ruleEString
+		{ after(grammarAccess.getGuardAccess().getContentEStringParserRuleCall_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+RULE_INITIALSTATENAME : 'I_' (RULE_INT|RULE_STRING|RULE_ID)+;
+
+RULE_FINALSTATENAME : 'F_' (RULE_INT|RULE_STRING|RULE_ID)+;
+
+RULE_CALL : RULE_ID ('.' RULE_ID)+;
+
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+fragment RULE_INT : ('0'..'9')+;
+
+RULE_STRING : ('"' ('\\' .|~(('\\'|'"')))* '"'|'\'' ('\\' .|~(('\\'|'\'')))* '\'');
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+RULE_ANY_OTHER : .;
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.tokens b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.tokens
new file mode 100644
index 0000000000000000000000000000000000000000..144c9a537a7addcf550e90b5df4aefbbd88cede2
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.tokens
@@ -0,0 +1,38 @@
+'-'=23
+'->'=24
+'/'=27
+'StateMachine'=14
+'['=25
+']'=26
+'do:'=19
+'end'=21
+'entry:'=18
+'exit:'=20
+'start'=22
+'state'=17
+'{'=15
+'}'=16
+RULE_ANY_OTHER=13
+RULE_CALL=6
+RULE_FINALSTATENAME=8
+RULE_ID=5
+RULE_INITIALSTATENAME=7
+RULE_INT=9
+RULE_ML_COMMENT=10
+RULE_SL_COMMENT=11
+RULE_STRING=4
+RULE_WS=12
+T__14=14
+T__15=15
+T__16=16
+T__17=17
+T__18=18
+T__19=19
+T__20=20
+T__21=21
+T__22=22
+T__23=23
+T__24=24
+T__25=25
+T__26=26
+T__27=27
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserLexer$DFA15.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserLexer$DFA15.class
new file mode 100644
index 0000000000000000000000000000000000000000..e19c55da31d079f71660bb533c5851ed60df53dd
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserLexer$DFA15.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserLexer.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserLexer.class
new file mode 100644
index 0000000000000000000000000000000000000000..5dc00ce86da529bb93bf21aeb9ef6997753b1401
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserLexer.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserParser.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserParser.class
new file mode 100644
index 0000000000000000000000000000000000000000..8db67359375275a27d6af43f1ff8369d6f58eb17
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/bin/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserParser.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/build.properties b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..5c6bbf99f082bb19d8aa4ec89f7902c3e8936171
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/build.properties
@@ -0,0 +1,6 @@
+source.. = src/,\
+           src-gen/,\
+           xtend-gen/
+bin.includes = .,\
+               META-INF/
+bin.excludes = **/*.xtend
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/META-INF/services/org.eclipse.xtext.ISetup b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/META-INF/services/org.eclipse.xtext.ISetup
new file mode 100644
index 0000000000000000000000000000000000000000..34f9d12eaee5910599fef7d1d585b837658ef273
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/META-INF/services/org.eclipse.xtext.ISetup
@@ -0,0 +1 @@
+swt.most.statemachine.xtext.ide.ParserIdeSetup
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/AbstractParserIdeModule.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/AbstractParserIdeModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..c02654ceee60ea2cf47720484b88c1c24087225c
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/AbstractParserIdeModule.java
@@ -0,0 +1,60 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ide;
+
+import com.google.inject.Binder;
+import com.google.inject.name.Names;
+import org.eclipse.xtext.ide.DefaultIdeModule;
+import org.eclipse.xtext.ide.LexerIdeBindings;
+import org.eclipse.xtext.ide.editor.contentassist.FQNPrefixMatcher;
+import org.eclipse.xtext.ide.editor.contentassist.IPrefixMatcher;
+import org.eclipse.xtext.ide.editor.contentassist.IProposalConflictHelper;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.AntlrProposalConflictHelper;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.IContentAssistParser;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.Lexer;
+import org.eclipse.xtext.ide.refactoring.IRenameStrategy2;
+import org.eclipse.xtext.ide.server.rename.IRenameService2;
+import org.eclipse.xtext.ide.server.rename.RenameService2;
+import swt.most.statemachine.xtext.ide.contentassist.antlr.ParserParser;
+import swt.most.statemachine.xtext.ide.contentassist.antlr.internal.InternalParserLexer;
+
+/**
+ * Manual modifications go to {@link ParserIdeModule}.
+ */
+@SuppressWarnings("all")
+public abstract class AbstractParserIdeModule extends DefaultIdeModule {
+
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public void configureContentAssistLexer(Binder binder) {
+		binder.bind(Lexer.class)
+			.annotatedWith(Names.named(LexerIdeBindings.CONTENT_ASSIST))
+			.to(InternalParserLexer.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public Class<? extends IContentAssistParser> bindIContentAssistParser() {
+		return ParserParser.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public Class<? extends IProposalConflictHelper> bindIProposalConflictHelper() {
+		return AntlrProposalConflictHelper.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.exporting.QualifiedNamesFragment2
+	public Class<? extends IPrefixMatcher> bindIPrefixMatcher() {
+		return FQNPrefixMatcher.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.refactoring.RefactorElementNameFragment2
+	public Class<? extends IRenameService2> bindIRenameService2() {
+		return RenameService2.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.refactoring.RefactorElementNameFragment2
+	public Class<? extends IRenameStrategy2> bindIRenameStrategy2() {
+		return IRenameStrategy2.DefaultImpl.class;
+	}
+	
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/ParserParser.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/ParserParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..8bb3855811e2c78d13527f0032bdfa1c082481d1
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/ParserParser.java
@@ -0,0 +1,112 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ide.contentassist.antlr;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import java.util.Map;
+import org.eclipse.xtext.AbstractElement;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.AbstractContentAssistParser;
+import swt.most.statemachine.xtext.ide.contentassist.antlr.internal.InternalParserParser;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+
+public class ParserParser extends AbstractContentAssistParser {
+
+	@Singleton
+	public static final class NameMappings {
+		
+		private final Map<AbstractElement, String> mappings;
+		
+		@Inject
+		public NameMappings(ParserGrammarAccess grammarAccess) {
+			ImmutableMap.Builder<AbstractElement, String> builder = ImmutableMap.builder();
+			init(builder, grammarAccess);
+			this.mappings = builder.build();
+		}
+		
+		public String getRuleName(AbstractElement element) {
+			return mappings.get(element);
+		}
+		
+		private static void init(ImmutableMap.Builder<AbstractElement, String> builder, ParserGrammarAccess grammarAccess) {
+			builder.put(grammarAccess.getStateMachineAccess().getAlternatives_5(), "rule__StateMachine__Alternatives_5");
+			builder.put(grammarAccess.getStateAccess().getAlternatives(), "rule__State__Alternatives");
+			builder.put(grammarAccess.getActivityContentAccess().getAlternatives(), "rule__ActivityContent__Alternatives");
+			builder.put(grammarAccess.getEStringAccess().getAlternatives(), "rule__EString__Alternatives");
+			builder.put(grammarAccess.getStateMachineAccess().getGroup(), "rule__StateMachine__Group__0");
+			builder.put(grammarAccess.getNormalStateAccess().getGroup(), "rule__NormalState__Group__0");
+			builder.put(grammarAccess.getNormalStateAccess().getGroup_3(), "rule__NormalState__Group_3__0");
+			builder.put(grammarAccess.getNormalStateAccess().getGroup_3_1(), "rule__NormalState__Group_3_1__0");
+			builder.put(grammarAccess.getNormalStateAccess().getGroup_3_2(), "rule__NormalState__Group_3_2__0");
+			builder.put(grammarAccess.getNormalStateAccess().getGroup_3_3(), "rule__NormalState__Group_3_3__0");
+			builder.put(grammarAccess.getFinalStateAccess().getGroup(), "rule__FinalState__Group__0");
+			builder.put(grammarAccess.getInitialStateAccess().getGroup(), "rule__InitialState__Group__0");
+			builder.put(grammarAccess.getTransitionAccess().getGroup(), "rule__Transition__Group__0");
+			builder.put(grammarAccess.getTransitionAccess().getGroup_4(), "rule__Transition__Group_4__0");
+			builder.put(grammarAccess.getTransitionAccess().getGroup_5(), "rule__Transition__Group_5__0");
+			builder.put(grammarAccess.getActionAccess().getGroup(), "rule__Action__Group__0");
+			builder.put(grammarAccess.getTriggerAccess().getGroup(), "rule__Trigger__Group__0");
+			builder.put(grammarAccess.getGuardAccess().getGroup(), "rule__Guard__Group__0");
+			builder.put(grammarAccess.getStateMachineAccess().getNameAssignment_2(), "rule__StateMachine__NameAssignment_2");
+			builder.put(grammarAccess.getStateMachineAccess().getInitialstateAssignment_4(), "rule__StateMachine__InitialstateAssignment_4");
+			builder.put(grammarAccess.getStateMachineAccess().getStatesAssignment_5_0(), "rule__StateMachine__StatesAssignment_5_0");
+			builder.put(grammarAccess.getStateMachineAccess().getFinalstatesAssignment_5_1(), "rule__StateMachine__FinalstatesAssignment_5_1");
+			builder.put(grammarAccess.getStateMachineAccess().getTransitionsAssignment_5_2(), "rule__StateMachine__TransitionsAssignment_5_2");
+			builder.put(grammarAccess.getNormalStateAccess().getNameAssignment_2(), "rule__NormalState__NameAssignment_2");
+			builder.put(grammarAccess.getNormalStateAccess().getEntry_Assignment_3_1_1(), "rule__NormalState__Entry_Assignment_3_1_1");
+			builder.put(grammarAccess.getNormalStateAccess().getDo_Assignment_3_2_1(), "rule__NormalState__Do_Assignment_3_2_1");
+			builder.put(grammarAccess.getNormalStateAccess().getExit_Assignment_3_3_1(), "rule__NormalState__Exit_Assignment_3_3_1");
+			builder.put(grammarAccess.getFinalStateAccess().getNameAssignment_2(), "rule__FinalState__NameAssignment_2");
+			builder.put(grammarAccess.getInitialStateAccess().getNameAssignment_2(), "rule__InitialState__NameAssignment_2");
+			builder.put(grammarAccess.getTransitionAccess().getFromAssignment_1(), "rule__Transition__FromAssignment_1");
+			builder.put(grammarAccess.getTransitionAccess().getTriggerAssignment_3(), "rule__Transition__TriggerAssignment_3");
+			builder.put(grammarAccess.getTransitionAccess().getGuardAssignment_4_1(), "rule__Transition__GuardAssignment_4_1");
+			builder.put(grammarAccess.getTransitionAccess().getActionAssignment_5_1(), "rule__Transition__ActionAssignment_5_1");
+			builder.put(grammarAccess.getTransitionAccess().getToAssignment_7(), "rule__Transition__ToAssignment_7");
+			builder.put(grammarAccess.getActionAccess().getContentAssignment_1(), "rule__Action__ContentAssignment_1");
+			builder.put(grammarAccess.getTriggerAccess().getContentAssignment_1(), "rule__Trigger__ContentAssignment_1");
+			builder.put(grammarAccess.getGuardAccess().getContentAssignment_1(), "rule__Guard__ContentAssignment_1");
+		}
+	}
+	
+	@Inject
+	private NameMappings nameMappings;
+
+	@Inject
+	private ParserGrammarAccess grammarAccess;
+
+	@Override
+	protected InternalParserParser createParser() {
+		InternalParserParser result = new InternalParserParser(null);
+		result.setGrammarAccess(grammarAccess);
+		return result;
+	}
+
+	@Override
+	protected String getRuleName(AbstractElement element) {
+		return nameMappings.getRuleName(element);
+	}
+
+	@Override
+	protected String[] getInitialHiddenTokens() {
+		return new String[] { "RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT" };
+	}
+
+	public ParserGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+
+	public void setGrammarAccess(ParserGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+	
+	public NameMappings getNameMappings() {
+		return nameMappings;
+	}
+	
+	public void setNameMappings(NameMappings nameMappings) {
+		this.nameMappings = nameMappings;
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/PartialParserContentAssistParser.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/PartialParserContentAssistParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..9229e6f79245e8929e47059f5ef2813463a63ebb
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/PartialParserContentAssistParser.java
@@ -0,0 +1,33 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ide.contentassist.antlr;
+
+import java.util.Collection;
+import java.util.Collections;
+import org.eclipse.xtext.AbstractRule;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.FollowElement;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.util.PolymorphicDispatcher;
+
+public class PartialParserContentAssistParser extends ParserParser {
+
+	private AbstractRule rule;
+
+	@Override
+	public void initializeFor(AbstractRule rule) {
+		this.rule = rule;
+	}
+
+	@Override
+	protected Collection<FollowElement> getFollowElements(AbstractInternalContentAssistParser parser) {
+		if (rule == null || rule.eIsProxy())
+			return Collections.emptyList();
+		String methodName = "entryRule" + rule.getName();
+		PolymorphicDispatcher<Collection<FollowElement>> dispatcher = 
+			new PolymorphicDispatcher<Collection<FollowElement>>(methodName, 0, 0, Collections.singletonList(parser));
+		dispatcher.invoke();
+		return parser.getFollowElements();
+	}
+
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.g b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.g
new file mode 100644
index 0000000000000000000000000000000000000000..2991bbc88c13fdb67d1c920ad4c7894b37a68785
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.g
@@ -0,0 +1,1969 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+grammar InternalParser;
+
+options {
+	superClass=AbstractInternalContentAssistParser;
+}
+
+@lexer::header {
+package swt.most.statemachine.xtext.ide.contentassist.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.Lexer;
+}
+
+@parser::header {
+package swt.most.statemachine.xtext.ide.contentassist.antlr.internal;
+
+import java.io.InputStream;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.DFA;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+
+}
+@parser::members {
+	private ParserGrammarAccess grammarAccess;
+
+	public void setGrammarAccess(ParserGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+
+	@Override
+	protected Grammar getGrammar() {
+		return grammarAccess.getGrammar();
+	}
+
+	@Override
+	protected String getValueForTokenName(String tokenName) {
+		return tokenName;
+	}
+}
+
+// Entry rule entryRuleStateMachine
+entryRuleStateMachine
+:
+{ before(grammarAccess.getStateMachineRule()); }
+	 ruleStateMachine
+{ after(grammarAccess.getStateMachineRule()); } 
+	 EOF 
+;
+
+// Rule StateMachine
+ruleStateMachine 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getGroup()); }
+		(rule__StateMachine__Group__0)
+		{ after(grammarAccess.getStateMachineAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleNormalState
+entryRuleNormalState
+:
+{ before(grammarAccess.getNormalStateRule()); }
+	 ruleNormalState
+{ after(grammarAccess.getNormalStateRule()); } 
+	 EOF 
+;
+
+// Rule NormalState
+ruleNormalState 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getNormalStateAccess().getGroup()); }
+		(rule__NormalState__Group__0)
+		{ after(grammarAccess.getNormalStateAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleFinalState
+entryRuleFinalState
+:
+{ before(grammarAccess.getFinalStateRule()); }
+	 ruleFinalState
+{ after(grammarAccess.getFinalStateRule()); } 
+	 EOF 
+;
+
+// Rule FinalState
+ruleFinalState 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getFinalStateAccess().getGroup()); }
+		(rule__FinalState__Group__0)
+		{ after(grammarAccess.getFinalStateAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleInitialState
+entryRuleInitialState
+:
+{ before(grammarAccess.getInitialStateRule()); }
+	 ruleInitialState
+{ after(grammarAccess.getInitialStateRule()); } 
+	 EOF 
+;
+
+// Rule InitialState
+ruleInitialState 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getInitialStateAccess().getGroup()); }
+		(rule__InitialState__Group__0)
+		{ after(grammarAccess.getInitialStateAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleTransition
+entryRuleTransition
+:
+{ before(grammarAccess.getTransitionRule()); }
+	 ruleTransition
+{ after(grammarAccess.getTransitionRule()); } 
+	 EOF 
+;
+
+// Rule Transition
+ruleTransition 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getTransitionAccess().getGroup()); }
+		(rule__Transition__Group__0)
+		{ after(grammarAccess.getTransitionAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleAction
+entryRuleAction
+:
+{ before(grammarAccess.getActionRule()); }
+	 ruleAction
+{ after(grammarAccess.getActionRule()); } 
+	 EOF 
+;
+
+// Rule Action
+ruleAction 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getActionAccess().getGroup()); }
+		(rule__Action__Group__0)
+		{ after(grammarAccess.getActionAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleTrigger
+entryRuleTrigger
+:
+{ before(grammarAccess.getTriggerRule()); }
+	 ruleTrigger
+{ after(grammarAccess.getTriggerRule()); } 
+	 EOF 
+;
+
+// Rule Trigger
+ruleTrigger 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getTriggerAccess().getGroup()); }
+		(rule__Trigger__Group__0)
+		{ after(grammarAccess.getTriggerAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleGuard
+entryRuleGuard
+:
+{ before(grammarAccess.getGuardRule()); }
+	 ruleGuard
+{ after(grammarAccess.getGuardRule()); } 
+	 EOF 
+;
+
+// Rule Guard
+ruleGuard 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getGuardAccess().getGroup()); }
+		(rule__Guard__Group__0)
+		{ after(grammarAccess.getGuardAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleActivityContent
+entryRuleActivityContent
+:
+{ before(grammarAccess.getActivityContentRule()); }
+	 ruleActivityContent
+{ after(grammarAccess.getActivityContentRule()); } 
+	 EOF 
+;
+
+// Rule ActivityContent
+ruleActivityContent 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getActivityContentAccess().getAlternatives()); }
+		(rule__ActivityContent__Alternatives)
+		{ after(grammarAccess.getActivityContentAccess().getAlternatives()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleEString
+entryRuleEString
+:
+{ before(grammarAccess.getEStringRule()); }
+	 ruleEString
+{ after(grammarAccess.getEStringRule()); } 
+	 EOF 
+;
+
+// Rule EString
+ruleEString 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getEStringAccess().getAlternatives()); }
+		(rule__EString__Alternatives)
+		{ after(grammarAccess.getEStringAccess().getAlternatives()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Alternatives_5
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getStatesAssignment_5_0()); }
+		(rule__StateMachine__StatesAssignment_5_0)
+		{ after(grammarAccess.getStateMachineAccess().getStatesAssignment_5_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getStateMachineAccess().getFinalstatesAssignment_5_1()); }
+		(rule__StateMachine__FinalstatesAssignment_5_1)
+		{ after(grammarAccess.getStateMachineAccess().getFinalstatesAssignment_5_1()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getStateMachineAccess().getTransitionsAssignment_5_2()); }
+		(rule__StateMachine__TransitionsAssignment_5_2)
+		{ after(grammarAccess.getStateMachineAccess().getTransitionsAssignment_5_2()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ActivityContent__Alternatives
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getActivityContentAccess().getSTRINGTerminalRuleCall_0()); }
+		RULE_STRING
+		{ after(grammarAccess.getActivityContentAccess().getSTRINGTerminalRuleCall_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getActivityContentAccess().getIDTerminalRuleCall_1()); }
+		RULE_ID
+		{ after(grammarAccess.getActivityContentAccess().getIDTerminalRuleCall_1()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getActivityContentAccess().getCALLTerminalRuleCall_2()); }
+		RULE_CALL
+		{ after(grammarAccess.getActivityContentAccess().getCALLTerminalRuleCall_2()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EString__Alternatives
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); }
+		RULE_STRING
+		{ after(grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); }
+		RULE_ID
+		{ after(grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getEStringAccess().getINITIALSTATENAMETerminalRuleCall_2()); }
+		RULE_INITIALSTATENAME
+		{ after(grammarAccess.getEStringAccess().getINITIALSTATENAMETerminalRuleCall_2()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getEStringAccess().getFINALSTATENAMETerminalRuleCall_3()); }
+		RULE_FINALSTATENAME
+		{ after(grammarAccess.getEStringAccess().getFINALSTATENAMETerminalRuleCall_3()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__0__Impl
+	rule__StateMachine__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getStateMachineAction_0()); }
+	()
+	{ after(grammarAccess.getStateMachineAccess().getStateMachineAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__1__Impl
+	rule__StateMachine__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getStateMachineKeyword_1()); }
+	'StateMachine'
+	{ after(grammarAccess.getStateMachineAccess().getStateMachineKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__2__Impl
+	rule__StateMachine__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getNameAssignment_2()); }
+	(rule__StateMachine__NameAssignment_2)
+	{ after(grammarAccess.getStateMachineAccess().getNameAssignment_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__3__Impl
+	rule__StateMachine__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getLeftCurlyBracketKeyword_3()); }
+	'{'
+	{ after(grammarAccess.getStateMachineAccess().getLeftCurlyBracketKeyword_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__4__Impl
+	rule__StateMachine__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__4__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getInitialstateAssignment_4()); }
+	(rule__StateMachine__InitialstateAssignment_4)
+	{ after(grammarAccess.getStateMachineAccess().getInitialstateAssignment_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__5
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__5__Impl
+	rule__StateMachine__Group__6
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__5__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getAlternatives_5()); }
+	(rule__StateMachine__Alternatives_5)*
+	{ after(grammarAccess.getStateMachineAccess().getAlternatives_5()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__6
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__StateMachine__Group__6__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__Group__6__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getStateMachineAccess().getRightCurlyBracketKeyword_6()); }
+	'}'
+	{ after(grammarAccess.getStateMachineAccess().getRightCurlyBracketKeyword_6()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__NormalState__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group__0__Impl
+	rule__NormalState__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getNormalStateAction_0()); }
+	()
+	{ after(grammarAccess.getNormalStateAccess().getNormalStateAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group__1__Impl
+	rule__NormalState__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getStateKeyword_1()); }
+	'state'
+	{ after(grammarAccess.getNormalStateAccess().getStateKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group__2__Impl
+	rule__NormalState__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getNameAssignment_2()); }
+	(rule__NormalState__NameAssignment_2)
+	{ after(grammarAccess.getNormalStateAccess().getNameAssignment_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getGroup_3()); }
+	(rule__NormalState__Group_3__0)?
+	{ after(grammarAccess.getNormalStateAccess().getGroup_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__NormalState__Group_3__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3__0__Impl
+	rule__NormalState__Group_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getLeftCurlyBracketKeyword_3_0()); }
+	'{'
+	{ after(grammarAccess.getNormalStateAccess().getLeftCurlyBracketKeyword_3_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3__1__Impl
+	rule__NormalState__Group_3__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getGroup_3_1()); }
+	(rule__NormalState__Group_3_1__0)?
+	{ after(grammarAccess.getNormalStateAccess().getGroup_3_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3__2__Impl
+	rule__NormalState__Group_3__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getGroup_3_2()); }
+	(rule__NormalState__Group_3_2__0)?
+	{ after(grammarAccess.getNormalStateAccess().getGroup_3_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3__3__Impl
+	rule__NormalState__Group_3__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getGroup_3_3()); }
+	(rule__NormalState__Group_3_3__0)?
+	{ after(grammarAccess.getNormalStateAccess().getGroup_3_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3__4__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3__4__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getRightCurlyBracketKeyword_3_4()); }
+	'}'
+	{ after(grammarAccess.getNormalStateAccess().getRightCurlyBracketKeyword_3_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__NormalState__Group_3_1__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_1__0__Impl
+	rule__NormalState__Group_3_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_1__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getEntryKeyword_3_1_0()); }
+	'entry:'
+	{ after(grammarAccess.getNormalStateAccess().getEntryKeyword_3_1_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_1__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_1__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getEntry_Assignment_3_1_1()); }
+	(rule__NormalState__Entry_Assignment_3_1_1)
+	{ after(grammarAccess.getNormalStateAccess().getEntry_Assignment_3_1_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__NormalState__Group_3_2__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_2__0__Impl
+	rule__NormalState__Group_3_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_2__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getDoKeyword_3_2_0()); }
+	'do:'
+	{ after(grammarAccess.getNormalStateAccess().getDoKeyword_3_2_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_2__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_2__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_2__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getDo_Assignment_3_2_1()); }
+	(rule__NormalState__Do_Assignment_3_2_1)
+	{ after(grammarAccess.getNormalStateAccess().getDo_Assignment_3_2_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__NormalState__Group_3_3__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_3__0__Impl
+	rule__NormalState__Group_3_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_3__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getExitKeyword_3_3_0()); }
+	'exit:'
+	{ after(grammarAccess.getNormalStateAccess().getExitKeyword_3_3_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_3__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NormalState__Group_3_3__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Group_3_3__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNormalStateAccess().getExit_Assignment_3_3_1()); }
+	(rule__NormalState__Exit_Assignment_3_3_1)
+	{ after(grammarAccess.getNormalStateAccess().getExit_Assignment_3_3_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__FinalState__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__FinalState__Group__0__Impl
+	rule__FinalState__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getFinalStateAccess().getFinalStateAction_0()); }
+	()
+	{ after(grammarAccess.getFinalStateAccess().getFinalStateAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__FinalState__Group__1__Impl
+	rule__FinalState__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getFinalStateAccess().getEndKeyword_1()); }
+	'end'
+	{ after(grammarAccess.getFinalStateAccess().getEndKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__FinalState__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getFinalStateAccess().getNameAssignment_2()); }
+	(rule__FinalState__NameAssignment_2)
+	{ after(grammarAccess.getFinalStateAccess().getNameAssignment_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__InitialState__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__InitialState__Group__0__Impl
+	rule__InitialState__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getInitialStateAccess().getInitialStateAction_0()); }
+	()
+	{ after(grammarAccess.getInitialStateAccess().getInitialStateAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__InitialState__Group__1__Impl
+	rule__InitialState__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getInitialStateAccess().getStartKeyword_1()); }
+	'start'
+	{ after(grammarAccess.getInitialStateAccess().getStartKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__InitialState__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getInitialStateAccess().getNameAssignment_2()); }
+	(rule__InitialState__NameAssignment_2)
+	{ after(grammarAccess.getInitialStateAccess().getNameAssignment_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Transition__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__0__Impl
+	rule__Transition__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getTransitionAction_0()); }
+	()
+	{ after(grammarAccess.getTransitionAccess().getTransitionAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__1__Impl
+	rule__Transition__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getFromAssignment_1()); }
+	(rule__Transition__FromAssignment_1)
+	{ after(grammarAccess.getTransitionAccess().getFromAssignment_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__2__Impl
+	rule__Transition__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getHyphenMinusKeyword_2()); }
+	'-'
+	{ after(grammarAccess.getTransitionAccess().getHyphenMinusKeyword_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__3__Impl
+	rule__Transition__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getTriggerAssignment_3()); }
+	(rule__Transition__TriggerAssignment_3)?
+	{ after(grammarAccess.getTransitionAccess().getTriggerAssignment_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__4__Impl
+	rule__Transition__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__4__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getGroup_4()); }
+	(rule__Transition__Group_4__0)?
+	{ after(grammarAccess.getTransitionAccess().getGroup_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__5
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__5__Impl
+	rule__Transition__Group__6
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__5__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getGroup_5()); }
+	(rule__Transition__Group_5__0)?
+	{ after(grammarAccess.getTransitionAccess().getGroup_5()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__6
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__6__Impl
+	rule__Transition__Group__7
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__6__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getHyphenMinusGreaterThanSignKeyword_6()); }
+	'->'
+	{ after(grammarAccess.getTransitionAccess().getHyphenMinusGreaterThanSignKeyword_6()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__7
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group__7__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group__7__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getToAssignment_7()); }
+	(rule__Transition__ToAssignment_7)
+	{ after(grammarAccess.getTransitionAccess().getToAssignment_7()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Transition__Group_4__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group_4__0__Impl
+	rule__Transition__Group_4__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_4__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getLeftSquareBracketKeyword_4_0()); }
+	'['
+	{ after(grammarAccess.getTransitionAccess().getLeftSquareBracketKeyword_4_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_4__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group_4__1__Impl
+	rule__Transition__Group_4__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_4__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getGuardAssignment_4_1()); }
+	(rule__Transition__GuardAssignment_4_1)
+	{ after(grammarAccess.getTransitionAccess().getGuardAssignment_4_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_4__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group_4__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_4__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getRightSquareBracketKeyword_4_2()); }
+	']'
+	{ after(grammarAccess.getTransitionAccess().getRightSquareBracketKeyword_4_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Transition__Group_5__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group_5__0__Impl
+	rule__Transition__Group_5__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_5__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getSolidusKeyword_5_0()); }
+	'/'
+	{ after(grammarAccess.getTransitionAccess().getSolidusKeyword_5_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_5__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Transition__Group_5__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__Group_5__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTransitionAccess().getActionAssignment_5_1()); }
+	(rule__Transition__ActionAssignment_5_1)
+	{ after(grammarAccess.getTransitionAccess().getActionAssignment_5_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Action__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Action__Group__0__Impl
+	rule__Action__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Action__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getActionAccess().getActionAction_0()); }
+	()
+	{ after(grammarAccess.getActionAccess().getActionAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Action__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Action__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Action__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getActionAccess().getContentAssignment_1()); }
+	(rule__Action__ContentAssignment_1)
+	{ after(grammarAccess.getActionAccess().getContentAssignment_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Trigger__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Trigger__Group__0__Impl
+	rule__Trigger__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Trigger__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTriggerAccess().getTriggerAction_0()); }
+	()
+	{ after(grammarAccess.getTriggerAccess().getTriggerAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Trigger__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Trigger__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Trigger__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getTriggerAccess().getContentAssignment_1()); }
+	(rule__Trigger__ContentAssignment_1)
+	{ after(grammarAccess.getTriggerAccess().getContentAssignment_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Guard__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Guard__Group__0__Impl
+	rule__Guard__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Guard__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getGuardAccess().getGuardAction_0()); }
+	()
+	{ after(grammarAccess.getGuardAccess().getGuardAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Guard__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__Guard__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Guard__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getGuardAccess().getContentAssignment_1()); }
+	(rule__Guard__ContentAssignment_1)
+	{ after(grammarAccess.getGuardAccess().getContentAssignment_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__StateMachine__NameAssignment_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getNameEStringParserRuleCall_2_0()); }
+		ruleEString
+		{ after(grammarAccess.getStateMachineAccess().getNameEStringParserRuleCall_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__InitialstateAssignment_4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getInitialstateInitialStateParserRuleCall_4_0()); }
+		ruleInitialState
+		{ after(grammarAccess.getStateMachineAccess().getInitialstateInitialStateParserRuleCall_4_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__StatesAssignment_5_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getStatesNormalStateParserRuleCall_5_0_0()); }
+		ruleNormalState
+		{ after(grammarAccess.getStateMachineAccess().getStatesNormalStateParserRuleCall_5_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__FinalstatesAssignment_5_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getFinalstatesFinalStateParserRuleCall_5_1_0()); }
+		ruleFinalState
+		{ after(grammarAccess.getStateMachineAccess().getFinalstatesFinalStateParserRuleCall_5_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StateMachine__TransitionsAssignment_5_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getStateMachineAccess().getTransitionsTransitionParserRuleCall_5_2_0()); }
+		ruleTransition
+		{ after(grammarAccess.getStateMachineAccess().getTransitionsTransitionParserRuleCall_5_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__NameAssignment_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getNormalStateAccess().getNameEStringParserRuleCall_2_0()); }
+		ruleEString
+		{ after(grammarAccess.getNormalStateAccess().getNameEStringParserRuleCall_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Entry_Assignment_3_1_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getNormalStateAccess().getEntry_ActionParserRuleCall_3_1_1_0()); }
+		ruleAction
+		{ after(grammarAccess.getNormalStateAccess().getEntry_ActionParserRuleCall_3_1_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Do_Assignment_3_2_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getNormalStateAccess().getDo_ActionParserRuleCall_3_2_1_0()); }
+		ruleAction
+		{ after(grammarAccess.getNormalStateAccess().getDo_ActionParserRuleCall_3_2_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NormalState__Exit_Assignment_3_3_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getNormalStateAccess().getExit_ActionParserRuleCall_3_3_1_0()); }
+		ruleAction
+		{ after(grammarAccess.getNormalStateAccess().getExit_ActionParserRuleCall_3_3_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FinalState__NameAssignment_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getFinalStateAccess().getNameFINALSTATENAMETerminalRuleCall_2_0()); }
+		RULE_FINALSTATENAME
+		{ after(grammarAccess.getFinalStateAccess().getNameFINALSTATENAMETerminalRuleCall_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InitialState__NameAssignment_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getInitialStateAccess().getNameINITIALSTATENAMETerminalRuleCall_2_0()); }
+		RULE_INITIALSTATENAME
+		{ after(grammarAccess.getInitialStateAccess().getNameINITIALSTATENAMETerminalRuleCall_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__FromAssignment_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTransitionAccess().getFromStateCrossReference_1_0()); }
+		(
+			{ before(grammarAccess.getTransitionAccess().getFromStateEStringParserRuleCall_1_0_1()); }
+			ruleEString
+			{ after(grammarAccess.getTransitionAccess().getFromStateEStringParserRuleCall_1_0_1()); }
+		)
+		{ after(grammarAccess.getTransitionAccess().getFromStateCrossReference_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__TriggerAssignment_3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTransitionAccess().getTriggerTriggerParserRuleCall_3_0()); }
+		ruleTrigger
+		{ after(grammarAccess.getTransitionAccess().getTriggerTriggerParserRuleCall_3_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__GuardAssignment_4_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTransitionAccess().getGuardGuardParserRuleCall_4_1_0()); }
+		ruleGuard
+		{ after(grammarAccess.getTransitionAccess().getGuardGuardParserRuleCall_4_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__ActionAssignment_5_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTransitionAccess().getActionActionParserRuleCall_5_1_0()); }
+		ruleAction
+		{ after(grammarAccess.getTransitionAccess().getActionActionParserRuleCall_5_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Transition__ToAssignment_7
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTransitionAccess().getToStateCrossReference_7_0()); }
+		(
+			{ before(grammarAccess.getTransitionAccess().getToStateEStringParserRuleCall_7_0_1()); }
+			ruleEString
+			{ after(grammarAccess.getTransitionAccess().getToStateEStringParserRuleCall_7_0_1()); }
+		)
+		{ after(grammarAccess.getTransitionAccess().getToStateCrossReference_7_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Action__ContentAssignment_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getActionAccess().getContentActivityContentParserRuleCall_1_0()); }
+		ruleActivityContent
+		{ after(grammarAccess.getActionAccess().getContentActivityContentParserRuleCall_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Trigger__ContentAssignment_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getTriggerAccess().getContentActivityContentParserRuleCall_1_0()); }
+		ruleActivityContent
+		{ after(grammarAccess.getTriggerAccess().getContentActivityContentParserRuleCall_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Guard__ContentAssignment_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getGuardAccess().getContentEStringParserRuleCall_1_0()); }
+		ruleEString
+		{ after(grammarAccess.getGuardAccess().getContentEStringParserRuleCall_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+RULE_INITIALSTATENAME : 'I_' (RULE_INT|RULE_STRING|RULE_ID)+;
+
+RULE_FINALSTATENAME : 'F_' (RULE_INT|RULE_STRING|RULE_ID)+;
+
+RULE_CALL : RULE_ID ('.' RULE_ID)+;
+
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+fragment RULE_INT : ('0'..'9')+;
+
+RULE_STRING : ('"' ('\\' .|~(('\\'|'"')))* '"'|'\'' ('\\' .|~(('\\'|'\'')))* '\'');
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+RULE_ANY_OTHER : .;
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.tokens b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.tokens
new file mode 100644
index 0000000000000000000000000000000000000000..144c9a537a7addcf550e90b5df4aefbbd88cede2
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParser.tokens
@@ -0,0 +1,38 @@
+'-'=23
+'->'=24
+'/'=27
+'StateMachine'=14
+'['=25
+']'=26
+'do:'=19
+'end'=21
+'entry:'=18
+'exit:'=20
+'start'=22
+'state'=17
+'{'=15
+'}'=16
+RULE_ANY_OTHER=13
+RULE_CALL=6
+RULE_FINALSTATENAME=8
+RULE_ID=5
+RULE_INITIALSTATENAME=7
+RULE_INT=9
+RULE_ML_COMMENT=10
+RULE_SL_COMMENT=11
+RULE_STRING=4
+RULE_WS=12
+T__14=14
+T__15=15
+T__16=16
+T__17=17
+T__18=18
+T__19=19
+T__20=20
+T__21=21
+T__22=22
+T__23=23
+T__24=24
+T__25=25
+T__26=26
+T__27=27
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserLexer.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserLexer.java
new file mode 100644
index 0000000000000000000000000000000000000000..097ad7c22cf20a46ad62e5c438e939c5b057b79a
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserLexer.java
@@ -0,0 +1,1541 @@
+package swt.most.statemachine.xtext.ide.contentassist.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.Lexer;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalParserLexer extends Lexer {
+    public static final int RULE_STRING=4;
+    public static final int RULE_INITIALSTATENAME=7;
+    public static final int RULE_SL_COMMENT=11;
+    public static final int T__19=19;
+    public static final int T__15=15;
+    public static final int T__16=16;
+    public static final int T__17=17;
+    public static final int T__18=18;
+    public static final int T__14=14;
+    public static final int EOF=-1;
+    public static final int RULE_CALL=6;
+    public static final int RULE_ID=5;
+    public static final int RULE_WS=12;
+    public static final int RULE_ANY_OTHER=13;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int RULE_FINALSTATENAME=8;
+    public static final int RULE_INT=9;
+    public static final int T__22=22;
+    public static final int RULE_ML_COMMENT=10;
+    public static final int T__23=23;
+    public static final int T__24=24;
+    public static final int T__25=25;
+    public static final int T__20=20;
+    public static final int T__21=21;
+
+    // delegates
+    // delegators
+
+    public InternalParserLexer() {;} 
+    public InternalParserLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalParserLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "InternalParser.g"; }
+
+    // $ANTLR start "T__14"
+    public final void mT__14() throws RecognitionException {
+        try {
+            int _type = T__14;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:11:7: ( 'StateMachine' )
+            // InternalParser.g:11:9: 'StateMachine'
+            {
+            match("StateMachine"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__14"
+
+    // $ANTLR start "T__15"
+    public final void mT__15() throws RecognitionException {
+        try {
+            int _type = T__15;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:12:7: ( '{' )
+            // InternalParser.g:12:9: '{'
+            {
+            match('{'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__15"
+
+    // $ANTLR start "T__16"
+    public final void mT__16() throws RecognitionException {
+        try {
+            int _type = T__16;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:13:7: ( '}' )
+            // InternalParser.g:13:9: '}'
+            {
+            match('}'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__16"
+
+    // $ANTLR start "T__17"
+    public final void mT__17() throws RecognitionException {
+        try {
+            int _type = T__17;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:14:7: ( 'state' )
+            // InternalParser.g:14:9: 'state'
+            {
+            match("state"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__17"
+
+    // $ANTLR start "T__18"
+    public final void mT__18() throws RecognitionException {
+        try {
+            int _type = T__18;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:15:7: ( 'entry:' )
+            // InternalParser.g:15:9: 'entry:'
+            {
+            match("entry:"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__18"
+
+    // $ANTLR start "T__19"
+    public final void mT__19() throws RecognitionException {
+        try {
+            int _type = T__19;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:16:7: ( 'do:' )
+            // InternalParser.g:16:9: 'do:'
+            {
+            match("do:"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__19"
+
+    // $ANTLR start "T__20"
+    public final void mT__20() throws RecognitionException {
+        try {
+            int _type = T__20;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:17:7: ( 'exit:' )
+            // InternalParser.g:17:9: 'exit:'
+            {
+            match("exit:"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__20"
+
+    // $ANTLR start "T__21"
+    public final void mT__21() throws RecognitionException {
+        try {
+            int _type = T__21;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:18:7: ( 'end' )
+            // InternalParser.g:18:9: 'end'
+            {
+            match("end"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__21"
+
+    // $ANTLR start "T__22"
+    public final void mT__22() throws RecognitionException {
+        try {
+            int _type = T__22;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:19:7: ( 'start' )
+            // InternalParser.g:19:9: 'start'
+            {
+            match("start"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__22"
+
+    // $ANTLR start "T__23"
+    public final void mT__23() throws RecognitionException {
+        try {
+            int _type = T__23;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:20:7: ( '-' )
+            // InternalParser.g:20:9: '-'
+            {
+            match('-'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__23"
+
+    // $ANTLR start "T__24"
+    public final void mT__24() throws RecognitionException {
+        try {
+            int _type = T__24;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:21:7: ( '->' )
+            // InternalParser.g:21:9: '->'
+            {
+            match("->"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__24"
+
+    // $ANTLR start "T__25"
+    public final void mT__25() throws RecognitionException {
+        try {
+            int _type = T__25;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:22:7: ( '[' )
+            // InternalParser.g:22:9: '['
+            {
+            match('['); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__25"
+
+    // $ANTLR start "T__26"
+    public final void mT__26() throws RecognitionException {
+        try {
+            int _type = T__26;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:23:7: ( ']' )
+            // InternalParser.g:23:9: ']'
+            {
+            match(']'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__26"
+
+    // $ANTLR start "T__27"
+    public final void mT__27() throws RecognitionException {
+        try {
+            int _type = T__27;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:24:7: ( '/' )
+            // InternalParser.g:24:9: '/'
+            {
+            match('/'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__27"
+
+    // $ANTLR start "RULE_INITIALSTATENAME"
+    public final void mRULE_INITIALSTATENAME() throws RecognitionException {
+        try {
+            int _type = RULE_INITIALSTATENAME;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:1951:23: ( 'I_' ( RULE_INT | RULE_STRING | RULE_ID )+ )
+            // InternalParser.g:1951:25: 'I_' ( RULE_INT | RULE_STRING | RULE_ID )+
+            {
+            match("I_"); 
+
+            // InternalParser.g:1951:30: ( RULE_INT | RULE_STRING | RULE_ID )+
+            int cnt1=0;
+            loop1:
+            do {
+                int alt1=4;
+                switch ( input.LA(1) ) {
+                case '0':
+                case '1':
+                case '2':
+                case '3':
+                case '4':
+                case '5':
+                case '6':
+                case '7':
+                case '8':
+                case '9':
+                    {
+                    alt1=1;
+                    }
+                    break;
+                case '\"':
+                case '\'':
+                    {
+                    alt1=2;
+                    }
+                    break;
+                case 'A':
+                case 'B':
+                case 'C':
+                case 'D':
+                case 'E':
+                case 'F':
+                case 'G':
+                case 'H':
+                case 'I':
+                case 'J':
+                case 'K':
+                case 'L':
+                case 'M':
+                case 'N':
+                case 'O':
+                case 'P':
+                case 'Q':
+                case 'R':
+                case 'S':
+                case 'T':
+                case 'U':
+                case 'V':
+                case 'W':
+                case 'X':
+                case 'Y':
+                case 'Z':
+                case '^':
+                case '_':
+                case 'a':
+                case 'b':
+                case 'c':
+                case 'd':
+                case 'e':
+                case 'f':
+                case 'g':
+                case 'h':
+                case 'i':
+                case 'j':
+                case 'k':
+                case 'l':
+                case 'm':
+                case 'n':
+                case 'o':
+                case 'p':
+                case 'q':
+                case 'r':
+                case 's':
+                case 't':
+                case 'u':
+                case 'v':
+                case 'w':
+                case 'x':
+                case 'y':
+                case 'z':
+                    {
+                    alt1=3;
+                    }
+                    break;
+
+                }
+
+                switch (alt1) {
+            	case 1 :
+            	    // InternalParser.g:1951:31: RULE_INT
+            	    {
+            	    mRULE_INT(); 
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // InternalParser.g:1951:40: RULE_STRING
+            	    {
+            	    mRULE_STRING(); 
+
+            	    }
+            	    break;
+            	case 3 :
+            	    // InternalParser.g:1951:52: RULE_ID
+            	    {
+            	    mRULE_ID(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt1 >= 1 ) break loop1;
+                        EarlyExitException eee =
+                            new EarlyExitException(1, input);
+                        throw eee;
+                }
+                cnt1++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_INITIALSTATENAME"
+
+    // $ANTLR start "RULE_FINALSTATENAME"
+    public final void mRULE_FINALSTATENAME() throws RecognitionException {
+        try {
+            int _type = RULE_FINALSTATENAME;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:1953:21: ( 'F_' ( RULE_INT | RULE_STRING | RULE_ID )+ )
+            // InternalParser.g:1953:23: 'F_' ( RULE_INT | RULE_STRING | RULE_ID )+
+            {
+            match("F_"); 
+
+            // InternalParser.g:1953:28: ( RULE_INT | RULE_STRING | RULE_ID )+
+            int cnt2=0;
+            loop2:
+            do {
+                int alt2=4;
+                switch ( input.LA(1) ) {
+                case '0':
+                case '1':
+                case '2':
+                case '3':
+                case '4':
+                case '5':
+                case '6':
+                case '7':
+                case '8':
+                case '9':
+                    {
+                    alt2=1;
+                    }
+                    break;
+                case '\"':
+                case '\'':
+                    {
+                    alt2=2;
+                    }
+                    break;
+                case 'A':
+                case 'B':
+                case 'C':
+                case 'D':
+                case 'E':
+                case 'F':
+                case 'G':
+                case 'H':
+                case 'I':
+                case 'J':
+                case 'K':
+                case 'L':
+                case 'M':
+                case 'N':
+                case 'O':
+                case 'P':
+                case 'Q':
+                case 'R':
+                case 'S':
+                case 'T':
+                case 'U':
+                case 'V':
+                case 'W':
+                case 'X':
+                case 'Y':
+                case 'Z':
+                case '^':
+                case '_':
+                case 'a':
+                case 'b':
+                case 'c':
+                case 'd':
+                case 'e':
+                case 'f':
+                case 'g':
+                case 'h':
+                case 'i':
+                case 'j':
+                case 'k':
+                case 'l':
+                case 'm':
+                case 'n':
+                case 'o':
+                case 'p':
+                case 'q':
+                case 'r':
+                case 's':
+                case 't':
+                case 'u':
+                case 'v':
+                case 'w':
+                case 'x':
+                case 'y':
+                case 'z':
+                    {
+                    alt2=3;
+                    }
+                    break;
+
+                }
+
+                switch (alt2) {
+            	case 1 :
+            	    // InternalParser.g:1953:29: RULE_INT
+            	    {
+            	    mRULE_INT(); 
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // InternalParser.g:1953:38: RULE_STRING
+            	    {
+            	    mRULE_STRING(); 
+
+            	    }
+            	    break;
+            	case 3 :
+            	    // InternalParser.g:1953:50: RULE_ID
+            	    {
+            	    mRULE_ID(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt2 >= 1 ) break loop2;
+                        EarlyExitException eee =
+                            new EarlyExitException(2, input);
+                        throw eee;
+                }
+                cnt2++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_FINALSTATENAME"
+
+    // $ANTLR start "RULE_CALL"
+    public final void mRULE_CALL() throws RecognitionException {
+        try {
+            int _type = RULE_CALL;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:1955:11: ( RULE_ID ( '.' RULE_ID )+ )
+            // InternalParser.g:1955:13: RULE_ID ( '.' RULE_ID )+
+            {
+            mRULE_ID(); 
+            // InternalParser.g:1955:21: ( '.' RULE_ID )+
+            int cnt3=0;
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( (LA3_0=='.') ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // InternalParser.g:1955:22: '.' RULE_ID
+            	    {
+            	    match('.'); 
+            	    mRULE_ID(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt3 >= 1 ) break loop3;
+                        EarlyExitException eee =
+                            new EarlyExitException(3, input);
+                        throw eee;
+                }
+                cnt3++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_CALL"
+
+    // $ANTLR start "RULE_ID"
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:1957:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // InternalParser.g:1957:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // InternalParser.g:1957:11: ( '^' )?
+            int alt4=2;
+            int LA4_0 = input.LA(1);
+
+            if ( (LA4_0=='^') ) {
+                alt4=1;
+            }
+            switch (alt4) {
+                case 1 :
+                    // InternalParser.g:1957:11: '^'
+                    {
+                    match('^'); 
+
+                    }
+                    break;
+
+            }
+
+            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;}
+
+            // InternalParser.g:1957:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            loop5:
+            do {
+                int alt5=2;
+                int LA5_0 = input.LA(1);
+
+                if ( ((LA5_0>='0' && LA5_0<='9')||(LA5_0>='A' && LA5_0<='Z')||LA5_0=='_'||(LA5_0>='a' && LA5_0<='z')) ) {
+                    alt5=1;
+                }
+
+
+                switch (alt5) {
+            	case 1 :
+            	    // InternalParser.g:
+            	    {
+            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop5;
+                }
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ID"
+
+    // $ANTLR start "RULE_INT"
+    public final void mRULE_INT() throws RecognitionException {
+        try {
+            // InternalParser.g:1959:19: ( ( '0' .. '9' )+ )
+            // InternalParser.g:1959:21: ( '0' .. '9' )+
+            {
+            // InternalParser.g:1959:21: ( '0' .. '9' )+
+            int cnt6=0;
+            loop6:
+            do {
+                int alt6=2;
+                int LA6_0 = input.LA(1);
+
+                if ( ((LA6_0>='0' && LA6_0<='9')) ) {
+                    alt6=1;
+                }
+
+
+                switch (alt6) {
+            	case 1 :
+            	    // InternalParser.g:1959:22: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt6 >= 1 ) break loop6;
+                        EarlyExitException eee =
+                            new EarlyExitException(6, input);
+                        throw eee;
+                }
+                cnt6++;
+            } while (true);
+
+
+            }
+
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_INT"
+
+    // $ANTLR start "RULE_STRING"
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:1961:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // InternalParser.g:1961:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // InternalParser.g:1961:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( (LA9_0=='\"') ) {
+                alt9=1;
+            }
+            else if ( (LA9_0=='\'') ) {
+                alt9=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 9, 0, input);
+
+                throw nvae;
+            }
+            switch (alt9) {
+                case 1 :
+                    // InternalParser.g:1961:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // InternalParser.g:1961:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
+                    loop7:
+                    do {
+                        int alt7=3;
+                        int LA7_0 = input.LA(1);
+
+                        if ( (LA7_0=='\\') ) {
+                            alt7=1;
+                        }
+                        else if ( ((LA7_0>='\u0000' && LA7_0<='!')||(LA7_0>='#' && LA7_0<='[')||(LA7_0>=']' && LA7_0<='\uFFFF')) ) {
+                            alt7=2;
+                        }
+
+
+                        switch (alt7) {
+                    	case 1 :
+                    	    // InternalParser.g:1961:21: '\\\\' .
+                    	    {
+                    	    match('\\'); 
+                    	    matchAny(); 
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // InternalParser.g:1961:28: ~ ( ( '\\\\' | '\"' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop7;
+                        }
+                    } while (true);
+
+                    match('\"'); 
+
+                    }
+                    break;
+                case 2 :
+                    // InternalParser.g:1961:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // InternalParser.g:1961:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    loop8:
+                    do {
+                        int alt8=3;
+                        int LA8_0 = input.LA(1);
+
+                        if ( (LA8_0=='\\') ) {
+                            alt8=1;
+                        }
+                        else if ( ((LA8_0>='\u0000' && LA8_0<='&')||(LA8_0>='(' && LA8_0<='[')||(LA8_0>=']' && LA8_0<='\uFFFF')) ) {
+                            alt8=2;
+                        }
+
+
+                        switch (alt8) {
+                    	case 1 :
+                    	    // InternalParser.g:1961:54: '\\\\' .
+                    	    {
+                    	    match('\\'); 
+                    	    matchAny(); 
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // InternalParser.g:1961:61: ~ ( ( '\\\\' | '\\'' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop8;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_STRING"
+
+    // $ANTLR start "RULE_ML_COMMENT"
+    public final void mRULE_ML_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_ML_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:1963:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // InternalParser.g:1963:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // InternalParser.g:1963:24: ( options {greedy=false; } : . )*
+            loop10:
+            do {
+                int alt10=2;
+                int LA10_0 = input.LA(1);
+
+                if ( (LA10_0=='*') ) {
+                    int LA10_1 = input.LA(2);
+
+                    if ( (LA10_1=='/') ) {
+                        alt10=2;
+                    }
+                    else if ( ((LA10_1>='\u0000' && LA10_1<='.')||(LA10_1>='0' && LA10_1<='\uFFFF')) ) {
+                        alt10=1;
+                    }
+
+
+                }
+                else if ( ((LA10_0>='\u0000' && LA10_0<=')')||(LA10_0>='+' && LA10_0<='\uFFFF')) ) {
+                    alt10=1;
+                }
+
+
+                switch (alt10) {
+            	case 1 :
+            	    // InternalParser.g:1963:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop10;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ML_COMMENT"
+
+    // $ANTLR start "RULE_SL_COMMENT"
+    public final void mRULE_SL_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_SL_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:1965:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalParser.g:1965:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // InternalParser.g:1965:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( ((LA11_0>='\u0000' && LA11_0<='\t')||(LA11_0>='\u000B' && LA11_0<='\f')||(LA11_0>='\u000E' && LA11_0<='\uFFFF')) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // InternalParser.g:1965:24: ~ ( ( '\\n' | '\\r' ) )
+            	    {
+            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop11;
+                }
+            } while (true);
+
+            // InternalParser.g:1965:40: ( ( '\\r' )? '\\n' )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0=='\n'||LA13_0=='\r') ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // InternalParser.g:1965:41: ( '\\r' )? '\\n'
+                    {
+                    // InternalParser.g:1965:41: ( '\\r' )?
+                    int alt12=2;
+                    int LA12_0 = input.LA(1);
+
+                    if ( (LA12_0=='\r') ) {
+                        alt12=1;
+                    }
+                    switch (alt12) {
+                        case 1 :
+                            // InternalParser.g:1965:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_SL_COMMENT"
+
+    // $ANTLR start "RULE_WS"
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:1967:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // InternalParser.g:1967:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // InternalParser.g:1967:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            int cnt14=0;
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( ((LA14_0>='\t' && LA14_0<='\n')||LA14_0=='\r'||LA14_0==' ') ) {
+                    alt14=1;
+                }
+
+
+                switch (alt14) {
+            	case 1 :
+            	    // InternalParser.g:
+            	    {
+            	    if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt14 >= 1 ) break loop14;
+                        EarlyExitException eee =
+                            new EarlyExitException(14, input);
+                        throw eee;
+                }
+                cnt14++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_WS"
+
+    // $ANTLR start "RULE_ANY_OTHER"
+    public final void mRULE_ANY_OTHER() throws RecognitionException {
+        try {
+            int _type = RULE_ANY_OTHER;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:1969:16: ( . )
+            // InternalParser.g:1969:18: .
+            {
+            matchAny(); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ANY_OTHER"
+
+    public void mTokens() throws RecognitionException {
+        // InternalParser.g:1:8: ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | RULE_INITIALSTATENAME | RULE_FINALSTATENAME | RULE_CALL | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt15=23;
+        alt15 = dfa15.predict(input);
+        switch (alt15) {
+            case 1 :
+                // InternalParser.g:1:10: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 2 :
+                // InternalParser.g:1:16: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 3 :
+                // InternalParser.g:1:22: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 4 :
+                // InternalParser.g:1:28: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 5 :
+                // InternalParser.g:1:34: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 6 :
+                // InternalParser.g:1:40: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 7 :
+                // InternalParser.g:1:46: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 8 :
+                // InternalParser.g:1:52: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 9 :
+                // InternalParser.g:1:58: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 10 :
+                // InternalParser.g:1:64: T__23
+                {
+                mT__23(); 
+
+                }
+                break;
+            case 11 :
+                // InternalParser.g:1:70: T__24
+                {
+                mT__24(); 
+
+                }
+                break;
+            case 12 :
+                // InternalParser.g:1:76: T__25
+                {
+                mT__25(); 
+
+                }
+                break;
+            case 13 :
+                // InternalParser.g:1:82: T__26
+                {
+                mT__26(); 
+
+                }
+                break;
+            case 14 :
+                // InternalParser.g:1:88: T__27
+                {
+                mT__27(); 
+
+                }
+                break;
+            case 15 :
+                // InternalParser.g:1:94: RULE_INITIALSTATENAME
+                {
+                mRULE_INITIALSTATENAME(); 
+
+                }
+                break;
+            case 16 :
+                // InternalParser.g:1:116: RULE_FINALSTATENAME
+                {
+                mRULE_FINALSTATENAME(); 
+
+                }
+                break;
+            case 17 :
+                // InternalParser.g:1:136: RULE_CALL
+                {
+                mRULE_CALL(); 
+
+                }
+                break;
+            case 18 :
+                // InternalParser.g:1:146: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 19 :
+                // InternalParser.g:1:154: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 20 :
+                // InternalParser.g:1:166: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 21 :
+                // InternalParser.g:1:182: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 22 :
+                // InternalParser.g:1:198: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 23 :
+                // InternalParser.g:1:206: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA15 dfa15 = new DFA15(this);
+    static final String DFA15_eotS =
+        "\1\uffff\1\25\2\uffff\3\25\1\36\2\uffff\1\43\2\25\1\22\1\25\2\22\2\uffff\2\25\4\uffff\4\25\7\uffff\3\25\2\uffff\3\25\1\71\1\25\1\uffff\2\61\1\uffff\1\63\1\uffff\1\63\4\25\1\uffff\1\25\2\61\2\63\1\25\1\105\1\106\1\25\1\uffff\1\25\3\uffff\5\25\1\116\1\uffff";
+    static final String DFA15_eofS =
+        "\117\uffff";
+    static final String DFA15_minS =
+        "\1\0\1\56\2\uffff\3\56\1\76\2\uffff\1\52\2\56\1\101\1\56\2\0\2\uffff\2\56\4\uffff\4\56\7\uffff\2\42\1\56\2\uffff\5\56\1\uffff\2\56\1\uffff\1\56\1\uffff\5\56\1\uffff\11\56\1\uffff\1\56\3\uffff\6\56\1\uffff";
+    static final String DFA15_maxS =
+        "\1\uffff\1\172\2\uffff\3\172\1\76\2\uffff\1\57\4\172\2\uffff\2\uffff\2\172\4\uffff\4\172\7\uffff\3\172\2\uffff\5\172\1\uffff\2\172\1\uffff\1\172\1\uffff\5\172\1\uffff\11\172\1\uffff\1\172\3\uffff\6\172\1\uffff";
+    static final String DFA15_acceptS =
+        "\2\uffff\1\2\1\3\4\uffff\1\14\1\15\7\uffff\1\26\1\27\2\uffff\1\22\1\21\1\2\1\3\4\uffff\1\13\1\12\1\14\1\15\1\24\1\25\1\16\3\uffff\1\23\1\26\5\uffff\1\6\2\uffff\1\17\1\uffff\1\20\5\uffff\1\10\11\uffff\1\7\1\uffff\1\4\1\11\1\5\6\uffff\1\1";
+    static final String DFA15_specialS =
+        "\1\0\16\uffff\1\1\1\2\76\uffff}>";
+    static final String[] DFA15_transitionS = {
+            "\11\22\2\21\2\22\1\21\22\22\1\21\1\22\1\17\4\22\1\20\5\22\1\7\1\22\1\12\21\22\5\16\1\14\2\16\1\13\11\16\1\1\7\16\1\10\1\22\1\11\1\15\1\16\1\22\3\16\1\6\1\5\15\16\1\4\7\16\1\2\1\22\1\3\uff82\22",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\23\24\1\23\6\24",
+            "",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\23\24\1\31\6\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\15\24\1\32\11\24\1\33\2\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\16\24\1\34\13\24",
+            "\1\35",
+            "",
+            "",
+            "\1\41\4\uffff\1\42",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\44\1\uffff\32\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\45\1\uffff\32\24",
+            "\32\46\4\uffff\1\46\1\uffff\32\46",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "\0\47",
+            "\0\47",
+            "",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\1\51\31\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "",
+            "",
+            "",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\1\52\31\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\3\24\1\54\17\24\1\53\6\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\10\24\1\55\21\24",
+            "\1\26\1\uffff\12\24\1\56\6\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\61\4\uffff\1\61\6\uffff\1\26\1\uffff\12\57\7\uffff\32\60\3\uffff\1\61\1\60\1\uffff\32\60",
+            "\1\63\4\uffff\1\63\6\uffff\1\26\1\uffff\12\62\7\uffff\32\64\3\uffff\1\63\1\64\1\uffff\32\64",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\23\24\1\65\6\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\21\24\1\67\1\24\1\66\6\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\21\24\1\70\10\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\23\24\1\72\6\24",
+            "",
+            "\1\26\1\uffff\12\57\7\uffff\32\60\4\uffff\1\60\1\uffff\32\60",
+            "\1\26\1\uffff\12\73\7\uffff\32\74\4\uffff\1\74\1\uffff\32\74",
+            "",
+            "\1\26\1\uffff\12\62\7\uffff\32\64\4\uffff\1\64\1\uffff\32\64",
+            "",
+            "\1\26\1\uffff\12\75\7\uffff\32\76\4\uffff\1\76\1\uffff\32\76",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\4\24\1\77\25\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\4\24\1\100\25\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\23\24\1\101\6\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\30\24\1\102\1\24",
+            "",
+            "\1\26\1\uffff\12\24\1\103\6\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "\1\26\1\uffff\12\73\7\uffff\32\74\4\uffff\1\74\1\uffff\32\74",
+            "\1\26\1\uffff\12\73\7\uffff\32\74\4\uffff\1\74\1\uffff\32\74",
+            "\1\26\1\uffff\12\75\7\uffff\32\76\4\uffff\1\76\1\uffff\32\76",
+            "\1\26\1\uffff\12\75\7\uffff\32\76\4\uffff\1\76\1\uffff\32\76",
+            "\1\26\1\uffff\12\24\7\uffff\14\24\1\104\15\24\4\uffff\1\24\1\uffff\32\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "\1\26\1\uffff\12\24\1\107\6\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\1\110\31\24",
+            "",
+            "",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\2\24\1\111\27\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\7\24\1\112\22\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\10\24\1\113\21\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\15\24\1\114\14\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\4\24\1\115\25\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            ""
+    };
+
+    static final short[] DFA15_eot = DFA.unpackEncodedString(DFA15_eotS);
+    static final short[] DFA15_eof = DFA.unpackEncodedString(DFA15_eofS);
+    static final char[] DFA15_min = DFA.unpackEncodedStringToUnsignedChars(DFA15_minS);
+    static final char[] DFA15_max = DFA.unpackEncodedStringToUnsignedChars(DFA15_maxS);
+    static final short[] DFA15_accept = DFA.unpackEncodedString(DFA15_acceptS);
+    static final short[] DFA15_special = DFA.unpackEncodedString(DFA15_specialS);
+    static final short[][] DFA15_transition;
+
+    static {
+        int numStates = DFA15_transitionS.length;
+        DFA15_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA15_transition[i] = DFA.unpackEncodedString(DFA15_transitionS[i]);
+        }
+    }
+
+    class DFA15 extends DFA {
+
+        public DFA15(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 15;
+            this.eot = DFA15_eot;
+            this.eof = DFA15_eof;
+            this.min = DFA15_min;
+            this.max = DFA15_max;
+            this.accept = DFA15_accept;
+            this.special = DFA15_special;
+            this.transition = DFA15_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | RULE_INITIALSTATENAME | RULE_FINALSTATENAME | RULE_CALL | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            IntStream input = _input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA15_0 = input.LA(1);
+
+                        s = -1;
+                        if ( (LA15_0=='S') ) {s = 1;}
+
+                        else if ( (LA15_0=='{') ) {s = 2;}
+
+                        else if ( (LA15_0=='}') ) {s = 3;}
+
+                        else if ( (LA15_0=='s') ) {s = 4;}
+
+                        else if ( (LA15_0=='e') ) {s = 5;}
+
+                        else if ( (LA15_0=='d') ) {s = 6;}
+
+                        else if ( (LA15_0=='-') ) {s = 7;}
+
+                        else if ( (LA15_0=='[') ) {s = 8;}
+
+                        else if ( (LA15_0==']') ) {s = 9;}
+
+                        else if ( (LA15_0=='/') ) {s = 10;}
+
+                        else if ( (LA15_0=='I') ) {s = 11;}
+
+                        else if ( (LA15_0=='F') ) {s = 12;}
+
+                        else if ( (LA15_0=='^') ) {s = 13;}
+
+                        else if ( ((LA15_0>='A' && LA15_0<='E')||(LA15_0>='G' && LA15_0<='H')||(LA15_0>='J' && LA15_0<='R')||(LA15_0>='T' && LA15_0<='Z')||LA15_0=='_'||(LA15_0>='a' && LA15_0<='c')||(LA15_0>='f' && LA15_0<='r')||(LA15_0>='t' && LA15_0<='z')) ) {s = 14;}
+
+                        else if ( (LA15_0=='\"') ) {s = 15;}
+
+                        else if ( (LA15_0=='\'') ) {s = 16;}
+
+                        else if ( ((LA15_0>='\t' && LA15_0<='\n')||LA15_0=='\r'||LA15_0==' ') ) {s = 17;}
+
+                        else if ( ((LA15_0>='\u0000' && LA15_0<='\b')||(LA15_0>='\u000B' && LA15_0<='\f')||(LA15_0>='\u000E' && LA15_0<='\u001F')||LA15_0=='!'||(LA15_0>='#' && LA15_0<='&')||(LA15_0>='(' && LA15_0<=',')||LA15_0=='.'||(LA15_0>='0' && LA15_0<='@')||LA15_0=='\\'||LA15_0=='`'||LA15_0=='|'||(LA15_0>='~' && LA15_0<='\uFFFF')) ) {s = 18;}
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA15_15 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA15_15>='\u0000' && LA15_15<='\uFFFF')) ) {s = 39;}
+
+                        else s = 18;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA15_16 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA15_16>='\u0000' && LA15_16<='\uFFFF')) ) {s = 39;}
+
+                        else s = 18;
+
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 15, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+ 
+
+}
\ No newline at end of file
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserParser.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..39f49e9c6959679d2843dc73de10073fb9240c75
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src-gen/swt/most/statemachine/xtext/ide/contentassist/antlr/internal/InternalParserParser.java
@@ -0,0 +1,5786 @@
+package swt.most.statemachine.xtext.ide.contentassist.antlr.internal;
+
+import java.io.InputStream;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.DFA;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalParserParser extends AbstractInternalContentAssistParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_CALL", "RULE_INITIALSTATENAME", "RULE_FINALSTATENAME", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'StateMachine'", "'{'", "'}'", "'state'", "'entry:'", "'do:'", "'exit:'", "'end'", "'start'", "'-'", "'->'", "'['", "']'", "'/'"
+    };
+    public static final int RULE_STRING=4;
+    public static final int RULE_INITIALSTATENAME=7;
+    public static final int RULE_SL_COMMENT=11;
+    public static final int T__19=19;
+    public static final int T__15=15;
+    public static final int T__16=16;
+    public static final int T__17=17;
+    public static final int T__18=18;
+    public static final int T__14=14;
+    public static final int EOF=-1;
+    public static final int RULE_CALL=6;
+    public static final int RULE_ID=5;
+    public static final int RULE_WS=12;
+    public static final int RULE_ANY_OTHER=13;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int RULE_FINALSTATENAME=8;
+    public static final int RULE_INT=9;
+    public static final int T__22=22;
+    public static final int RULE_ML_COMMENT=10;
+    public static final int T__23=23;
+    public static final int T__24=24;
+    public static final int T__25=25;
+    public static final int T__20=20;
+    public static final int T__21=21;
+
+    // delegates
+    // delegators
+
+
+        public InternalParserParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalParserParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalParserParser.tokenNames; }
+    public String getGrammarFileName() { return "InternalParser.g"; }
+
+
+    	private ParserGrammarAccess grammarAccess;
+
+    	public void setGrammarAccess(ParserGrammarAccess grammarAccess) {
+    		this.grammarAccess = grammarAccess;
+    	}
+
+    	@Override
+    	protected Grammar getGrammar() {
+    		return grammarAccess.getGrammar();
+    	}
+
+    	@Override
+    	protected String getValueForTokenName(String tokenName) {
+    		return tokenName;
+    	}
+
+
+
+    // $ANTLR start "entryRuleStateMachine"
+    // InternalParser.g:53:1: entryRuleStateMachine : ruleStateMachine EOF ;
+    public final void entryRuleStateMachine() throws RecognitionException {
+        try {
+            // InternalParser.g:54:1: ( ruleStateMachine EOF )
+            // InternalParser.g:55:1: ruleStateMachine EOF
+            {
+             before(grammarAccess.getStateMachineRule()); 
+            pushFollow(FOLLOW_1);
+            ruleStateMachine();
+
+            state._fsp--;
+
+             after(grammarAccess.getStateMachineRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleStateMachine"
+
+
+    // $ANTLR start "ruleStateMachine"
+    // InternalParser.g:62:1: ruleStateMachine : ( ( rule__StateMachine__Group__0 ) ) ;
+    public final void ruleStateMachine() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:66:2: ( ( ( rule__StateMachine__Group__0 ) ) )
+            // InternalParser.g:67:2: ( ( rule__StateMachine__Group__0 ) )
+            {
+            // InternalParser.g:67:2: ( ( rule__StateMachine__Group__0 ) )
+            // InternalParser.g:68:3: ( rule__StateMachine__Group__0 )
+            {
+             before(grammarAccess.getStateMachineAccess().getGroup()); 
+            // InternalParser.g:69:3: ( rule__StateMachine__Group__0 )
+            // InternalParser.g:69:4: rule__StateMachine__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__StateMachine__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getStateMachineAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleStateMachine"
+
+
+    // $ANTLR start "entryRuleNormalState"
+    // InternalParser.g:78:1: entryRuleNormalState : ruleNormalState EOF ;
+    public final void entryRuleNormalState() throws RecognitionException {
+        try {
+            // InternalParser.g:79:1: ( ruleNormalState EOF )
+            // InternalParser.g:80:1: ruleNormalState EOF
+            {
+             before(grammarAccess.getNormalStateRule()); 
+            pushFollow(FOLLOW_1);
+            ruleNormalState();
+
+            state._fsp--;
+
+             after(grammarAccess.getNormalStateRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleNormalState"
+
+
+    // $ANTLR start "ruleNormalState"
+    // InternalParser.g:87:1: ruleNormalState : ( ( rule__NormalState__Group__0 ) ) ;
+    public final void ruleNormalState() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:91:2: ( ( ( rule__NormalState__Group__0 ) ) )
+            // InternalParser.g:92:2: ( ( rule__NormalState__Group__0 ) )
+            {
+            // InternalParser.g:92:2: ( ( rule__NormalState__Group__0 ) )
+            // InternalParser.g:93:3: ( rule__NormalState__Group__0 )
+            {
+             before(grammarAccess.getNormalStateAccess().getGroup()); 
+            // InternalParser.g:94:3: ( rule__NormalState__Group__0 )
+            // InternalParser.g:94:4: rule__NormalState__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getNormalStateAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleNormalState"
+
+
+    // $ANTLR start "entryRuleFinalState"
+    // InternalParser.g:103:1: entryRuleFinalState : ruleFinalState EOF ;
+    public final void entryRuleFinalState() throws RecognitionException {
+        try {
+            // InternalParser.g:104:1: ( ruleFinalState EOF )
+            // InternalParser.g:105:1: ruleFinalState EOF
+            {
+             before(grammarAccess.getFinalStateRule()); 
+            pushFollow(FOLLOW_1);
+            ruleFinalState();
+
+            state._fsp--;
+
+             after(grammarAccess.getFinalStateRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleFinalState"
+
+
+    // $ANTLR start "ruleFinalState"
+    // InternalParser.g:112:1: ruleFinalState : ( ( rule__FinalState__Group__0 ) ) ;
+    public final void ruleFinalState() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:116:2: ( ( ( rule__FinalState__Group__0 ) ) )
+            // InternalParser.g:117:2: ( ( rule__FinalState__Group__0 ) )
+            {
+            // InternalParser.g:117:2: ( ( rule__FinalState__Group__0 ) )
+            // InternalParser.g:118:3: ( rule__FinalState__Group__0 )
+            {
+             before(grammarAccess.getFinalStateAccess().getGroup()); 
+            // InternalParser.g:119:3: ( rule__FinalState__Group__0 )
+            // InternalParser.g:119:4: rule__FinalState__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__FinalState__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getFinalStateAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleFinalState"
+
+
+    // $ANTLR start "entryRuleInitialState"
+    // InternalParser.g:128:1: entryRuleInitialState : ruleInitialState EOF ;
+    public final void entryRuleInitialState() throws RecognitionException {
+        try {
+            // InternalParser.g:129:1: ( ruleInitialState EOF )
+            // InternalParser.g:130:1: ruleInitialState EOF
+            {
+             before(grammarAccess.getInitialStateRule()); 
+            pushFollow(FOLLOW_1);
+            ruleInitialState();
+
+            state._fsp--;
+
+             after(grammarAccess.getInitialStateRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleInitialState"
+
+
+    // $ANTLR start "ruleInitialState"
+    // InternalParser.g:137:1: ruleInitialState : ( ( rule__InitialState__Group__0 ) ) ;
+    public final void ruleInitialState() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:141:2: ( ( ( rule__InitialState__Group__0 ) ) )
+            // InternalParser.g:142:2: ( ( rule__InitialState__Group__0 ) )
+            {
+            // InternalParser.g:142:2: ( ( rule__InitialState__Group__0 ) )
+            // InternalParser.g:143:3: ( rule__InitialState__Group__0 )
+            {
+             before(grammarAccess.getInitialStateAccess().getGroup()); 
+            // InternalParser.g:144:3: ( rule__InitialState__Group__0 )
+            // InternalParser.g:144:4: rule__InitialState__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__InitialState__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getInitialStateAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleInitialState"
+
+
+    // $ANTLR start "entryRuleTransition"
+    // InternalParser.g:153:1: entryRuleTransition : ruleTransition EOF ;
+    public final void entryRuleTransition() throws RecognitionException {
+        try {
+            // InternalParser.g:154:1: ( ruleTransition EOF )
+            // InternalParser.g:155:1: ruleTransition EOF
+            {
+             before(grammarAccess.getTransitionRule()); 
+            pushFollow(FOLLOW_1);
+            ruleTransition();
+
+            state._fsp--;
+
+             after(grammarAccess.getTransitionRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleTransition"
+
+
+    // $ANTLR start "ruleTransition"
+    // InternalParser.g:162:1: ruleTransition : ( ( rule__Transition__Group__0 ) ) ;
+    public final void ruleTransition() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:166:2: ( ( ( rule__Transition__Group__0 ) ) )
+            // InternalParser.g:167:2: ( ( rule__Transition__Group__0 ) )
+            {
+            // InternalParser.g:167:2: ( ( rule__Transition__Group__0 ) )
+            // InternalParser.g:168:3: ( rule__Transition__Group__0 )
+            {
+             before(grammarAccess.getTransitionAccess().getGroup()); 
+            // InternalParser.g:169:3: ( rule__Transition__Group__0 )
+            // InternalParser.g:169:4: rule__Transition__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleTransition"
+
+
+    // $ANTLR start "entryRuleAction"
+    // InternalParser.g:178:1: entryRuleAction : ruleAction EOF ;
+    public final void entryRuleAction() throws RecognitionException {
+        try {
+            // InternalParser.g:179:1: ( ruleAction EOF )
+            // InternalParser.g:180:1: ruleAction EOF
+            {
+             before(grammarAccess.getActionRule()); 
+            pushFollow(FOLLOW_1);
+            ruleAction();
+
+            state._fsp--;
+
+             after(grammarAccess.getActionRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleAction"
+
+
+    // $ANTLR start "ruleAction"
+    // InternalParser.g:187:1: ruleAction : ( ( rule__Action__Group__0 ) ) ;
+    public final void ruleAction() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:191:2: ( ( ( rule__Action__Group__0 ) ) )
+            // InternalParser.g:192:2: ( ( rule__Action__Group__0 ) )
+            {
+            // InternalParser.g:192:2: ( ( rule__Action__Group__0 ) )
+            // InternalParser.g:193:3: ( rule__Action__Group__0 )
+            {
+             before(grammarAccess.getActionAccess().getGroup()); 
+            // InternalParser.g:194:3: ( rule__Action__Group__0 )
+            // InternalParser.g:194:4: rule__Action__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__Action__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getActionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleAction"
+
+
+    // $ANTLR start "entryRuleTrigger"
+    // InternalParser.g:203:1: entryRuleTrigger : ruleTrigger EOF ;
+    public final void entryRuleTrigger() throws RecognitionException {
+        try {
+            // InternalParser.g:204:1: ( ruleTrigger EOF )
+            // InternalParser.g:205:1: ruleTrigger EOF
+            {
+             before(grammarAccess.getTriggerRule()); 
+            pushFollow(FOLLOW_1);
+            ruleTrigger();
+
+            state._fsp--;
+
+             after(grammarAccess.getTriggerRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleTrigger"
+
+
+    // $ANTLR start "ruleTrigger"
+    // InternalParser.g:212:1: ruleTrigger : ( ( rule__Trigger__Group__0 ) ) ;
+    public final void ruleTrigger() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:216:2: ( ( ( rule__Trigger__Group__0 ) ) )
+            // InternalParser.g:217:2: ( ( rule__Trigger__Group__0 ) )
+            {
+            // InternalParser.g:217:2: ( ( rule__Trigger__Group__0 ) )
+            // InternalParser.g:218:3: ( rule__Trigger__Group__0 )
+            {
+             before(grammarAccess.getTriggerAccess().getGroup()); 
+            // InternalParser.g:219:3: ( rule__Trigger__Group__0 )
+            // InternalParser.g:219:4: rule__Trigger__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__Trigger__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTriggerAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleTrigger"
+
+
+    // $ANTLR start "entryRuleGuard"
+    // InternalParser.g:228:1: entryRuleGuard : ruleGuard EOF ;
+    public final void entryRuleGuard() throws RecognitionException {
+        try {
+            // InternalParser.g:229:1: ( ruleGuard EOF )
+            // InternalParser.g:230:1: ruleGuard EOF
+            {
+             before(grammarAccess.getGuardRule()); 
+            pushFollow(FOLLOW_1);
+            ruleGuard();
+
+            state._fsp--;
+
+             after(grammarAccess.getGuardRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleGuard"
+
+
+    // $ANTLR start "ruleGuard"
+    // InternalParser.g:237:1: ruleGuard : ( ( rule__Guard__Group__0 ) ) ;
+    public final void ruleGuard() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:241:2: ( ( ( rule__Guard__Group__0 ) ) )
+            // InternalParser.g:242:2: ( ( rule__Guard__Group__0 ) )
+            {
+            // InternalParser.g:242:2: ( ( rule__Guard__Group__0 ) )
+            // InternalParser.g:243:3: ( rule__Guard__Group__0 )
+            {
+             before(grammarAccess.getGuardAccess().getGroup()); 
+            // InternalParser.g:244:3: ( rule__Guard__Group__0 )
+            // InternalParser.g:244:4: rule__Guard__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__Guard__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getGuardAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleGuard"
+
+
+    // $ANTLR start "entryRuleActivityContent"
+    // InternalParser.g:253:1: entryRuleActivityContent : ruleActivityContent EOF ;
+    public final void entryRuleActivityContent() throws RecognitionException {
+        try {
+            // InternalParser.g:254:1: ( ruleActivityContent EOF )
+            // InternalParser.g:255:1: ruleActivityContent EOF
+            {
+             before(grammarAccess.getActivityContentRule()); 
+            pushFollow(FOLLOW_1);
+            ruleActivityContent();
+
+            state._fsp--;
+
+             after(grammarAccess.getActivityContentRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleActivityContent"
+
+
+    // $ANTLR start "ruleActivityContent"
+    // InternalParser.g:262:1: ruleActivityContent : ( ( rule__ActivityContent__Alternatives ) ) ;
+    public final void ruleActivityContent() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:266:2: ( ( ( rule__ActivityContent__Alternatives ) ) )
+            // InternalParser.g:267:2: ( ( rule__ActivityContent__Alternatives ) )
+            {
+            // InternalParser.g:267:2: ( ( rule__ActivityContent__Alternatives ) )
+            // InternalParser.g:268:3: ( rule__ActivityContent__Alternatives )
+            {
+             before(grammarAccess.getActivityContentAccess().getAlternatives()); 
+            // InternalParser.g:269:3: ( rule__ActivityContent__Alternatives )
+            // InternalParser.g:269:4: rule__ActivityContent__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__ActivityContent__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getActivityContentAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleActivityContent"
+
+
+    // $ANTLR start "entryRuleEString"
+    // InternalParser.g:278:1: entryRuleEString : ruleEString EOF ;
+    public final void entryRuleEString() throws RecognitionException {
+        try {
+            // InternalParser.g:279:1: ( ruleEString EOF )
+            // InternalParser.g:280:1: ruleEString EOF
+            {
+             before(grammarAccess.getEStringRule()); 
+            pushFollow(FOLLOW_1);
+            ruleEString();
+
+            state._fsp--;
+
+             after(grammarAccess.getEStringRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleEString"
+
+
+    // $ANTLR start "ruleEString"
+    // InternalParser.g:287:1: ruleEString : ( ( rule__EString__Alternatives ) ) ;
+    public final void ruleEString() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:291:2: ( ( ( rule__EString__Alternatives ) ) )
+            // InternalParser.g:292:2: ( ( rule__EString__Alternatives ) )
+            {
+            // InternalParser.g:292:2: ( ( rule__EString__Alternatives ) )
+            // InternalParser.g:293:3: ( rule__EString__Alternatives )
+            {
+             before(grammarAccess.getEStringAccess().getAlternatives()); 
+            // InternalParser.g:294:3: ( rule__EString__Alternatives )
+            // InternalParser.g:294:4: rule__EString__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__EString__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getEStringAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleEString"
+
+
+    // $ANTLR start "rule__StateMachine__Alternatives_5"
+    // InternalParser.g:302:1: rule__StateMachine__Alternatives_5 : ( ( ( rule__StateMachine__StatesAssignment_5_0 ) ) | ( ( rule__StateMachine__FinalstatesAssignment_5_1 ) ) | ( ( rule__StateMachine__TransitionsAssignment_5_2 ) ) );
+    public final void rule__StateMachine__Alternatives_5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:306:1: ( ( ( rule__StateMachine__StatesAssignment_5_0 ) ) | ( ( rule__StateMachine__FinalstatesAssignment_5_1 ) ) | ( ( rule__StateMachine__TransitionsAssignment_5_2 ) ) )
+            int alt1=3;
+            switch ( input.LA(1) ) {
+            case 17:
+                {
+                alt1=1;
+                }
+                break;
+            case 21:
+                {
+                alt1=2;
+                }
+                break;
+            case RULE_STRING:
+            case RULE_ID:
+            case RULE_INITIALSTATENAME:
+            case RULE_FINALSTATENAME:
+                {
+                alt1=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 1, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt1) {
+                case 1 :
+                    // InternalParser.g:307:2: ( ( rule__StateMachine__StatesAssignment_5_0 ) )
+                    {
+                    // InternalParser.g:307:2: ( ( rule__StateMachine__StatesAssignment_5_0 ) )
+                    // InternalParser.g:308:3: ( rule__StateMachine__StatesAssignment_5_0 )
+                    {
+                     before(grammarAccess.getStateMachineAccess().getStatesAssignment_5_0()); 
+                    // InternalParser.g:309:3: ( rule__StateMachine__StatesAssignment_5_0 )
+                    // InternalParser.g:309:4: rule__StateMachine__StatesAssignment_5_0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__StateMachine__StatesAssignment_5_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getStateMachineAccess().getStatesAssignment_5_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalParser.g:313:2: ( ( rule__StateMachine__FinalstatesAssignment_5_1 ) )
+                    {
+                    // InternalParser.g:313:2: ( ( rule__StateMachine__FinalstatesAssignment_5_1 ) )
+                    // InternalParser.g:314:3: ( rule__StateMachine__FinalstatesAssignment_5_1 )
+                    {
+                     before(grammarAccess.getStateMachineAccess().getFinalstatesAssignment_5_1()); 
+                    // InternalParser.g:315:3: ( rule__StateMachine__FinalstatesAssignment_5_1 )
+                    // InternalParser.g:315:4: rule__StateMachine__FinalstatesAssignment_5_1
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__StateMachine__FinalstatesAssignment_5_1();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getStateMachineAccess().getFinalstatesAssignment_5_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalParser.g:319:2: ( ( rule__StateMachine__TransitionsAssignment_5_2 ) )
+                    {
+                    // InternalParser.g:319:2: ( ( rule__StateMachine__TransitionsAssignment_5_2 ) )
+                    // InternalParser.g:320:3: ( rule__StateMachine__TransitionsAssignment_5_2 )
+                    {
+                     before(grammarAccess.getStateMachineAccess().getTransitionsAssignment_5_2()); 
+                    // InternalParser.g:321:3: ( rule__StateMachine__TransitionsAssignment_5_2 )
+                    // InternalParser.g:321:4: rule__StateMachine__TransitionsAssignment_5_2
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__StateMachine__TransitionsAssignment_5_2();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getStateMachineAccess().getTransitionsAssignment_5_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Alternatives_5"
+
+
+    // $ANTLR start "rule__ActivityContent__Alternatives"
+    // InternalParser.g:329:1: rule__ActivityContent__Alternatives : ( ( RULE_STRING ) | ( RULE_ID ) | ( RULE_CALL ) );
+    public final void rule__ActivityContent__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:333:1: ( ( RULE_STRING ) | ( RULE_ID ) | ( RULE_CALL ) )
+            int alt2=3;
+            switch ( input.LA(1) ) {
+            case RULE_STRING:
+                {
+                alt2=1;
+                }
+                break;
+            case RULE_ID:
+                {
+                alt2=2;
+                }
+                break;
+            case RULE_CALL:
+                {
+                alt2=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 2, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt2) {
+                case 1 :
+                    // InternalParser.g:334:2: ( RULE_STRING )
+                    {
+                    // InternalParser.g:334:2: ( RULE_STRING )
+                    // InternalParser.g:335:3: RULE_STRING
+                    {
+                     before(grammarAccess.getActivityContentAccess().getSTRINGTerminalRuleCall_0()); 
+                    match(input,RULE_STRING,FOLLOW_2); 
+                     after(grammarAccess.getActivityContentAccess().getSTRINGTerminalRuleCall_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalParser.g:340:2: ( RULE_ID )
+                    {
+                    // InternalParser.g:340:2: ( RULE_ID )
+                    // InternalParser.g:341:3: RULE_ID
+                    {
+                     before(grammarAccess.getActivityContentAccess().getIDTerminalRuleCall_1()); 
+                    match(input,RULE_ID,FOLLOW_2); 
+                     after(grammarAccess.getActivityContentAccess().getIDTerminalRuleCall_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalParser.g:346:2: ( RULE_CALL )
+                    {
+                    // InternalParser.g:346:2: ( RULE_CALL )
+                    // InternalParser.g:347:3: RULE_CALL
+                    {
+                     before(grammarAccess.getActivityContentAccess().getCALLTerminalRuleCall_2()); 
+                    match(input,RULE_CALL,FOLLOW_2); 
+                     after(grammarAccess.getActivityContentAccess().getCALLTerminalRuleCall_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ActivityContent__Alternatives"
+
+
+    // $ANTLR start "rule__EString__Alternatives"
+    // InternalParser.g:356:1: rule__EString__Alternatives : ( ( RULE_STRING ) | ( RULE_ID ) | ( RULE_INITIALSTATENAME ) | ( RULE_FINALSTATENAME ) );
+    public final void rule__EString__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:360:1: ( ( RULE_STRING ) | ( RULE_ID ) | ( RULE_INITIALSTATENAME ) | ( RULE_FINALSTATENAME ) )
+            int alt3=4;
+            switch ( input.LA(1) ) {
+            case RULE_STRING:
+                {
+                alt3=1;
+                }
+                break;
+            case RULE_ID:
+                {
+                alt3=2;
+                }
+                break;
+            case RULE_INITIALSTATENAME:
+                {
+                alt3=3;
+                }
+                break;
+            case RULE_FINALSTATENAME:
+                {
+                alt3=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 3, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt3) {
+                case 1 :
+                    // InternalParser.g:361:2: ( RULE_STRING )
+                    {
+                    // InternalParser.g:361:2: ( RULE_STRING )
+                    // InternalParser.g:362:3: RULE_STRING
+                    {
+                     before(grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); 
+                    match(input,RULE_STRING,FOLLOW_2); 
+                     after(grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalParser.g:367:2: ( RULE_ID )
+                    {
+                    // InternalParser.g:367:2: ( RULE_ID )
+                    // InternalParser.g:368:3: RULE_ID
+                    {
+                     before(grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); 
+                    match(input,RULE_ID,FOLLOW_2); 
+                     after(grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalParser.g:373:2: ( RULE_INITIALSTATENAME )
+                    {
+                    // InternalParser.g:373:2: ( RULE_INITIALSTATENAME )
+                    // InternalParser.g:374:3: RULE_INITIALSTATENAME
+                    {
+                     before(grammarAccess.getEStringAccess().getINITIALSTATENAMETerminalRuleCall_2()); 
+                    match(input,RULE_INITIALSTATENAME,FOLLOW_2); 
+                     after(grammarAccess.getEStringAccess().getINITIALSTATENAMETerminalRuleCall_2()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalParser.g:379:2: ( RULE_FINALSTATENAME )
+                    {
+                    // InternalParser.g:379:2: ( RULE_FINALSTATENAME )
+                    // InternalParser.g:380:3: RULE_FINALSTATENAME
+                    {
+                     before(grammarAccess.getEStringAccess().getFINALSTATENAMETerminalRuleCall_3()); 
+                    match(input,RULE_FINALSTATENAME,FOLLOW_2); 
+                     after(grammarAccess.getEStringAccess().getFINALSTATENAMETerminalRuleCall_3()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EString__Alternatives"
+
+
+    // $ANTLR start "rule__StateMachine__Group__0"
+    // InternalParser.g:389:1: rule__StateMachine__Group__0 : rule__StateMachine__Group__0__Impl rule__StateMachine__Group__1 ;
+    public final void rule__StateMachine__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:393:1: ( rule__StateMachine__Group__0__Impl rule__StateMachine__Group__1 )
+            // InternalParser.g:394:2: rule__StateMachine__Group__0__Impl rule__StateMachine__Group__1
+            {
+            pushFollow(FOLLOW_3);
+            rule__StateMachine__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__StateMachine__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__0"
+
+
+    // $ANTLR start "rule__StateMachine__Group__0__Impl"
+    // InternalParser.g:401:1: rule__StateMachine__Group__0__Impl : ( () ) ;
+    public final void rule__StateMachine__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:405:1: ( ( () ) )
+            // InternalParser.g:406:1: ( () )
+            {
+            // InternalParser.g:406:1: ( () )
+            // InternalParser.g:407:2: ()
+            {
+             before(grammarAccess.getStateMachineAccess().getStateMachineAction_0()); 
+            // InternalParser.g:408:2: ()
+            // InternalParser.g:408:3: 
+            {
+            }
+
+             after(grammarAccess.getStateMachineAccess().getStateMachineAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__0__Impl"
+
+
+    // $ANTLR start "rule__StateMachine__Group__1"
+    // InternalParser.g:416:1: rule__StateMachine__Group__1 : rule__StateMachine__Group__1__Impl rule__StateMachine__Group__2 ;
+    public final void rule__StateMachine__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:420:1: ( rule__StateMachine__Group__1__Impl rule__StateMachine__Group__2 )
+            // InternalParser.g:421:2: rule__StateMachine__Group__1__Impl rule__StateMachine__Group__2
+            {
+            pushFollow(FOLLOW_4);
+            rule__StateMachine__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__StateMachine__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__1"
+
+
+    // $ANTLR start "rule__StateMachine__Group__1__Impl"
+    // InternalParser.g:428:1: rule__StateMachine__Group__1__Impl : ( 'StateMachine' ) ;
+    public final void rule__StateMachine__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:432:1: ( ( 'StateMachine' ) )
+            // InternalParser.g:433:1: ( 'StateMachine' )
+            {
+            // InternalParser.g:433:1: ( 'StateMachine' )
+            // InternalParser.g:434:2: 'StateMachine'
+            {
+             before(grammarAccess.getStateMachineAccess().getStateMachineKeyword_1()); 
+            match(input,14,FOLLOW_2); 
+             after(grammarAccess.getStateMachineAccess().getStateMachineKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__1__Impl"
+
+
+    // $ANTLR start "rule__StateMachine__Group__2"
+    // InternalParser.g:443:1: rule__StateMachine__Group__2 : rule__StateMachine__Group__2__Impl rule__StateMachine__Group__3 ;
+    public final void rule__StateMachine__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:447:1: ( rule__StateMachine__Group__2__Impl rule__StateMachine__Group__3 )
+            // InternalParser.g:448:2: rule__StateMachine__Group__2__Impl rule__StateMachine__Group__3
+            {
+            pushFollow(FOLLOW_5);
+            rule__StateMachine__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__StateMachine__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__2"
+
+
+    // $ANTLR start "rule__StateMachine__Group__2__Impl"
+    // InternalParser.g:455:1: rule__StateMachine__Group__2__Impl : ( ( rule__StateMachine__NameAssignment_2 ) ) ;
+    public final void rule__StateMachine__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:459:1: ( ( ( rule__StateMachine__NameAssignment_2 ) ) )
+            // InternalParser.g:460:1: ( ( rule__StateMachine__NameAssignment_2 ) )
+            {
+            // InternalParser.g:460:1: ( ( rule__StateMachine__NameAssignment_2 ) )
+            // InternalParser.g:461:2: ( rule__StateMachine__NameAssignment_2 )
+            {
+             before(grammarAccess.getStateMachineAccess().getNameAssignment_2()); 
+            // InternalParser.g:462:2: ( rule__StateMachine__NameAssignment_2 )
+            // InternalParser.g:462:3: rule__StateMachine__NameAssignment_2
+            {
+            pushFollow(FOLLOW_2);
+            rule__StateMachine__NameAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getStateMachineAccess().getNameAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__2__Impl"
+
+
+    // $ANTLR start "rule__StateMachine__Group__3"
+    // InternalParser.g:470:1: rule__StateMachine__Group__3 : rule__StateMachine__Group__3__Impl rule__StateMachine__Group__4 ;
+    public final void rule__StateMachine__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:474:1: ( rule__StateMachine__Group__3__Impl rule__StateMachine__Group__4 )
+            // InternalParser.g:475:2: rule__StateMachine__Group__3__Impl rule__StateMachine__Group__4
+            {
+            pushFollow(FOLLOW_6);
+            rule__StateMachine__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__StateMachine__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__3"
+
+
+    // $ANTLR start "rule__StateMachine__Group__3__Impl"
+    // InternalParser.g:482:1: rule__StateMachine__Group__3__Impl : ( '{' ) ;
+    public final void rule__StateMachine__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:486:1: ( ( '{' ) )
+            // InternalParser.g:487:1: ( '{' )
+            {
+            // InternalParser.g:487:1: ( '{' )
+            // InternalParser.g:488:2: '{'
+            {
+             before(grammarAccess.getStateMachineAccess().getLeftCurlyBracketKeyword_3()); 
+            match(input,15,FOLLOW_2); 
+             after(grammarAccess.getStateMachineAccess().getLeftCurlyBracketKeyword_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__3__Impl"
+
+
+    // $ANTLR start "rule__StateMachine__Group__4"
+    // InternalParser.g:497:1: rule__StateMachine__Group__4 : rule__StateMachine__Group__4__Impl rule__StateMachine__Group__5 ;
+    public final void rule__StateMachine__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:501:1: ( rule__StateMachine__Group__4__Impl rule__StateMachine__Group__5 )
+            // InternalParser.g:502:2: rule__StateMachine__Group__4__Impl rule__StateMachine__Group__5
+            {
+            pushFollow(FOLLOW_7);
+            rule__StateMachine__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__StateMachine__Group__5();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__4"
+
+
+    // $ANTLR start "rule__StateMachine__Group__4__Impl"
+    // InternalParser.g:509:1: rule__StateMachine__Group__4__Impl : ( ( rule__StateMachine__InitialstateAssignment_4 ) ) ;
+    public final void rule__StateMachine__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:513:1: ( ( ( rule__StateMachine__InitialstateAssignment_4 ) ) )
+            // InternalParser.g:514:1: ( ( rule__StateMachine__InitialstateAssignment_4 ) )
+            {
+            // InternalParser.g:514:1: ( ( rule__StateMachine__InitialstateAssignment_4 ) )
+            // InternalParser.g:515:2: ( rule__StateMachine__InitialstateAssignment_4 )
+            {
+             before(grammarAccess.getStateMachineAccess().getInitialstateAssignment_4()); 
+            // InternalParser.g:516:2: ( rule__StateMachine__InitialstateAssignment_4 )
+            // InternalParser.g:516:3: rule__StateMachine__InitialstateAssignment_4
+            {
+            pushFollow(FOLLOW_2);
+            rule__StateMachine__InitialstateAssignment_4();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getStateMachineAccess().getInitialstateAssignment_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__4__Impl"
+
+
+    // $ANTLR start "rule__StateMachine__Group__5"
+    // InternalParser.g:524:1: rule__StateMachine__Group__5 : rule__StateMachine__Group__5__Impl rule__StateMachine__Group__6 ;
+    public final void rule__StateMachine__Group__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:528:1: ( rule__StateMachine__Group__5__Impl rule__StateMachine__Group__6 )
+            // InternalParser.g:529:2: rule__StateMachine__Group__5__Impl rule__StateMachine__Group__6
+            {
+            pushFollow(FOLLOW_7);
+            rule__StateMachine__Group__5__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__StateMachine__Group__6();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__5"
+
+
+    // $ANTLR start "rule__StateMachine__Group__5__Impl"
+    // InternalParser.g:536:1: rule__StateMachine__Group__5__Impl : ( ( rule__StateMachine__Alternatives_5 )* ) ;
+    public final void rule__StateMachine__Group__5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:540:1: ( ( ( rule__StateMachine__Alternatives_5 )* ) )
+            // InternalParser.g:541:1: ( ( rule__StateMachine__Alternatives_5 )* )
+            {
+            // InternalParser.g:541:1: ( ( rule__StateMachine__Alternatives_5 )* )
+            // InternalParser.g:542:2: ( rule__StateMachine__Alternatives_5 )*
+            {
+             before(grammarAccess.getStateMachineAccess().getAlternatives_5()); 
+            // InternalParser.g:543:2: ( rule__StateMachine__Alternatives_5 )*
+            loop4:
+            do {
+                int alt4=2;
+                int LA4_0 = input.LA(1);
+
+                if ( ((LA4_0>=RULE_STRING && LA4_0<=RULE_ID)||(LA4_0>=RULE_INITIALSTATENAME && LA4_0<=RULE_FINALSTATENAME)||LA4_0==17||LA4_0==21) ) {
+                    alt4=1;
+                }
+
+
+                switch (alt4) {
+            	case 1 :
+            	    // InternalParser.g:543:3: rule__StateMachine__Alternatives_5
+            	    {
+            	    pushFollow(FOLLOW_8);
+            	    rule__StateMachine__Alternatives_5();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop4;
+                }
+            } while (true);
+
+             after(grammarAccess.getStateMachineAccess().getAlternatives_5()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__5__Impl"
+
+
+    // $ANTLR start "rule__StateMachine__Group__6"
+    // InternalParser.g:551:1: rule__StateMachine__Group__6 : rule__StateMachine__Group__6__Impl ;
+    public final void rule__StateMachine__Group__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:555:1: ( rule__StateMachine__Group__6__Impl )
+            // InternalParser.g:556:2: rule__StateMachine__Group__6__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__StateMachine__Group__6__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__6"
+
+
+    // $ANTLR start "rule__StateMachine__Group__6__Impl"
+    // InternalParser.g:562:1: rule__StateMachine__Group__6__Impl : ( '}' ) ;
+    public final void rule__StateMachine__Group__6__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:566:1: ( ( '}' ) )
+            // InternalParser.g:567:1: ( '}' )
+            {
+            // InternalParser.g:567:1: ( '}' )
+            // InternalParser.g:568:2: '}'
+            {
+             before(grammarAccess.getStateMachineAccess().getRightCurlyBracketKeyword_6()); 
+            match(input,16,FOLLOW_2); 
+             after(grammarAccess.getStateMachineAccess().getRightCurlyBracketKeyword_6()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__Group__6__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group__0"
+    // InternalParser.g:578:1: rule__NormalState__Group__0 : rule__NormalState__Group__0__Impl rule__NormalState__Group__1 ;
+    public final void rule__NormalState__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:582:1: ( rule__NormalState__Group__0__Impl rule__NormalState__Group__1 )
+            // InternalParser.g:583:2: rule__NormalState__Group__0__Impl rule__NormalState__Group__1
+            {
+            pushFollow(FOLLOW_9);
+            rule__NormalState__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group__0"
+
+
+    // $ANTLR start "rule__NormalState__Group__0__Impl"
+    // InternalParser.g:590:1: rule__NormalState__Group__0__Impl : ( () ) ;
+    public final void rule__NormalState__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:594:1: ( ( () ) )
+            // InternalParser.g:595:1: ( () )
+            {
+            // InternalParser.g:595:1: ( () )
+            // InternalParser.g:596:2: ()
+            {
+             before(grammarAccess.getNormalStateAccess().getNormalStateAction_0()); 
+            // InternalParser.g:597:2: ()
+            // InternalParser.g:597:3: 
+            {
+            }
+
+             after(grammarAccess.getNormalStateAccess().getNormalStateAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group__0__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group__1"
+    // InternalParser.g:605:1: rule__NormalState__Group__1 : rule__NormalState__Group__1__Impl rule__NormalState__Group__2 ;
+    public final void rule__NormalState__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:609:1: ( rule__NormalState__Group__1__Impl rule__NormalState__Group__2 )
+            // InternalParser.g:610:2: rule__NormalState__Group__1__Impl rule__NormalState__Group__2
+            {
+            pushFollow(FOLLOW_4);
+            rule__NormalState__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group__1"
+
+
+    // $ANTLR start "rule__NormalState__Group__1__Impl"
+    // InternalParser.g:617:1: rule__NormalState__Group__1__Impl : ( 'state' ) ;
+    public final void rule__NormalState__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:621:1: ( ( 'state' ) )
+            // InternalParser.g:622:1: ( 'state' )
+            {
+            // InternalParser.g:622:1: ( 'state' )
+            // InternalParser.g:623:2: 'state'
+            {
+             before(grammarAccess.getNormalStateAccess().getStateKeyword_1()); 
+            match(input,17,FOLLOW_2); 
+             after(grammarAccess.getNormalStateAccess().getStateKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group__1__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group__2"
+    // InternalParser.g:632:1: rule__NormalState__Group__2 : rule__NormalState__Group__2__Impl rule__NormalState__Group__3 ;
+    public final void rule__NormalState__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:636:1: ( rule__NormalState__Group__2__Impl rule__NormalState__Group__3 )
+            // InternalParser.g:637:2: rule__NormalState__Group__2__Impl rule__NormalState__Group__3
+            {
+            pushFollow(FOLLOW_5);
+            rule__NormalState__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group__2"
+
+
+    // $ANTLR start "rule__NormalState__Group__2__Impl"
+    // InternalParser.g:644:1: rule__NormalState__Group__2__Impl : ( ( rule__NormalState__NameAssignment_2 ) ) ;
+    public final void rule__NormalState__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:648:1: ( ( ( rule__NormalState__NameAssignment_2 ) ) )
+            // InternalParser.g:649:1: ( ( rule__NormalState__NameAssignment_2 ) )
+            {
+            // InternalParser.g:649:1: ( ( rule__NormalState__NameAssignment_2 ) )
+            // InternalParser.g:650:2: ( rule__NormalState__NameAssignment_2 )
+            {
+             before(grammarAccess.getNormalStateAccess().getNameAssignment_2()); 
+            // InternalParser.g:651:2: ( rule__NormalState__NameAssignment_2 )
+            // InternalParser.g:651:3: rule__NormalState__NameAssignment_2
+            {
+            pushFollow(FOLLOW_2);
+            rule__NormalState__NameAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getNormalStateAccess().getNameAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group__2__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group__3"
+    // InternalParser.g:659:1: rule__NormalState__Group__3 : rule__NormalState__Group__3__Impl ;
+    public final void rule__NormalState__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:663:1: ( rule__NormalState__Group__3__Impl )
+            // InternalParser.g:664:2: rule__NormalState__Group__3__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group__3"
+
+
+    // $ANTLR start "rule__NormalState__Group__3__Impl"
+    // InternalParser.g:670:1: rule__NormalState__Group__3__Impl : ( ( rule__NormalState__Group_3__0 )? ) ;
+    public final void rule__NormalState__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:674:1: ( ( ( rule__NormalState__Group_3__0 )? ) )
+            // InternalParser.g:675:1: ( ( rule__NormalState__Group_3__0 )? )
+            {
+            // InternalParser.g:675:1: ( ( rule__NormalState__Group_3__0 )? )
+            // InternalParser.g:676:2: ( rule__NormalState__Group_3__0 )?
+            {
+             before(grammarAccess.getNormalStateAccess().getGroup_3()); 
+            // InternalParser.g:677:2: ( rule__NormalState__Group_3__0 )?
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0==15) ) {
+                alt5=1;
+            }
+            switch (alt5) {
+                case 1 :
+                    // InternalParser.g:677:3: rule__NormalState__Group_3__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__NormalState__Group_3__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getNormalStateAccess().getGroup_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group__3__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group_3__0"
+    // InternalParser.g:686:1: rule__NormalState__Group_3__0 : rule__NormalState__Group_3__0__Impl rule__NormalState__Group_3__1 ;
+    public final void rule__NormalState__Group_3__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:690:1: ( rule__NormalState__Group_3__0__Impl rule__NormalState__Group_3__1 )
+            // InternalParser.g:691:2: rule__NormalState__Group_3__0__Impl rule__NormalState__Group_3__1
+            {
+            pushFollow(FOLLOW_10);
+            rule__NormalState__Group_3__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group_3__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3__0"
+
+
+    // $ANTLR start "rule__NormalState__Group_3__0__Impl"
+    // InternalParser.g:698:1: rule__NormalState__Group_3__0__Impl : ( '{' ) ;
+    public final void rule__NormalState__Group_3__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:702:1: ( ( '{' ) )
+            // InternalParser.g:703:1: ( '{' )
+            {
+            // InternalParser.g:703:1: ( '{' )
+            // InternalParser.g:704:2: '{'
+            {
+             before(grammarAccess.getNormalStateAccess().getLeftCurlyBracketKeyword_3_0()); 
+            match(input,15,FOLLOW_2); 
+             after(grammarAccess.getNormalStateAccess().getLeftCurlyBracketKeyword_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3__0__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group_3__1"
+    // InternalParser.g:713:1: rule__NormalState__Group_3__1 : rule__NormalState__Group_3__1__Impl rule__NormalState__Group_3__2 ;
+    public final void rule__NormalState__Group_3__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:717:1: ( rule__NormalState__Group_3__1__Impl rule__NormalState__Group_3__2 )
+            // InternalParser.g:718:2: rule__NormalState__Group_3__1__Impl rule__NormalState__Group_3__2
+            {
+            pushFollow(FOLLOW_10);
+            rule__NormalState__Group_3__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group_3__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3__1"
+
+
+    // $ANTLR start "rule__NormalState__Group_3__1__Impl"
+    // InternalParser.g:725:1: rule__NormalState__Group_3__1__Impl : ( ( rule__NormalState__Group_3_1__0 )? ) ;
+    public final void rule__NormalState__Group_3__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:729:1: ( ( ( rule__NormalState__Group_3_1__0 )? ) )
+            // InternalParser.g:730:1: ( ( rule__NormalState__Group_3_1__0 )? )
+            {
+            // InternalParser.g:730:1: ( ( rule__NormalState__Group_3_1__0 )? )
+            // InternalParser.g:731:2: ( rule__NormalState__Group_3_1__0 )?
+            {
+             before(grammarAccess.getNormalStateAccess().getGroup_3_1()); 
+            // InternalParser.g:732:2: ( rule__NormalState__Group_3_1__0 )?
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==18) ) {
+                alt6=1;
+            }
+            switch (alt6) {
+                case 1 :
+                    // InternalParser.g:732:3: rule__NormalState__Group_3_1__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__NormalState__Group_3_1__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getNormalStateAccess().getGroup_3_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3__1__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group_3__2"
+    // InternalParser.g:740:1: rule__NormalState__Group_3__2 : rule__NormalState__Group_3__2__Impl rule__NormalState__Group_3__3 ;
+    public final void rule__NormalState__Group_3__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:744:1: ( rule__NormalState__Group_3__2__Impl rule__NormalState__Group_3__3 )
+            // InternalParser.g:745:2: rule__NormalState__Group_3__2__Impl rule__NormalState__Group_3__3
+            {
+            pushFollow(FOLLOW_10);
+            rule__NormalState__Group_3__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group_3__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3__2"
+
+
+    // $ANTLR start "rule__NormalState__Group_3__2__Impl"
+    // InternalParser.g:752:1: rule__NormalState__Group_3__2__Impl : ( ( rule__NormalState__Group_3_2__0 )? ) ;
+    public final void rule__NormalState__Group_3__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:756:1: ( ( ( rule__NormalState__Group_3_2__0 )? ) )
+            // InternalParser.g:757:1: ( ( rule__NormalState__Group_3_2__0 )? )
+            {
+            // InternalParser.g:757:1: ( ( rule__NormalState__Group_3_2__0 )? )
+            // InternalParser.g:758:2: ( rule__NormalState__Group_3_2__0 )?
+            {
+             before(grammarAccess.getNormalStateAccess().getGroup_3_2()); 
+            // InternalParser.g:759:2: ( rule__NormalState__Group_3_2__0 )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==19) ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // InternalParser.g:759:3: rule__NormalState__Group_3_2__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__NormalState__Group_3_2__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getNormalStateAccess().getGroup_3_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3__2__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group_3__3"
+    // InternalParser.g:767:1: rule__NormalState__Group_3__3 : rule__NormalState__Group_3__3__Impl rule__NormalState__Group_3__4 ;
+    public final void rule__NormalState__Group_3__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:771:1: ( rule__NormalState__Group_3__3__Impl rule__NormalState__Group_3__4 )
+            // InternalParser.g:772:2: rule__NormalState__Group_3__3__Impl rule__NormalState__Group_3__4
+            {
+            pushFollow(FOLLOW_10);
+            rule__NormalState__Group_3__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group_3__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3__3"
+
+
+    // $ANTLR start "rule__NormalState__Group_3__3__Impl"
+    // InternalParser.g:779:1: rule__NormalState__Group_3__3__Impl : ( ( rule__NormalState__Group_3_3__0 )? ) ;
+    public final void rule__NormalState__Group_3__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:783:1: ( ( ( rule__NormalState__Group_3_3__0 )? ) )
+            // InternalParser.g:784:1: ( ( rule__NormalState__Group_3_3__0 )? )
+            {
+            // InternalParser.g:784:1: ( ( rule__NormalState__Group_3_3__0 )? )
+            // InternalParser.g:785:2: ( rule__NormalState__Group_3_3__0 )?
+            {
+             before(grammarAccess.getNormalStateAccess().getGroup_3_3()); 
+            // InternalParser.g:786:2: ( rule__NormalState__Group_3_3__0 )?
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0==20) ) {
+                alt8=1;
+            }
+            switch (alt8) {
+                case 1 :
+                    // InternalParser.g:786:3: rule__NormalState__Group_3_3__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__NormalState__Group_3_3__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getNormalStateAccess().getGroup_3_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3__3__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group_3__4"
+    // InternalParser.g:794:1: rule__NormalState__Group_3__4 : rule__NormalState__Group_3__4__Impl ;
+    public final void rule__NormalState__Group_3__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:798:1: ( rule__NormalState__Group_3__4__Impl )
+            // InternalParser.g:799:2: rule__NormalState__Group_3__4__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group_3__4__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3__4"
+
+
+    // $ANTLR start "rule__NormalState__Group_3__4__Impl"
+    // InternalParser.g:805:1: rule__NormalState__Group_3__4__Impl : ( '}' ) ;
+    public final void rule__NormalState__Group_3__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:809:1: ( ( '}' ) )
+            // InternalParser.g:810:1: ( '}' )
+            {
+            // InternalParser.g:810:1: ( '}' )
+            // InternalParser.g:811:2: '}'
+            {
+             before(grammarAccess.getNormalStateAccess().getRightCurlyBracketKeyword_3_4()); 
+            match(input,16,FOLLOW_2); 
+             after(grammarAccess.getNormalStateAccess().getRightCurlyBracketKeyword_3_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3__4__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_1__0"
+    // InternalParser.g:821:1: rule__NormalState__Group_3_1__0 : rule__NormalState__Group_3_1__0__Impl rule__NormalState__Group_3_1__1 ;
+    public final void rule__NormalState__Group_3_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:825:1: ( rule__NormalState__Group_3_1__0__Impl rule__NormalState__Group_3_1__1 )
+            // InternalParser.g:826:2: rule__NormalState__Group_3_1__0__Impl rule__NormalState__Group_3_1__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__NormalState__Group_3_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group_3_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_1__0"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_1__0__Impl"
+    // InternalParser.g:833:1: rule__NormalState__Group_3_1__0__Impl : ( 'entry:' ) ;
+    public final void rule__NormalState__Group_3_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:837:1: ( ( 'entry:' ) )
+            // InternalParser.g:838:1: ( 'entry:' )
+            {
+            // InternalParser.g:838:1: ( 'entry:' )
+            // InternalParser.g:839:2: 'entry:'
+            {
+             before(grammarAccess.getNormalStateAccess().getEntryKeyword_3_1_0()); 
+            match(input,18,FOLLOW_2); 
+             after(grammarAccess.getNormalStateAccess().getEntryKeyword_3_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_1__0__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_1__1"
+    // InternalParser.g:848:1: rule__NormalState__Group_3_1__1 : rule__NormalState__Group_3_1__1__Impl ;
+    public final void rule__NormalState__Group_3_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:852:1: ( rule__NormalState__Group_3_1__1__Impl )
+            // InternalParser.g:853:2: rule__NormalState__Group_3_1__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group_3_1__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_1__1"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_1__1__Impl"
+    // InternalParser.g:859:1: rule__NormalState__Group_3_1__1__Impl : ( ( rule__NormalState__Entry_Assignment_3_1_1 ) ) ;
+    public final void rule__NormalState__Group_3_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:863:1: ( ( ( rule__NormalState__Entry_Assignment_3_1_1 ) ) )
+            // InternalParser.g:864:1: ( ( rule__NormalState__Entry_Assignment_3_1_1 ) )
+            {
+            // InternalParser.g:864:1: ( ( rule__NormalState__Entry_Assignment_3_1_1 ) )
+            // InternalParser.g:865:2: ( rule__NormalState__Entry_Assignment_3_1_1 )
+            {
+             before(grammarAccess.getNormalStateAccess().getEntry_Assignment_3_1_1()); 
+            // InternalParser.g:866:2: ( rule__NormalState__Entry_Assignment_3_1_1 )
+            // InternalParser.g:866:3: rule__NormalState__Entry_Assignment_3_1_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Entry_Assignment_3_1_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getNormalStateAccess().getEntry_Assignment_3_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_1__1__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_2__0"
+    // InternalParser.g:875:1: rule__NormalState__Group_3_2__0 : rule__NormalState__Group_3_2__0__Impl rule__NormalState__Group_3_2__1 ;
+    public final void rule__NormalState__Group_3_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:879:1: ( rule__NormalState__Group_3_2__0__Impl rule__NormalState__Group_3_2__1 )
+            // InternalParser.g:880:2: rule__NormalState__Group_3_2__0__Impl rule__NormalState__Group_3_2__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__NormalState__Group_3_2__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group_3_2__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_2__0"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_2__0__Impl"
+    // InternalParser.g:887:1: rule__NormalState__Group_3_2__0__Impl : ( 'do:' ) ;
+    public final void rule__NormalState__Group_3_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:891:1: ( ( 'do:' ) )
+            // InternalParser.g:892:1: ( 'do:' )
+            {
+            // InternalParser.g:892:1: ( 'do:' )
+            // InternalParser.g:893:2: 'do:'
+            {
+             before(grammarAccess.getNormalStateAccess().getDoKeyword_3_2_0()); 
+            match(input,19,FOLLOW_2); 
+             after(grammarAccess.getNormalStateAccess().getDoKeyword_3_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_2__0__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_2__1"
+    // InternalParser.g:902:1: rule__NormalState__Group_3_2__1 : rule__NormalState__Group_3_2__1__Impl ;
+    public final void rule__NormalState__Group_3_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:906:1: ( rule__NormalState__Group_3_2__1__Impl )
+            // InternalParser.g:907:2: rule__NormalState__Group_3_2__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group_3_2__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_2__1"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_2__1__Impl"
+    // InternalParser.g:913:1: rule__NormalState__Group_3_2__1__Impl : ( ( rule__NormalState__Do_Assignment_3_2_1 ) ) ;
+    public final void rule__NormalState__Group_3_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:917:1: ( ( ( rule__NormalState__Do_Assignment_3_2_1 ) ) )
+            // InternalParser.g:918:1: ( ( rule__NormalState__Do_Assignment_3_2_1 ) )
+            {
+            // InternalParser.g:918:1: ( ( rule__NormalState__Do_Assignment_3_2_1 ) )
+            // InternalParser.g:919:2: ( rule__NormalState__Do_Assignment_3_2_1 )
+            {
+             before(grammarAccess.getNormalStateAccess().getDo_Assignment_3_2_1()); 
+            // InternalParser.g:920:2: ( rule__NormalState__Do_Assignment_3_2_1 )
+            // InternalParser.g:920:3: rule__NormalState__Do_Assignment_3_2_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Do_Assignment_3_2_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getNormalStateAccess().getDo_Assignment_3_2_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_2__1__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_3__0"
+    // InternalParser.g:929:1: rule__NormalState__Group_3_3__0 : rule__NormalState__Group_3_3__0__Impl rule__NormalState__Group_3_3__1 ;
+    public final void rule__NormalState__Group_3_3__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:933:1: ( rule__NormalState__Group_3_3__0__Impl rule__NormalState__Group_3_3__1 )
+            // InternalParser.g:934:2: rule__NormalState__Group_3_3__0__Impl rule__NormalState__Group_3_3__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__NormalState__Group_3_3__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group_3_3__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_3__0"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_3__0__Impl"
+    // InternalParser.g:941:1: rule__NormalState__Group_3_3__0__Impl : ( 'exit:' ) ;
+    public final void rule__NormalState__Group_3_3__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:945:1: ( ( 'exit:' ) )
+            // InternalParser.g:946:1: ( 'exit:' )
+            {
+            // InternalParser.g:946:1: ( 'exit:' )
+            // InternalParser.g:947:2: 'exit:'
+            {
+             before(grammarAccess.getNormalStateAccess().getExitKeyword_3_3_0()); 
+            match(input,20,FOLLOW_2); 
+             after(grammarAccess.getNormalStateAccess().getExitKeyword_3_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_3__0__Impl"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_3__1"
+    // InternalParser.g:956:1: rule__NormalState__Group_3_3__1 : rule__NormalState__Group_3_3__1__Impl ;
+    public final void rule__NormalState__Group_3_3__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:960:1: ( rule__NormalState__Group_3_3__1__Impl )
+            // InternalParser.g:961:2: rule__NormalState__Group_3_3__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Group_3_3__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_3__1"
+
+
+    // $ANTLR start "rule__NormalState__Group_3_3__1__Impl"
+    // InternalParser.g:967:1: rule__NormalState__Group_3_3__1__Impl : ( ( rule__NormalState__Exit_Assignment_3_3_1 ) ) ;
+    public final void rule__NormalState__Group_3_3__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:971:1: ( ( ( rule__NormalState__Exit_Assignment_3_3_1 ) ) )
+            // InternalParser.g:972:1: ( ( rule__NormalState__Exit_Assignment_3_3_1 ) )
+            {
+            // InternalParser.g:972:1: ( ( rule__NormalState__Exit_Assignment_3_3_1 ) )
+            // InternalParser.g:973:2: ( rule__NormalState__Exit_Assignment_3_3_1 )
+            {
+             before(grammarAccess.getNormalStateAccess().getExit_Assignment_3_3_1()); 
+            // InternalParser.g:974:2: ( rule__NormalState__Exit_Assignment_3_3_1 )
+            // InternalParser.g:974:3: rule__NormalState__Exit_Assignment_3_3_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__NormalState__Exit_Assignment_3_3_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getNormalStateAccess().getExit_Assignment_3_3_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Group_3_3__1__Impl"
+
+
+    // $ANTLR start "rule__FinalState__Group__0"
+    // InternalParser.g:983:1: rule__FinalState__Group__0 : rule__FinalState__Group__0__Impl rule__FinalState__Group__1 ;
+    public final void rule__FinalState__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:987:1: ( rule__FinalState__Group__0__Impl rule__FinalState__Group__1 )
+            // InternalParser.g:988:2: rule__FinalState__Group__0__Impl rule__FinalState__Group__1
+            {
+            pushFollow(FOLLOW_12);
+            rule__FinalState__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__FinalState__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FinalState__Group__0"
+
+
+    // $ANTLR start "rule__FinalState__Group__0__Impl"
+    // InternalParser.g:995:1: rule__FinalState__Group__0__Impl : ( () ) ;
+    public final void rule__FinalState__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:999:1: ( ( () ) )
+            // InternalParser.g:1000:1: ( () )
+            {
+            // InternalParser.g:1000:1: ( () )
+            // InternalParser.g:1001:2: ()
+            {
+             before(grammarAccess.getFinalStateAccess().getFinalStateAction_0()); 
+            // InternalParser.g:1002:2: ()
+            // InternalParser.g:1002:3: 
+            {
+            }
+
+             after(grammarAccess.getFinalStateAccess().getFinalStateAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FinalState__Group__0__Impl"
+
+
+    // $ANTLR start "rule__FinalState__Group__1"
+    // InternalParser.g:1010:1: rule__FinalState__Group__1 : rule__FinalState__Group__1__Impl rule__FinalState__Group__2 ;
+    public final void rule__FinalState__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1014:1: ( rule__FinalState__Group__1__Impl rule__FinalState__Group__2 )
+            // InternalParser.g:1015:2: rule__FinalState__Group__1__Impl rule__FinalState__Group__2
+            {
+            pushFollow(FOLLOW_13);
+            rule__FinalState__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__FinalState__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FinalState__Group__1"
+
+
+    // $ANTLR start "rule__FinalState__Group__1__Impl"
+    // InternalParser.g:1022:1: rule__FinalState__Group__1__Impl : ( 'end' ) ;
+    public final void rule__FinalState__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1026:1: ( ( 'end' ) )
+            // InternalParser.g:1027:1: ( 'end' )
+            {
+            // InternalParser.g:1027:1: ( 'end' )
+            // InternalParser.g:1028:2: 'end'
+            {
+             before(grammarAccess.getFinalStateAccess().getEndKeyword_1()); 
+            match(input,21,FOLLOW_2); 
+             after(grammarAccess.getFinalStateAccess().getEndKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FinalState__Group__1__Impl"
+
+
+    // $ANTLR start "rule__FinalState__Group__2"
+    // InternalParser.g:1037:1: rule__FinalState__Group__2 : rule__FinalState__Group__2__Impl ;
+    public final void rule__FinalState__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1041:1: ( rule__FinalState__Group__2__Impl )
+            // InternalParser.g:1042:2: rule__FinalState__Group__2__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__FinalState__Group__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FinalState__Group__2"
+
+
+    // $ANTLR start "rule__FinalState__Group__2__Impl"
+    // InternalParser.g:1048:1: rule__FinalState__Group__2__Impl : ( ( rule__FinalState__NameAssignment_2 ) ) ;
+    public final void rule__FinalState__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1052:1: ( ( ( rule__FinalState__NameAssignment_2 ) ) )
+            // InternalParser.g:1053:1: ( ( rule__FinalState__NameAssignment_2 ) )
+            {
+            // InternalParser.g:1053:1: ( ( rule__FinalState__NameAssignment_2 ) )
+            // InternalParser.g:1054:2: ( rule__FinalState__NameAssignment_2 )
+            {
+             before(grammarAccess.getFinalStateAccess().getNameAssignment_2()); 
+            // InternalParser.g:1055:2: ( rule__FinalState__NameAssignment_2 )
+            // InternalParser.g:1055:3: rule__FinalState__NameAssignment_2
+            {
+            pushFollow(FOLLOW_2);
+            rule__FinalState__NameAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getFinalStateAccess().getNameAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FinalState__Group__2__Impl"
+
+
+    // $ANTLR start "rule__InitialState__Group__0"
+    // InternalParser.g:1064:1: rule__InitialState__Group__0 : rule__InitialState__Group__0__Impl rule__InitialState__Group__1 ;
+    public final void rule__InitialState__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1068:1: ( rule__InitialState__Group__0__Impl rule__InitialState__Group__1 )
+            // InternalParser.g:1069:2: rule__InitialState__Group__0__Impl rule__InitialState__Group__1
+            {
+            pushFollow(FOLLOW_6);
+            rule__InitialState__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__InitialState__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InitialState__Group__0"
+
+
+    // $ANTLR start "rule__InitialState__Group__0__Impl"
+    // InternalParser.g:1076:1: rule__InitialState__Group__0__Impl : ( () ) ;
+    public final void rule__InitialState__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1080:1: ( ( () ) )
+            // InternalParser.g:1081:1: ( () )
+            {
+            // InternalParser.g:1081:1: ( () )
+            // InternalParser.g:1082:2: ()
+            {
+             before(grammarAccess.getInitialStateAccess().getInitialStateAction_0()); 
+            // InternalParser.g:1083:2: ()
+            // InternalParser.g:1083:3: 
+            {
+            }
+
+             after(grammarAccess.getInitialStateAccess().getInitialStateAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InitialState__Group__0__Impl"
+
+
+    // $ANTLR start "rule__InitialState__Group__1"
+    // InternalParser.g:1091:1: rule__InitialState__Group__1 : rule__InitialState__Group__1__Impl rule__InitialState__Group__2 ;
+    public final void rule__InitialState__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1095:1: ( rule__InitialState__Group__1__Impl rule__InitialState__Group__2 )
+            // InternalParser.g:1096:2: rule__InitialState__Group__1__Impl rule__InitialState__Group__2
+            {
+            pushFollow(FOLLOW_14);
+            rule__InitialState__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__InitialState__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InitialState__Group__1"
+
+
+    // $ANTLR start "rule__InitialState__Group__1__Impl"
+    // InternalParser.g:1103:1: rule__InitialState__Group__1__Impl : ( 'start' ) ;
+    public final void rule__InitialState__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1107:1: ( ( 'start' ) )
+            // InternalParser.g:1108:1: ( 'start' )
+            {
+            // InternalParser.g:1108:1: ( 'start' )
+            // InternalParser.g:1109:2: 'start'
+            {
+             before(grammarAccess.getInitialStateAccess().getStartKeyword_1()); 
+            match(input,22,FOLLOW_2); 
+             after(grammarAccess.getInitialStateAccess().getStartKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InitialState__Group__1__Impl"
+
+
+    // $ANTLR start "rule__InitialState__Group__2"
+    // InternalParser.g:1118:1: rule__InitialState__Group__2 : rule__InitialState__Group__2__Impl ;
+    public final void rule__InitialState__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1122:1: ( rule__InitialState__Group__2__Impl )
+            // InternalParser.g:1123:2: rule__InitialState__Group__2__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__InitialState__Group__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InitialState__Group__2"
+
+
+    // $ANTLR start "rule__InitialState__Group__2__Impl"
+    // InternalParser.g:1129:1: rule__InitialState__Group__2__Impl : ( ( rule__InitialState__NameAssignment_2 ) ) ;
+    public final void rule__InitialState__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1133:1: ( ( ( rule__InitialState__NameAssignment_2 ) ) )
+            // InternalParser.g:1134:1: ( ( rule__InitialState__NameAssignment_2 ) )
+            {
+            // InternalParser.g:1134:1: ( ( rule__InitialState__NameAssignment_2 ) )
+            // InternalParser.g:1135:2: ( rule__InitialState__NameAssignment_2 )
+            {
+             before(grammarAccess.getInitialStateAccess().getNameAssignment_2()); 
+            // InternalParser.g:1136:2: ( rule__InitialState__NameAssignment_2 )
+            // InternalParser.g:1136:3: rule__InitialState__NameAssignment_2
+            {
+            pushFollow(FOLLOW_2);
+            rule__InitialState__NameAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getInitialStateAccess().getNameAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InitialState__Group__2__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__0"
+    // InternalParser.g:1145:1: rule__Transition__Group__0 : rule__Transition__Group__0__Impl rule__Transition__Group__1 ;
+    public final void rule__Transition__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1149:1: ( rule__Transition__Group__0__Impl rule__Transition__Group__1 )
+            // InternalParser.g:1150:2: rule__Transition__Group__0__Impl rule__Transition__Group__1
+            {
+            pushFollow(FOLLOW_15);
+            rule__Transition__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__0"
+
+
+    // $ANTLR start "rule__Transition__Group__0__Impl"
+    // InternalParser.g:1157:1: rule__Transition__Group__0__Impl : ( () ) ;
+    public final void rule__Transition__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1161:1: ( ( () ) )
+            // InternalParser.g:1162:1: ( () )
+            {
+            // InternalParser.g:1162:1: ( () )
+            // InternalParser.g:1163:2: ()
+            {
+             before(grammarAccess.getTransitionAccess().getTransitionAction_0()); 
+            // InternalParser.g:1164:2: ()
+            // InternalParser.g:1164:3: 
+            {
+            }
+
+             after(grammarAccess.getTransitionAccess().getTransitionAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__1"
+    // InternalParser.g:1172:1: rule__Transition__Group__1 : rule__Transition__Group__1__Impl rule__Transition__Group__2 ;
+    public final void rule__Transition__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1176:1: ( rule__Transition__Group__1__Impl rule__Transition__Group__2 )
+            // InternalParser.g:1177:2: rule__Transition__Group__1__Impl rule__Transition__Group__2
+            {
+            pushFollow(FOLLOW_16);
+            rule__Transition__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__1"
+
+
+    // $ANTLR start "rule__Transition__Group__1__Impl"
+    // InternalParser.g:1184:1: rule__Transition__Group__1__Impl : ( ( rule__Transition__FromAssignment_1 ) ) ;
+    public final void rule__Transition__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1188:1: ( ( ( rule__Transition__FromAssignment_1 ) ) )
+            // InternalParser.g:1189:1: ( ( rule__Transition__FromAssignment_1 ) )
+            {
+            // InternalParser.g:1189:1: ( ( rule__Transition__FromAssignment_1 ) )
+            // InternalParser.g:1190:2: ( rule__Transition__FromAssignment_1 )
+            {
+             before(grammarAccess.getTransitionAccess().getFromAssignment_1()); 
+            // InternalParser.g:1191:2: ( rule__Transition__FromAssignment_1 )
+            // InternalParser.g:1191:3: rule__Transition__FromAssignment_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__Transition__FromAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getFromAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__2"
+    // InternalParser.g:1199:1: rule__Transition__Group__2 : rule__Transition__Group__2__Impl rule__Transition__Group__3 ;
+    public final void rule__Transition__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1203:1: ( rule__Transition__Group__2__Impl rule__Transition__Group__3 )
+            // InternalParser.g:1204:2: rule__Transition__Group__2__Impl rule__Transition__Group__3
+            {
+            pushFollow(FOLLOW_17);
+            rule__Transition__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__2"
+
+
+    // $ANTLR start "rule__Transition__Group__2__Impl"
+    // InternalParser.g:1211:1: rule__Transition__Group__2__Impl : ( '-' ) ;
+    public final void rule__Transition__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1215:1: ( ( '-' ) )
+            // InternalParser.g:1216:1: ( '-' )
+            {
+            // InternalParser.g:1216:1: ( '-' )
+            // InternalParser.g:1217:2: '-'
+            {
+             before(grammarAccess.getTransitionAccess().getHyphenMinusKeyword_2()); 
+            match(input,23,FOLLOW_2); 
+             after(grammarAccess.getTransitionAccess().getHyphenMinusKeyword_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__2__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__3"
+    // InternalParser.g:1226:1: rule__Transition__Group__3 : rule__Transition__Group__3__Impl rule__Transition__Group__4 ;
+    public final void rule__Transition__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1230:1: ( rule__Transition__Group__3__Impl rule__Transition__Group__4 )
+            // InternalParser.g:1231:2: rule__Transition__Group__3__Impl rule__Transition__Group__4
+            {
+            pushFollow(FOLLOW_17);
+            rule__Transition__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__3"
+
+
+    // $ANTLR start "rule__Transition__Group__3__Impl"
+    // InternalParser.g:1238:1: rule__Transition__Group__3__Impl : ( ( rule__Transition__TriggerAssignment_3 )? ) ;
+    public final void rule__Transition__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1242:1: ( ( ( rule__Transition__TriggerAssignment_3 )? ) )
+            // InternalParser.g:1243:1: ( ( rule__Transition__TriggerAssignment_3 )? )
+            {
+            // InternalParser.g:1243:1: ( ( rule__Transition__TriggerAssignment_3 )? )
+            // InternalParser.g:1244:2: ( rule__Transition__TriggerAssignment_3 )?
+            {
+             before(grammarAccess.getTransitionAccess().getTriggerAssignment_3()); 
+            // InternalParser.g:1245:2: ( rule__Transition__TriggerAssignment_3 )?
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( ((LA9_0>=RULE_STRING && LA9_0<=RULE_CALL)) ) {
+                alt9=1;
+            }
+            switch (alt9) {
+                case 1 :
+                    // InternalParser.g:1245:3: rule__Transition__TriggerAssignment_3
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__Transition__TriggerAssignment_3();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getTriggerAssignment_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__3__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__4"
+    // InternalParser.g:1253:1: rule__Transition__Group__4 : rule__Transition__Group__4__Impl rule__Transition__Group__5 ;
+    public final void rule__Transition__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1257:1: ( rule__Transition__Group__4__Impl rule__Transition__Group__5 )
+            // InternalParser.g:1258:2: rule__Transition__Group__4__Impl rule__Transition__Group__5
+            {
+            pushFollow(FOLLOW_17);
+            rule__Transition__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group__5();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__4"
+
+
+    // $ANTLR start "rule__Transition__Group__4__Impl"
+    // InternalParser.g:1265:1: rule__Transition__Group__4__Impl : ( ( rule__Transition__Group_4__0 )? ) ;
+    public final void rule__Transition__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1269:1: ( ( ( rule__Transition__Group_4__0 )? ) )
+            // InternalParser.g:1270:1: ( ( rule__Transition__Group_4__0 )? )
+            {
+            // InternalParser.g:1270:1: ( ( rule__Transition__Group_4__0 )? )
+            // InternalParser.g:1271:2: ( rule__Transition__Group_4__0 )?
+            {
+             before(grammarAccess.getTransitionAccess().getGroup_4()); 
+            // InternalParser.g:1272:2: ( rule__Transition__Group_4__0 )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==25) ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // InternalParser.g:1272:3: rule__Transition__Group_4__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__Transition__Group_4__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getGroup_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__4__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__5"
+    // InternalParser.g:1280:1: rule__Transition__Group__5 : rule__Transition__Group__5__Impl rule__Transition__Group__6 ;
+    public final void rule__Transition__Group__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1284:1: ( rule__Transition__Group__5__Impl rule__Transition__Group__6 )
+            // InternalParser.g:1285:2: rule__Transition__Group__5__Impl rule__Transition__Group__6
+            {
+            pushFollow(FOLLOW_17);
+            rule__Transition__Group__5__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group__6();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__5"
+
+
+    // $ANTLR start "rule__Transition__Group__5__Impl"
+    // InternalParser.g:1292:1: rule__Transition__Group__5__Impl : ( ( rule__Transition__Group_5__0 )? ) ;
+    public final void rule__Transition__Group__5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1296:1: ( ( ( rule__Transition__Group_5__0 )? ) )
+            // InternalParser.g:1297:1: ( ( rule__Transition__Group_5__0 )? )
+            {
+            // InternalParser.g:1297:1: ( ( rule__Transition__Group_5__0 )? )
+            // InternalParser.g:1298:2: ( rule__Transition__Group_5__0 )?
+            {
+             before(grammarAccess.getTransitionAccess().getGroup_5()); 
+            // InternalParser.g:1299:2: ( rule__Transition__Group_5__0 )?
+            int alt11=2;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0==27) ) {
+                alt11=1;
+            }
+            switch (alt11) {
+                case 1 :
+                    // InternalParser.g:1299:3: rule__Transition__Group_5__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__Transition__Group_5__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getGroup_5()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__5__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__6"
+    // InternalParser.g:1307:1: rule__Transition__Group__6 : rule__Transition__Group__6__Impl rule__Transition__Group__7 ;
+    public final void rule__Transition__Group__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1311:1: ( rule__Transition__Group__6__Impl rule__Transition__Group__7 )
+            // InternalParser.g:1312:2: rule__Transition__Group__6__Impl rule__Transition__Group__7
+            {
+            pushFollow(FOLLOW_4);
+            rule__Transition__Group__6__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group__7();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__6"
+
+
+    // $ANTLR start "rule__Transition__Group__6__Impl"
+    // InternalParser.g:1319:1: rule__Transition__Group__6__Impl : ( '->' ) ;
+    public final void rule__Transition__Group__6__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1323:1: ( ( '->' ) )
+            // InternalParser.g:1324:1: ( '->' )
+            {
+            // InternalParser.g:1324:1: ( '->' )
+            // InternalParser.g:1325:2: '->'
+            {
+             before(grammarAccess.getTransitionAccess().getHyphenMinusGreaterThanSignKeyword_6()); 
+            match(input,24,FOLLOW_2); 
+             after(grammarAccess.getTransitionAccess().getHyphenMinusGreaterThanSignKeyword_6()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__6__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group__7"
+    // InternalParser.g:1334:1: rule__Transition__Group__7 : rule__Transition__Group__7__Impl ;
+    public final void rule__Transition__Group__7() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1338:1: ( rule__Transition__Group__7__Impl )
+            // InternalParser.g:1339:2: rule__Transition__Group__7__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group__7__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__7"
+
+
+    // $ANTLR start "rule__Transition__Group__7__Impl"
+    // InternalParser.g:1345:1: rule__Transition__Group__7__Impl : ( ( rule__Transition__ToAssignment_7 ) ) ;
+    public final void rule__Transition__Group__7__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1349:1: ( ( ( rule__Transition__ToAssignment_7 ) ) )
+            // InternalParser.g:1350:1: ( ( rule__Transition__ToAssignment_7 ) )
+            {
+            // InternalParser.g:1350:1: ( ( rule__Transition__ToAssignment_7 ) )
+            // InternalParser.g:1351:2: ( rule__Transition__ToAssignment_7 )
+            {
+             before(grammarAccess.getTransitionAccess().getToAssignment_7()); 
+            // InternalParser.g:1352:2: ( rule__Transition__ToAssignment_7 )
+            // InternalParser.g:1352:3: rule__Transition__ToAssignment_7
+            {
+            pushFollow(FOLLOW_2);
+            rule__Transition__ToAssignment_7();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getToAssignment_7()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group__7__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group_4__0"
+    // InternalParser.g:1361:1: rule__Transition__Group_4__0 : rule__Transition__Group_4__0__Impl rule__Transition__Group_4__1 ;
+    public final void rule__Transition__Group_4__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1365:1: ( rule__Transition__Group_4__0__Impl rule__Transition__Group_4__1 )
+            // InternalParser.g:1366:2: rule__Transition__Group_4__0__Impl rule__Transition__Group_4__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__Transition__Group_4__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group_4__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_4__0"
+
+
+    // $ANTLR start "rule__Transition__Group_4__0__Impl"
+    // InternalParser.g:1373:1: rule__Transition__Group_4__0__Impl : ( '[' ) ;
+    public final void rule__Transition__Group_4__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1377:1: ( ( '[' ) )
+            // InternalParser.g:1378:1: ( '[' )
+            {
+            // InternalParser.g:1378:1: ( '[' )
+            // InternalParser.g:1379:2: '['
+            {
+             before(grammarAccess.getTransitionAccess().getLeftSquareBracketKeyword_4_0()); 
+            match(input,25,FOLLOW_2); 
+             after(grammarAccess.getTransitionAccess().getLeftSquareBracketKeyword_4_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_4__0__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group_4__1"
+    // InternalParser.g:1388:1: rule__Transition__Group_4__1 : rule__Transition__Group_4__1__Impl rule__Transition__Group_4__2 ;
+    public final void rule__Transition__Group_4__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1392:1: ( rule__Transition__Group_4__1__Impl rule__Transition__Group_4__2 )
+            // InternalParser.g:1393:2: rule__Transition__Group_4__1__Impl rule__Transition__Group_4__2
+            {
+            pushFollow(FOLLOW_18);
+            rule__Transition__Group_4__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group_4__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_4__1"
+
+
+    // $ANTLR start "rule__Transition__Group_4__1__Impl"
+    // InternalParser.g:1400:1: rule__Transition__Group_4__1__Impl : ( ( rule__Transition__GuardAssignment_4_1 ) ) ;
+    public final void rule__Transition__Group_4__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1404:1: ( ( ( rule__Transition__GuardAssignment_4_1 ) ) )
+            // InternalParser.g:1405:1: ( ( rule__Transition__GuardAssignment_4_1 ) )
+            {
+            // InternalParser.g:1405:1: ( ( rule__Transition__GuardAssignment_4_1 ) )
+            // InternalParser.g:1406:2: ( rule__Transition__GuardAssignment_4_1 )
+            {
+             before(grammarAccess.getTransitionAccess().getGuardAssignment_4_1()); 
+            // InternalParser.g:1407:2: ( rule__Transition__GuardAssignment_4_1 )
+            // InternalParser.g:1407:3: rule__Transition__GuardAssignment_4_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__Transition__GuardAssignment_4_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getGuardAssignment_4_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_4__1__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group_4__2"
+    // InternalParser.g:1415:1: rule__Transition__Group_4__2 : rule__Transition__Group_4__2__Impl ;
+    public final void rule__Transition__Group_4__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1419:1: ( rule__Transition__Group_4__2__Impl )
+            // InternalParser.g:1420:2: rule__Transition__Group_4__2__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group_4__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_4__2"
+
+
+    // $ANTLR start "rule__Transition__Group_4__2__Impl"
+    // InternalParser.g:1426:1: rule__Transition__Group_4__2__Impl : ( ']' ) ;
+    public final void rule__Transition__Group_4__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1430:1: ( ( ']' ) )
+            // InternalParser.g:1431:1: ( ']' )
+            {
+            // InternalParser.g:1431:1: ( ']' )
+            // InternalParser.g:1432:2: ']'
+            {
+             before(grammarAccess.getTransitionAccess().getRightSquareBracketKeyword_4_2()); 
+            match(input,26,FOLLOW_2); 
+             after(grammarAccess.getTransitionAccess().getRightSquareBracketKeyword_4_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_4__2__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group_5__0"
+    // InternalParser.g:1442:1: rule__Transition__Group_5__0 : rule__Transition__Group_5__0__Impl rule__Transition__Group_5__1 ;
+    public final void rule__Transition__Group_5__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1446:1: ( rule__Transition__Group_5__0__Impl rule__Transition__Group_5__1 )
+            // InternalParser.g:1447:2: rule__Transition__Group_5__0__Impl rule__Transition__Group_5__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__Transition__Group_5__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group_5__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_5__0"
+
+
+    // $ANTLR start "rule__Transition__Group_5__0__Impl"
+    // InternalParser.g:1454:1: rule__Transition__Group_5__0__Impl : ( '/' ) ;
+    public final void rule__Transition__Group_5__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1458:1: ( ( '/' ) )
+            // InternalParser.g:1459:1: ( '/' )
+            {
+            // InternalParser.g:1459:1: ( '/' )
+            // InternalParser.g:1460:2: '/'
+            {
+             before(grammarAccess.getTransitionAccess().getSolidusKeyword_5_0()); 
+            match(input,27,FOLLOW_2); 
+             after(grammarAccess.getTransitionAccess().getSolidusKeyword_5_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_5__0__Impl"
+
+
+    // $ANTLR start "rule__Transition__Group_5__1"
+    // InternalParser.g:1469:1: rule__Transition__Group_5__1 : rule__Transition__Group_5__1__Impl ;
+    public final void rule__Transition__Group_5__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1473:1: ( rule__Transition__Group_5__1__Impl )
+            // InternalParser.g:1474:2: rule__Transition__Group_5__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__Transition__Group_5__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_5__1"
+
+
+    // $ANTLR start "rule__Transition__Group_5__1__Impl"
+    // InternalParser.g:1480:1: rule__Transition__Group_5__1__Impl : ( ( rule__Transition__ActionAssignment_5_1 ) ) ;
+    public final void rule__Transition__Group_5__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1484:1: ( ( ( rule__Transition__ActionAssignment_5_1 ) ) )
+            // InternalParser.g:1485:1: ( ( rule__Transition__ActionAssignment_5_1 ) )
+            {
+            // InternalParser.g:1485:1: ( ( rule__Transition__ActionAssignment_5_1 ) )
+            // InternalParser.g:1486:2: ( rule__Transition__ActionAssignment_5_1 )
+            {
+             before(grammarAccess.getTransitionAccess().getActionAssignment_5_1()); 
+            // InternalParser.g:1487:2: ( rule__Transition__ActionAssignment_5_1 )
+            // InternalParser.g:1487:3: rule__Transition__ActionAssignment_5_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__Transition__ActionAssignment_5_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getActionAssignment_5_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__Group_5__1__Impl"
+
+
+    // $ANTLR start "rule__Action__Group__0"
+    // InternalParser.g:1496:1: rule__Action__Group__0 : rule__Action__Group__0__Impl rule__Action__Group__1 ;
+    public final void rule__Action__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1500:1: ( rule__Action__Group__0__Impl rule__Action__Group__1 )
+            // InternalParser.g:1501:2: rule__Action__Group__0__Impl rule__Action__Group__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__Action__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Action__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Action__Group__0"
+
+
+    // $ANTLR start "rule__Action__Group__0__Impl"
+    // InternalParser.g:1508:1: rule__Action__Group__0__Impl : ( () ) ;
+    public final void rule__Action__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1512:1: ( ( () ) )
+            // InternalParser.g:1513:1: ( () )
+            {
+            // InternalParser.g:1513:1: ( () )
+            // InternalParser.g:1514:2: ()
+            {
+             before(grammarAccess.getActionAccess().getActionAction_0()); 
+            // InternalParser.g:1515:2: ()
+            // InternalParser.g:1515:3: 
+            {
+            }
+
+             after(grammarAccess.getActionAccess().getActionAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Action__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Action__Group__1"
+    // InternalParser.g:1523:1: rule__Action__Group__1 : rule__Action__Group__1__Impl ;
+    public final void rule__Action__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1527:1: ( rule__Action__Group__1__Impl )
+            // InternalParser.g:1528:2: rule__Action__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__Action__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Action__Group__1"
+
+
+    // $ANTLR start "rule__Action__Group__1__Impl"
+    // InternalParser.g:1534:1: rule__Action__Group__1__Impl : ( ( rule__Action__ContentAssignment_1 ) ) ;
+    public final void rule__Action__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1538:1: ( ( ( rule__Action__ContentAssignment_1 ) ) )
+            // InternalParser.g:1539:1: ( ( rule__Action__ContentAssignment_1 ) )
+            {
+            // InternalParser.g:1539:1: ( ( rule__Action__ContentAssignment_1 ) )
+            // InternalParser.g:1540:2: ( rule__Action__ContentAssignment_1 )
+            {
+             before(grammarAccess.getActionAccess().getContentAssignment_1()); 
+            // InternalParser.g:1541:2: ( rule__Action__ContentAssignment_1 )
+            // InternalParser.g:1541:3: rule__Action__ContentAssignment_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__Action__ContentAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getActionAccess().getContentAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Action__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Trigger__Group__0"
+    // InternalParser.g:1550:1: rule__Trigger__Group__0 : rule__Trigger__Group__0__Impl rule__Trigger__Group__1 ;
+    public final void rule__Trigger__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1554:1: ( rule__Trigger__Group__0__Impl rule__Trigger__Group__1 )
+            // InternalParser.g:1555:2: rule__Trigger__Group__0__Impl rule__Trigger__Group__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__Trigger__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Trigger__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Trigger__Group__0"
+
+
+    // $ANTLR start "rule__Trigger__Group__0__Impl"
+    // InternalParser.g:1562:1: rule__Trigger__Group__0__Impl : ( () ) ;
+    public final void rule__Trigger__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1566:1: ( ( () ) )
+            // InternalParser.g:1567:1: ( () )
+            {
+            // InternalParser.g:1567:1: ( () )
+            // InternalParser.g:1568:2: ()
+            {
+             before(grammarAccess.getTriggerAccess().getTriggerAction_0()); 
+            // InternalParser.g:1569:2: ()
+            // InternalParser.g:1569:3: 
+            {
+            }
+
+             after(grammarAccess.getTriggerAccess().getTriggerAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Trigger__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Trigger__Group__1"
+    // InternalParser.g:1577:1: rule__Trigger__Group__1 : rule__Trigger__Group__1__Impl ;
+    public final void rule__Trigger__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1581:1: ( rule__Trigger__Group__1__Impl )
+            // InternalParser.g:1582:2: rule__Trigger__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__Trigger__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Trigger__Group__1"
+
+
+    // $ANTLR start "rule__Trigger__Group__1__Impl"
+    // InternalParser.g:1588:1: rule__Trigger__Group__1__Impl : ( ( rule__Trigger__ContentAssignment_1 ) ) ;
+    public final void rule__Trigger__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1592:1: ( ( ( rule__Trigger__ContentAssignment_1 ) ) )
+            // InternalParser.g:1593:1: ( ( rule__Trigger__ContentAssignment_1 ) )
+            {
+            // InternalParser.g:1593:1: ( ( rule__Trigger__ContentAssignment_1 ) )
+            // InternalParser.g:1594:2: ( rule__Trigger__ContentAssignment_1 )
+            {
+             before(grammarAccess.getTriggerAccess().getContentAssignment_1()); 
+            // InternalParser.g:1595:2: ( rule__Trigger__ContentAssignment_1 )
+            // InternalParser.g:1595:3: rule__Trigger__ContentAssignment_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__Trigger__ContentAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTriggerAccess().getContentAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Trigger__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Guard__Group__0"
+    // InternalParser.g:1604:1: rule__Guard__Group__0 : rule__Guard__Group__0__Impl rule__Guard__Group__1 ;
+    public final void rule__Guard__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1608:1: ( rule__Guard__Group__0__Impl rule__Guard__Group__1 )
+            // InternalParser.g:1609:2: rule__Guard__Group__0__Impl rule__Guard__Group__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__Guard__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Guard__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Guard__Group__0"
+
+
+    // $ANTLR start "rule__Guard__Group__0__Impl"
+    // InternalParser.g:1616:1: rule__Guard__Group__0__Impl : ( () ) ;
+    public final void rule__Guard__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1620:1: ( ( () ) )
+            // InternalParser.g:1621:1: ( () )
+            {
+            // InternalParser.g:1621:1: ( () )
+            // InternalParser.g:1622:2: ()
+            {
+             before(grammarAccess.getGuardAccess().getGuardAction_0()); 
+            // InternalParser.g:1623:2: ()
+            // InternalParser.g:1623:3: 
+            {
+            }
+
+             after(grammarAccess.getGuardAccess().getGuardAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Guard__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Guard__Group__1"
+    // InternalParser.g:1631:1: rule__Guard__Group__1 : rule__Guard__Group__1__Impl ;
+    public final void rule__Guard__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1635:1: ( rule__Guard__Group__1__Impl )
+            // InternalParser.g:1636:2: rule__Guard__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__Guard__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Guard__Group__1"
+
+
+    // $ANTLR start "rule__Guard__Group__1__Impl"
+    // InternalParser.g:1642:1: rule__Guard__Group__1__Impl : ( ( rule__Guard__ContentAssignment_1 ) ) ;
+    public final void rule__Guard__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1646:1: ( ( ( rule__Guard__ContentAssignment_1 ) ) )
+            // InternalParser.g:1647:1: ( ( rule__Guard__ContentAssignment_1 ) )
+            {
+            // InternalParser.g:1647:1: ( ( rule__Guard__ContentAssignment_1 ) )
+            // InternalParser.g:1648:2: ( rule__Guard__ContentAssignment_1 )
+            {
+             before(grammarAccess.getGuardAccess().getContentAssignment_1()); 
+            // InternalParser.g:1649:2: ( rule__Guard__ContentAssignment_1 )
+            // InternalParser.g:1649:3: rule__Guard__ContentAssignment_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__Guard__ContentAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getGuardAccess().getContentAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Guard__Group__1__Impl"
+
+
+    // $ANTLR start "rule__StateMachine__NameAssignment_2"
+    // InternalParser.g:1658:1: rule__StateMachine__NameAssignment_2 : ( ruleEString ) ;
+    public final void rule__StateMachine__NameAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1662:1: ( ( ruleEString ) )
+            // InternalParser.g:1663:2: ( ruleEString )
+            {
+            // InternalParser.g:1663:2: ( ruleEString )
+            // InternalParser.g:1664:3: ruleEString
+            {
+             before(grammarAccess.getStateMachineAccess().getNameEStringParserRuleCall_2_0()); 
+            pushFollow(FOLLOW_2);
+            ruleEString();
+
+            state._fsp--;
+
+             after(grammarAccess.getStateMachineAccess().getNameEStringParserRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__NameAssignment_2"
+
+
+    // $ANTLR start "rule__StateMachine__InitialstateAssignment_4"
+    // InternalParser.g:1673:1: rule__StateMachine__InitialstateAssignment_4 : ( ruleInitialState ) ;
+    public final void rule__StateMachine__InitialstateAssignment_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1677:1: ( ( ruleInitialState ) )
+            // InternalParser.g:1678:2: ( ruleInitialState )
+            {
+            // InternalParser.g:1678:2: ( ruleInitialState )
+            // InternalParser.g:1679:3: ruleInitialState
+            {
+             before(grammarAccess.getStateMachineAccess().getInitialstateInitialStateParserRuleCall_4_0()); 
+            pushFollow(FOLLOW_2);
+            ruleInitialState();
+
+            state._fsp--;
+
+             after(grammarAccess.getStateMachineAccess().getInitialstateInitialStateParserRuleCall_4_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__InitialstateAssignment_4"
+
+
+    // $ANTLR start "rule__StateMachine__StatesAssignment_5_0"
+    // InternalParser.g:1688:1: rule__StateMachine__StatesAssignment_5_0 : ( ruleNormalState ) ;
+    public final void rule__StateMachine__StatesAssignment_5_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1692:1: ( ( ruleNormalState ) )
+            // InternalParser.g:1693:2: ( ruleNormalState )
+            {
+            // InternalParser.g:1693:2: ( ruleNormalState )
+            // InternalParser.g:1694:3: ruleNormalState
+            {
+             before(grammarAccess.getStateMachineAccess().getStatesNormalStateParserRuleCall_5_0_0()); 
+            pushFollow(FOLLOW_2);
+            ruleNormalState();
+
+            state._fsp--;
+
+             after(grammarAccess.getStateMachineAccess().getStatesNormalStateParserRuleCall_5_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__StatesAssignment_5_0"
+
+
+    // $ANTLR start "rule__StateMachine__FinalstatesAssignment_5_1"
+    // InternalParser.g:1703:1: rule__StateMachine__FinalstatesAssignment_5_1 : ( ruleFinalState ) ;
+    public final void rule__StateMachine__FinalstatesAssignment_5_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1707:1: ( ( ruleFinalState ) )
+            // InternalParser.g:1708:2: ( ruleFinalState )
+            {
+            // InternalParser.g:1708:2: ( ruleFinalState )
+            // InternalParser.g:1709:3: ruleFinalState
+            {
+             before(grammarAccess.getStateMachineAccess().getFinalstatesFinalStateParserRuleCall_5_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleFinalState();
+
+            state._fsp--;
+
+             after(grammarAccess.getStateMachineAccess().getFinalstatesFinalStateParserRuleCall_5_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__FinalstatesAssignment_5_1"
+
+
+    // $ANTLR start "rule__StateMachine__TransitionsAssignment_5_2"
+    // InternalParser.g:1718:1: rule__StateMachine__TransitionsAssignment_5_2 : ( ruleTransition ) ;
+    public final void rule__StateMachine__TransitionsAssignment_5_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1722:1: ( ( ruleTransition ) )
+            // InternalParser.g:1723:2: ( ruleTransition )
+            {
+            // InternalParser.g:1723:2: ( ruleTransition )
+            // InternalParser.g:1724:3: ruleTransition
+            {
+             before(grammarAccess.getStateMachineAccess().getTransitionsTransitionParserRuleCall_5_2_0()); 
+            pushFollow(FOLLOW_2);
+            ruleTransition();
+
+            state._fsp--;
+
+             after(grammarAccess.getStateMachineAccess().getTransitionsTransitionParserRuleCall_5_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StateMachine__TransitionsAssignment_5_2"
+
+
+    // $ANTLR start "rule__NormalState__NameAssignment_2"
+    // InternalParser.g:1733:1: rule__NormalState__NameAssignment_2 : ( ruleEString ) ;
+    public final void rule__NormalState__NameAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1737:1: ( ( ruleEString ) )
+            // InternalParser.g:1738:2: ( ruleEString )
+            {
+            // InternalParser.g:1738:2: ( ruleEString )
+            // InternalParser.g:1739:3: ruleEString
+            {
+             before(grammarAccess.getNormalStateAccess().getNameEStringParserRuleCall_2_0()); 
+            pushFollow(FOLLOW_2);
+            ruleEString();
+
+            state._fsp--;
+
+             after(grammarAccess.getNormalStateAccess().getNameEStringParserRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__NameAssignment_2"
+
+
+    // $ANTLR start "rule__NormalState__Entry_Assignment_3_1_1"
+    // InternalParser.g:1748:1: rule__NormalState__Entry_Assignment_3_1_1 : ( ruleAction ) ;
+    public final void rule__NormalState__Entry_Assignment_3_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1752:1: ( ( ruleAction ) )
+            // InternalParser.g:1753:2: ( ruleAction )
+            {
+            // InternalParser.g:1753:2: ( ruleAction )
+            // InternalParser.g:1754:3: ruleAction
+            {
+             before(grammarAccess.getNormalStateAccess().getEntry_ActionParserRuleCall_3_1_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleAction();
+
+            state._fsp--;
+
+             after(grammarAccess.getNormalStateAccess().getEntry_ActionParserRuleCall_3_1_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Entry_Assignment_3_1_1"
+
+
+    // $ANTLR start "rule__NormalState__Do_Assignment_3_2_1"
+    // InternalParser.g:1763:1: rule__NormalState__Do_Assignment_3_2_1 : ( ruleAction ) ;
+    public final void rule__NormalState__Do_Assignment_3_2_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1767:1: ( ( ruleAction ) )
+            // InternalParser.g:1768:2: ( ruleAction )
+            {
+            // InternalParser.g:1768:2: ( ruleAction )
+            // InternalParser.g:1769:3: ruleAction
+            {
+             before(grammarAccess.getNormalStateAccess().getDo_ActionParserRuleCall_3_2_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleAction();
+
+            state._fsp--;
+
+             after(grammarAccess.getNormalStateAccess().getDo_ActionParserRuleCall_3_2_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Do_Assignment_3_2_1"
+
+
+    // $ANTLR start "rule__NormalState__Exit_Assignment_3_3_1"
+    // InternalParser.g:1778:1: rule__NormalState__Exit_Assignment_3_3_1 : ( ruleAction ) ;
+    public final void rule__NormalState__Exit_Assignment_3_3_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1782:1: ( ( ruleAction ) )
+            // InternalParser.g:1783:2: ( ruleAction )
+            {
+            // InternalParser.g:1783:2: ( ruleAction )
+            // InternalParser.g:1784:3: ruleAction
+            {
+             before(grammarAccess.getNormalStateAccess().getExit_ActionParserRuleCall_3_3_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleAction();
+
+            state._fsp--;
+
+             after(grammarAccess.getNormalStateAccess().getExit_ActionParserRuleCall_3_3_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NormalState__Exit_Assignment_3_3_1"
+
+
+    // $ANTLR start "rule__FinalState__NameAssignment_2"
+    // InternalParser.g:1793:1: rule__FinalState__NameAssignment_2 : ( RULE_FINALSTATENAME ) ;
+    public final void rule__FinalState__NameAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1797:1: ( ( RULE_FINALSTATENAME ) )
+            // InternalParser.g:1798:2: ( RULE_FINALSTATENAME )
+            {
+            // InternalParser.g:1798:2: ( RULE_FINALSTATENAME )
+            // InternalParser.g:1799:3: RULE_FINALSTATENAME
+            {
+             before(grammarAccess.getFinalStateAccess().getNameFINALSTATENAMETerminalRuleCall_2_0()); 
+            match(input,RULE_FINALSTATENAME,FOLLOW_2); 
+             after(grammarAccess.getFinalStateAccess().getNameFINALSTATENAMETerminalRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FinalState__NameAssignment_2"
+
+
+    // $ANTLR start "rule__InitialState__NameAssignment_2"
+    // InternalParser.g:1808:1: rule__InitialState__NameAssignment_2 : ( RULE_INITIALSTATENAME ) ;
+    public final void rule__InitialState__NameAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1812:1: ( ( RULE_INITIALSTATENAME ) )
+            // InternalParser.g:1813:2: ( RULE_INITIALSTATENAME )
+            {
+            // InternalParser.g:1813:2: ( RULE_INITIALSTATENAME )
+            // InternalParser.g:1814:3: RULE_INITIALSTATENAME
+            {
+             before(grammarAccess.getInitialStateAccess().getNameINITIALSTATENAMETerminalRuleCall_2_0()); 
+            match(input,RULE_INITIALSTATENAME,FOLLOW_2); 
+             after(grammarAccess.getInitialStateAccess().getNameINITIALSTATENAMETerminalRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InitialState__NameAssignment_2"
+
+
+    // $ANTLR start "rule__Transition__FromAssignment_1"
+    // InternalParser.g:1823:1: rule__Transition__FromAssignment_1 : ( ( ruleEString ) ) ;
+    public final void rule__Transition__FromAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1827:1: ( ( ( ruleEString ) ) )
+            // InternalParser.g:1828:2: ( ( ruleEString ) )
+            {
+            // InternalParser.g:1828:2: ( ( ruleEString ) )
+            // InternalParser.g:1829:3: ( ruleEString )
+            {
+             before(grammarAccess.getTransitionAccess().getFromStateCrossReference_1_0()); 
+            // InternalParser.g:1830:3: ( ruleEString )
+            // InternalParser.g:1831:4: ruleEString
+            {
+             before(grammarAccess.getTransitionAccess().getFromStateEStringParserRuleCall_1_0_1()); 
+            pushFollow(FOLLOW_2);
+            ruleEString();
+
+            state._fsp--;
+
+             after(grammarAccess.getTransitionAccess().getFromStateEStringParserRuleCall_1_0_1()); 
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getFromStateCrossReference_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__FromAssignment_1"
+
+
+    // $ANTLR start "rule__Transition__TriggerAssignment_3"
+    // InternalParser.g:1842:1: rule__Transition__TriggerAssignment_3 : ( ruleTrigger ) ;
+    public final void rule__Transition__TriggerAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1846:1: ( ( ruleTrigger ) )
+            // InternalParser.g:1847:2: ( ruleTrigger )
+            {
+            // InternalParser.g:1847:2: ( ruleTrigger )
+            // InternalParser.g:1848:3: ruleTrigger
+            {
+             before(grammarAccess.getTransitionAccess().getTriggerTriggerParserRuleCall_3_0()); 
+            pushFollow(FOLLOW_2);
+            ruleTrigger();
+
+            state._fsp--;
+
+             after(grammarAccess.getTransitionAccess().getTriggerTriggerParserRuleCall_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__TriggerAssignment_3"
+
+
+    // $ANTLR start "rule__Transition__GuardAssignment_4_1"
+    // InternalParser.g:1857:1: rule__Transition__GuardAssignment_4_1 : ( ruleGuard ) ;
+    public final void rule__Transition__GuardAssignment_4_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1861:1: ( ( ruleGuard ) )
+            // InternalParser.g:1862:2: ( ruleGuard )
+            {
+            // InternalParser.g:1862:2: ( ruleGuard )
+            // InternalParser.g:1863:3: ruleGuard
+            {
+             before(grammarAccess.getTransitionAccess().getGuardGuardParserRuleCall_4_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleGuard();
+
+            state._fsp--;
+
+             after(grammarAccess.getTransitionAccess().getGuardGuardParserRuleCall_4_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__GuardAssignment_4_1"
+
+
+    // $ANTLR start "rule__Transition__ActionAssignment_5_1"
+    // InternalParser.g:1872:1: rule__Transition__ActionAssignment_5_1 : ( ruleAction ) ;
+    public final void rule__Transition__ActionAssignment_5_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1876:1: ( ( ruleAction ) )
+            // InternalParser.g:1877:2: ( ruleAction )
+            {
+            // InternalParser.g:1877:2: ( ruleAction )
+            // InternalParser.g:1878:3: ruleAction
+            {
+             before(grammarAccess.getTransitionAccess().getActionActionParserRuleCall_5_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleAction();
+
+            state._fsp--;
+
+             after(grammarAccess.getTransitionAccess().getActionActionParserRuleCall_5_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__ActionAssignment_5_1"
+
+
+    // $ANTLR start "rule__Transition__ToAssignment_7"
+    // InternalParser.g:1887:1: rule__Transition__ToAssignment_7 : ( ( ruleEString ) ) ;
+    public final void rule__Transition__ToAssignment_7() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1891:1: ( ( ( ruleEString ) ) )
+            // InternalParser.g:1892:2: ( ( ruleEString ) )
+            {
+            // InternalParser.g:1892:2: ( ( ruleEString ) )
+            // InternalParser.g:1893:3: ( ruleEString )
+            {
+             before(grammarAccess.getTransitionAccess().getToStateCrossReference_7_0()); 
+            // InternalParser.g:1894:3: ( ruleEString )
+            // InternalParser.g:1895:4: ruleEString
+            {
+             before(grammarAccess.getTransitionAccess().getToStateEStringParserRuleCall_7_0_1()); 
+            pushFollow(FOLLOW_2);
+            ruleEString();
+
+            state._fsp--;
+
+             after(grammarAccess.getTransitionAccess().getToStateEStringParserRuleCall_7_0_1()); 
+
+            }
+
+             after(grammarAccess.getTransitionAccess().getToStateCrossReference_7_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Transition__ToAssignment_7"
+
+
+    // $ANTLR start "rule__Action__ContentAssignment_1"
+    // InternalParser.g:1906:1: rule__Action__ContentAssignment_1 : ( ruleActivityContent ) ;
+    public final void rule__Action__ContentAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1910:1: ( ( ruleActivityContent ) )
+            // InternalParser.g:1911:2: ( ruleActivityContent )
+            {
+            // InternalParser.g:1911:2: ( ruleActivityContent )
+            // InternalParser.g:1912:3: ruleActivityContent
+            {
+             before(grammarAccess.getActionAccess().getContentActivityContentParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleActivityContent();
+
+            state._fsp--;
+
+             after(grammarAccess.getActionAccess().getContentActivityContentParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Action__ContentAssignment_1"
+
+
+    // $ANTLR start "rule__Trigger__ContentAssignment_1"
+    // InternalParser.g:1921:1: rule__Trigger__ContentAssignment_1 : ( ruleActivityContent ) ;
+    public final void rule__Trigger__ContentAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1925:1: ( ( ruleActivityContent ) )
+            // InternalParser.g:1926:2: ( ruleActivityContent )
+            {
+            // InternalParser.g:1926:2: ( ruleActivityContent )
+            // InternalParser.g:1927:3: ruleActivityContent
+            {
+             before(grammarAccess.getTriggerAccess().getContentActivityContentParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleActivityContent();
+
+            state._fsp--;
+
+             after(grammarAccess.getTriggerAccess().getContentActivityContentParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Trigger__ContentAssignment_1"
+
+
+    // $ANTLR start "rule__Guard__ContentAssignment_1"
+    // InternalParser.g:1936:1: rule__Guard__ContentAssignment_1 : ( ruleEString ) ;
+    public final void rule__Guard__ContentAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalParser.g:1940:1: ( ( ruleEString ) )
+            // InternalParser.g:1941:2: ( ruleEString )
+            {
+            // InternalParser.g:1941:2: ( ruleEString )
+            // InternalParser.g:1942:3: ruleEString
+            {
+             before(grammarAccess.getGuardAccess().getContentEStringParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleEString();
+
+            state._fsp--;
+
+             after(grammarAccess.getGuardAccess().getContentEStringParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Guard__ContentAssignment_1"
+
+    // Delegated rules
+
+
+ 
+
+    public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x00000000000001B0L});
+    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x00000000002301B0L});
+    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x00000000002201B2L});
+    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x00000000001D0000L});
+    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000000000070L});
+    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000200000L});
+    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x00000000002201B0L});
+    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x000000000B000070L});
+    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000004000000L});
+
+}
\ No newline at end of file
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src/swt/most/statemachine/xtext/ide/ParserIdeModule.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src/swt/most/statemachine/xtext/ide/ParserIdeModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..177f50823199799a39116c67e55e55c59aa97c3f
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src/swt/most/statemachine/xtext/ide/ParserIdeModule.java
@@ -0,0 +1,11 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ide;
+
+
+/**
+ * Use this class to register ide components.
+ */
+public class ParserIdeModule extends AbstractParserIdeModule {
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src/swt/most/statemachine/xtext/ide/ParserIdeSetup.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src/swt/most/statemachine/xtext/ide/ParserIdeSetup.java
new file mode 100644
index 0000000000000000000000000000000000000000..499f3640e3bcf8d952d8282e8e3392fdfbdd235b
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ide/src/swt/most/statemachine/xtext/ide/ParserIdeSetup.java
@@ -0,0 +1,22 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ide;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import org.eclipse.xtext.util.Modules2;
+import swt.most.statemachine.xtext.ParserRuntimeModule;
+import swt.most.statemachine.xtext.ParserStandaloneSetup;
+
+/**
+ * Initialization support for running Xtext languages as language servers.
+ */
+public class ParserIdeSetup extends ParserStandaloneSetup {
+
+	@Override
+	public Injector createInjector() {
+		return Guice.createInjector(Modules2.mixin(new ParserRuntimeModule(), new ParserIdeModule()));
+	}
+	
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.classpath b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..7994b693843c3539027c7d53e955031340c68cf2
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="xtend-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.project b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.project
new file mode 100644
index 0000000000000000000000000000000000000000..3872cc9fbd58dc67a2b790eb0646b7700d4377a4
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.statemachine.xtext.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.settings/org.eclipse.core.resources.prefs b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.settings/org.eclipse.jdt.core.prefs b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..3a79233b1335743cc32ed3638c1a2d0c1f52d303
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
+org.eclipse.jdt.core.compiler.compliance=21
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=21
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/META-INF/MANIFEST.MF b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..29377ba7863caa85099dccd1a380b070a81cdfe7
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: swt.most.statemachine.xtext.ui
+Bundle-ManifestVersion: 2
+Bundle-Name: swt.most.statemachine.xtext.ui
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.qualifier
+Bundle-SymbolicName: swt.most.statemachine.xtext.ui; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: swt.most.statemachine.xtext,
+ swt.most.statemachine.xtext.ide,
+ swt.most.statemachine,
+ org.eclipse.xtext.ui,
+ org.eclipse.xtext.ui.shared,
+ org.eclipse.xtext.ui.codetemplates.ui,
+ org.eclipse.ui.editors;bundle-version="3.14.300",
+ org.eclipse.ui.ide;bundle-version="3.18.500",
+ org.eclipse.ui,
+ org.eclipse.compare,
+ org.eclipse.xtext.builder
+Import-Package: org.apache.log4j
+Bundle-RequiredExecutionEnvironment: JavaSE-21
+Export-Package: swt.most.statemachine.xtext.ui.contentassist,
+ swt.most.statemachine.xtext.ui.internal,
+ swt.most.statemachine.xtext.ui.quickfix
+Bundle-Activator: swt.most.statemachine.xtext.ui.internal.XtextActivator
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/AbstractParserUiModule.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/AbstractParserUiModule.class
new file mode 100644
index 0000000000000000000000000000000000000000..fc62b2b28936845f9e8e71513f12636d909a644b
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/AbstractParserUiModule.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/ParserExecutableExtensionFactory.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/ParserExecutableExtensionFactory.class
new file mode 100644
index 0000000000000000000000000000000000000000..f9fd8755791323cb1443cb5571a775dd4e210404
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/ParserExecutableExtensionFactory.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/ParserUiModule.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/ParserUiModule.class
new file mode 100644
index 0000000000000000000000000000000000000000..0fd5bab885b072b8b78d87f8f2e4a34f0d26d56d
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/ParserUiModule.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/contentassist/AbstractParserProposalProvider.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/contentassist/AbstractParserProposalProvider.class
new file mode 100644
index 0000000000000000000000000000000000000000..8e5172b39cb33b3f530ce73c225c542ef3dbf783
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/contentassist/AbstractParserProposalProvider.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/contentassist/ParserProposalProvider.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/contentassist/ParserProposalProvider.class
new file mode 100644
index 0000000000000000000000000000000000000000..d9f7b31722489598a4c941a8ac5fbc2353c559cf
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/contentassist/ParserProposalProvider.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/internal/XtextActivator.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/internal/XtextActivator.class
new file mode 100644
index 0000000000000000000000000000000000000000..ed7c34628d84d0c873560b0345ced6b718335a37
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/internal/XtextActivator.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/labeling/ParserDescriptionLabelProvider.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/labeling/ParserDescriptionLabelProvider.class
new file mode 100644
index 0000000000000000000000000000000000000000..9c7f58dcc439e6bc39bb64941223aaeda4663d57
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/labeling/ParserDescriptionLabelProvider.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/labeling/ParserLabelProvider.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/labeling/ParserLabelProvider.class
new file mode 100644
index 0000000000000000000000000000000000000000..dbf45573f4ce9949dccf076a182988d2e9451c44
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/labeling/ParserLabelProvider.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/outline/ParserOutlineTreeProvider.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/outline/ParserOutlineTreeProvider.class
new file mode 100644
index 0000000000000000000000000000000000000000..8d4cd298985e7238e29e1e6f27a0e9857c9b544f
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/outline/ParserOutlineTreeProvider.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/quickfix/ParserQuickfixProvider.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/quickfix/ParserQuickfixProvider.class
new file mode 100644
index 0000000000000000000000000000000000000000..9f127c21896787bafcbd378b7ee08cbb06de2fec
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/ui/quickfix/ParserQuickfixProvider.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/validation/ParserValidatorConfigurationBlock.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/validation/ParserValidatorConfigurationBlock.class
new file mode 100644
index 0000000000000000000000000000000000000000..a94d66385a86f5a4aec8f82e0270ab79c671c1f4
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/bin/swt/most/statemachine/xtext/validation/ParserValidatorConfigurationBlock.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/build.properties b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..323f56c513d04a1e0ba18fe2dad51f354dcb3201
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/build.properties
@@ -0,0 +1,7 @@
+source.. = src/,\
+           src-gen/,\
+           xtend-gen/
+bin.includes = .,\
+               META-INF/,\
+               plugin.xml
+bin.excludes = **/*.xtend
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/plugin.xml b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..466fe2845195263ccea0b0c3933ad29f10e4c4a1
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/plugin.xml
@@ -0,0 +1,434 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+	<extension
+		point="org.eclipse.ui.editors">
+		<editor
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
+			contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
+			default="true"
+			extensions="statemachine"
+			id="swt.most.statemachine.xtext.Parser"
+			name="Parser Editor">
+		</editor>
+	</extension>
+	<extension
+		point="org.eclipse.ui.handlers">
+		<handler
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclarationHandler"
+			commandId="org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclaration">
+			<activeWhen>
+				<reference
+					definitionId="swt.most.statemachine.xtext.Parser.Editor.opened">
+				</reference>
+			</activeWhen>
+		</handler>
+		<handler
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.handler.ValidateActionHandler"
+			commandId="swt.most.statemachine.xtext.Parser.validate">
+			<activeWhen>
+				<reference
+					definitionId="swt.most.statemachine.xtext.Parser.Editor.opened">
+				</reference>
+			</activeWhen>
+		</handler>
+		<!-- copy qualified name -->
+		<handler
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedNameHandler"
+			commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName">
+			<activeWhen>
+				<reference definitionId="swt.most.statemachine.xtext.Parser.Editor.opened" />
+			</activeWhen>
+		</handler>
+		<handler
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedNameHandler"
+			commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName">
+			<activeWhen>
+				<and>
+					<reference definitionId="swt.most.statemachine.xtext.Parser.XtextEditor.opened" />
+					<iterate>
+						<adapt type="org.eclipse.xtext.ui.editor.outline.IOutlineNode" />
+					</iterate>
+				</and>
+			</activeWhen>
+		</handler>
+	</extension>
+	<extension point="org.eclipse.core.expressions.definitions">
+		<definition id="swt.most.statemachine.xtext.Parser.Editor.opened">
+			<and>
+				<reference definitionId="isActiveEditorAnInstanceOfXtextEditor"/>
+				<with variable="activeEditor">
+					<test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName"
+						value="swt.most.statemachine.xtext.Parser"
+						forcePluginActivation="true"/>
+				</with>
+			</and>
+		</definition>
+		<definition id="swt.most.statemachine.xtext.Parser.XtextEditor.opened">
+			<and>
+				<reference definitionId="isXtextEditorActive"/>
+				<with variable="activeEditor">
+					<test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName"
+						value="swt.most.statemachine.xtext.Parser"
+						forcePluginActivation="true"/>
+				</with>
+			</and>
+		</definition>
+	</extension>
+	<extension
+			point="org.eclipse.ui.preferencePages">
+		<page
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+			id="swt.most.statemachine.xtext.Parser"
+			name="Parser">
+			<keywordReference id="swt.most.statemachine.xtext.ui.keyword_Parser"/>
+		</page>
+		<page
+			category="swt.most.statemachine.xtext.Parser"
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.syntaxcoloring.SyntaxColoringPreferencePage"
+			id="swt.most.statemachine.xtext.Parser.coloring"
+			name="Syntax Coloring">
+			<keywordReference id="swt.most.statemachine.xtext.ui.keyword_Parser"/>
+		</page>
+		<page
+			category="swt.most.statemachine.xtext.Parser"
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage"
+			id="swt.most.statemachine.xtext.Parser.templates"
+			name="Templates">
+			<keywordReference id="swt.most.statemachine.xtext.ui.keyword_Parser"/>
+		</page>
+	</extension>
+	<extension
+			point="org.eclipse.ui.propertyPages">
+		<page
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+			id="swt.most.statemachine.xtext.Parser"
+			name="Parser">
+			<keywordReference id="swt.most.statemachine.xtext.ui.keyword_Parser"/>
+			<enabledWhen>
+				<adapt type="org.eclipse.core.resources.IProject"/>
+			</enabledWhen>
+			<filter name="projectNature" value="org.eclipse.xtext.ui.shared.xtextNature"/>
+		</page>
+	</extension>
+	<extension
+		point="org.eclipse.ui.keywords">
+		<keyword
+			id="swt.most.statemachine.xtext.ui.keyword_Parser"
+			label="Parser"/>
+	</extension>
+	<extension
+		point="org.eclipse.ui.commands">
+		<command
+			description="Trigger expensive validation"
+			id="swt.most.statemachine.xtext.Parser.validate"
+			name="Validate">
+		</command>
+		<!-- copy qualified name -->
+		<command
+			id="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"
+			categoryId="org.eclipse.ui.category.edit"
+			description="Copy the qualified name for the selected element"
+			name="Copy Qualified Name">
+		</command>
+		<command
+			id="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName"
+			categoryId="org.eclipse.ui.category.edit"
+			description="Copy the qualified name for the selected element"
+			name="Copy Qualified Name">
+		</command>
+	</extension>
+	<extension point="org.eclipse.ui.menus">
+		<menuContribution
+			locationURI="popup:#TextEditorContext?after=group.edit">
+			<command
+				commandId="swt.most.statemachine.xtext.Parser.validate"
+				style="push"
+				tooltip="Trigger expensive validation">
+				<visibleWhen checkEnabled="false">
+					<reference
+						definitionId="swt.most.statemachine.xtext.Parser.Editor.opened">
+					</reference>
+				</visibleWhen>
+			</command>
+		</menuContribution>
+		<!-- copy qualified name -->
+		<menuContribution locationURI="popup:#TextEditorContext?after=copy">
+			<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"
+				style="push" tooltip="Copy Qualified Name">
+				<visibleWhen checkEnabled="false">
+					<reference definitionId="swt.most.statemachine.xtext.Parser.Editor.opened" />
+				</visibleWhen>
+			</command>
+		</menuContribution>
+		<menuContribution locationURI="menu:edit?after=copy">
+			<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"
+				style="push" tooltip="Copy Qualified Name">
+				<visibleWhen checkEnabled="false">
+					<reference definitionId="swt.most.statemachine.xtext.Parser.Editor.opened" />
+				</visibleWhen>
+			</command>
+		</menuContribution>
+		<menuContribution locationURI="popup:org.eclipse.xtext.ui.outline?after=additions">
+			<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName"
+				style="push" tooltip="Copy Qualified Name">
+				<visibleWhen checkEnabled="false">
+					<and>
+						<reference definitionId="swt.most.statemachine.xtext.Parser.XtextEditor.opened" />
+						<iterate>
+							<adapt type="org.eclipse.xtext.ui.editor.outline.IOutlineNode" />
+						</iterate>
+					</and>
+				</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+	<extension point="org.eclipse.ui.menus">
+		<menuContribution locationURI="popup:#TextEditorContext?endof=group.find">
+			<command commandId="org.eclipse.xtext.ui.editor.FindReferences">
+				<visibleWhen checkEnabled="false">
+					<reference definitionId="swt.most.statemachine.xtext.Parser.Editor.opened">
+					</reference>
+				</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+	<extension point="org.eclipse.ui.handlers">
+		<handler
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.findrefs.FindReferencesHandler"
+			commandId="org.eclipse.xtext.ui.editor.FindReferences">
+			<activeWhen>
+				<reference
+					definitionId="swt.most.statemachine.xtext.Parser.Editor.opened">
+				</reference>
+			</activeWhen>
+		</handler>
+	</extension>
+	<extension point="org.eclipse.core.contenttype.contentTypes">
+		<content-type
+			base-type="org.eclipse.core.runtime.text"
+			file-extensions="statemachine"
+			id="swt.most.statemachine.xtext.Parser.contenttype"
+			name="Parser File"
+			priority="normal">
+		</content-type>
+	</extension>
+	<!-- adding resource factories -->
+	<extension
+		point="org.eclipse.emf.ecore.extension_parser">
+		<parser
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+			type="statemachine">
+		</parser>
+	</extension>
+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
+		<resourceServiceProvider
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+			uriExtension="statemachine">
+		</resourceServiceProvider>
+	</extension>
+	<!-- marker definitions for swt.most.statemachine.xtext.Parser -->
+	<extension
+			id="parser.check.fast"
+			name="Parser Problem"
+			point="org.eclipse.core.resources.markers">
+		<super type="org.eclipse.xtext.ui.check.fast"/>
+		<persistent value="true"/>
+	</extension>
+	<extension
+			id="parser.check.normal"
+			name="Parser Problem"
+			point="org.eclipse.core.resources.markers">
+		<super type="org.eclipse.xtext.ui.check.normal"/>
+		<persistent value="true"/>
+	</extension>
+	<extension
+			id="parser.check.expensive"
+			name="Parser Problem"
+			point="org.eclipse.core.resources.markers">
+		<super type="org.eclipse.xtext.ui.check.expensive"/>
+		<persistent value="true"/>
+	</extension>
+	<extension point="org.eclipse.ui.preferencePages">
+		<page
+			category="swt.most.statemachine.xtext.Parser"
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.validation.ValidatorPreferencePage"
+			id="swt.most.statemachine.xtext.Parser.validator.preferencePage"
+			name="Errors/Warnings">
+			<keywordReference id="swt.most.statemachine.xtext.ui.keyword_Parser"/>
+		</page>
+	</extension>
+	<extension point="org.eclipse.xtext.builder.participant">
+		<participant
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.builder.IXtextBuilderParticipant"
+			fileExtensions="statemachine"/>
+	</extension>
+	<extension point="org.eclipse.ui.preferencePages">
+		<page
+			category="swt.most.statemachine.xtext.Parser"
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.builder.preferences.BuilderPreferencePage"
+			id="swt.most.statemachine.xtext.Parser.compiler.preferencePage"
+			name="Compiler">
+			<keywordReference id="swt.most.statemachine.xtext.ui.keyword_Parser"/>
+		</page>
+	</extension>
+	<extension point="org.eclipse.ui.propertyPages">
+		<page
+			category="swt.most.statemachine.xtext.Parser"
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.builder.preferences.BuilderPreferencePage"
+			id="swt.most.statemachine.xtext.Parser.compiler.propertyPage"
+			name="Compiler">
+			<keywordReference id="swt.most.statemachine.xtext.ui.keyword_Parser"/>
+			<enabledWhen>
+				<adapt type="org.eclipse.core.resources.IProject"/>
+			</enabledWhen>
+			<filter name="projectNature" value="org.eclipse.xtext.ui.shared.xtextNature"/>
+		</page>
+	</extension>
+	<extension point="org.eclipse.ui.menus">
+		<menuContribution locationURI="popup:#TextEditorContext?after=xtext.ui.openDeclaration">
+			<command
+				commandId="org.eclipse.xtext.ui.OpenGeneratedFileCommand"
+				id="swt.most.statemachine.xtext.Parser.OpenGeneratedCode"
+				style="push">
+				<visibleWhen checkEnabled="false">
+					<reference definitionId="swt.most.statemachine.xtext.Parser.Editor.opened" />
+				</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+	<extension point="org.eclipse.ui.handlers">
+		<handler
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.generator.trace.OpenGeneratedFileHandler"
+			commandId="org.eclipse.xtext.ui.OpenGeneratedFileCommand">
+			<activeWhen>
+				<reference definitionId="swt.most.statemachine.xtext.Parser.Editor.opened" />
+			</activeWhen>
+		</handler>
+	</extension>
+	<!-- Quick Outline -->
+	<extension
+		point="org.eclipse.ui.handlers">
+		<handler
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.outline.quickoutline.ShowQuickOutlineActionHandler"
+			commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline">
+			<activeWhen>
+				<reference
+					definitionId="swt.most.statemachine.xtext.Parser.Editor.opened">
+				</reference>
+			</activeWhen>
+		</handler>
+	</extension>
+	<extension
+		point="org.eclipse.ui.commands">
+		<command
+			description="Open the quick outline."
+			id="org.eclipse.xtext.ui.editor.outline.QuickOutline"
+			name="Quick Outline">
+		</command>
+	</extension>
+	<extension point="org.eclipse.ui.menus">
+		<menuContribution
+			locationURI="popup:#TextEditorContext?after=group.open">
+			<command commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline"
+				style="push"
+				tooltip="Open Quick Outline">
+				<visibleWhen checkEnabled="false">
+					<reference definitionId="swt.most.statemachine.xtext.Parser.Editor.opened"/>
+				</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+	<!-- quickfix marker resolution generator for swt.most.statemachine.xtext.Parser -->
+	<extension
+			point="org.eclipse.ui.ide.markerResolution">
+		<markerResolutionGenerator
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+			markerType="swt.most.statemachine.xtext.ui.parser.check.fast">
+			<attribute
+				name="FIXABLE_KEY"
+				value="true">
+			</attribute>
+		</markerResolutionGenerator>
+		<markerResolutionGenerator
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+			markerType="swt.most.statemachine.xtext.ui.parser.check.normal">
+			<attribute
+				name="FIXABLE_KEY"
+				value="true">
+			</attribute>
+		</markerResolutionGenerator>
+		<markerResolutionGenerator
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+			markerType="swt.most.statemachine.xtext.ui.parser.check.expensive">
+			<attribute
+				name="FIXABLE_KEY"
+				value="true">
+			</attribute>
+		</markerResolutionGenerator>
+	</extension>
+	<!-- Rename Refactoring -->
+	<extension point="org.eclipse.ui.handlers">
+		<handler
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.DefaultRenameElementHandler"
+			commandId="org.eclipse.xtext.ui.refactoring.RenameElement">
+			<activeWhen>
+				<reference
+					definitionId="swt.most.statemachine.xtext.Parser.Editor.opened">
+				</reference>
+			</activeWhen>
+		</handler>
+	</extension>
+	<extension point="org.eclipse.ui.menus">
+		<menuContribution
+			locationURI="popup:#TextEditorContext?after=group.edit">
+			<command commandId="org.eclipse.xtext.ui.refactoring.RenameElement"
+				style="push">
+				<visibleWhen checkEnabled="false">
+					<reference
+						definitionId="swt.most.statemachine.xtext.Parser.Editor.opened">
+					</reference>
+				</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+	<extension point="org.eclipse.ui.preferencePages">
+		<page
+			category="swt.most.statemachine.xtext.Parser"
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.RefactoringPreferencePage"
+			id="swt.most.statemachine.xtext.Parser.refactoring"
+			name="Refactoring">
+			<keywordReference id="swt.most.statemachine.xtext.ui.keyword_Parser"/>
+		</page>
+	</extension>
+	<extension point="org.eclipse.compare.contentViewers">
+		<viewer id="swt.most.statemachine.xtext.Parser.compare.contentViewers"
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
+			extensions="statemachine">
+		</viewer>
+		<contentTypeBinding
+			contentTypeId="swt.most.statemachine.xtext.Parser.contenttype"
+			contentViewerId="swt.most.statemachine.xtext.Parser.compare.contentViewers" />
+	</extension>
+	<extension point="org.eclipse.compare.contentMergeViewers">
+		<viewer id="swt.most.statemachine.xtext.Parser.compare.contentMergeViewers"
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
+			extensions="statemachine" label="Parser Compare">
+		</viewer>
+		<contentTypeBinding
+			contentTypeId="swt.most.statemachine.xtext.Parser.contenttype"
+			contentMergeViewerId="swt.most.statemachine.xtext.Parser.compare.contentMergeViewers" />
+	</extension>
+	<extension point="org.eclipse.ui.editors.documentProviders">
+		<provider id="swt.most.statemachine.xtext.Parser.editors.documentProviders"
+			class="swt.most.statemachine.xtext.ui.ParserExecutableExtensionFactory:org.eclipse.xtext.ui.editor.model.XtextDocumentProvider"
+			extensions="statemachine">
+		</provider>
+	</extension>
+	<extension point="org.eclipse.team.core.fileTypes">
+		<fileTypes
+			extension="statemachine"
+			type="text">
+		</fileTypes>
+	</extension>
+</plugin>
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/AbstractParserUiModule.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/AbstractParserUiModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..f7e1a9fd83f62466907320c0ada127eda09125bc
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/AbstractParserUiModule.java
@@ -0,0 +1,300 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ui;
+
+import com.google.inject.Binder;
+import com.google.inject.Provider;
+import com.google.inject.name.Names;
+import org.eclipse.compare.IViewerCreator;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.xtext.builder.BuilderParticipant;
+import org.eclipse.xtext.builder.EclipseOutputConfigurationProvider;
+import org.eclipse.xtext.builder.IXtextBuilderParticipant;
+import org.eclipse.xtext.builder.builderState.IBuilderState;
+import org.eclipse.xtext.builder.clustering.CurrentDescriptions;
+import org.eclipse.xtext.builder.impl.PersistentDataAwareDirtyResource;
+import org.eclipse.xtext.builder.nature.NatureAddingEditorCallback;
+import org.eclipse.xtext.builder.preferences.BuilderPreferenceAccess;
+import org.eclipse.xtext.generator.IContextualOutputConfigurationProvider;
+import org.eclipse.xtext.ide.LexerIdeBindings;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.IContentAssistParser;
+import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.Lexer;
+import org.eclipse.xtext.ide.editor.partialEditing.IPartialEditingContentAssistParser;
+import org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider;
+import org.eclipse.xtext.parser.antlr.ITokenDefProvider;
+import org.eclipse.xtext.parser.antlr.LexerProvider;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.resource.containers.IAllContainersState;
+import org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider;
+import org.eclipse.xtext.service.SingletonBinding;
+import org.eclipse.xtext.ui.DefaultUiModule;
+import org.eclipse.xtext.ui.UIBindings;
+import org.eclipse.xtext.ui.codetemplates.ui.AccessibleCodetemplatesActivator;
+import org.eclipse.xtext.ui.codetemplates.ui.partialEditing.IPartialEditingContentAssistContextFactory;
+import org.eclipse.xtext.ui.codetemplates.ui.partialEditing.PartialEditingContentAssistContextFactory;
+import org.eclipse.xtext.ui.codetemplates.ui.preferences.AdvancedTemplatesPreferencePage;
+import org.eclipse.xtext.ui.codetemplates.ui.preferences.TemplatesLanguageConfiguration;
+import org.eclipse.xtext.ui.codetemplates.ui.registry.LanguageRegistrar;
+import org.eclipse.xtext.ui.codetemplates.ui.registry.LanguageRegistry;
+import org.eclipse.xtext.ui.compare.DefaultViewerCreator;
+import org.eclipse.xtext.ui.editor.DocumentBasedDirtyResource;
+import org.eclipse.xtext.ui.editor.IXtextEditorCallback;
+import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
+import org.eclipse.xtext.ui.editor.contentassist.FQNPrefixMatcher;
+import org.eclipse.xtext.ui.editor.contentassist.IContentProposalProvider;
+import org.eclipse.xtext.ui.editor.contentassist.IProposalConflictHelper;
+import org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.AntlrProposalConflictHelper;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.DelegatingContentAssistContextFactory;
+import org.eclipse.xtext.ui.editor.formatting.IContentFormatterFactory;
+import org.eclipse.xtext.ui.editor.formatting2.ContentFormatterFactory;
+import org.eclipse.xtext.ui.editor.outline.IOutlineTreeProvider;
+import org.eclipse.xtext.ui.editor.outline.impl.IOutlineTreeStructureProvider;
+import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer;
+import org.eclipse.xtext.ui.editor.quickfix.IssueResolutionProvider;
+import org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage;
+import org.eclipse.xtext.ui.refactoring.IDependentElementsCalculator;
+import org.eclipse.xtext.ui.refactoring.IReferenceUpdater;
+import org.eclipse.xtext.ui.refactoring.IRenameRefactoringProvider;
+import org.eclipse.xtext.ui.refactoring.IRenameStrategy;
+import org.eclipse.xtext.ui.refactoring.impl.DefaultDependentElementsCalculator;
+import org.eclipse.xtext.ui.refactoring.impl.DefaultReferenceUpdater;
+import org.eclipse.xtext.ui.refactoring.impl.DefaultRenameRefactoringProvider;
+import org.eclipse.xtext.ui.refactoring.impl.DefaultRenameStrategy;
+import org.eclipse.xtext.ui.refactoring.ui.DefaultRenameSupport;
+import org.eclipse.xtext.ui.refactoring.ui.IRenameSupport;
+import org.eclipse.xtext.ui.refactoring.ui.RefactoringPreferences;
+import org.eclipse.xtext.ui.resource.ResourceServiceDescriptionLabelProvider;
+import org.eclipse.xtext.ui.shared.Access;
+import org.eclipse.xtext.ui.validation.AbstractValidatorConfigurationBlock;
+import swt.most.statemachine.xtext.ide.contentassist.antlr.ParserParser;
+import swt.most.statemachine.xtext.ide.contentassist.antlr.PartialParserContentAssistParser;
+import swt.most.statemachine.xtext.ide.contentassist.antlr.internal.InternalParserLexer;
+import swt.most.statemachine.xtext.ui.contentassist.ParserProposalProvider;
+import swt.most.statemachine.xtext.ui.labeling.ParserDescriptionLabelProvider;
+import swt.most.statemachine.xtext.ui.labeling.ParserLabelProvider;
+import swt.most.statemachine.xtext.ui.outline.ParserOutlineTreeProvider;
+import swt.most.statemachine.xtext.ui.quickfix.ParserQuickfixProvider;
+import swt.most.statemachine.xtext.validation.ParserValidatorConfigurationBlock;
+
+/**
+ * Manual modifications go to {@link ParserUiModule}.
+ */
+@SuppressWarnings("all")
+public abstract class AbstractParserUiModule extends DefaultUiModule {
+
+	public AbstractParserUiModule(AbstractUIPlugin plugin) {
+		super(plugin);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ImplicitFragment
+	public Provider<? extends IAllContainersState> provideIAllContainersState() {
+		return Access.getJavaProjectsState();
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public Class<? extends IProposalConflictHelper> bindIProposalConflictHelper() {
+		return AntlrProposalConflictHelper.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public void configureContentAssistLexer(Binder binder) {
+		binder.bind(Lexer.class)
+			.annotatedWith(Names.named(LexerIdeBindings.CONTENT_ASSIST))
+			.to(InternalParserLexer.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public void configureHighlightingLexer(Binder binder) {
+		binder.bind(org.eclipse.xtext.parser.antlr.Lexer.class)
+			.annotatedWith(Names.named(LexerIdeBindings.HIGHLIGHTING))
+			.to(swt.most.statemachine.xtext.parser.antlr.internal.InternalParserLexer.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public void configureHighlightingTokenDefProvider(Binder binder) {
+		binder.bind(ITokenDefProvider.class)
+			.annotatedWith(Names.named(LexerIdeBindings.HIGHLIGHTING))
+			.to(AntlrTokenDefProvider.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public Class<? extends ContentAssistContext.Factory> bindContentAssistContext$Factory() {
+		return DelegatingContentAssistContextFactory.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public Class<? extends IContentAssistParser> bindIContentAssistParser() {
+		return ParserParser.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public void configureContentAssistLexerProvider(Binder binder) {
+		binder.bind(InternalParserLexer.class).toProvider(LexerProvider.create(InternalParserLexer.class));
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.validation.ValidatorFragment2
+	public Class<? extends AbstractValidatorConfigurationBlock> bindAbstractValidatorConfigurationBlock() {
+		return ParserValidatorConfigurationBlock.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.exporting.QualifiedNamesFragment2
+	public Class<? extends PrefixMatcher> bindPrefixMatcher() {
+		return FQNPrefixMatcher.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.exporting.QualifiedNamesFragment2
+	public Class<? extends IDependentElementsCalculator> bindIDependentElementsCalculator() {
+		return DefaultDependentElementsCalculator.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
+	public void configureIResourceDescriptionsBuilderScope(Binder binder) {
+		binder.bind(IResourceDescriptions.class).annotatedWith(Names.named(ResourceDescriptionsProvider.NAMED_BUILDER_SCOPE)).to(CurrentDescriptions.ResourceSetAware.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
+	public Class<? extends IXtextEditorCallback> bindIXtextEditorCallback() {
+		return NatureAddingEditorCallback.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
+	public Class<? extends IContextualOutputConfigurationProvider> bindIContextualOutputConfigurationProvider() {
+		return EclipseOutputConfigurationProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
+	public void configureIResourceDescriptionsPersisted(Binder binder) {
+		binder.bind(IResourceDescriptions.class).annotatedWith(Names.named(ResourceDescriptionsProvider.PERSISTED_DESCRIPTIONS)).to(IBuilderState.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
+	public Class<? extends DocumentBasedDirtyResource> bindDocumentBasedDirtyResource() {
+		return PersistentDataAwareDirtyResource.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.generator.GeneratorFragment2
+	public Class<? extends IXtextBuilderParticipant> bindIXtextBuilderParticipant() {
+		return BuilderParticipant.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.generator.GeneratorFragment2
+	public IWorkspaceRoot bindIWorkspaceRootToInstance() {
+		return ResourcesPlugin.getWorkspace().getRoot();
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.generator.GeneratorFragment2
+	public void configureBuilderPreferenceStoreInitializer(Binder binder) {
+		binder.bind(IPreferenceStoreInitializer.class)
+			.annotatedWith(Names.named("builderPreferenceInitializer"))
+			.to(BuilderPreferenceAccess.Initializer.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.formatting.Formatter2Fragment2
+	public Class<? extends IContentFormatterFactory> bindIContentFormatterFactory() {
+		return ContentFormatterFactory.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.labeling.LabelProviderFragment2
+	public Class<? extends ILabelProvider> bindILabelProvider() {
+		return ParserLabelProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.labeling.LabelProviderFragment2
+	public void configureResourceUIServiceLabelProvider(Binder binder) {
+		binder.bind(ILabelProvider.class).annotatedWith(ResourceServiceDescriptionLabelProvider.class).to(ParserDescriptionLabelProvider.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.outline.OutlineTreeProviderFragment2
+	public Class<? extends IOutlineTreeProvider> bindIOutlineTreeProvider() {
+		return ParserOutlineTreeProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.outline.OutlineTreeProviderFragment2
+	public Class<? extends IOutlineTreeStructureProvider> bindIOutlineTreeStructureProvider() {
+		return ParserOutlineTreeProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.quickfix.QuickfixProviderFragment2
+	public Class<? extends IssueResolutionProvider> bindIssueResolutionProvider() {
+		return ParserQuickfixProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.contentAssist.ContentAssistFragment2
+	public Class<? extends IContentProposalProvider> bindIContentProposalProvider() {
+		return ParserProposalProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.refactoring.RefactorElementNameFragment2
+	public void configureIPreferenceStoreInitializer(Binder binder) {
+		binder.bind(IPreferenceStoreInitializer.class)
+			.annotatedWith(Names.named("RefactoringPreferences"))
+			.to(RefactoringPreferences.Initializer.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.refactoring.RefactorElementNameFragment2
+	public Class<? extends IRenameStrategy> bindIRenameStrategy() {
+		return DefaultRenameStrategy.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.refactoring.RefactorElementNameFragment2
+	public Class<? extends IReferenceUpdater> bindIReferenceUpdater() {
+		return DefaultReferenceUpdater.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.refactoring.RefactorElementNameFragment2
+	public Class<? extends IRenameRefactoringProvider> bindIRenameRefactoringProvider() {
+		return DefaultRenameRefactoringProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.refactoring.RefactorElementNameFragment2
+	public Class<? extends IRenameSupport.Factory> bindIRenameSupport$Factory() {
+		return DefaultRenameSupport.Factory.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.templates.CodetemplatesGeneratorFragment2
+	public Provider<? extends TemplatesLanguageConfiguration> provideTemplatesLanguageConfiguration() {
+		return AccessibleCodetemplatesActivator.getTemplatesLanguageConfigurationProvider();
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.templates.CodetemplatesGeneratorFragment2
+	public Provider<? extends LanguageRegistry> provideLanguageRegistry() {
+		return AccessibleCodetemplatesActivator.getLanguageRegistry();
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.templates.CodetemplatesGeneratorFragment2
+	@SingletonBinding(eager=true)
+	public Class<? extends LanguageRegistrar> bindLanguageRegistrar() {
+		return LanguageRegistrar.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.templates.CodetemplatesGeneratorFragment2
+	public Class<? extends XtextTemplatePreferencePage> bindXtextTemplatePreferencePage() {
+		return AdvancedTemplatesPreferencePage.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.templates.CodetemplatesGeneratorFragment2
+	public Class<? extends IPartialEditingContentAssistParser> bindIPartialEditingContentAssistParser() {
+		return PartialParserContentAssistParser.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.templates.CodetemplatesGeneratorFragment2
+	public Class<? extends IPartialEditingContentAssistContextFactory> bindIPartialEditingContentAssistContextFactory() {
+		return PartialEditingContentAssistContextFactory.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.compare.CompareFragment2
+	public Class<? extends IViewerCreator> bindIViewerCreator() {
+		return DefaultViewerCreator.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ui.compare.CompareFragment2
+	public void configureCompareViewerTitle(Binder binder) {
+		binder.bind(String.class).annotatedWith(Names.named(UIBindings.COMPARE_VIEWER_TITLE)).toInstance("Parser Compare");
+	}
+	
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/ParserExecutableExtensionFactory.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/ParserExecutableExtensionFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..7724535c4a96949cef757cd79b1a5612bd80850e
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/ParserExecutableExtensionFactory.java
@@ -0,0 +1,29 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ui;
+
+import com.google.inject.Injector;
+import org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
+import swt.most.statemachine.xtext.ui.internal.XtextActivator;
+
+/**
+ * This class was generated. Customizations should only happen in a newly
+ * introduced subclass. 
+ */
+public class ParserExecutableExtensionFactory extends AbstractGuiceAwareExecutableExtensionFactory {
+
+	@Override
+	protected Bundle getBundle() {
+		return FrameworkUtil.getBundle(XtextActivator.class);
+	}
+	
+	@Override
+	protected Injector getInjector() {
+		XtextActivator activator = XtextActivator.getInstance();
+		return activator != null ? activator.getInjector(XtextActivator.SWT_MOST_STATEMACHINE_XTEXT_PARSER) : null;
+	}
+
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/contentassist/AbstractParserProposalProvider.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/contentassist/AbstractParserProposalProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf264bdebad62df37438073d0c4409e81d879c2c
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/contentassist/AbstractParserProposalProvider.java
@@ -0,0 +1,121 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ui.contentassist;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.Assignment;
+import org.eclipse.xtext.CrossReference;
+import org.eclipse.xtext.RuleCall;
+import org.eclipse.xtext.common.ui.contentassist.TerminalsProposalProvider;
+import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
+import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
+
+/**
+ * Represents a generated, default implementation of superclass {@link TerminalsProposalProvider}.
+ * Methods are dynamically dispatched on the first parameter, i.e., you can override them 
+ * with a more concrete subtype. 
+ */
+public abstract class AbstractParserProposalProvider extends TerminalsProposalProvider {
+
+	public void completeStateMachine_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeStateMachine_Initialstate(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeStateMachine_States(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeStateMachine_Finalstates(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeStateMachine_Transitions(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeNormalState_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeNormalState_Entry_(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeNormalState_Do_(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeNormalState_Exit_(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeFinalState_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeInitialState_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTransition_From(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTransition_Trigger(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTransition_Guard(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTransition_Action(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTransition_To(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeAction_Content(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTrigger_Content(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeGuard_Content(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+
+	public void complete_StateMachine(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_State(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_NormalState(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_FinalState(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_InitialState(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Transition(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Action(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Trigger(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Guard(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_INITIALSTATENAME(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_FINALSTATENAME(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ActivityContent(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_CALL(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_EString(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/internal/XtextActivator.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/internal/XtextActivator.java
new file mode 100644
index 0000000000000000000000000000000000000000..60945fab7b9b272cdb01e9d74d08701380cbad5e
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/ui/internal/XtextActivator.java
@@ -0,0 +1,94 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ui.internal;
+
+import com.google.common.collect.Maps;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import java.util.Collections;
+import java.util.Map;
+import org.apache.log4j.Logger;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.xtext.ui.shared.SharedStateModule;
+import org.eclipse.xtext.util.Modules2;
+import org.osgi.framework.BundleContext;
+import swt.most.statemachine.xtext.ParserRuntimeModule;
+import swt.most.statemachine.xtext.ui.ParserUiModule;
+
+/**
+ * This class was generated. Customizations should only happen in a newly
+ * introduced subclass. 
+ */
+public class XtextActivator extends AbstractUIPlugin {
+
+	public static final String PLUGIN_ID = "swt.most.statemachine.xtext.ui";
+	public static final String SWT_MOST_STATEMACHINE_XTEXT_PARSER = "swt.most.statemachine.xtext.Parser";
+	
+	private static final Logger logger = Logger.getLogger(XtextActivator.class);
+	
+	private static XtextActivator INSTANCE;
+	
+	private Map<String, Injector> injectors = Collections.synchronizedMap(Maps.<String, Injector> newHashMapWithExpectedSize(1));
+	
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		INSTANCE = this;
+	}
+	
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		injectors.clear();
+		INSTANCE = null;
+		super.stop(context);
+	}
+	
+	public static XtextActivator getInstance() {
+		return INSTANCE;
+	}
+	
+	public Injector getInjector(String language) {
+		synchronized (injectors) {
+			Injector injector = injectors.get(language);
+			if (injector == null) {
+				injectors.put(language, injector = createInjector(language));
+			}
+			return injector;
+		}
+	}
+	
+	protected Injector createInjector(String language) {
+		try {
+			com.google.inject.Module runtimeModule = getRuntimeModule(language);
+			com.google.inject.Module sharedStateModule = getSharedStateModule();
+			com.google.inject.Module uiModule = getUiModule(language);
+			com.google.inject.Module mergedModule = Modules2.mixin(runtimeModule, sharedStateModule, uiModule);
+			return Guice.createInjector(mergedModule);
+		} catch (Exception e) {
+			logger.error("Failed to create injector for " + language);
+			logger.error(e.getMessage(), e);
+			throw new RuntimeException("Failed to create injector for " + language, e);
+		}
+	}
+	
+	protected com.google.inject.Module getRuntimeModule(String grammar) {
+		if (SWT_MOST_STATEMACHINE_XTEXT_PARSER.equals(grammar)) {
+			return new ParserRuntimeModule();
+		}
+		throw new IllegalArgumentException(grammar);
+	}
+	
+	protected com.google.inject.Module getUiModule(String grammar) {
+		if (SWT_MOST_STATEMACHINE_XTEXT_PARSER.equals(grammar)) {
+			return new ParserUiModule(this);
+		}
+		throw new IllegalArgumentException(grammar);
+	}
+	
+	protected com.google.inject.Module getSharedStateModule() {
+		return new SharedStateModule();
+	}
+	
+	
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/validation/ParserValidatorConfigurationBlock.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/validation/ParserValidatorConfigurationBlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b0a766eaa8ca47c930b458a91fef9723fca593b
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src-gen/swt/most/statemachine/xtext/validation/ParserValidatorConfigurationBlock.java
@@ -0,0 +1,35 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.validation;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.xtext.ui.validation.AbstractValidatorConfigurationBlock;
+
+@SuppressWarnings("restriction")
+public class ParserValidatorConfigurationBlock extends AbstractValidatorConfigurationBlock {
+
+	protected static final String SETTINGS_SECTION_NAME = "Parser";
+
+	@Override
+	protected void fillSettingsPage(Composite composite, int nColumns, int defaultIndent) {
+		addComboBox(ParserConfigurableIssueCodesProvider.DEPRECATED_MODEL_PART, "Deprecated Model Part", composite, defaultIndent);
+	}
+
+	@Override
+	public void dispose() {
+		storeSectionExpansionStates(getDialogSettings());
+		super.dispose();
+	}
+
+	@Override
+	protected IDialogSettings getDialogSettings() {
+		IDialogSettings dialogSettings = super.getDialogSettings();
+		IDialogSettings section = dialogSettings.getSection(SETTINGS_SECTION_NAME);
+		if (section == null) {
+			return dialogSettings.addNewSection(SETTINGS_SECTION_NAME);
+		}
+		return section;
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/ParserUiModule.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/ParserUiModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..73921655f1f6520ee347ce46958df70888158996
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/ParserUiModule.java
@@ -0,0 +1,16 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ui;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * Use this class to register components to be used within the Eclipse IDE.
+ */
+public class ParserUiModule extends AbstractParserUiModule {
+
+	public ParserUiModule(AbstractUIPlugin plugin) {
+		super(plugin);
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/contentassist/ParserProposalProvider.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/contentassist/ParserProposalProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..a80a2bb451576c17106a468ca1c0e837868b50d8
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/contentassist/ParserProposalProvider.java
@@ -0,0 +1,12 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ui.contentassist;
+
+
+/**
+ * See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#content-assist
+ * on how to customize the content assistant.
+ */
+public class ParserProposalProvider extends AbstractParserProposalProvider {
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/labeling/ParserDescriptionLabelProvider.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/labeling/ParserDescriptionLabelProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..b70c4f48f1445ca67f9fd4597699217476c1b61e
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/labeling/ParserDescriptionLabelProvider.java
@@ -0,0 +1,25 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ui.labeling;
+
+import org.eclipse.xtext.ui.label.DefaultDescriptionLabelProvider;
+
+/**
+ * Provides labels for IEObjectDescriptions and IResourceDescriptions.
+ * 
+ * See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#label-provider
+ */
+public class ParserDescriptionLabelProvider extends DefaultDescriptionLabelProvider {
+
+	// Labels and icons can be computed like this:
+//	@Override
+//	public String text(IEObjectDescription ele) {
+//		return ele.getName().toString();
+//	}
+//	
+//	@Override
+//	public String image(IEObjectDescription ele) {
+//		return ele.getEClass().getName() + ".gif";
+//	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/labeling/ParserLabelProvider.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/labeling/ParserLabelProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..803ff2d016e1e6638ff5fc32f37f50d75519e8d2
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/labeling/ParserLabelProvider.java
@@ -0,0 +1,31 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ui.labeling;
+
+import com.google.inject.Inject;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.xtext.ui.label.DefaultEObjectLabelProvider;
+
+/**
+ * Provides labels for EObjects.
+ * 
+ * See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#label-provider
+ */
+public class ParserLabelProvider extends DefaultEObjectLabelProvider {
+
+	@Inject
+	public ParserLabelProvider(AdapterFactoryLabelProvider delegate) {
+		super(delegate);
+	}
+
+	// Labels and icons can be computed like this:
+	
+//	String text(Greeting ele) {
+//		return "A greeting to " + ele.getName();
+//	}
+//
+//	String image(Greeting ele) {
+//		return "Greeting.gif";
+//	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/outline/ParserOutlineTreeProvider.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/outline/ParserOutlineTreeProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ffaf5ad35d79e80ed06f1c57b985456725a1538
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/outline/ParserOutlineTreeProvider.java
@@ -0,0 +1,15 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ui.outline;
+
+import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider;
+
+/**
+ * Customization of the default outline structure.
+ *
+ * See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#outline
+ */
+public class ParserOutlineTreeProvider extends DefaultOutlineTreeProvider {
+
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/quickfix/ParserQuickfixProvider.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/quickfix/ParserQuickfixProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..ef81b8f374a713f283375fa2e531341e76bd098f
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext.ui/src/swt/most/statemachine/xtext/ui/quickfix/ParserQuickfixProvider.java
@@ -0,0 +1,26 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.ui.quickfix;
+
+import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider;
+
+/**
+ * Custom quickfixes.
+ *
+ * See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#quick-fixes
+ */
+public class ParserQuickfixProvider extends DefaultQuickfixProvider {
+
+//	@Fix(ParserValidator.INVALID_NAME)
+//	public void capitalizeName(final Issue issue, IssueResolutionAcceptor acceptor) {
+//		acceptor.accept(issue, "Capitalize name", "Capitalize the name.", "upcase.png", new IModification() {
+//			public void apply(IModificationContext context) throws BadLocationException {
+//				IXtextDocument xtextDocument = context.getXtextDocument();
+//				String firstLetter = xtextDocument.get(issue.getOffset(), 1);
+//				xtextDocument.replace(issue.getOffset(), 1, firstLetter.toUpperCase());
+//			}
+//		});
+//	}
+
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.antlr-generator-3.2.0-patch.jar b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.antlr-generator-3.2.0-patch.jar
new file mode 100644
index 0000000000000000000000000000000000000000..90516fd7ac76a3ec685e046f91eb762e68e20586
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.antlr-generator-3.2.0-patch.jar differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.classpath b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..7994b693843c3539027c7d53e955031340c68cf2
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="xtend-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.launch/Generate Parser (statemachine) Language Infrastructure.launch b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.launch/Generate Parser (statemachine) Language Infrastructure.launch
new file mode 100644
index 0000000000000000000000000000000000000000..e62e7d7a982f477f3e36625bf188b26478998070
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.launch/Generate Parser (statemachine) Language Infrastructure.launch	
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.emf.mwe2.launch.Mwe2LaunchConfigurationType">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/swt.most.statemachine.xtext"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;resources&gt;&#10;&lt;item path=&quot;/swt.most.statemachine.xtext&quot; type=&quot;4&quot;/&gt;&#10;&lt;item path=&quot;/swt.most.statemachine.xtext.ide&quot; type=&quot;4&quot;/&gt;&#10;&lt;item path=&quot;/swt.most.statemachine.xtext.ui&quot; type=&quot;4&quot;/&gt;&#10;;&lt;/resources&gt;}"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="swt.most.statemachine.xtext.GenerateParser"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="swt.most.statemachine.xtext"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx512m"/>
+</launchConfiguration>
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.launch/Launch Runtime Eclipse.launch b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.launch/Launch Runtime Eclipse.launch
new file mode 100644
index 0000000000000000000000000000000000000000..dbcc185c0c75439e87bed3d57d55576125dcfeb6
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.launch/Launch Runtime Eclipse.launch	
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bad_container_name" value="/swt.most.statemachine.xtext/.launch/"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Launch Runtime Eclipse"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-EclipseXtext"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.project b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.project
new file mode 100644
index 0000000000000000000000000000000000000000..c68f1bdca6f6b51e130322da5365b5ad7e42bcba
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.statemachine.xtext</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.settings/org.eclipse.core.resources.prefs b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.settings/org.eclipse.jdt.core.prefs b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..3a79233b1335743cc32ed3638c1a2d0c1f52d303
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
+org.eclipse.jdt.core.compiler.compliance=21
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=21
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/META-INF/MANIFEST.MF b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..7c04a7fe8ec9ee36b17e8dfccc93bad4e8b215f9
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: swt.most.statemachine.xtext
+Bundle-ManifestVersion: 2
+Bundle-Name: swt.most.statemachine.xtext
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.qualifier
+Bundle-SymbolicName: swt.most.statemachine.xtext; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: swt.most.statemachine,
+ org.eclipse.xtext,
+ org.eclipse.xtext.xbase,
+ org.eclipse.equinox.common;bundle-version="3.16.0",
+ org.eclipse.xtext.xbase.lib;bundle-version="2.35.0",
+ org.antlr.runtime;bundle-version="[3.2.0,3.2.1)"
+Bundle-RequiredExecutionEnvironment: JavaSE-21
+Export-Package: swt.most.statemachine.xtext.serializer,
+ swt.most.statemachine.xtext,
+ swt.most.statemachine.xtext.parser.antlr,
+ swt.most.statemachine.xtext.parser.antlr.internal,
+ swt.most.statemachine.xtext.generator,
+ swt.most.statemachine.xtext.scoping,
+ swt.most.statemachine.xtext.formatting2,
+ swt.most.statemachine.xtext.services,
+ swt.most.statemachine.xtext.validation
+Import-Package: org.apache.log4j
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/AbstractParserRuntimeModule.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/AbstractParserRuntimeModule.class
new file mode 100644
index 0000000000000000000000000000000000000000..cec660a54d89f07520162d1ead9bc2e31ab5f3bd
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/AbstractParserRuntimeModule.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/GenerateParser.mwe2 b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/GenerateParser.mwe2
new file mode 100644
index 0000000000000000000000000000000000000000..df9ec2cb34402510bb10782fd86ed8d96932aeff
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/GenerateParser.mwe2
@@ -0,0 +1,59 @@
+module swt.most.statemachine.xtext.GenerateParser
+
+import org.eclipse.xtext.xtext.generator.*
+import org.eclipse.xtext.xtext.generator.model.project.*
+
+var rootPath = ".."
+
+Workflow {
+	
+	component = XtextGenerator {
+		configuration = {
+			project = StandardProjectConfig {
+				baseName = "swt.most.statemachine.xtext"
+				rootPath = rootPath
+				eclipsePlugin = {
+					enabled = true
+				}
+				createEclipseMetaData = true
+			}
+			code = {
+				encoding = "UTF-8"
+				lineDelimiter = "\r\n"
+				fileHeader = "/*\n * generated by Xtext \${version}\n */"
+				preferXtendStubs = false
+			}
+		}
+		language = StandardLanguage {
+			name = "swt.most.statemachine.xtext.Parser"
+			fileExtensions = "statemachine"
+			referencedResource = "platform:/resource/swt.most.statemachine/model/statemachine.genmodel"
+			
+			fragment = ecore2xtext.Ecore2XtextValueConverterServiceFragment2 auto-inject {}
+
+			formatter = {
+				generateStub = true
+				generateXtendStub = true
+			}
+
+			serializer = {
+				generateStub = false
+			}
+			validator = {
+				// composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
+
+				// Enables several checks on the inferred Jvm model for Xbase languages concerning Java inheritance relations
+				// composedCheck = "org.eclipse.xtext.xbase.validation.JvmGenericTypeValidator"
+
+				// Generates checks for @Deprecated grammar annotations, an IssueProvider and a corresponding PropertyPage
+				generateDeprecationValidation = true
+			}
+			generator = {
+				generateXtendStub = true
+			}
+			junitSupport = {
+				junitVersion = "5"
+			}
+		}
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/Parser.xtext b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/Parser.xtext
new file mode 100644
index 0000000000000000000000000000000000000000..29f5fde830a354ea646c41a50360b33056fa986d
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/Parser.xtext
@@ -0,0 +1,76 @@
+// automatically generated by Xtext
+grammar swt.most.statemachine.xtext.Parser with org.eclipse.xtext.common.Terminals
+
+import "http://www.swt.org/most/statemachine" 
+import "http://www.eclipse.org/emf/2002/Ecore" as ecore
+
+StateMachine returns StateMachine:
+	{StateMachine}
+	'StateMachine' name=EString
+	'{'
+		initialstate=InitialState
+		( states+=NormalState | finalstates+=FinalState | transitions+=Transition)*
+	'}';
+
+State returns State:
+	InitialState | FinalState | NormalState;
+
+NormalState returns NormalState:
+	{NormalState}
+	'state' name=EString ('{'
+	    ('entry:' entry_=Action)?
+		('do:' do_=Action)?
+		('exit:' exit_=Action)?	
+	'}')?;
+
+FinalState returns FinalState:
+	{FinalState}
+	'end' name=FINALSTATENAME;
+
+InitialState returns InitialState:
+	{InitialState}
+	'start' name=INITIALSTATENAME;
+
+/*
+ * You can define further more detailed validations rules to check for the semantics of your language 
+ * in the '***Validator' class under 'src/***.validation'.
+ * e.g. There must be no Transitions to the InitialState and no Transitions from a FinalState
+*/
+Transition returns Transition:
+	{Transition}
+	from=[State|EString] '-'(trigger=Trigger)?('[' guard=Guard ']')? ('/' action=Action)? '->' to=[State|EString];
+
+Action returns Action:
+	{Action}
+	content=ActivityContent;
+
+Trigger returns Trigger:
+	{Trigger}
+	content=ActivityContent;
+
+Guard returns Guard:
+	{Guard}
+	content=EString;
+
+/*
+ * Special naming conventions
+ * Also possible via validator rules
+*/	
+terminal INITIALSTATENAME returns ecore::EString:
+	('I_')(INT|STRING|ID)+;
+	
+terminal FINALSTATENAME returns ecore::EString:
+	('F_')(INT|STRING|ID)+ ;
+
+/*
+ * You can use Strings syntax ('...') for unclear/abstract parts of your text syntax.
+ * If your domain is defined enough you can create rules and terminal rules for these parts,too.
+*/  
+ActivityContent returns ecore::EString:
+	STRING | ID | CALL;
+	
+terminal CALL returns ecore::EString:
+	(ID)('.'(ID))+;
+	
+EString returns ecore::EString:
+	STRING | ID | INITIALSTATENAME | FINALSTATENAME;
\ No newline at end of file
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/Parser.xtextbin b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/Parser.xtextbin
new file mode 100644
index 0000000000000000000000000000000000000000..7a3e87b4495999e72102f69e83439a53eef5535d
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/Parser.xtextbin differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/ParserRuntimeModule.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/ParserRuntimeModule.class
new file mode 100644
index 0000000000000000000000000000000000000000..af3f75fb965f96f7b6fcc81ed416671ebee40794
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/ParserRuntimeModule.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/ParserStandaloneSetup.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/ParserStandaloneSetup.class
new file mode 100644
index 0000000000000000000000000000000000000000..59fd983fbc14a5ef6c59a5aecb7033a818a1b9a5
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/ParserStandaloneSetup.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/ParserStandaloneSetupGenerated.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/ParserStandaloneSetupGenerated.class
new file mode 100644
index 0000000000000000000000000000000000000000..2cb65e6cb4661bedfc6dc178b2620bd30c11aea1
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/ParserStandaloneSetupGenerated.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/formatting2/.ParserFormatter.java._trace b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/formatting2/.ParserFormatter.java._trace
new file mode 100644
index 0000000000000000000000000000000000000000..f1466224b5c01e0c42a9cd6d19bfbca5fd09d67a
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/formatting2/.ParserFormatter.java._trace differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/formatting2/.ParserFormatter.xtendbin b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/formatting2/.ParserFormatter.xtendbin
new file mode 100644
index 0000000000000000000000000000000000000000..d22c654acf07c193c8f99f8efc6cc1b81f948a9f
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/formatting2/.ParserFormatter.xtendbin differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/formatting2/ParserFormatter.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/formatting2/ParserFormatter.class
new file mode 100644
index 0000000000000000000000000000000000000000..aaad7cd6d0f1aa3b617906a9e0feafb1d4536525
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/formatting2/ParserFormatter.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/generator/.ParserGenerator.java._trace b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/generator/.ParserGenerator.java._trace
new file mode 100644
index 0000000000000000000000000000000000000000..a5a7d58233f7bed7e2211dc84c2d0c728889ce2b
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/generator/.ParserGenerator.java._trace differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/generator/.ParserGenerator.xtendbin b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/generator/.ParserGenerator.xtendbin
new file mode 100644
index 0000000000000000000000000000000000000000..ef57e98ebab7924ec8ceadd5562b2fe83894012d
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/generator/.ParserGenerator.xtendbin differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/generator/ParserGenerator.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/generator/ParserGenerator.class
new file mode 100644
index 0000000000000000000000000000000000000000..096795e6272fdee30bd9dc4f9f92aa8492594e5e
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/generator/ParserGenerator.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/ParserAntlrTokenFileProvider.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/ParserAntlrTokenFileProvider.class
new file mode 100644
index 0000000000000000000000000000000000000000..db7e782b31acfb8355dd390cde9773443c225a24
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/ParserAntlrTokenFileProvider.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/ParserParser.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/ParserParser.class
new file mode 100644
index 0000000000000000000000000000000000000000..4b7bc61c4b748ba969b56947d5e7d644f7fdd924
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/ParserParser.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.g b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.g
new file mode 100644
index 0000000000000000000000000000000000000000..8ffd3ddc95d0a205157cf5cb328c397b3145bb7a
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.g
@@ -0,0 +1,814 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+grammar InternalParser;
+
+options {
+	superClass=AbstractInternalAntlrParser;
+}
+
+@lexer::header {
+package swt.most.statemachine.xtext.parser.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.parser.antlr.Lexer;
+}
+
+@parser::header {
+package swt.most.statemachine.xtext.parser.antlr.internal;
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+
+}
+
+@parser::members {
+
+ 	private ParserGrammarAccess grammarAccess;
+
+    public InternalParserParser(TokenStream input, ParserGrammarAccess grammarAccess) {
+        this(input);
+        this.grammarAccess = grammarAccess;
+        registerRules(grammarAccess.getGrammar());
+    }
+
+    @Override
+    protected String getFirstRuleName() {
+    	return "StateMachine";
+   	}
+
+   	@Override
+   	protected ParserGrammarAccess getGrammarAccess() {
+   		return grammarAccess;
+   	}
+
+}
+
+@rulecatch {
+    catch (RecognitionException re) {
+        recover(input,re);
+        appendSkippedTokens();
+    }
+}
+
+// Entry rule entryRuleStateMachine
+entryRuleStateMachine returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getStateMachineRule()); }
+	iv_ruleStateMachine=ruleStateMachine
+	{ $current=$iv_ruleStateMachine.current; }
+	EOF;
+
+// Rule StateMachine
+ruleStateMachine returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getStateMachineAccess().getStateMachineAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='StateMachine'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getStateMachineAccess().getStateMachineKeyword_1());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getStateMachineAccess().getNameEStringParserRuleCall_2_0());
+				}
+				lv_name_2_0=ruleEString
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getStateMachineRule());
+					}
+					set(
+						$current,
+						"name",
+						lv_name_2_0,
+						"swt.most.statemachine.xtext.Parser.EString");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		otherlv_3='{'
+		{
+			newLeafNode(otherlv_3, grammarAccess.getStateMachineAccess().getLeftCurlyBracketKeyword_3());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getStateMachineAccess().getInitialstateInitialStateParserRuleCall_4_0());
+				}
+				lv_initialstate_4_0=ruleInitialState
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getStateMachineRule());
+					}
+					set(
+						$current,
+						"initialstate",
+						lv_initialstate_4_0,
+						"swt.most.statemachine.xtext.Parser.InitialState");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		(
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getStateMachineAccess().getStatesNormalStateParserRuleCall_5_0_0());
+					}
+					lv_states_5_0=ruleNormalState
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getStateMachineRule());
+						}
+						add(
+							$current,
+							"states",
+							lv_states_5_0,
+							"swt.most.statemachine.xtext.Parser.NormalState");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+			    |
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getStateMachineAccess().getFinalstatesFinalStateParserRuleCall_5_1_0());
+					}
+					lv_finalstates_6_0=ruleFinalState
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getStateMachineRule());
+						}
+						add(
+							$current,
+							"finalstates",
+							lv_finalstates_6_0,
+							"swt.most.statemachine.xtext.Parser.FinalState");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+			    |
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getStateMachineAccess().getTransitionsTransitionParserRuleCall_5_2_0());
+					}
+					lv_transitions_7_0=ruleTransition
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getStateMachineRule());
+						}
+						add(
+							$current,
+							"transitions",
+							lv_transitions_7_0,
+							"swt.most.statemachine.xtext.Parser.Transition");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+		)*
+		otherlv_8='}'
+		{
+			newLeafNode(otherlv_8, grammarAccess.getStateMachineAccess().getRightCurlyBracketKeyword_6());
+		}
+	)
+;
+
+// Entry rule entryRuleNormalState
+entryRuleNormalState returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getNormalStateRule()); }
+	iv_ruleNormalState=ruleNormalState
+	{ $current=$iv_ruleNormalState.current; }
+	EOF;
+
+// Rule NormalState
+ruleNormalState returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getNormalStateAccess().getNormalStateAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='state'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getNormalStateAccess().getStateKeyword_1());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getNormalStateAccess().getNameEStringParserRuleCall_2_0());
+				}
+				lv_name_2_0=ruleEString
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getNormalStateRule());
+					}
+					set(
+						$current,
+						"name",
+						lv_name_2_0,
+						"swt.most.statemachine.xtext.Parser.EString");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		(
+			otherlv_3='{'
+			{
+				newLeafNode(otherlv_3, grammarAccess.getNormalStateAccess().getLeftCurlyBracketKeyword_3_0());
+			}
+			(
+				otherlv_4='entry:'
+				{
+					newLeafNode(otherlv_4, grammarAccess.getNormalStateAccess().getEntryKeyword_3_1_0());
+				}
+				(
+					(
+						{
+							newCompositeNode(grammarAccess.getNormalStateAccess().getEntry_ActionParserRuleCall_3_1_1_0());
+						}
+						lv_entry__5_0=ruleAction
+						{
+							if ($current==null) {
+								$current = createModelElementForParent(grammarAccess.getNormalStateRule());
+							}
+							set(
+								$current,
+								"entry_",
+								lv_entry__5_0,
+								"swt.most.statemachine.xtext.Parser.Action");
+							afterParserOrEnumRuleCall();
+						}
+					)
+				)
+			)?
+			(
+				otherlv_6='do:'
+				{
+					newLeafNode(otherlv_6, grammarAccess.getNormalStateAccess().getDoKeyword_3_2_0());
+				}
+				(
+					(
+						{
+							newCompositeNode(grammarAccess.getNormalStateAccess().getDo_ActionParserRuleCall_3_2_1_0());
+						}
+						lv_do__7_0=ruleAction
+						{
+							if ($current==null) {
+								$current = createModelElementForParent(grammarAccess.getNormalStateRule());
+							}
+							set(
+								$current,
+								"do_",
+								lv_do__7_0,
+								"swt.most.statemachine.xtext.Parser.Action");
+							afterParserOrEnumRuleCall();
+						}
+					)
+				)
+			)?
+			(
+				otherlv_8='exit:'
+				{
+					newLeafNode(otherlv_8, grammarAccess.getNormalStateAccess().getExitKeyword_3_3_0());
+				}
+				(
+					(
+						{
+							newCompositeNode(grammarAccess.getNormalStateAccess().getExit_ActionParserRuleCall_3_3_1_0());
+						}
+						lv_exit__9_0=ruleAction
+						{
+							if ($current==null) {
+								$current = createModelElementForParent(grammarAccess.getNormalStateRule());
+							}
+							set(
+								$current,
+								"exit_",
+								lv_exit__9_0,
+								"swt.most.statemachine.xtext.Parser.Action");
+							afterParserOrEnumRuleCall();
+						}
+					)
+				)
+			)?
+			otherlv_10='}'
+			{
+				newLeafNode(otherlv_10, grammarAccess.getNormalStateAccess().getRightCurlyBracketKeyword_3_4());
+			}
+		)?
+	)
+;
+
+// Entry rule entryRuleFinalState
+entryRuleFinalState returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getFinalStateRule()); }
+	iv_ruleFinalState=ruleFinalState
+	{ $current=$iv_ruleFinalState.current; }
+	EOF;
+
+// Rule FinalState
+ruleFinalState returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getFinalStateAccess().getFinalStateAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='end'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getFinalStateAccess().getEndKeyword_1());
+		}
+		(
+			(
+				lv_name_2_0=RULE_FINALSTATENAME
+				{
+					newLeafNode(lv_name_2_0, grammarAccess.getFinalStateAccess().getNameFINALSTATENAMETerminalRuleCall_2_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getFinalStateRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"name",
+						lv_name_2_0,
+						"swt.most.statemachine.xtext.Parser.FINALSTATENAME");
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleInitialState
+entryRuleInitialState returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getInitialStateRule()); }
+	iv_ruleInitialState=ruleInitialState
+	{ $current=$iv_ruleInitialState.current; }
+	EOF;
+
+// Rule InitialState
+ruleInitialState returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getInitialStateAccess().getInitialStateAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='start'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getInitialStateAccess().getStartKeyword_1());
+		}
+		(
+			(
+				lv_name_2_0=RULE_INITIALSTATENAME
+				{
+					newLeafNode(lv_name_2_0, grammarAccess.getInitialStateAccess().getNameINITIALSTATENAMETerminalRuleCall_2_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getInitialStateRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"name",
+						lv_name_2_0,
+						"swt.most.statemachine.xtext.Parser.INITIALSTATENAME");
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleTransition
+entryRuleTransition returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getTransitionRule()); }
+	iv_ruleTransition=ruleTransition
+	{ $current=$iv_ruleTransition.current; }
+	EOF;
+
+// Rule Transition
+ruleTransition returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getTransitionAccess().getTransitionAction_0(),
+					$current);
+			}
+		)
+		(
+			(
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getTransitionRule());
+					}
+				}
+				{
+					newCompositeNode(grammarAccess.getTransitionAccess().getFromStateCrossReference_1_0());
+				}
+				ruleEString
+				{
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		otherlv_2='-'
+		{
+			newLeafNode(otherlv_2, grammarAccess.getTransitionAccess().getHyphenMinusKeyword_2());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getTransitionAccess().getTriggerTriggerParserRuleCall_3_0());
+				}
+				lv_trigger_3_0=ruleTrigger
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getTransitionRule());
+					}
+					set(
+						$current,
+						"trigger",
+						lv_trigger_3_0,
+						"swt.most.statemachine.xtext.Parser.Trigger");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)?
+		(
+			otherlv_4='['
+			{
+				newLeafNode(otherlv_4, grammarAccess.getTransitionAccess().getLeftSquareBracketKeyword_4_0());
+			}
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getTransitionAccess().getGuardGuardParserRuleCall_4_1_0());
+					}
+					lv_guard_5_0=ruleGuard
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getTransitionRule());
+						}
+						set(
+							$current,
+							"guard",
+							lv_guard_5_0,
+							"swt.most.statemachine.xtext.Parser.Guard");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+			otherlv_6=']'
+			{
+				newLeafNode(otherlv_6, grammarAccess.getTransitionAccess().getRightSquareBracketKeyword_4_2());
+			}
+		)?
+		(
+			otherlv_7='/'
+			{
+				newLeafNode(otherlv_7, grammarAccess.getTransitionAccess().getSolidusKeyword_5_0());
+			}
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getTransitionAccess().getActionActionParserRuleCall_5_1_0());
+					}
+					lv_action_8_0=ruleAction
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getTransitionRule());
+						}
+						set(
+							$current,
+							"action",
+							lv_action_8_0,
+							"swt.most.statemachine.xtext.Parser.Action");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+		)?
+		otherlv_9='->'
+		{
+			newLeafNode(otherlv_9, grammarAccess.getTransitionAccess().getHyphenMinusGreaterThanSignKeyword_6());
+		}
+		(
+			(
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getTransitionRule());
+					}
+				}
+				{
+					newCompositeNode(grammarAccess.getTransitionAccess().getToStateCrossReference_7_0());
+				}
+				ruleEString
+				{
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleAction
+entryRuleAction returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getActionRule()); }
+	iv_ruleAction=ruleAction
+	{ $current=$iv_ruleAction.current; }
+	EOF;
+
+// Rule Action
+ruleAction returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getActionAccess().getActionAction_0(),
+					$current);
+			}
+		)
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getActionAccess().getContentActivityContentParserRuleCall_1_0());
+				}
+				lv_content_1_0=ruleActivityContent
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getActionRule());
+					}
+					set(
+						$current,
+						"content",
+						lv_content_1_0,
+						"swt.most.statemachine.xtext.Parser.ActivityContent");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleTrigger
+entryRuleTrigger returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getTriggerRule()); }
+	iv_ruleTrigger=ruleTrigger
+	{ $current=$iv_ruleTrigger.current; }
+	EOF;
+
+// Rule Trigger
+ruleTrigger returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getTriggerAccess().getTriggerAction_0(),
+					$current);
+			}
+		)
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getTriggerAccess().getContentActivityContentParserRuleCall_1_0());
+				}
+				lv_content_1_0=ruleActivityContent
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getTriggerRule());
+					}
+					set(
+						$current,
+						"content",
+						lv_content_1_0,
+						"swt.most.statemachine.xtext.Parser.ActivityContent");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleGuard
+entryRuleGuard returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getGuardRule()); }
+	iv_ruleGuard=ruleGuard
+	{ $current=$iv_ruleGuard.current; }
+	EOF;
+
+// Rule Guard
+ruleGuard returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getGuardAccess().getGuardAction_0(),
+					$current);
+			}
+		)
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getGuardAccess().getContentEStringParserRuleCall_1_0());
+				}
+				lv_content_1_0=ruleEString
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getGuardRule());
+					}
+					set(
+						$current,
+						"content",
+						lv_content_1_0,
+						"swt.most.statemachine.xtext.Parser.EString");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleActivityContent
+entryRuleActivityContent returns [String current=null]:
+	{ newCompositeNode(grammarAccess.getActivityContentRule()); }
+	iv_ruleActivityContent=ruleActivityContent
+	{ $current=$iv_ruleActivityContent.current.getText(); }
+	EOF;
+
+// Rule ActivityContent
+ruleActivityContent returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		this_STRING_0=RULE_STRING
+		{
+			$current.merge(this_STRING_0);
+		}
+		{
+			newLeafNode(this_STRING_0, grammarAccess.getActivityContentAccess().getSTRINGTerminalRuleCall_0());
+		}
+		    |
+		this_ID_1=RULE_ID
+		{
+			$current.merge(this_ID_1);
+		}
+		{
+			newLeafNode(this_ID_1, grammarAccess.getActivityContentAccess().getIDTerminalRuleCall_1());
+		}
+		    |
+		this_CALL_2=RULE_CALL
+		{
+			$current.merge(this_CALL_2);
+		}
+		{
+			newLeafNode(this_CALL_2, grammarAccess.getActivityContentAccess().getCALLTerminalRuleCall_2());
+		}
+	)
+;
+
+// Entry rule entryRuleEString
+entryRuleEString returns [String current=null]:
+	{ newCompositeNode(grammarAccess.getEStringRule()); }
+	iv_ruleEString=ruleEString
+	{ $current=$iv_ruleEString.current.getText(); }
+	EOF;
+
+// Rule EString
+ruleEString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		this_STRING_0=RULE_STRING
+		{
+			$current.merge(this_STRING_0);
+		}
+		{
+			newLeafNode(this_STRING_0, grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0());
+		}
+		    |
+		this_ID_1=RULE_ID
+		{
+			$current.merge(this_ID_1);
+		}
+		{
+			newLeafNode(this_ID_1, grammarAccess.getEStringAccess().getIDTerminalRuleCall_1());
+		}
+		    |
+		this_INITIALSTATENAME_2=RULE_INITIALSTATENAME
+		{
+			$current.merge(this_INITIALSTATENAME_2);
+		}
+		{
+			newLeafNode(this_INITIALSTATENAME_2, grammarAccess.getEStringAccess().getINITIALSTATENAMETerminalRuleCall_2());
+		}
+		    |
+		this_FINALSTATENAME_3=RULE_FINALSTATENAME
+		{
+			$current.merge(this_FINALSTATENAME_3);
+		}
+		{
+			newLeafNode(this_FINALSTATENAME_3, grammarAccess.getEStringAccess().getFINALSTATENAMETerminalRuleCall_3());
+		}
+	)
+;
+
+RULE_INITIALSTATENAME : 'I_' (RULE_INT|RULE_STRING|RULE_ID)+;
+
+RULE_FINALSTATENAME : 'F_' (RULE_INT|RULE_STRING|RULE_ID)+;
+
+RULE_CALL : RULE_ID ('.' RULE_ID)+;
+
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+fragment RULE_INT : ('0'..'9')+;
+
+RULE_STRING : ('"' ('\\' .|~(('\\'|'"')))* '"'|'\'' ('\\' .|~(('\\'|'\'')))* '\'');
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+RULE_ANY_OTHER : .;
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.tokens b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.tokens
new file mode 100644
index 0000000000000000000000000000000000000000..cf878cfd1917f031ee6b9f20c47c84e5810c3e60
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.tokens
@@ -0,0 +1,38 @@
+'-'=23
+'->'=27
+'/'=26
+'StateMachine'=14
+'['=24
+']'=25
+'do:'=19
+'end'=21
+'entry:'=18
+'exit:'=20
+'start'=22
+'state'=17
+'{'=15
+'}'=16
+RULE_ANY_OTHER=13
+RULE_CALL=8
+RULE_FINALSTATENAME=4
+RULE_ID=7
+RULE_INITIALSTATENAME=5
+RULE_INT=9
+RULE_ML_COMMENT=10
+RULE_SL_COMMENT=11
+RULE_STRING=6
+RULE_WS=12
+T__14=14
+T__15=15
+T__16=16
+T__17=17
+T__18=18
+T__19=19
+T__20=20
+T__21=21
+T__22=22
+T__23=23
+T__24=24
+T__25=25
+T__26=26
+T__27=27
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserLexer$DFA15.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserLexer$DFA15.class
new file mode 100644
index 0000000000000000000000000000000000000000..a8ace91995d128dafd7a942fbf4acd49d83c0a37
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserLexer$DFA15.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserLexer.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserLexer.class
new file mode 100644
index 0000000000000000000000000000000000000000..7dd09e559598bef18c2ee1ffec1f700f25f5ac65
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserLexer.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserParser.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserParser.class
new file mode 100644
index 0000000000000000000000000000000000000000..9f242014db6025ee4323452631e7594bc58b2c9e
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserParser.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/scoping/AbstractParserScopeProvider.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/scoping/AbstractParserScopeProvider.class
new file mode 100644
index 0000000000000000000000000000000000000000..4c8c5703d4afdc1a769fb6e2ae0be4919efb9926
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/scoping/AbstractParserScopeProvider.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/scoping/ParserScopeProvider.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/scoping/ParserScopeProvider.class
new file mode 100644
index 0000000000000000000000000000000000000000..ed216ff5adaa0abb914cb5d83f1a3234c4d19dc9
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/scoping/ParserScopeProvider.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/serializer/ParserSemanticSequencer.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/serializer/ParserSemanticSequencer.class
new file mode 100644
index 0000000000000000000000000000000000000000..36e60fc4f4b5b735fb0b406e404b3d0997ba26c9
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/serializer/ParserSemanticSequencer.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/serializer/ParserSyntacticSequencer.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/serializer/ParserSyntacticSequencer.class
new file mode 100644
index 0000000000000000000000000000000000000000..665c8f57fb96dc2729f24b2fefebcf0061915e01
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/serializer/ParserSyntacticSequencer.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$ActionElements.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$ActionElements.class
new file mode 100644
index 0000000000000000000000000000000000000000..0fff3ab7488679e46e0175a0be7b9c8ca33cee4b
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$ActionElements.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$ActivityContentElements.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$ActivityContentElements.class
new file mode 100644
index 0000000000000000000000000000000000000000..11d4238fe08b811ebc78dff2c34cfe8ee538cdb1
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$ActivityContentElements.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$EStringElements.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$EStringElements.class
new file mode 100644
index 0000000000000000000000000000000000000000..c56c93e5ef497f117216a0225ac26c080bad7c15
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$EStringElements.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$FinalStateElements.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$FinalStateElements.class
new file mode 100644
index 0000000000000000000000000000000000000000..894003057e4f1d6132cc8564bbf399ec3f9c5f24
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$FinalStateElements.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$GuardElements.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$GuardElements.class
new file mode 100644
index 0000000000000000000000000000000000000000..406bc8973bda1f93f2b995c46ec4a0eaa1c442d1
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$GuardElements.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$InitialStateElements.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$InitialStateElements.class
new file mode 100644
index 0000000000000000000000000000000000000000..d3ad6e9cba16b388bf912ce9b7ca11c193c3125d
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$InitialStateElements.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$NormalStateElements.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$NormalStateElements.class
new file mode 100644
index 0000000000000000000000000000000000000000..f9d5d803f0e16d49bf1857525e1a4b5680955844
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$NormalStateElements.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$StateElements.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$StateElements.class
new file mode 100644
index 0000000000000000000000000000000000000000..352fbc1a84084ab40a1a9276e56521d6294d7d1a
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$StateElements.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$StateMachineElements.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$StateMachineElements.class
new file mode 100644
index 0000000000000000000000000000000000000000..a53555b6a6653ae35211e9e63e5f092bb888628b
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$StateMachineElements.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$TransitionElements.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$TransitionElements.class
new file mode 100644
index 0000000000000000000000000000000000000000..3d6d71550f05c3e13de36f28a639aae8e0391f37
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$TransitionElements.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$TriggerElements.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$TriggerElements.class
new file mode 100644
index 0000000000000000000000000000000000000000..ed2c7da887d99bf1ab000d4fae4c333a52aca57a
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess$TriggerElements.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess.class
new file mode 100644
index 0000000000000000000000000000000000000000..05fdd0868ca009133d3b7d3a1318ddea73dc4d83
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/services/ParserGrammarAccess.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/validation/AbstractParserValidator.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/validation/AbstractParserValidator.class
new file mode 100644
index 0000000000000000000000000000000000000000..87befb6f2fe9bb6e3459ecd8e022652e63003331
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/validation/AbstractParserValidator.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/validation/ParserConfigurableIssueCodesProvider.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/validation/ParserConfigurableIssueCodesProvider.class
new file mode 100644
index 0000000000000000000000000000000000000000..817e33d0e485af9e3dac757a7f18dcf95e7a7aee
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/validation/ParserConfigurableIssueCodesProvider.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/validation/ParserValidator.class b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/validation/ParserValidator.class
new file mode 100644
index 0000000000000000000000000000000000000000..4df50401a641c2cc68b1c5906038c0337f8a7425
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/bin/swt/most/statemachine/xtext/validation/ParserValidator.class differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/build.properties b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..c24ff368064f653346c873aa6e7a60752f0bca4a
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/build.properties
@@ -0,0 +1,17 @@
+source.. = src/,\
+           src-gen/,\
+           xtend-gen/
+bin.includes = .,\
+               META-INF/
+bin.excludes = **/*.mwe2,\
+               **/*.xtend
+additional.bundles = org.eclipse.xtext.xbase,\
+                     org.eclipse.xtext.common.types,\
+                     org.eclipse.xtext.xtext.generator,\
+                     org.eclipse.emf.codegen.ecore,\
+                     org.eclipse.emf.mwe.utils,\
+                     org.eclipse.emf.mwe2.launch,\
+                     org.eclipse.emf.mwe2.lib,\
+                     org.objectweb.asm,\
+                     org.apache.commons.logging,\
+                     org.apache.log4j
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/AbstractParserRuntimeModule.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/AbstractParserRuntimeModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..4395d82d2f14d56c14bf6d8b04fd0c88c1558f94
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/AbstractParserRuntimeModule.java
@@ -0,0 +1,223 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext;
+
+import com.google.inject.Binder;
+import com.google.inject.Provider;
+import com.google.inject.name.Names;
+import java.util.Properties;
+import org.eclipse.xtext.Constants;
+import org.eclipse.xtext.IGrammarAccess;
+import org.eclipse.xtext.common.services.Ecore2XtextTerminalConverters;
+import org.eclipse.xtext.conversion.IValueConverterService;
+import org.eclipse.xtext.formatting2.FormatterPreferenceValuesProvider;
+import org.eclipse.xtext.formatting2.FormatterPreferences;
+import org.eclipse.xtext.formatting2.IFormatter2;
+import org.eclipse.xtext.generator.IGenerator2;
+import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider;
+import org.eclipse.xtext.naming.IQualifiedNameProvider;
+import org.eclipse.xtext.parser.IParser;
+import org.eclipse.xtext.parser.ITokenToStringConverter;
+import org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider;
+import org.eclipse.xtext.parser.antlr.AntlrTokenToStringConverter;
+import org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider;
+import org.eclipse.xtext.parser.antlr.ITokenDefProvider;
+import org.eclipse.xtext.parser.antlr.Lexer;
+import org.eclipse.xtext.parser.antlr.LexerBindings;
+import org.eclipse.xtext.parser.antlr.LexerProvider;
+import org.eclipse.xtext.preferences.IPreferenceValuesProvider;
+import org.eclipse.xtext.resource.IContainer;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.resource.containers.IAllContainersState;
+import org.eclipse.xtext.resource.containers.ResourceSetBasedAllContainersStateProvider;
+import org.eclipse.xtext.resource.containers.StateBasedContainerManager;
+import org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider;
+import org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions;
+import org.eclipse.xtext.scoping.IGlobalScopeProvider;
+import org.eclipse.xtext.scoping.IScopeProvider;
+import org.eclipse.xtext.scoping.IgnoreCaseLinking;
+import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider;
+import org.eclipse.xtext.scoping.impl.DefaultGlobalScopeProvider;
+import org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider;
+import org.eclipse.xtext.serializer.ISerializer;
+import org.eclipse.xtext.serializer.impl.Serializer;
+import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer;
+import org.eclipse.xtext.serializer.sequencer.ISyntacticSequencer;
+import org.eclipse.xtext.service.DefaultRuntimeModule;
+import org.eclipse.xtext.service.SingletonBinding;
+import org.eclipse.xtext.validation.ConfigurableIssueCodesProvider;
+import swt.most.statemachine.xtext.formatting2.ParserFormatter;
+import swt.most.statemachine.xtext.generator.ParserGenerator;
+import swt.most.statemachine.xtext.parser.antlr.ParserAntlrTokenFileProvider;
+import swt.most.statemachine.xtext.parser.antlr.ParserParser;
+import swt.most.statemachine.xtext.parser.antlr.internal.InternalParserLexer;
+import swt.most.statemachine.xtext.scoping.ParserScopeProvider;
+import swt.most.statemachine.xtext.serializer.ParserSemanticSequencer;
+import swt.most.statemachine.xtext.serializer.ParserSyntacticSequencer;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+import swt.most.statemachine.xtext.validation.ParserConfigurableIssueCodesProvider;
+import swt.most.statemachine.xtext.validation.ParserValidator;
+
+/**
+ * Manual modifications go to {@link ParserRuntimeModule}.
+ */
+@SuppressWarnings("all")
+public abstract class AbstractParserRuntimeModule extends DefaultRuntimeModule {
+
+	protected Properties properties = null;
+
+	@Override
+	public void configure(Binder binder) {
+		properties = tryBindProperties(binder, "swt/most/statemachine/xtext/Parser.properties");
+		super.configure(binder);
+	}
+	
+	public void configureLanguageName(Binder binder) {
+		binder.bind(String.class).annotatedWith(Names.named(Constants.LANGUAGE_NAME)).toInstance("swt.most.statemachine.xtext.Parser");
+	}
+	
+	public void configureFileExtensions(Binder binder) {
+		if (properties == null || properties.getProperty(Constants.FILE_EXTENSIONS) == null)
+			binder.bind(String.class).annotatedWith(Names.named(Constants.FILE_EXTENSIONS)).toInstance("statemachine");
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.grammarAccess.GrammarAccessFragment2
+	public ClassLoader bindClassLoaderToInstance() {
+		return getClass().getClassLoader();
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.grammarAccess.GrammarAccessFragment2
+	public Class<? extends IGrammarAccess> bindIGrammarAccess() {
+		return ParserGrammarAccess.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.serializer.SerializerFragment2
+	public Class<? extends ISemanticSequencer> bindISemanticSequencer() {
+		return ParserSemanticSequencer.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.serializer.SerializerFragment2
+	public Class<? extends ISyntacticSequencer> bindISyntacticSequencer() {
+		return ParserSyntacticSequencer.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.serializer.SerializerFragment2
+	public Class<? extends ISerializer> bindISerializer() {
+		return Serializer.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public Class<? extends IParser> bindIParser() {
+		return ParserParser.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public Class<? extends ITokenToStringConverter> bindITokenToStringConverter() {
+		return AntlrTokenToStringConverter.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public Class<? extends IAntlrTokenFileProvider> bindIAntlrTokenFileProvider() {
+		return ParserAntlrTokenFileProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public Class<? extends Lexer> bindLexer() {
+		return InternalParserLexer.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public Class<? extends ITokenDefProvider> bindITokenDefProvider() {
+		return AntlrTokenDefProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public Provider<? extends InternalParserLexer> provideInternalParserLexer() {
+		return LexerProvider.create(InternalParserLexer.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
+	public void configureRuntimeLexer(Binder binder) {
+		binder.bind(Lexer.class)
+			.annotatedWith(Names.named(LexerBindings.RUNTIME))
+			.to(InternalParserLexer.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.validation.ValidatorFragment2
+	@SingletonBinding(eager=true)
+	public Class<? extends ParserValidator> bindParserValidator() {
+		return ParserValidator.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.validation.ValidatorFragment2
+	public Class<? extends ConfigurableIssueCodesProvider> bindConfigurableIssueCodesProvider() {
+		return ParserConfigurableIssueCodesProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.scoping.ImportNamespacesScopingFragment2
+	public Class<? extends IScopeProvider> bindIScopeProvider() {
+		return ParserScopeProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.scoping.ImportNamespacesScopingFragment2
+	public void configureIScopeProviderDelegate(Binder binder) {
+		binder.bind(IScopeProvider.class).annotatedWith(Names.named(AbstractDeclarativeScopeProvider.NAMED_DELEGATE)).to(ImportedNamespaceAwareLocalScopeProvider.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.scoping.ImportNamespacesScopingFragment2
+	public Class<? extends IGlobalScopeProvider> bindIGlobalScopeProvider() {
+		return DefaultGlobalScopeProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.scoping.ImportNamespacesScopingFragment2
+	public void configureIgnoreCaseLinking(Binder binder) {
+		binder.bindConstant().annotatedWith(IgnoreCaseLinking.class).to(false);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.exporting.QualifiedNamesFragment2
+	public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
+		return DefaultDeclarativeQualifiedNameProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
+	public Class<? extends IContainer.Manager> bindIContainer$Manager() {
+		return StateBasedContainerManager.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
+	public Class<? extends IAllContainersState.Provider> bindIAllContainersState$Provider() {
+		return ResourceSetBasedAllContainersStateProvider.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
+	public void configureIResourceDescriptions(Binder binder) {
+		binder.bind(IResourceDescriptions.class).to(ResourceSetBasedResourceDescriptions.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
+	public void configureIResourceDescriptionsPersisted(Binder binder) {
+		binder.bind(IResourceDescriptions.class).annotatedWith(Names.named(ResourceDescriptionsProvider.PERSISTED_DESCRIPTIONS)).to(ResourceSetBasedResourceDescriptions.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.generator.GeneratorFragment2
+	public Class<? extends IGenerator2> bindIGenerator2() {
+		return ParserGenerator.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.formatting.Formatter2Fragment2
+	public Class<? extends IFormatter2> bindIFormatter2() {
+		return ParserFormatter.class;
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.formatting.Formatter2Fragment2
+	public void configureFormatterPreferences(Binder binder) {
+		binder.bind(IPreferenceValuesProvider.class).annotatedWith(FormatterPreferences.class).to(FormatterPreferenceValuesProvider.class);
+	}
+	
+	// contributed by org.eclipse.xtext.xtext.generator.ecore2xtext.Ecore2XtextValueConverterServiceFragment2
+	public Class<? extends IValueConverterService> bindIValueConverterService() {
+		return Ecore2XtextTerminalConverters.class;
+	}
+	
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/Parser.xtextbin b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/Parser.xtextbin
new file mode 100644
index 0000000000000000000000000000000000000000..7a3e87b4495999e72102f69e83439a53eef5535d
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/Parser.xtextbin differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/ParserStandaloneSetupGenerated.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/ParserStandaloneSetupGenerated.java
new file mode 100644
index 0000000000000000000000000000000000000000..75cca3dc0a6384af9bbb76c2044da19ea040fb96
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/ParserStandaloneSetupGenerated.java
@@ -0,0 +1,37 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.xtext.ISetup;
+import org.eclipse.xtext.common.TerminalsStandaloneSetup;
+import org.eclipse.xtext.resource.IResourceFactory;
+import org.eclipse.xtext.resource.IResourceServiceProvider;
+
+@SuppressWarnings("all")
+public class ParserStandaloneSetupGenerated implements ISetup {
+
+	@Override
+	public Injector createInjectorAndDoEMFRegistration() {
+		TerminalsStandaloneSetup.doSetup();
+
+		Injector injector = createInjector();
+		register(injector);
+		return injector;
+	}
+	
+	public Injector createInjector() {
+		return Guice.createInjector(new ParserRuntimeModule());
+	}
+	
+	public void register(Injector injector) {
+		IResourceFactory resourceFactory = injector.getInstance(IResourceFactory.class);
+		IResourceServiceProvider serviceProvider = injector.getInstance(IResourceServiceProvider.class);
+		
+		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("statemachine", resourceFactory);
+		IResourceServiceProvider.Registry.INSTANCE.getExtensionToFactoryMap().put("statemachine", serviceProvider);
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/ParserAntlrTokenFileProvider.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/ParserAntlrTokenFileProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae2ccc6965d8470c11d5f96fd1eafab5c0aef536
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/ParserAntlrTokenFileProvider.java
@@ -0,0 +1,16 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.parser.antlr;
+
+import java.io.InputStream;
+import org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider;
+
+public class ParserAntlrTokenFileProvider implements IAntlrTokenFileProvider {
+
+	@Override
+	public InputStream getAntlrTokenFile() {
+		ClassLoader classLoader = getClass().getClassLoader();
+		return classLoader.getResourceAsStream("swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.tokens");
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/ParserParser.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/ParserParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..2053137a2e73194be7dd8af5b8bc90964e30365c
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/ParserParser.java
@@ -0,0 +1,40 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.parser.antlr;
+
+import com.google.inject.Inject;
+import org.eclipse.xtext.parser.antlr.AbstractAntlrParser;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import swt.most.statemachine.xtext.parser.antlr.internal.InternalParserParser;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+
+public class ParserParser extends AbstractAntlrParser {
+
+	@Inject
+	private ParserGrammarAccess grammarAccess;
+
+	@Override
+	protected void setInitialHiddenTokens(XtextTokenStream tokenStream) {
+		tokenStream.setInitialHiddenTokens("RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT");
+	}
+	
+
+	@Override
+	protected InternalParserParser createParser(XtextTokenStream stream) {
+		return new InternalParserParser(stream, getGrammarAccess());
+	}
+
+	@Override 
+	protected String getDefaultRuleName() {
+		return "StateMachine";
+	}
+
+	public ParserGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+
+	public void setGrammarAccess(ParserGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.g b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.g
new file mode 100644
index 0000000000000000000000000000000000000000..8ffd3ddc95d0a205157cf5cb328c397b3145bb7a
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.g
@@ -0,0 +1,814 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+grammar InternalParser;
+
+options {
+	superClass=AbstractInternalAntlrParser;
+}
+
+@lexer::header {
+package swt.most.statemachine.xtext.parser.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.parser.antlr.Lexer;
+}
+
+@parser::header {
+package swt.most.statemachine.xtext.parser.antlr.internal;
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+
+}
+
+@parser::members {
+
+ 	private ParserGrammarAccess grammarAccess;
+
+    public InternalParserParser(TokenStream input, ParserGrammarAccess grammarAccess) {
+        this(input);
+        this.grammarAccess = grammarAccess;
+        registerRules(grammarAccess.getGrammar());
+    }
+
+    @Override
+    protected String getFirstRuleName() {
+    	return "StateMachine";
+   	}
+
+   	@Override
+   	protected ParserGrammarAccess getGrammarAccess() {
+   		return grammarAccess;
+   	}
+
+}
+
+@rulecatch {
+    catch (RecognitionException re) {
+        recover(input,re);
+        appendSkippedTokens();
+    }
+}
+
+// Entry rule entryRuleStateMachine
+entryRuleStateMachine returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getStateMachineRule()); }
+	iv_ruleStateMachine=ruleStateMachine
+	{ $current=$iv_ruleStateMachine.current; }
+	EOF;
+
+// Rule StateMachine
+ruleStateMachine returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getStateMachineAccess().getStateMachineAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='StateMachine'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getStateMachineAccess().getStateMachineKeyword_1());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getStateMachineAccess().getNameEStringParserRuleCall_2_0());
+				}
+				lv_name_2_0=ruleEString
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getStateMachineRule());
+					}
+					set(
+						$current,
+						"name",
+						lv_name_2_0,
+						"swt.most.statemachine.xtext.Parser.EString");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		otherlv_3='{'
+		{
+			newLeafNode(otherlv_3, grammarAccess.getStateMachineAccess().getLeftCurlyBracketKeyword_3());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getStateMachineAccess().getInitialstateInitialStateParserRuleCall_4_0());
+				}
+				lv_initialstate_4_0=ruleInitialState
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getStateMachineRule());
+					}
+					set(
+						$current,
+						"initialstate",
+						lv_initialstate_4_0,
+						"swt.most.statemachine.xtext.Parser.InitialState");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		(
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getStateMachineAccess().getStatesNormalStateParserRuleCall_5_0_0());
+					}
+					lv_states_5_0=ruleNormalState
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getStateMachineRule());
+						}
+						add(
+							$current,
+							"states",
+							lv_states_5_0,
+							"swt.most.statemachine.xtext.Parser.NormalState");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+			    |
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getStateMachineAccess().getFinalstatesFinalStateParserRuleCall_5_1_0());
+					}
+					lv_finalstates_6_0=ruleFinalState
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getStateMachineRule());
+						}
+						add(
+							$current,
+							"finalstates",
+							lv_finalstates_6_0,
+							"swt.most.statemachine.xtext.Parser.FinalState");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+			    |
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getStateMachineAccess().getTransitionsTransitionParserRuleCall_5_2_0());
+					}
+					lv_transitions_7_0=ruleTransition
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getStateMachineRule());
+						}
+						add(
+							$current,
+							"transitions",
+							lv_transitions_7_0,
+							"swt.most.statemachine.xtext.Parser.Transition");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+		)*
+		otherlv_8='}'
+		{
+			newLeafNode(otherlv_8, grammarAccess.getStateMachineAccess().getRightCurlyBracketKeyword_6());
+		}
+	)
+;
+
+// Entry rule entryRuleNormalState
+entryRuleNormalState returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getNormalStateRule()); }
+	iv_ruleNormalState=ruleNormalState
+	{ $current=$iv_ruleNormalState.current; }
+	EOF;
+
+// Rule NormalState
+ruleNormalState returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getNormalStateAccess().getNormalStateAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='state'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getNormalStateAccess().getStateKeyword_1());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getNormalStateAccess().getNameEStringParserRuleCall_2_0());
+				}
+				lv_name_2_0=ruleEString
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getNormalStateRule());
+					}
+					set(
+						$current,
+						"name",
+						lv_name_2_0,
+						"swt.most.statemachine.xtext.Parser.EString");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		(
+			otherlv_3='{'
+			{
+				newLeafNode(otherlv_3, grammarAccess.getNormalStateAccess().getLeftCurlyBracketKeyword_3_0());
+			}
+			(
+				otherlv_4='entry:'
+				{
+					newLeafNode(otherlv_4, grammarAccess.getNormalStateAccess().getEntryKeyword_3_1_0());
+				}
+				(
+					(
+						{
+							newCompositeNode(grammarAccess.getNormalStateAccess().getEntry_ActionParserRuleCall_3_1_1_0());
+						}
+						lv_entry__5_0=ruleAction
+						{
+							if ($current==null) {
+								$current = createModelElementForParent(grammarAccess.getNormalStateRule());
+							}
+							set(
+								$current,
+								"entry_",
+								lv_entry__5_0,
+								"swt.most.statemachine.xtext.Parser.Action");
+							afterParserOrEnumRuleCall();
+						}
+					)
+				)
+			)?
+			(
+				otherlv_6='do:'
+				{
+					newLeafNode(otherlv_6, grammarAccess.getNormalStateAccess().getDoKeyword_3_2_0());
+				}
+				(
+					(
+						{
+							newCompositeNode(grammarAccess.getNormalStateAccess().getDo_ActionParserRuleCall_3_2_1_0());
+						}
+						lv_do__7_0=ruleAction
+						{
+							if ($current==null) {
+								$current = createModelElementForParent(grammarAccess.getNormalStateRule());
+							}
+							set(
+								$current,
+								"do_",
+								lv_do__7_0,
+								"swt.most.statemachine.xtext.Parser.Action");
+							afterParserOrEnumRuleCall();
+						}
+					)
+				)
+			)?
+			(
+				otherlv_8='exit:'
+				{
+					newLeafNode(otherlv_8, grammarAccess.getNormalStateAccess().getExitKeyword_3_3_0());
+				}
+				(
+					(
+						{
+							newCompositeNode(grammarAccess.getNormalStateAccess().getExit_ActionParserRuleCall_3_3_1_0());
+						}
+						lv_exit__9_0=ruleAction
+						{
+							if ($current==null) {
+								$current = createModelElementForParent(grammarAccess.getNormalStateRule());
+							}
+							set(
+								$current,
+								"exit_",
+								lv_exit__9_0,
+								"swt.most.statemachine.xtext.Parser.Action");
+							afterParserOrEnumRuleCall();
+						}
+					)
+				)
+			)?
+			otherlv_10='}'
+			{
+				newLeafNode(otherlv_10, grammarAccess.getNormalStateAccess().getRightCurlyBracketKeyword_3_4());
+			}
+		)?
+	)
+;
+
+// Entry rule entryRuleFinalState
+entryRuleFinalState returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getFinalStateRule()); }
+	iv_ruleFinalState=ruleFinalState
+	{ $current=$iv_ruleFinalState.current; }
+	EOF;
+
+// Rule FinalState
+ruleFinalState returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getFinalStateAccess().getFinalStateAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='end'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getFinalStateAccess().getEndKeyword_1());
+		}
+		(
+			(
+				lv_name_2_0=RULE_FINALSTATENAME
+				{
+					newLeafNode(lv_name_2_0, grammarAccess.getFinalStateAccess().getNameFINALSTATENAMETerminalRuleCall_2_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getFinalStateRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"name",
+						lv_name_2_0,
+						"swt.most.statemachine.xtext.Parser.FINALSTATENAME");
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleInitialState
+entryRuleInitialState returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getInitialStateRule()); }
+	iv_ruleInitialState=ruleInitialState
+	{ $current=$iv_ruleInitialState.current; }
+	EOF;
+
+// Rule InitialState
+ruleInitialState returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getInitialStateAccess().getInitialStateAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='start'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getInitialStateAccess().getStartKeyword_1());
+		}
+		(
+			(
+				lv_name_2_0=RULE_INITIALSTATENAME
+				{
+					newLeafNode(lv_name_2_0, grammarAccess.getInitialStateAccess().getNameINITIALSTATENAMETerminalRuleCall_2_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getInitialStateRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"name",
+						lv_name_2_0,
+						"swt.most.statemachine.xtext.Parser.INITIALSTATENAME");
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleTransition
+entryRuleTransition returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getTransitionRule()); }
+	iv_ruleTransition=ruleTransition
+	{ $current=$iv_ruleTransition.current; }
+	EOF;
+
+// Rule Transition
+ruleTransition returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getTransitionAccess().getTransitionAction_0(),
+					$current);
+			}
+		)
+		(
+			(
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getTransitionRule());
+					}
+				}
+				{
+					newCompositeNode(grammarAccess.getTransitionAccess().getFromStateCrossReference_1_0());
+				}
+				ruleEString
+				{
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		otherlv_2='-'
+		{
+			newLeafNode(otherlv_2, grammarAccess.getTransitionAccess().getHyphenMinusKeyword_2());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getTransitionAccess().getTriggerTriggerParserRuleCall_3_0());
+				}
+				lv_trigger_3_0=ruleTrigger
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getTransitionRule());
+					}
+					set(
+						$current,
+						"trigger",
+						lv_trigger_3_0,
+						"swt.most.statemachine.xtext.Parser.Trigger");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)?
+		(
+			otherlv_4='['
+			{
+				newLeafNode(otherlv_4, grammarAccess.getTransitionAccess().getLeftSquareBracketKeyword_4_0());
+			}
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getTransitionAccess().getGuardGuardParserRuleCall_4_1_0());
+					}
+					lv_guard_5_0=ruleGuard
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getTransitionRule());
+						}
+						set(
+							$current,
+							"guard",
+							lv_guard_5_0,
+							"swt.most.statemachine.xtext.Parser.Guard");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+			otherlv_6=']'
+			{
+				newLeafNode(otherlv_6, grammarAccess.getTransitionAccess().getRightSquareBracketKeyword_4_2());
+			}
+		)?
+		(
+			otherlv_7='/'
+			{
+				newLeafNode(otherlv_7, grammarAccess.getTransitionAccess().getSolidusKeyword_5_0());
+			}
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getTransitionAccess().getActionActionParserRuleCall_5_1_0());
+					}
+					lv_action_8_0=ruleAction
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getTransitionRule());
+						}
+						set(
+							$current,
+							"action",
+							lv_action_8_0,
+							"swt.most.statemachine.xtext.Parser.Action");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+		)?
+		otherlv_9='->'
+		{
+			newLeafNode(otherlv_9, grammarAccess.getTransitionAccess().getHyphenMinusGreaterThanSignKeyword_6());
+		}
+		(
+			(
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getTransitionRule());
+					}
+				}
+				{
+					newCompositeNode(grammarAccess.getTransitionAccess().getToStateCrossReference_7_0());
+				}
+				ruleEString
+				{
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleAction
+entryRuleAction returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getActionRule()); }
+	iv_ruleAction=ruleAction
+	{ $current=$iv_ruleAction.current; }
+	EOF;
+
+// Rule Action
+ruleAction returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getActionAccess().getActionAction_0(),
+					$current);
+			}
+		)
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getActionAccess().getContentActivityContentParserRuleCall_1_0());
+				}
+				lv_content_1_0=ruleActivityContent
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getActionRule());
+					}
+					set(
+						$current,
+						"content",
+						lv_content_1_0,
+						"swt.most.statemachine.xtext.Parser.ActivityContent");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleTrigger
+entryRuleTrigger returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getTriggerRule()); }
+	iv_ruleTrigger=ruleTrigger
+	{ $current=$iv_ruleTrigger.current; }
+	EOF;
+
+// Rule Trigger
+ruleTrigger returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getTriggerAccess().getTriggerAction_0(),
+					$current);
+			}
+		)
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getTriggerAccess().getContentActivityContentParserRuleCall_1_0());
+				}
+				lv_content_1_0=ruleActivityContent
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getTriggerRule());
+					}
+					set(
+						$current,
+						"content",
+						lv_content_1_0,
+						"swt.most.statemachine.xtext.Parser.ActivityContent");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleGuard
+entryRuleGuard returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getGuardRule()); }
+	iv_ruleGuard=ruleGuard
+	{ $current=$iv_ruleGuard.current; }
+	EOF;
+
+// Rule Guard
+ruleGuard returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getGuardAccess().getGuardAction_0(),
+					$current);
+			}
+		)
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getGuardAccess().getContentEStringParserRuleCall_1_0());
+				}
+				lv_content_1_0=ruleEString
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getGuardRule());
+					}
+					set(
+						$current,
+						"content",
+						lv_content_1_0,
+						"swt.most.statemachine.xtext.Parser.EString");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleActivityContent
+entryRuleActivityContent returns [String current=null]:
+	{ newCompositeNode(grammarAccess.getActivityContentRule()); }
+	iv_ruleActivityContent=ruleActivityContent
+	{ $current=$iv_ruleActivityContent.current.getText(); }
+	EOF;
+
+// Rule ActivityContent
+ruleActivityContent returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		this_STRING_0=RULE_STRING
+		{
+			$current.merge(this_STRING_0);
+		}
+		{
+			newLeafNode(this_STRING_0, grammarAccess.getActivityContentAccess().getSTRINGTerminalRuleCall_0());
+		}
+		    |
+		this_ID_1=RULE_ID
+		{
+			$current.merge(this_ID_1);
+		}
+		{
+			newLeafNode(this_ID_1, grammarAccess.getActivityContentAccess().getIDTerminalRuleCall_1());
+		}
+		    |
+		this_CALL_2=RULE_CALL
+		{
+			$current.merge(this_CALL_2);
+		}
+		{
+			newLeafNode(this_CALL_2, grammarAccess.getActivityContentAccess().getCALLTerminalRuleCall_2());
+		}
+	)
+;
+
+// Entry rule entryRuleEString
+entryRuleEString returns [String current=null]:
+	{ newCompositeNode(grammarAccess.getEStringRule()); }
+	iv_ruleEString=ruleEString
+	{ $current=$iv_ruleEString.current.getText(); }
+	EOF;
+
+// Rule EString
+ruleEString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		this_STRING_0=RULE_STRING
+		{
+			$current.merge(this_STRING_0);
+		}
+		{
+			newLeafNode(this_STRING_0, grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0());
+		}
+		    |
+		this_ID_1=RULE_ID
+		{
+			$current.merge(this_ID_1);
+		}
+		{
+			newLeafNode(this_ID_1, grammarAccess.getEStringAccess().getIDTerminalRuleCall_1());
+		}
+		    |
+		this_INITIALSTATENAME_2=RULE_INITIALSTATENAME
+		{
+			$current.merge(this_INITIALSTATENAME_2);
+		}
+		{
+			newLeafNode(this_INITIALSTATENAME_2, grammarAccess.getEStringAccess().getINITIALSTATENAMETerminalRuleCall_2());
+		}
+		    |
+		this_FINALSTATENAME_3=RULE_FINALSTATENAME
+		{
+			$current.merge(this_FINALSTATENAME_3);
+		}
+		{
+			newLeafNode(this_FINALSTATENAME_3, grammarAccess.getEStringAccess().getFINALSTATENAMETerminalRuleCall_3());
+		}
+	)
+;
+
+RULE_INITIALSTATENAME : 'I_' (RULE_INT|RULE_STRING|RULE_ID)+;
+
+RULE_FINALSTATENAME : 'F_' (RULE_INT|RULE_STRING|RULE_ID)+;
+
+RULE_CALL : RULE_ID ('.' RULE_ID)+;
+
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+fragment RULE_INT : ('0'..'9')+;
+
+RULE_STRING : ('"' ('\\' .|~(('\\'|'"')))* '"'|'\'' ('\\' .|~(('\\'|'\'')))* '\'');
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+RULE_ANY_OTHER : .;
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.tokens b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.tokens
new file mode 100644
index 0000000000000000000000000000000000000000..cf878cfd1917f031ee6b9f20c47c84e5810c3e60
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParser.tokens
@@ -0,0 +1,38 @@
+'-'=23
+'->'=27
+'/'=26
+'StateMachine'=14
+'['=24
+']'=25
+'do:'=19
+'end'=21
+'entry:'=18
+'exit:'=20
+'start'=22
+'state'=17
+'{'=15
+'}'=16
+RULE_ANY_OTHER=13
+RULE_CALL=8
+RULE_FINALSTATENAME=4
+RULE_ID=7
+RULE_INITIALSTATENAME=5
+RULE_INT=9
+RULE_ML_COMMENT=10
+RULE_SL_COMMENT=11
+RULE_STRING=6
+RULE_WS=12
+T__14=14
+T__15=15
+T__16=16
+T__17=17
+T__18=18
+T__19=19
+T__20=20
+T__21=21
+T__22=22
+T__23=23
+T__24=24
+T__25=25
+T__26=26
+T__27=27
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserLexer.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserLexer.java
new file mode 100644
index 0000000000000000000000000000000000000000..962f130c670235cd4f543fde65ebcbd705417d7f
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserLexer.java
@@ -0,0 +1,1541 @@
+package swt.most.statemachine.xtext.parser.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.parser.antlr.Lexer;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalParserLexer extends Lexer {
+    public static final int RULE_INITIALSTATENAME=5;
+    public static final int RULE_STRING=6;
+    public static final int RULE_SL_COMMENT=11;
+    public static final int T__19=19;
+    public static final int T__15=15;
+    public static final int T__16=16;
+    public static final int T__17=17;
+    public static final int T__18=18;
+    public static final int T__14=14;
+    public static final int EOF=-1;
+    public static final int RULE_CALL=8;
+    public static final int RULE_ID=7;
+    public static final int RULE_WS=12;
+    public static final int RULE_ANY_OTHER=13;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int RULE_FINALSTATENAME=4;
+    public static final int RULE_INT=9;
+    public static final int T__22=22;
+    public static final int RULE_ML_COMMENT=10;
+    public static final int T__23=23;
+    public static final int T__24=24;
+    public static final int T__25=25;
+    public static final int T__20=20;
+    public static final int T__21=21;
+
+    // delegates
+    // delegators
+
+    public InternalParserLexer() {;} 
+    public InternalParserLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalParserLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "InternalParser.g"; }
+
+    // $ANTLR start "T__14"
+    public final void mT__14() throws RecognitionException {
+        try {
+            int _type = T__14;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:11:7: ( 'StateMachine' )
+            // InternalParser.g:11:9: 'StateMachine'
+            {
+            match("StateMachine"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__14"
+
+    // $ANTLR start "T__15"
+    public final void mT__15() throws RecognitionException {
+        try {
+            int _type = T__15;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:12:7: ( '{' )
+            // InternalParser.g:12:9: '{'
+            {
+            match('{'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__15"
+
+    // $ANTLR start "T__16"
+    public final void mT__16() throws RecognitionException {
+        try {
+            int _type = T__16;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:13:7: ( '}' )
+            // InternalParser.g:13:9: '}'
+            {
+            match('}'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__16"
+
+    // $ANTLR start "T__17"
+    public final void mT__17() throws RecognitionException {
+        try {
+            int _type = T__17;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:14:7: ( 'state' )
+            // InternalParser.g:14:9: 'state'
+            {
+            match("state"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__17"
+
+    // $ANTLR start "T__18"
+    public final void mT__18() throws RecognitionException {
+        try {
+            int _type = T__18;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:15:7: ( 'entry:' )
+            // InternalParser.g:15:9: 'entry:'
+            {
+            match("entry:"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__18"
+
+    // $ANTLR start "T__19"
+    public final void mT__19() throws RecognitionException {
+        try {
+            int _type = T__19;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:16:7: ( 'do:' )
+            // InternalParser.g:16:9: 'do:'
+            {
+            match("do:"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__19"
+
+    // $ANTLR start "T__20"
+    public final void mT__20() throws RecognitionException {
+        try {
+            int _type = T__20;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:17:7: ( 'exit:' )
+            // InternalParser.g:17:9: 'exit:'
+            {
+            match("exit:"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__20"
+
+    // $ANTLR start "T__21"
+    public final void mT__21() throws RecognitionException {
+        try {
+            int _type = T__21;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:18:7: ( 'end' )
+            // InternalParser.g:18:9: 'end'
+            {
+            match("end"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__21"
+
+    // $ANTLR start "T__22"
+    public final void mT__22() throws RecognitionException {
+        try {
+            int _type = T__22;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:19:7: ( 'start' )
+            // InternalParser.g:19:9: 'start'
+            {
+            match("start"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__22"
+
+    // $ANTLR start "T__23"
+    public final void mT__23() throws RecognitionException {
+        try {
+            int _type = T__23;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:20:7: ( '-' )
+            // InternalParser.g:20:9: '-'
+            {
+            match('-'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__23"
+
+    // $ANTLR start "T__24"
+    public final void mT__24() throws RecognitionException {
+        try {
+            int _type = T__24;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:21:7: ( '[' )
+            // InternalParser.g:21:9: '['
+            {
+            match('['); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__24"
+
+    // $ANTLR start "T__25"
+    public final void mT__25() throws RecognitionException {
+        try {
+            int _type = T__25;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:22:7: ( ']' )
+            // InternalParser.g:22:9: ']'
+            {
+            match(']'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__25"
+
+    // $ANTLR start "T__26"
+    public final void mT__26() throws RecognitionException {
+        try {
+            int _type = T__26;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:23:7: ( '/' )
+            // InternalParser.g:23:9: '/'
+            {
+            match('/'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__26"
+
+    // $ANTLR start "T__27"
+    public final void mT__27() throws RecognitionException {
+        try {
+            int _type = T__27;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:24:7: ( '->' )
+            // InternalParser.g:24:9: '->'
+            {
+            match("->"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__27"
+
+    // $ANTLR start "RULE_INITIALSTATENAME"
+    public final void mRULE_INITIALSTATENAME() throws RecognitionException {
+        try {
+            int _type = RULE_INITIALSTATENAME;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:796:23: ( 'I_' ( RULE_INT | RULE_STRING | RULE_ID )+ )
+            // InternalParser.g:796:25: 'I_' ( RULE_INT | RULE_STRING | RULE_ID )+
+            {
+            match("I_"); 
+
+            // InternalParser.g:796:30: ( RULE_INT | RULE_STRING | RULE_ID )+
+            int cnt1=0;
+            loop1:
+            do {
+                int alt1=4;
+                switch ( input.LA(1) ) {
+                case '0':
+                case '1':
+                case '2':
+                case '3':
+                case '4':
+                case '5':
+                case '6':
+                case '7':
+                case '8':
+                case '9':
+                    {
+                    alt1=1;
+                    }
+                    break;
+                case '\"':
+                case '\'':
+                    {
+                    alt1=2;
+                    }
+                    break;
+                case 'A':
+                case 'B':
+                case 'C':
+                case 'D':
+                case 'E':
+                case 'F':
+                case 'G':
+                case 'H':
+                case 'I':
+                case 'J':
+                case 'K':
+                case 'L':
+                case 'M':
+                case 'N':
+                case 'O':
+                case 'P':
+                case 'Q':
+                case 'R':
+                case 'S':
+                case 'T':
+                case 'U':
+                case 'V':
+                case 'W':
+                case 'X':
+                case 'Y':
+                case 'Z':
+                case '^':
+                case '_':
+                case 'a':
+                case 'b':
+                case 'c':
+                case 'd':
+                case 'e':
+                case 'f':
+                case 'g':
+                case 'h':
+                case 'i':
+                case 'j':
+                case 'k':
+                case 'l':
+                case 'm':
+                case 'n':
+                case 'o':
+                case 'p':
+                case 'q':
+                case 'r':
+                case 's':
+                case 't':
+                case 'u':
+                case 'v':
+                case 'w':
+                case 'x':
+                case 'y':
+                case 'z':
+                    {
+                    alt1=3;
+                    }
+                    break;
+
+                }
+
+                switch (alt1) {
+            	case 1 :
+            	    // InternalParser.g:796:31: RULE_INT
+            	    {
+            	    mRULE_INT(); 
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // InternalParser.g:796:40: RULE_STRING
+            	    {
+            	    mRULE_STRING(); 
+
+            	    }
+            	    break;
+            	case 3 :
+            	    // InternalParser.g:796:52: RULE_ID
+            	    {
+            	    mRULE_ID(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt1 >= 1 ) break loop1;
+                        EarlyExitException eee =
+                            new EarlyExitException(1, input);
+                        throw eee;
+                }
+                cnt1++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_INITIALSTATENAME"
+
+    // $ANTLR start "RULE_FINALSTATENAME"
+    public final void mRULE_FINALSTATENAME() throws RecognitionException {
+        try {
+            int _type = RULE_FINALSTATENAME;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:798:21: ( 'F_' ( RULE_INT | RULE_STRING | RULE_ID )+ )
+            // InternalParser.g:798:23: 'F_' ( RULE_INT | RULE_STRING | RULE_ID )+
+            {
+            match("F_"); 
+
+            // InternalParser.g:798:28: ( RULE_INT | RULE_STRING | RULE_ID )+
+            int cnt2=0;
+            loop2:
+            do {
+                int alt2=4;
+                switch ( input.LA(1) ) {
+                case '0':
+                case '1':
+                case '2':
+                case '3':
+                case '4':
+                case '5':
+                case '6':
+                case '7':
+                case '8':
+                case '9':
+                    {
+                    alt2=1;
+                    }
+                    break;
+                case '\"':
+                case '\'':
+                    {
+                    alt2=2;
+                    }
+                    break;
+                case 'A':
+                case 'B':
+                case 'C':
+                case 'D':
+                case 'E':
+                case 'F':
+                case 'G':
+                case 'H':
+                case 'I':
+                case 'J':
+                case 'K':
+                case 'L':
+                case 'M':
+                case 'N':
+                case 'O':
+                case 'P':
+                case 'Q':
+                case 'R':
+                case 'S':
+                case 'T':
+                case 'U':
+                case 'V':
+                case 'W':
+                case 'X':
+                case 'Y':
+                case 'Z':
+                case '^':
+                case '_':
+                case 'a':
+                case 'b':
+                case 'c':
+                case 'd':
+                case 'e':
+                case 'f':
+                case 'g':
+                case 'h':
+                case 'i':
+                case 'j':
+                case 'k':
+                case 'l':
+                case 'm':
+                case 'n':
+                case 'o':
+                case 'p':
+                case 'q':
+                case 'r':
+                case 's':
+                case 't':
+                case 'u':
+                case 'v':
+                case 'w':
+                case 'x':
+                case 'y':
+                case 'z':
+                    {
+                    alt2=3;
+                    }
+                    break;
+
+                }
+
+                switch (alt2) {
+            	case 1 :
+            	    // InternalParser.g:798:29: RULE_INT
+            	    {
+            	    mRULE_INT(); 
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // InternalParser.g:798:38: RULE_STRING
+            	    {
+            	    mRULE_STRING(); 
+
+            	    }
+            	    break;
+            	case 3 :
+            	    // InternalParser.g:798:50: RULE_ID
+            	    {
+            	    mRULE_ID(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt2 >= 1 ) break loop2;
+                        EarlyExitException eee =
+                            new EarlyExitException(2, input);
+                        throw eee;
+                }
+                cnt2++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_FINALSTATENAME"
+
+    // $ANTLR start "RULE_CALL"
+    public final void mRULE_CALL() throws RecognitionException {
+        try {
+            int _type = RULE_CALL;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:800:11: ( RULE_ID ( '.' RULE_ID )+ )
+            // InternalParser.g:800:13: RULE_ID ( '.' RULE_ID )+
+            {
+            mRULE_ID(); 
+            // InternalParser.g:800:21: ( '.' RULE_ID )+
+            int cnt3=0;
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( (LA3_0=='.') ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // InternalParser.g:800:22: '.' RULE_ID
+            	    {
+            	    match('.'); 
+            	    mRULE_ID(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt3 >= 1 ) break loop3;
+                        EarlyExitException eee =
+                            new EarlyExitException(3, input);
+                        throw eee;
+                }
+                cnt3++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_CALL"
+
+    // $ANTLR start "RULE_ID"
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:802:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // InternalParser.g:802:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // InternalParser.g:802:11: ( '^' )?
+            int alt4=2;
+            int LA4_0 = input.LA(1);
+
+            if ( (LA4_0=='^') ) {
+                alt4=1;
+            }
+            switch (alt4) {
+                case 1 :
+                    // InternalParser.g:802:11: '^'
+                    {
+                    match('^'); 
+
+                    }
+                    break;
+
+            }
+
+            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;}
+
+            // InternalParser.g:802:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            loop5:
+            do {
+                int alt5=2;
+                int LA5_0 = input.LA(1);
+
+                if ( ((LA5_0>='0' && LA5_0<='9')||(LA5_0>='A' && LA5_0<='Z')||LA5_0=='_'||(LA5_0>='a' && LA5_0<='z')) ) {
+                    alt5=1;
+                }
+
+
+                switch (alt5) {
+            	case 1 :
+            	    // InternalParser.g:
+            	    {
+            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop5;
+                }
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ID"
+
+    // $ANTLR start "RULE_INT"
+    public final void mRULE_INT() throws RecognitionException {
+        try {
+            // InternalParser.g:804:19: ( ( '0' .. '9' )+ )
+            // InternalParser.g:804:21: ( '0' .. '9' )+
+            {
+            // InternalParser.g:804:21: ( '0' .. '9' )+
+            int cnt6=0;
+            loop6:
+            do {
+                int alt6=2;
+                int LA6_0 = input.LA(1);
+
+                if ( ((LA6_0>='0' && LA6_0<='9')) ) {
+                    alt6=1;
+                }
+
+
+                switch (alt6) {
+            	case 1 :
+            	    // InternalParser.g:804:22: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt6 >= 1 ) break loop6;
+                        EarlyExitException eee =
+                            new EarlyExitException(6, input);
+                        throw eee;
+                }
+                cnt6++;
+            } while (true);
+
+
+            }
+
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_INT"
+
+    // $ANTLR start "RULE_STRING"
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:806:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // InternalParser.g:806:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // InternalParser.g:806:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( (LA9_0=='\"') ) {
+                alt9=1;
+            }
+            else if ( (LA9_0=='\'') ) {
+                alt9=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 9, 0, input);
+
+                throw nvae;
+            }
+            switch (alt9) {
+                case 1 :
+                    // InternalParser.g:806:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // InternalParser.g:806:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
+                    loop7:
+                    do {
+                        int alt7=3;
+                        int LA7_0 = input.LA(1);
+
+                        if ( (LA7_0=='\\') ) {
+                            alt7=1;
+                        }
+                        else if ( ((LA7_0>='\u0000' && LA7_0<='!')||(LA7_0>='#' && LA7_0<='[')||(LA7_0>=']' && LA7_0<='\uFFFF')) ) {
+                            alt7=2;
+                        }
+
+
+                        switch (alt7) {
+                    	case 1 :
+                    	    // InternalParser.g:806:21: '\\\\' .
+                    	    {
+                    	    match('\\'); 
+                    	    matchAny(); 
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // InternalParser.g:806:28: ~ ( ( '\\\\' | '\"' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop7;
+                        }
+                    } while (true);
+
+                    match('\"'); 
+
+                    }
+                    break;
+                case 2 :
+                    // InternalParser.g:806:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // InternalParser.g:806:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    loop8:
+                    do {
+                        int alt8=3;
+                        int LA8_0 = input.LA(1);
+
+                        if ( (LA8_0=='\\') ) {
+                            alt8=1;
+                        }
+                        else if ( ((LA8_0>='\u0000' && LA8_0<='&')||(LA8_0>='(' && LA8_0<='[')||(LA8_0>=']' && LA8_0<='\uFFFF')) ) {
+                            alt8=2;
+                        }
+
+
+                        switch (alt8) {
+                    	case 1 :
+                    	    // InternalParser.g:806:54: '\\\\' .
+                    	    {
+                    	    match('\\'); 
+                    	    matchAny(); 
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // InternalParser.g:806:61: ~ ( ( '\\\\' | '\\'' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop8;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_STRING"
+
+    // $ANTLR start "RULE_ML_COMMENT"
+    public final void mRULE_ML_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_ML_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:808:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // InternalParser.g:808:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // InternalParser.g:808:24: ( options {greedy=false; } : . )*
+            loop10:
+            do {
+                int alt10=2;
+                int LA10_0 = input.LA(1);
+
+                if ( (LA10_0=='*') ) {
+                    int LA10_1 = input.LA(2);
+
+                    if ( (LA10_1=='/') ) {
+                        alt10=2;
+                    }
+                    else if ( ((LA10_1>='\u0000' && LA10_1<='.')||(LA10_1>='0' && LA10_1<='\uFFFF')) ) {
+                        alt10=1;
+                    }
+
+
+                }
+                else if ( ((LA10_0>='\u0000' && LA10_0<=')')||(LA10_0>='+' && LA10_0<='\uFFFF')) ) {
+                    alt10=1;
+                }
+
+
+                switch (alt10) {
+            	case 1 :
+            	    // InternalParser.g:808:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop10;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ML_COMMENT"
+
+    // $ANTLR start "RULE_SL_COMMENT"
+    public final void mRULE_SL_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_SL_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:810:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalParser.g:810:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // InternalParser.g:810:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( ((LA11_0>='\u0000' && LA11_0<='\t')||(LA11_0>='\u000B' && LA11_0<='\f')||(LA11_0>='\u000E' && LA11_0<='\uFFFF')) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // InternalParser.g:810:24: ~ ( ( '\\n' | '\\r' ) )
+            	    {
+            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop11;
+                }
+            } while (true);
+
+            // InternalParser.g:810:40: ( ( '\\r' )? '\\n' )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0=='\n'||LA13_0=='\r') ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // InternalParser.g:810:41: ( '\\r' )? '\\n'
+                    {
+                    // InternalParser.g:810:41: ( '\\r' )?
+                    int alt12=2;
+                    int LA12_0 = input.LA(1);
+
+                    if ( (LA12_0=='\r') ) {
+                        alt12=1;
+                    }
+                    switch (alt12) {
+                        case 1 :
+                            // InternalParser.g:810:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_SL_COMMENT"
+
+    // $ANTLR start "RULE_WS"
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:812:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // InternalParser.g:812:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // InternalParser.g:812:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            int cnt14=0;
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( ((LA14_0>='\t' && LA14_0<='\n')||LA14_0=='\r'||LA14_0==' ') ) {
+                    alt14=1;
+                }
+
+
+                switch (alt14) {
+            	case 1 :
+            	    // InternalParser.g:
+            	    {
+            	    if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt14 >= 1 ) break loop14;
+                        EarlyExitException eee =
+                            new EarlyExitException(14, input);
+                        throw eee;
+                }
+                cnt14++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_WS"
+
+    // $ANTLR start "RULE_ANY_OTHER"
+    public final void mRULE_ANY_OTHER() throws RecognitionException {
+        try {
+            int _type = RULE_ANY_OTHER;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalParser.g:814:16: ( . )
+            // InternalParser.g:814:18: .
+            {
+            matchAny(); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ANY_OTHER"
+
+    public void mTokens() throws RecognitionException {
+        // InternalParser.g:1:8: ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | RULE_INITIALSTATENAME | RULE_FINALSTATENAME | RULE_CALL | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt15=23;
+        alt15 = dfa15.predict(input);
+        switch (alt15) {
+            case 1 :
+                // InternalParser.g:1:10: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 2 :
+                // InternalParser.g:1:16: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 3 :
+                // InternalParser.g:1:22: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 4 :
+                // InternalParser.g:1:28: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 5 :
+                // InternalParser.g:1:34: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 6 :
+                // InternalParser.g:1:40: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 7 :
+                // InternalParser.g:1:46: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 8 :
+                // InternalParser.g:1:52: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 9 :
+                // InternalParser.g:1:58: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 10 :
+                // InternalParser.g:1:64: T__23
+                {
+                mT__23(); 
+
+                }
+                break;
+            case 11 :
+                // InternalParser.g:1:70: T__24
+                {
+                mT__24(); 
+
+                }
+                break;
+            case 12 :
+                // InternalParser.g:1:76: T__25
+                {
+                mT__25(); 
+
+                }
+                break;
+            case 13 :
+                // InternalParser.g:1:82: T__26
+                {
+                mT__26(); 
+
+                }
+                break;
+            case 14 :
+                // InternalParser.g:1:88: T__27
+                {
+                mT__27(); 
+
+                }
+                break;
+            case 15 :
+                // InternalParser.g:1:94: RULE_INITIALSTATENAME
+                {
+                mRULE_INITIALSTATENAME(); 
+
+                }
+                break;
+            case 16 :
+                // InternalParser.g:1:116: RULE_FINALSTATENAME
+                {
+                mRULE_FINALSTATENAME(); 
+
+                }
+                break;
+            case 17 :
+                // InternalParser.g:1:136: RULE_CALL
+                {
+                mRULE_CALL(); 
+
+                }
+                break;
+            case 18 :
+                // InternalParser.g:1:146: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 19 :
+                // InternalParser.g:1:154: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 20 :
+                // InternalParser.g:1:166: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 21 :
+                // InternalParser.g:1:182: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 22 :
+                // InternalParser.g:1:198: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 23 :
+                // InternalParser.g:1:206: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA15 dfa15 = new DFA15(this);
+    static final String DFA15_eotS =
+        "\1\uffff\1\25\2\uffff\3\25\1\36\2\uffff\1\43\2\25\1\22\1\25\2\22\2\uffff\2\25\4\uffff\4\25\7\uffff\3\25\2\uffff\3\25\1\71\1\25\1\uffff\2\61\1\uffff\1\63\1\uffff\1\63\4\25\1\uffff\1\25\2\61\2\63\1\25\1\105\1\106\1\25\1\uffff\1\25\3\uffff\5\25\1\116\1\uffff";
+    static final String DFA15_eofS =
+        "\117\uffff";
+    static final String DFA15_minS =
+        "\1\0\1\56\2\uffff\3\56\1\76\2\uffff\1\52\2\56\1\101\1\56\2\0\2\uffff\2\56\4\uffff\4\56\7\uffff\2\42\1\56\2\uffff\5\56\1\uffff\2\56\1\uffff\1\56\1\uffff\5\56\1\uffff\11\56\1\uffff\1\56\3\uffff\6\56\1\uffff";
+    static final String DFA15_maxS =
+        "\1\uffff\1\172\2\uffff\3\172\1\76\2\uffff\1\57\4\172\2\uffff\2\uffff\2\172\4\uffff\4\172\7\uffff\3\172\2\uffff\5\172\1\uffff\2\172\1\uffff\1\172\1\uffff\5\172\1\uffff\11\172\1\uffff\1\172\3\uffff\6\172\1\uffff";
+    static final String DFA15_acceptS =
+        "\2\uffff\1\2\1\3\4\uffff\1\13\1\14\7\uffff\1\26\1\27\2\uffff\1\22\1\21\1\2\1\3\4\uffff\1\16\1\12\1\13\1\14\1\24\1\25\1\15\3\uffff\1\23\1\26\5\uffff\1\6\2\uffff\1\17\1\uffff\1\20\5\uffff\1\10\11\uffff\1\7\1\uffff\1\4\1\11\1\5\6\uffff\1\1";
+    static final String DFA15_specialS =
+        "\1\0\16\uffff\1\1\1\2\76\uffff}>";
+    static final String[] DFA15_transitionS = {
+            "\11\22\2\21\2\22\1\21\22\22\1\21\1\22\1\17\4\22\1\20\5\22\1\7\1\22\1\12\21\22\5\16\1\14\2\16\1\13\11\16\1\1\7\16\1\10\1\22\1\11\1\15\1\16\1\22\3\16\1\6\1\5\15\16\1\4\7\16\1\2\1\22\1\3\uff82\22",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\23\24\1\23\6\24",
+            "",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\23\24\1\31\6\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\15\24\1\32\11\24\1\33\2\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\16\24\1\34\13\24",
+            "\1\35",
+            "",
+            "",
+            "\1\41\4\uffff\1\42",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\44\1\uffff\32\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\45\1\uffff\32\24",
+            "\32\46\4\uffff\1\46\1\uffff\32\46",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "\0\47",
+            "\0\47",
+            "",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\1\51\31\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "",
+            "",
+            "",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\1\52\31\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\3\24\1\54\17\24\1\53\6\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\10\24\1\55\21\24",
+            "\1\26\1\uffff\12\24\1\56\6\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\61\4\uffff\1\61\6\uffff\1\26\1\uffff\12\57\7\uffff\32\60\3\uffff\1\61\1\60\1\uffff\32\60",
+            "\1\63\4\uffff\1\63\6\uffff\1\26\1\uffff\12\62\7\uffff\32\64\3\uffff\1\63\1\64\1\uffff\32\64",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\23\24\1\65\6\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\21\24\1\67\1\24\1\66\6\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\21\24\1\70\10\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\23\24\1\72\6\24",
+            "",
+            "\1\26\1\uffff\12\57\7\uffff\32\60\4\uffff\1\60\1\uffff\32\60",
+            "\1\26\1\uffff\12\73\7\uffff\32\74\4\uffff\1\74\1\uffff\32\74",
+            "",
+            "\1\26\1\uffff\12\62\7\uffff\32\64\4\uffff\1\64\1\uffff\32\64",
+            "",
+            "\1\26\1\uffff\12\75\7\uffff\32\76\4\uffff\1\76\1\uffff\32\76",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\4\24\1\77\25\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\4\24\1\100\25\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\23\24\1\101\6\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\30\24\1\102\1\24",
+            "",
+            "\1\26\1\uffff\12\24\1\103\6\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "\1\26\1\uffff\12\73\7\uffff\32\74\4\uffff\1\74\1\uffff\32\74",
+            "\1\26\1\uffff\12\73\7\uffff\32\74\4\uffff\1\74\1\uffff\32\74",
+            "\1\26\1\uffff\12\75\7\uffff\32\76\4\uffff\1\76\1\uffff\32\76",
+            "\1\26\1\uffff\12\75\7\uffff\32\76\4\uffff\1\76\1\uffff\32\76",
+            "\1\26\1\uffff\12\24\7\uffff\14\24\1\104\15\24\4\uffff\1\24\1\uffff\32\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "\1\26\1\uffff\12\24\1\107\6\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\1\110\31\24",
+            "",
+            "",
+            "",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\2\24\1\111\27\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\7\24\1\112\22\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\10\24\1\113\21\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\15\24\1\114\14\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\4\24\1\115\25\24",
+            "\1\26\1\uffff\12\24\7\uffff\32\24\4\uffff\1\24\1\uffff\32\24",
+            ""
+    };
+
+    static final short[] DFA15_eot = DFA.unpackEncodedString(DFA15_eotS);
+    static final short[] DFA15_eof = DFA.unpackEncodedString(DFA15_eofS);
+    static final char[] DFA15_min = DFA.unpackEncodedStringToUnsignedChars(DFA15_minS);
+    static final char[] DFA15_max = DFA.unpackEncodedStringToUnsignedChars(DFA15_maxS);
+    static final short[] DFA15_accept = DFA.unpackEncodedString(DFA15_acceptS);
+    static final short[] DFA15_special = DFA.unpackEncodedString(DFA15_specialS);
+    static final short[][] DFA15_transition;
+
+    static {
+        int numStates = DFA15_transitionS.length;
+        DFA15_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA15_transition[i] = DFA.unpackEncodedString(DFA15_transitionS[i]);
+        }
+    }
+
+    class DFA15 extends DFA {
+
+        public DFA15(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 15;
+            this.eot = DFA15_eot;
+            this.eof = DFA15_eof;
+            this.min = DFA15_min;
+            this.max = DFA15_max;
+            this.accept = DFA15_accept;
+            this.special = DFA15_special;
+            this.transition = DFA15_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | RULE_INITIALSTATENAME | RULE_FINALSTATENAME | RULE_CALL | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            IntStream input = _input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA15_0 = input.LA(1);
+
+                        s = -1;
+                        if ( (LA15_0=='S') ) {s = 1;}
+
+                        else if ( (LA15_0=='{') ) {s = 2;}
+
+                        else if ( (LA15_0=='}') ) {s = 3;}
+
+                        else if ( (LA15_0=='s') ) {s = 4;}
+
+                        else if ( (LA15_0=='e') ) {s = 5;}
+
+                        else if ( (LA15_0=='d') ) {s = 6;}
+
+                        else if ( (LA15_0=='-') ) {s = 7;}
+
+                        else if ( (LA15_0=='[') ) {s = 8;}
+
+                        else if ( (LA15_0==']') ) {s = 9;}
+
+                        else if ( (LA15_0=='/') ) {s = 10;}
+
+                        else if ( (LA15_0=='I') ) {s = 11;}
+
+                        else if ( (LA15_0=='F') ) {s = 12;}
+
+                        else if ( (LA15_0=='^') ) {s = 13;}
+
+                        else if ( ((LA15_0>='A' && LA15_0<='E')||(LA15_0>='G' && LA15_0<='H')||(LA15_0>='J' && LA15_0<='R')||(LA15_0>='T' && LA15_0<='Z')||LA15_0=='_'||(LA15_0>='a' && LA15_0<='c')||(LA15_0>='f' && LA15_0<='r')||(LA15_0>='t' && LA15_0<='z')) ) {s = 14;}
+
+                        else if ( (LA15_0=='\"') ) {s = 15;}
+
+                        else if ( (LA15_0=='\'') ) {s = 16;}
+
+                        else if ( ((LA15_0>='\t' && LA15_0<='\n')||LA15_0=='\r'||LA15_0==' ') ) {s = 17;}
+
+                        else if ( ((LA15_0>='\u0000' && LA15_0<='\b')||(LA15_0>='\u000B' && LA15_0<='\f')||(LA15_0>='\u000E' && LA15_0<='\u001F')||LA15_0=='!'||(LA15_0>='#' && LA15_0<='&')||(LA15_0>='(' && LA15_0<=',')||LA15_0=='.'||(LA15_0>='0' && LA15_0<='@')||LA15_0=='\\'||LA15_0=='`'||LA15_0=='|'||(LA15_0>='~' && LA15_0<='\uFFFF')) ) {s = 18;}
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA15_15 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA15_15>='\u0000' && LA15_15<='\uFFFF')) ) {s = 39;}
+
+                        else s = 18;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA15_16 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA15_16>='\u0000' && LA15_16<='\uFFFF')) ) {s = 39;}
+
+                        else s = 18;
+
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 15, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+ 
+
+}
\ No newline at end of file
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserParser.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..c874516da98fa8f02e96d6567cf52f9870e8678a
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/parser/antlr/internal/InternalParserParser.java
@@ -0,0 +1,1942 @@
+package swt.most.statemachine.xtext.parser.antlr.internal;
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalParserParser extends AbstractInternalAntlrParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_FINALSTATENAME", "RULE_INITIALSTATENAME", "RULE_STRING", "RULE_ID", "RULE_CALL", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'StateMachine'", "'{'", "'}'", "'state'", "'entry:'", "'do:'", "'exit:'", "'end'", "'start'", "'-'", "'['", "']'", "'/'", "'->'"
+    };
+    public static final int RULE_INITIALSTATENAME=5;
+    public static final int RULE_STRING=6;
+    public static final int RULE_SL_COMMENT=11;
+    public static final int T__19=19;
+    public static final int T__15=15;
+    public static final int T__16=16;
+    public static final int T__17=17;
+    public static final int T__18=18;
+    public static final int T__14=14;
+    public static final int EOF=-1;
+    public static final int RULE_CALL=8;
+    public static final int RULE_ID=7;
+    public static final int RULE_WS=12;
+    public static final int RULE_ANY_OTHER=13;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int RULE_FINALSTATENAME=4;
+    public static final int RULE_INT=9;
+    public static final int T__22=22;
+    public static final int RULE_ML_COMMENT=10;
+    public static final int T__23=23;
+    public static final int T__24=24;
+    public static final int T__25=25;
+    public static final int T__20=20;
+    public static final int T__21=21;
+
+    // delegates
+    // delegators
+
+
+        public InternalParserParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalParserParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalParserParser.tokenNames; }
+    public String getGrammarFileName() { return "InternalParser.g"; }
+
+
+
+     	private ParserGrammarAccess grammarAccess;
+
+        public InternalParserParser(TokenStream input, ParserGrammarAccess grammarAccess) {
+            this(input);
+            this.grammarAccess = grammarAccess;
+            registerRules(grammarAccess.getGrammar());
+        }
+
+        @Override
+        protected String getFirstRuleName() {
+        	return "StateMachine";
+       	}
+
+       	@Override
+       	protected ParserGrammarAccess getGrammarAccess() {
+       		return grammarAccess;
+       	}
+
+
+
+
+    // $ANTLR start "entryRuleStateMachine"
+    // InternalParser.g:64:1: entryRuleStateMachine returns [EObject current=null] : iv_ruleStateMachine= ruleStateMachine EOF ;
+    public final EObject entryRuleStateMachine() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleStateMachine = null;
+
+
+        try {
+            // InternalParser.g:64:53: (iv_ruleStateMachine= ruleStateMachine EOF )
+            // InternalParser.g:65:2: iv_ruleStateMachine= ruleStateMachine EOF
+            {
+             newCompositeNode(grammarAccess.getStateMachineRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleStateMachine=ruleStateMachine();
+
+            state._fsp--;
+
+             current =iv_ruleStateMachine; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleStateMachine"
+
+
+    // $ANTLR start "ruleStateMachine"
+    // InternalParser.g:71:1: ruleStateMachine returns [EObject current=null] : ( () otherlv_1= 'StateMachine' ( (lv_name_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_initialstate_4_0= ruleInitialState ) ) ( ( (lv_states_5_0= ruleNormalState ) ) | ( (lv_finalstates_6_0= ruleFinalState ) ) | ( (lv_transitions_7_0= ruleTransition ) ) )* otherlv_8= '}' ) ;
+    public final EObject ruleStateMachine() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        Token otherlv_8=null;
+        AntlrDatatypeRuleToken lv_name_2_0 = null;
+
+        EObject lv_initialstate_4_0 = null;
+
+        EObject lv_states_5_0 = null;
+
+        EObject lv_finalstates_6_0 = null;
+
+        EObject lv_transitions_7_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalParser.g:77:2: ( ( () otherlv_1= 'StateMachine' ( (lv_name_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_initialstate_4_0= ruleInitialState ) ) ( ( (lv_states_5_0= ruleNormalState ) ) | ( (lv_finalstates_6_0= ruleFinalState ) ) | ( (lv_transitions_7_0= ruleTransition ) ) )* otherlv_8= '}' ) )
+            // InternalParser.g:78:2: ( () otherlv_1= 'StateMachine' ( (lv_name_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_initialstate_4_0= ruleInitialState ) ) ( ( (lv_states_5_0= ruleNormalState ) ) | ( (lv_finalstates_6_0= ruleFinalState ) ) | ( (lv_transitions_7_0= ruleTransition ) ) )* otherlv_8= '}' )
+            {
+            // InternalParser.g:78:2: ( () otherlv_1= 'StateMachine' ( (lv_name_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_initialstate_4_0= ruleInitialState ) ) ( ( (lv_states_5_0= ruleNormalState ) ) | ( (lv_finalstates_6_0= ruleFinalState ) ) | ( (lv_transitions_7_0= ruleTransition ) ) )* otherlv_8= '}' )
+            // InternalParser.g:79:3: () otherlv_1= 'StateMachine' ( (lv_name_2_0= ruleEString ) ) otherlv_3= '{' ( (lv_initialstate_4_0= ruleInitialState ) ) ( ( (lv_states_5_0= ruleNormalState ) ) | ( (lv_finalstates_6_0= ruleFinalState ) ) | ( (lv_transitions_7_0= ruleTransition ) ) )* otherlv_8= '}'
+            {
+            // InternalParser.g:79:3: ()
+            // InternalParser.g:80:4: 
+            {
+
+            				current = forceCreateModelElement(
+            					grammarAccess.getStateMachineAccess().getStateMachineAction_0(),
+            					current);
+            			
+
+            }
+
+            otherlv_1=(Token)match(input,14,FOLLOW_3); 
+
+            			newLeafNode(otherlv_1, grammarAccess.getStateMachineAccess().getStateMachineKeyword_1());
+            		
+            // InternalParser.g:90:3: ( (lv_name_2_0= ruleEString ) )
+            // InternalParser.g:91:4: (lv_name_2_0= ruleEString )
+            {
+            // InternalParser.g:91:4: (lv_name_2_0= ruleEString )
+            // InternalParser.g:92:5: lv_name_2_0= ruleEString
+            {
+
+            					newCompositeNode(grammarAccess.getStateMachineAccess().getNameEStringParserRuleCall_2_0());
+            				
+            pushFollow(FOLLOW_4);
+            lv_name_2_0=ruleEString();
+
+            state._fsp--;
+
+
+            					if (current==null) {
+            						current = createModelElementForParent(grammarAccess.getStateMachineRule());
+            					}
+            					set(
+            						current,
+            						"name",
+            						lv_name_2_0,
+            						"swt.most.statemachine.xtext.Parser.EString");
+            					afterParserOrEnumRuleCall();
+            				
+
+            }
+
+
+            }
+
+            otherlv_3=(Token)match(input,15,FOLLOW_5); 
+
+            			newLeafNode(otherlv_3, grammarAccess.getStateMachineAccess().getLeftCurlyBracketKeyword_3());
+            		
+            // InternalParser.g:113:3: ( (lv_initialstate_4_0= ruleInitialState ) )
+            // InternalParser.g:114:4: (lv_initialstate_4_0= ruleInitialState )
+            {
+            // InternalParser.g:114:4: (lv_initialstate_4_0= ruleInitialState )
+            // InternalParser.g:115:5: lv_initialstate_4_0= ruleInitialState
+            {
+
+            					newCompositeNode(grammarAccess.getStateMachineAccess().getInitialstateInitialStateParserRuleCall_4_0());
+            				
+            pushFollow(FOLLOW_6);
+            lv_initialstate_4_0=ruleInitialState();
+
+            state._fsp--;
+
+
+            					if (current==null) {
+            						current = createModelElementForParent(grammarAccess.getStateMachineRule());
+            					}
+            					set(
+            						current,
+            						"initialstate",
+            						lv_initialstate_4_0,
+            						"swt.most.statemachine.xtext.Parser.InitialState");
+            					afterParserOrEnumRuleCall();
+            				
+
+            }
+
+
+            }
+
+            // InternalParser.g:132:3: ( ( (lv_states_5_0= ruleNormalState ) ) | ( (lv_finalstates_6_0= ruleFinalState ) ) | ( (lv_transitions_7_0= ruleTransition ) ) )*
+            loop1:
+            do {
+                int alt1=4;
+                switch ( input.LA(1) ) {
+                case 17:
+                    {
+                    alt1=1;
+                    }
+                    break;
+                case 21:
+                    {
+                    alt1=2;
+                    }
+                    break;
+                case RULE_FINALSTATENAME:
+                case RULE_INITIALSTATENAME:
+                case RULE_STRING:
+                case RULE_ID:
+                    {
+                    alt1=3;
+                    }
+                    break;
+
+                }
+
+                switch (alt1) {
+            	case 1 :
+            	    // InternalParser.g:133:4: ( (lv_states_5_0= ruleNormalState ) )
+            	    {
+            	    // InternalParser.g:133:4: ( (lv_states_5_0= ruleNormalState ) )
+            	    // InternalParser.g:134:5: (lv_states_5_0= ruleNormalState )
+            	    {
+            	    // InternalParser.g:134:5: (lv_states_5_0= ruleNormalState )
+            	    // InternalParser.g:135:6: lv_states_5_0= ruleNormalState
+            	    {
+
+            	    						newCompositeNode(grammarAccess.getStateMachineAccess().getStatesNormalStateParserRuleCall_5_0_0());
+            	    					
+            	    pushFollow(FOLLOW_6);
+            	    lv_states_5_0=ruleNormalState();
+
+            	    state._fsp--;
+
+
+            	    						if (current==null) {
+            	    							current = createModelElementForParent(grammarAccess.getStateMachineRule());
+            	    						}
+            	    						add(
+            	    							current,
+            	    							"states",
+            	    							lv_states_5_0,
+            	    							"swt.most.statemachine.xtext.Parser.NormalState");
+            	    						afterParserOrEnumRuleCall();
+            	    					
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // InternalParser.g:153:4: ( (lv_finalstates_6_0= ruleFinalState ) )
+            	    {
+            	    // InternalParser.g:153:4: ( (lv_finalstates_6_0= ruleFinalState ) )
+            	    // InternalParser.g:154:5: (lv_finalstates_6_0= ruleFinalState )
+            	    {
+            	    // InternalParser.g:154:5: (lv_finalstates_6_0= ruleFinalState )
+            	    // InternalParser.g:155:6: lv_finalstates_6_0= ruleFinalState
+            	    {
+
+            	    						newCompositeNode(grammarAccess.getStateMachineAccess().getFinalstatesFinalStateParserRuleCall_5_1_0());
+            	    					
+            	    pushFollow(FOLLOW_6);
+            	    lv_finalstates_6_0=ruleFinalState();
+
+            	    state._fsp--;
+
+
+            	    						if (current==null) {
+            	    							current = createModelElementForParent(grammarAccess.getStateMachineRule());
+            	    						}
+            	    						add(
+            	    							current,
+            	    							"finalstates",
+            	    							lv_finalstates_6_0,
+            	    							"swt.most.statemachine.xtext.Parser.FinalState");
+            	    						afterParserOrEnumRuleCall();
+            	    					
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+            	case 3 :
+            	    // InternalParser.g:173:4: ( (lv_transitions_7_0= ruleTransition ) )
+            	    {
+            	    // InternalParser.g:173:4: ( (lv_transitions_7_0= ruleTransition ) )
+            	    // InternalParser.g:174:5: (lv_transitions_7_0= ruleTransition )
+            	    {
+            	    // InternalParser.g:174:5: (lv_transitions_7_0= ruleTransition )
+            	    // InternalParser.g:175:6: lv_transitions_7_0= ruleTransition
+            	    {
+
+            	    						newCompositeNode(grammarAccess.getStateMachineAccess().getTransitionsTransitionParserRuleCall_5_2_0());
+            	    					
+            	    pushFollow(FOLLOW_6);
+            	    lv_transitions_7_0=ruleTransition();
+
+            	    state._fsp--;
+
+
+            	    						if (current==null) {
+            	    							current = createModelElementForParent(grammarAccess.getStateMachineRule());
+            	    						}
+            	    						add(
+            	    							current,
+            	    							"transitions",
+            	    							lv_transitions_7_0,
+            	    							"swt.most.statemachine.xtext.Parser.Transition");
+            	    						afterParserOrEnumRuleCall();
+            	    					
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop1;
+                }
+            } while (true);
+
+            otherlv_8=(Token)match(input,16,FOLLOW_2); 
+
+            			newLeafNode(otherlv_8, grammarAccess.getStateMachineAccess().getRightCurlyBracketKeyword_6());
+            		
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleStateMachine"
+
+
+    // $ANTLR start "entryRuleNormalState"
+    // InternalParser.g:201:1: entryRuleNormalState returns [EObject current=null] : iv_ruleNormalState= ruleNormalState EOF ;
+    public final EObject entryRuleNormalState() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleNormalState = null;
+
+
+        try {
+            // InternalParser.g:201:52: (iv_ruleNormalState= ruleNormalState EOF )
+            // InternalParser.g:202:2: iv_ruleNormalState= ruleNormalState EOF
+            {
+             newCompositeNode(grammarAccess.getNormalStateRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleNormalState=ruleNormalState();
+
+            state._fsp--;
+
+             current =iv_ruleNormalState; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleNormalState"
+
+
+    // $ANTLR start "ruleNormalState"
+    // InternalParser.g:208:1: ruleNormalState returns [EObject current=null] : ( () otherlv_1= 'state' ( (lv_name_2_0= ruleEString ) ) (otherlv_3= '{' (otherlv_4= 'entry:' ( (lv_entry__5_0= ruleAction ) ) )? (otherlv_6= 'do:' ( (lv_do__7_0= ruleAction ) ) )? (otherlv_8= 'exit:' ( (lv_exit__9_0= ruleAction ) ) )? otherlv_10= '}' )? ) ;
+    public final EObject ruleNormalState() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        Token otherlv_4=null;
+        Token otherlv_6=null;
+        Token otherlv_8=null;
+        Token otherlv_10=null;
+        AntlrDatatypeRuleToken lv_name_2_0 = null;
+
+        EObject lv_entry__5_0 = null;
+
+        EObject lv_do__7_0 = null;
+
+        EObject lv_exit__9_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalParser.g:214:2: ( ( () otherlv_1= 'state' ( (lv_name_2_0= ruleEString ) ) (otherlv_3= '{' (otherlv_4= 'entry:' ( (lv_entry__5_0= ruleAction ) ) )? (otherlv_6= 'do:' ( (lv_do__7_0= ruleAction ) ) )? (otherlv_8= 'exit:' ( (lv_exit__9_0= ruleAction ) ) )? otherlv_10= '}' )? ) )
+            // InternalParser.g:215:2: ( () otherlv_1= 'state' ( (lv_name_2_0= ruleEString ) ) (otherlv_3= '{' (otherlv_4= 'entry:' ( (lv_entry__5_0= ruleAction ) ) )? (otherlv_6= 'do:' ( (lv_do__7_0= ruleAction ) ) )? (otherlv_8= 'exit:' ( (lv_exit__9_0= ruleAction ) ) )? otherlv_10= '}' )? )
+            {
+            // InternalParser.g:215:2: ( () otherlv_1= 'state' ( (lv_name_2_0= ruleEString ) ) (otherlv_3= '{' (otherlv_4= 'entry:' ( (lv_entry__5_0= ruleAction ) ) )? (otherlv_6= 'do:' ( (lv_do__7_0= ruleAction ) ) )? (otherlv_8= 'exit:' ( (lv_exit__9_0= ruleAction ) ) )? otherlv_10= '}' )? )
+            // InternalParser.g:216:3: () otherlv_1= 'state' ( (lv_name_2_0= ruleEString ) ) (otherlv_3= '{' (otherlv_4= 'entry:' ( (lv_entry__5_0= ruleAction ) ) )? (otherlv_6= 'do:' ( (lv_do__7_0= ruleAction ) ) )? (otherlv_8= 'exit:' ( (lv_exit__9_0= ruleAction ) ) )? otherlv_10= '}' )?
+            {
+            // InternalParser.g:216:3: ()
+            // InternalParser.g:217:4: 
+            {
+
+            				current = forceCreateModelElement(
+            					grammarAccess.getNormalStateAccess().getNormalStateAction_0(),
+            					current);
+            			
+
+            }
+
+            otherlv_1=(Token)match(input,17,FOLLOW_3); 
+
+            			newLeafNode(otherlv_1, grammarAccess.getNormalStateAccess().getStateKeyword_1());
+            		
+            // InternalParser.g:227:3: ( (lv_name_2_0= ruleEString ) )
+            // InternalParser.g:228:4: (lv_name_2_0= ruleEString )
+            {
+            // InternalParser.g:228:4: (lv_name_2_0= ruleEString )
+            // InternalParser.g:229:5: lv_name_2_0= ruleEString
+            {
+
+            					newCompositeNode(grammarAccess.getNormalStateAccess().getNameEStringParserRuleCall_2_0());
+            				
+            pushFollow(FOLLOW_7);
+            lv_name_2_0=ruleEString();
+
+            state._fsp--;
+
+
+            					if (current==null) {
+            						current = createModelElementForParent(grammarAccess.getNormalStateRule());
+            					}
+            					set(
+            						current,
+            						"name",
+            						lv_name_2_0,
+            						"swt.most.statemachine.xtext.Parser.EString");
+            					afterParserOrEnumRuleCall();
+            				
+
+            }
+
+
+            }
+
+            // InternalParser.g:246:3: (otherlv_3= '{' (otherlv_4= 'entry:' ( (lv_entry__5_0= ruleAction ) ) )? (otherlv_6= 'do:' ( (lv_do__7_0= ruleAction ) ) )? (otherlv_8= 'exit:' ( (lv_exit__9_0= ruleAction ) ) )? otherlv_10= '}' )?
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0==15) ) {
+                alt5=1;
+            }
+            switch (alt5) {
+                case 1 :
+                    // InternalParser.g:247:4: otherlv_3= '{' (otherlv_4= 'entry:' ( (lv_entry__5_0= ruleAction ) ) )? (otherlv_6= 'do:' ( (lv_do__7_0= ruleAction ) ) )? (otherlv_8= 'exit:' ( (lv_exit__9_0= ruleAction ) ) )? otherlv_10= '}'
+                    {
+                    otherlv_3=(Token)match(input,15,FOLLOW_8); 
+
+                    				newLeafNode(otherlv_3, grammarAccess.getNormalStateAccess().getLeftCurlyBracketKeyword_3_0());
+                    			
+                    // InternalParser.g:251:4: (otherlv_4= 'entry:' ( (lv_entry__5_0= ruleAction ) ) )?
+                    int alt2=2;
+                    int LA2_0 = input.LA(1);
+
+                    if ( (LA2_0==18) ) {
+                        alt2=1;
+                    }
+                    switch (alt2) {
+                        case 1 :
+                            // InternalParser.g:252:5: otherlv_4= 'entry:' ( (lv_entry__5_0= ruleAction ) )
+                            {
+                            otherlv_4=(Token)match(input,18,FOLLOW_9); 
+
+                            					newLeafNode(otherlv_4, grammarAccess.getNormalStateAccess().getEntryKeyword_3_1_0());
+                            				
+                            // InternalParser.g:256:5: ( (lv_entry__5_0= ruleAction ) )
+                            // InternalParser.g:257:6: (lv_entry__5_0= ruleAction )
+                            {
+                            // InternalParser.g:257:6: (lv_entry__5_0= ruleAction )
+                            // InternalParser.g:258:7: lv_entry__5_0= ruleAction
+                            {
+
+                            							newCompositeNode(grammarAccess.getNormalStateAccess().getEntry_ActionParserRuleCall_3_1_1_0());
+                            						
+                            pushFollow(FOLLOW_10);
+                            lv_entry__5_0=ruleAction();
+
+                            state._fsp--;
+
+
+                            							if (current==null) {
+                            								current = createModelElementForParent(grammarAccess.getNormalStateRule());
+                            							}
+                            							set(
+                            								current,
+                            								"entry_",
+                            								lv_entry__5_0,
+                            								"swt.most.statemachine.xtext.Parser.Action");
+                            							afterParserOrEnumRuleCall();
+                            						
+
+                            }
+
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+                    // InternalParser.g:276:4: (otherlv_6= 'do:' ( (lv_do__7_0= ruleAction ) ) )?
+                    int alt3=2;
+                    int LA3_0 = input.LA(1);
+
+                    if ( (LA3_0==19) ) {
+                        alt3=1;
+                    }
+                    switch (alt3) {
+                        case 1 :
+                            // InternalParser.g:277:5: otherlv_6= 'do:' ( (lv_do__7_0= ruleAction ) )
+                            {
+                            otherlv_6=(Token)match(input,19,FOLLOW_9); 
+
+                            					newLeafNode(otherlv_6, grammarAccess.getNormalStateAccess().getDoKeyword_3_2_0());
+                            				
+                            // InternalParser.g:281:5: ( (lv_do__7_0= ruleAction ) )
+                            // InternalParser.g:282:6: (lv_do__7_0= ruleAction )
+                            {
+                            // InternalParser.g:282:6: (lv_do__7_0= ruleAction )
+                            // InternalParser.g:283:7: lv_do__7_0= ruleAction
+                            {
+
+                            							newCompositeNode(grammarAccess.getNormalStateAccess().getDo_ActionParserRuleCall_3_2_1_0());
+                            						
+                            pushFollow(FOLLOW_11);
+                            lv_do__7_0=ruleAction();
+
+                            state._fsp--;
+
+
+                            							if (current==null) {
+                            								current = createModelElementForParent(grammarAccess.getNormalStateRule());
+                            							}
+                            							set(
+                            								current,
+                            								"do_",
+                            								lv_do__7_0,
+                            								"swt.most.statemachine.xtext.Parser.Action");
+                            							afterParserOrEnumRuleCall();
+                            						
+
+                            }
+
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+                    // InternalParser.g:301:4: (otherlv_8= 'exit:' ( (lv_exit__9_0= ruleAction ) ) )?
+                    int alt4=2;
+                    int LA4_0 = input.LA(1);
+
+                    if ( (LA4_0==20) ) {
+                        alt4=1;
+                    }
+                    switch (alt4) {
+                        case 1 :
+                            // InternalParser.g:302:5: otherlv_8= 'exit:' ( (lv_exit__9_0= ruleAction ) )
+                            {
+                            otherlv_8=(Token)match(input,20,FOLLOW_9); 
+
+                            					newLeafNode(otherlv_8, grammarAccess.getNormalStateAccess().getExitKeyword_3_3_0());
+                            				
+                            // InternalParser.g:306:5: ( (lv_exit__9_0= ruleAction ) )
+                            // InternalParser.g:307:6: (lv_exit__9_0= ruleAction )
+                            {
+                            // InternalParser.g:307:6: (lv_exit__9_0= ruleAction )
+                            // InternalParser.g:308:7: lv_exit__9_0= ruleAction
+                            {
+
+                            							newCompositeNode(grammarAccess.getNormalStateAccess().getExit_ActionParserRuleCall_3_3_1_0());
+                            						
+                            pushFollow(FOLLOW_12);
+                            lv_exit__9_0=ruleAction();
+
+                            state._fsp--;
+
+
+                            							if (current==null) {
+                            								current = createModelElementForParent(grammarAccess.getNormalStateRule());
+                            							}
+                            							set(
+                            								current,
+                            								"exit_",
+                            								lv_exit__9_0,
+                            								"swt.most.statemachine.xtext.Parser.Action");
+                            							afterParserOrEnumRuleCall();
+                            						
+
+                            }
+
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+                    otherlv_10=(Token)match(input,16,FOLLOW_2); 
+
+                    				newLeafNode(otherlv_10, grammarAccess.getNormalStateAccess().getRightCurlyBracketKeyword_3_4());
+                    			
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleNormalState"
+
+
+    // $ANTLR start "entryRuleFinalState"
+    // InternalParser.g:335:1: entryRuleFinalState returns [EObject current=null] : iv_ruleFinalState= ruleFinalState EOF ;
+    public final EObject entryRuleFinalState() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleFinalState = null;
+
+
+        try {
+            // InternalParser.g:335:51: (iv_ruleFinalState= ruleFinalState EOF )
+            // InternalParser.g:336:2: iv_ruleFinalState= ruleFinalState EOF
+            {
+             newCompositeNode(grammarAccess.getFinalStateRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleFinalState=ruleFinalState();
+
+            state._fsp--;
+
+             current =iv_ruleFinalState; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleFinalState"
+
+
+    // $ANTLR start "ruleFinalState"
+    // InternalParser.g:342:1: ruleFinalState returns [EObject current=null] : ( () otherlv_1= 'end' ( (lv_name_2_0= RULE_FINALSTATENAME ) ) ) ;
+    public final EObject ruleFinalState() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token lv_name_2_0=null;
+
+
+        	enterRule();
+
+        try {
+            // InternalParser.g:348:2: ( ( () otherlv_1= 'end' ( (lv_name_2_0= RULE_FINALSTATENAME ) ) ) )
+            // InternalParser.g:349:2: ( () otherlv_1= 'end' ( (lv_name_2_0= RULE_FINALSTATENAME ) ) )
+            {
+            // InternalParser.g:349:2: ( () otherlv_1= 'end' ( (lv_name_2_0= RULE_FINALSTATENAME ) ) )
+            // InternalParser.g:350:3: () otherlv_1= 'end' ( (lv_name_2_0= RULE_FINALSTATENAME ) )
+            {
+            // InternalParser.g:350:3: ()
+            // InternalParser.g:351:4: 
+            {
+
+            				current = forceCreateModelElement(
+            					grammarAccess.getFinalStateAccess().getFinalStateAction_0(),
+            					current);
+            			
+
+            }
+
+            otherlv_1=(Token)match(input,21,FOLLOW_13); 
+
+            			newLeafNode(otherlv_1, grammarAccess.getFinalStateAccess().getEndKeyword_1());
+            		
+            // InternalParser.g:361:3: ( (lv_name_2_0= RULE_FINALSTATENAME ) )
+            // InternalParser.g:362:4: (lv_name_2_0= RULE_FINALSTATENAME )
+            {
+            // InternalParser.g:362:4: (lv_name_2_0= RULE_FINALSTATENAME )
+            // InternalParser.g:363:5: lv_name_2_0= RULE_FINALSTATENAME
+            {
+            lv_name_2_0=(Token)match(input,RULE_FINALSTATENAME,FOLLOW_2); 
+
+            					newLeafNode(lv_name_2_0, grammarAccess.getFinalStateAccess().getNameFINALSTATENAMETerminalRuleCall_2_0());
+            				
+
+            					if (current==null) {
+            						current = createModelElement(grammarAccess.getFinalStateRule());
+            					}
+            					setWithLastConsumed(
+            						current,
+            						"name",
+            						lv_name_2_0,
+            						"swt.most.statemachine.xtext.Parser.FINALSTATENAME");
+            				
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleFinalState"
+
+
+    // $ANTLR start "entryRuleInitialState"
+    // InternalParser.g:383:1: entryRuleInitialState returns [EObject current=null] : iv_ruleInitialState= ruleInitialState EOF ;
+    public final EObject entryRuleInitialState() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleInitialState = null;
+
+
+        try {
+            // InternalParser.g:383:53: (iv_ruleInitialState= ruleInitialState EOF )
+            // InternalParser.g:384:2: iv_ruleInitialState= ruleInitialState EOF
+            {
+             newCompositeNode(grammarAccess.getInitialStateRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleInitialState=ruleInitialState();
+
+            state._fsp--;
+
+             current =iv_ruleInitialState; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleInitialState"
+
+
+    // $ANTLR start "ruleInitialState"
+    // InternalParser.g:390:1: ruleInitialState returns [EObject current=null] : ( () otherlv_1= 'start' ( (lv_name_2_0= RULE_INITIALSTATENAME ) ) ) ;
+    public final EObject ruleInitialState() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token lv_name_2_0=null;
+
+
+        	enterRule();
+
+        try {
+            // InternalParser.g:396:2: ( ( () otherlv_1= 'start' ( (lv_name_2_0= RULE_INITIALSTATENAME ) ) ) )
+            // InternalParser.g:397:2: ( () otherlv_1= 'start' ( (lv_name_2_0= RULE_INITIALSTATENAME ) ) )
+            {
+            // InternalParser.g:397:2: ( () otherlv_1= 'start' ( (lv_name_2_0= RULE_INITIALSTATENAME ) ) )
+            // InternalParser.g:398:3: () otherlv_1= 'start' ( (lv_name_2_0= RULE_INITIALSTATENAME ) )
+            {
+            // InternalParser.g:398:3: ()
+            // InternalParser.g:399:4: 
+            {
+
+            				current = forceCreateModelElement(
+            					grammarAccess.getInitialStateAccess().getInitialStateAction_0(),
+            					current);
+            			
+
+            }
+
+            otherlv_1=(Token)match(input,22,FOLLOW_14); 
+
+            			newLeafNode(otherlv_1, grammarAccess.getInitialStateAccess().getStartKeyword_1());
+            		
+            // InternalParser.g:409:3: ( (lv_name_2_0= RULE_INITIALSTATENAME ) )
+            // InternalParser.g:410:4: (lv_name_2_0= RULE_INITIALSTATENAME )
+            {
+            // InternalParser.g:410:4: (lv_name_2_0= RULE_INITIALSTATENAME )
+            // InternalParser.g:411:5: lv_name_2_0= RULE_INITIALSTATENAME
+            {
+            lv_name_2_0=(Token)match(input,RULE_INITIALSTATENAME,FOLLOW_2); 
+
+            					newLeafNode(lv_name_2_0, grammarAccess.getInitialStateAccess().getNameINITIALSTATENAMETerminalRuleCall_2_0());
+            				
+
+            					if (current==null) {
+            						current = createModelElement(grammarAccess.getInitialStateRule());
+            					}
+            					setWithLastConsumed(
+            						current,
+            						"name",
+            						lv_name_2_0,
+            						"swt.most.statemachine.xtext.Parser.INITIALSTATENAME");
+            				
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleInitialState"
+
+
+    // $ANTLR start "entryRuleTransition"
+    // InternalParser.g:431:1: entryRuleTransition returns [EObject current=null] : iv_ruleTransition= ruleTransition EOF ;
+    public final EObject entryRuleTransition() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleTransition = null;
+
+
+        try {
+            // InternalParser.g:431:51: (iv_ruleTransition= ruleTransition EOF )
+            // InternalParser.g:432:2: iv_ruleTransition= ruleTransition EOF
+            {
+             newCompositeNode(grammarAccess.getTransitionRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleTransition=ruleTransition();
+
+            state._fsp--;
+
+             current =iv_ruleTransition; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleTransition"
+
+
+    // $ANTLR start "ruleTransition"
+    // InternalParser.g:438:1: ruleTransition returns [EObject current=null] : ( () ( ( ruleEString ) ) otherlv_2= '-' ( (lv_trigger_3_0= ruleTrigger ) )? (otherlv_4= '[' ( (lv_guard_5_0= ruleGuard ) ) otherlv_6= ']' )? (otherlv_7= '/' ( (lv_action_8_0= ruleAction ) ) )? otherlv_9= '->' ( ( ruleEString ) ) ) ;
+    public final EObject ruleTransition() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_2=null;
+        Token otherlv_4=null;
+        Token otherlv_6=null;
+        Token otherlv_7=null;
+        Token otherlv_9=null;
+        EObject lv_trigger_3_0 = null;
+
+        EObject lv_guard_5_0 = null;
+
+        EObject lv_action_8_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalParser.g:444:2: ( ( () ( ( ruleEString ) ) otherlv_2= '-' ( (lv_trigger_3_0= ruleTrigger ) )? (otherlv_4= '[' ( (lv_guard_5_0= ruleGuard ) ) otherlv_6= ']' )? (otherlv_7= '/' ( (lv_action_8_0= ruleAction ) ) )? otherlv_9= '->' ( ( ruleEString ) ) ) )
+            // InternalParser.g:445:2: ( () ( ( ruleEString ) ) otherlv_2= '-' ( (lv_trigger_3_0= ruleTrigger ) )? (otherlv_4= '[' ( (lv_guard_5_0= ruleGuard ) ) otherlv_6= ']' )? (otherlv_7= '/' ( (lv_action_8_0= ruleAction ) ) )? otherlv_9= '->' ( ( ruleEString ) ) )
+            {
+            // InternalParser.g:445:2: ( () ( ( ruleEString ) ) otherlv_2= '-' ( (lv_trigger_3_0= ruleTrigger ) )? (otherlv_4= '[' ( (lv_guard_5_0= ruleGuard ) ) otherlv_6= ']' )? (otherlv_7= '/' ( (lv_action_8_0= ruleAction ) ) )? otherlv_9= '->' ( ( ruleEString ) ) )
+            // InternalParser.g:446:3: () ( ( ruleEString ) ) otherlv_2= '-' ( (lv_trigger_3_0= ruleTrigger ) )? (otherlv_4= '[' ( (lv_guard_5_0= ruleGuard ) ) otherlv_6= ']' )? (otherlv_7= '/' ( (lv_action_8_0= ruleAction ) ) )? otherlv_9= '->' ( ( ruleEString ) )
+            {
+            // InternalParser.g:446:3: ()
+            // InternalParser.g:447:4: 
+            {
+
+            				current = forceCreateModelElement(
+            					grammarAccess.getTransitionAccess().getTransitionAction_0(),
+            					current);
+            			
+
+            }
+
+            // InternalParser.g:453:3: ( ( ruleEString ) )
+            // InternalParser.g:454:4: ( ruleEString )
+            {
+            // InternalParser.g:454:4: ( ruleEString )
+            // InternalParser.g:455:5: ruleEString
+            {
+
+            					if (current==null) {
+            						current = createModelElement(grammarAccess.getTransitionRule());
+            					}
+            				
+
+            					newCompositeNode(grammarAccess.getTransitionAccess().getFromStateCrossReference_1_0());
+            				
+            pushFollow(FOLLOW_15);
+            ruleEString();
+
+            state._fsp--;
+
+
+            					afterParserOrEnumRuleCall();
+            				
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,23,FOLLOW_16); 
+
+            			newLeafNode(otherlv_2, grammarAccess.getTransitionAccess().getHyphenMinusKeyword_2());
+            		
+            // InternalParser.g:473:3: ( (lv_trigger_3_0= ruleTrigger ) )?
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( ((LA6_0>=RULE_STRING && LA6_0<=RULE_CALL)) ) {
+                alt6=1;
+            }
+            switch (alt6) {
+                case 1 :
+                    // InternalParser.g:474:4: (lv_trigger_3_0= ruleTrigger )
+                    {
+                    // InternalParser.g:474:4: (lv_trigger_3_0= ruleTrigger )
+                    // InternalParser.g:475:5: lv_trigger_3_0= ruleTrigger
+                    {
+
+                    					newCompositeNode(grammarAccess.getTransitionAccess().getTriggerTriggerParserRuleCall_3_0());
+                    				
+                    pushFollow(FOLLOW_17);
+                    lv_trigger_3_0=ruleTrigger();
+
+                    state._fsp--;
+
+
+                    					if (current==null) {
+                    						current = createModelElementForParent(grammarAccess.getTransitionRule());
+                    					}
+                    					set(
+                    						current,
+                    						"trigger",
+                    						lv_trigger_3_0,
+                    						"swt.most.statemachine.xtext.Parser.Trigger");
+                    					afterParserOrEnumRuleCall();
+                    				
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // InternalParser.g:492:3: (otherlv_4= '[' ( (lv_guard_5_0= ruleGuard ) ) otherlv_6= ']' )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==24) ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // InternalParser.g:493:4: otherlv_4= '[' ( (lv_guard_5_0= ruleGuard ) ) otherlv_6= ']'
+                    {
+                    otherlv_4=(Token)match(input,24,FOLLOW_3); 
+
+                    				newLeafNode(otherlv_4, grammarAccess.getTransitionAccess().getLeftSquareBracketKeyword_4_0());
+                    			
+                    // InternalParser.g:497:4: ( (lv_guard_5_0= ruleGuard ) )
+                    // InternalParser.g:498:5: (lv_guard_5_0= ruleGuard )
+                    {
+                    // InternalParser.g:498:5: (lv_guard_5_0= ruleGuard )
+                    // InternalParser.g:499:6: lv_guard_5_0= ruleGuard
+                    {
+
+                    						newCompositeNode(grammarAccess.getTransitionAccess().getGuardGuardParserRuleCall_4_1_0());
+                    					
+                    pushFollow(FOLLOW_18);
+                    lv_guard_5_0=ruleGuard();
+
+                    state._fsp--;
+
+
+                    						if (current==null) {
+                    							current = createModelElementForParent(grammarAccess.getTransitionRule());
+                    						}
+                    						set(
+                    							current,
+                    							"guard",
+                    							lv_guard_5_0,
+                    							"swt.most.statemachine.xtext.Parser.Guard");
+                    						afterParserOrEnumRuleCall();
+                    					
+
+                    }
+
+
+                    }
+
+                    otherlv_6=(Token)match(input,25,FOLLOW_19); 
+
+                    				newLeafNode(otherlv_6, grammarAccess.getTransitionAccess().getRightSquareBracketKeyword_4_2());
+                    			
+
+                    }
+                    break;
+
+            }
+
+            // InternalParser.g:521:3: (otherlv_7= '/' ( (lv_action_8_0= ruleAction ) ) )?
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0==26) ) {
+                alt8=1;
+            }
+            switch (alt8) {
+                case 1 :
+                    // InternalParser.g:522:4: otherlv_7= '/' ( (lv_action_8_0= ruleAction ) )
+                    {
+                    otherlv_7=(Token)match(input,26,FOLLOW_9); 
+
+                    				newLeafNode(otherlv_7, grammarAccess.getTransitionAccess().getSolidusKeyword_5_0());
+                    			
+                    // InternalParser.g:526:4: ( (lv_action_8_0= ruleAction ) )
+                    // InternalParser.g:527:5: (lv_action_8_0= ruleAction )
+                    {
+                    // InternalParser.g:527:5: (lv_action_8_0= ruleAction )
+                    // InternalParser.g:528:6: lv_action_8_0= ruleAction
+                    {
+
+                    						newCompositeNode(grammarAccess.getTransitionAccess().getActionActionParserRuleCall_5_1_0());
+                    					
+                    pushFollow(FOLLOW_20);
+                    lv_action_8_0=ruleAction();
+
+                    state._fsp--;
+
+
+                    						if (current==null) {
+                    							current = createModelElementForParent(grammarAccess.getTransitionRule());
+                    						}
+                    						set(
+                    							current,
+                    							"action",
+                    							lv_action_8_0,
+                    							"swt.most.statemachine.xtext.Parser.Action");
+                    						afterParserOrEnumRuleCall();
+                    					
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_9=(Token)match(input,27,FOLLOW_3); 
+
+            			newLeafNode(otherlv_9, grammarAccess.getTransitionAccess().getHyphenMinusGreaterThanSignKeyword_6());
+            		
+            // InternalParser.g:550:3: ( ( ruleEString ) )
+            // InternalParser.g:551:4: ( ruleEString )
+            {
+            // InternalParser.g:551:4: ( ruleEString )
+            // InternalParser.g:552:5: ruleEString
+            {
+
+            					if (current==null) {
+            						current = createModelElement(grammarAccess.getTransitionRule());
+            					}
+            				
+
+            					newCompositeNode(grammarAccess.getTransitionAccess().getToStateCrossReference_7_0());
+            				
+            pushFollow(FOLLOW_2);
+            ruleEString();
+
+            state._fsp--;
+
+
+            					afterParserOrEnumRuleCall();
+            				
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleTransition"
+
+
+    // $ANTLR start "entryRuleAction"
+    // InternalParser.g:570:1: entryRuleAction returns [EObject current=null] : iv_ruleAction= ruleAction EOF ;
+    public final EObject entryRuleAction() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleAction = null;
+
+
+        try {
+            // InternalParser.g:570:47: (iv_ruleAction= ruleAction EOF )
+            // InternalParser.g:571:2: iv_ruleAction= ruleAction EOF
+            {
+             newCompositeNode(grammarAccess.getActionRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleAction=ruleAction();
+
+            state._fsp--;
+
+             current =iv_ruleAction; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleAction"
+
+
+    // $ANTLR start "ruleAction"
+    // InternalParser.g:577:1: ruleAction returns [EObject current=null] : ( () ( (lv_content_1_0= ruleActivityContent ) ) ) ;
+    public final EObject ruleAction() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_content_1_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalParser.g:583:2: ( ( () ( (lv_content_1_0= ruleActivityContent ) ) ) )
+            // InternalParser.g:584:2: ( () ( (lv_content_1_0= ruleActivityContent ) ) )
+            {
+            // InternalParser.g:584:2: ( () ( (lv_content_1_0= ruleActivityContent ) ) )
+            // InternalParser.g:585:3: () ( (lv_content_1_0= ruleActivityContent ) )
+            {
+            // InternalParser.g:585:3: ()
+            // InternalParser.g:586:4: 
+            {
+
+            				current = forceCreateModelElement(
+            					grammarAccess.getActionAccess().getActionAction_0(),
+            					current);
+            			
+
+            }
+
+            // InternalParser.g:592:3: ( (lv_content_1_0= ruleActivityContent ) )
+            // InternalParser.g:593:4: (lv_content_1_0= ruleActivityContent )
+            {
+            // InternalParser.g:593:4: (lv_content_1_0= ruleActivityContent )
+            // InternalParser.g:594:5: lv_content_1_0= ruleActivityContent
+            {
+
+            					newCompositeNode(grammarAccess.getActionAccess().getContentActivityContentParserRuleCall_1_0());
+            				
+            pushFollow(FOLLOW_2);
+            lv_content_1_0=ruleActivityContent();
+
+            state._fsp--;
+
+
+            					if (current==null) {
+            						current = createModelElementForParent(grammarAccess.getActionRule());
+            					}
+            					set(
+            						current,
+            						"content",
+            						lv_content_1_0,
+            						"swt.most.statemachine.xtext.Parser.ActivityContent");
+            					afterParserOrEnumRuleCall();
+            				
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleAction"
+
+
+    // $ANTLR start "entryRuleTrigger"
+    // InternalParser.g:615:1: entryRuleTrigger returns [EObject current=null] : iv_ruleTrigger= ruleTrigger EOF ;
+    public final EObject entryRuleTrigger() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleTrigger = null;
+
+
+        try {
+            // InternalParser.g:615:48: (iv_ruleTrigger= ruleTrigger EOF )
+            // InternalParser.g:616:2: iv_ruleTrigger= ruleTrigger EOF
+            {
+             newCompositeNode(grammarAccess.getTriggerRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleTrigger=ruleTrigger();
+
+            state._fsp--;
+
+             current =iv_ruleTrigger; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleTrigger"
+
+
+    // $ANTLR start "ruleTrigger"
+    // InternalParser.g:622:1: ruleTrigger returns [EObject current=null] : ( () ( (lv_content_1_0= ruleActivityContent ) ) ) ;
+    public final EObject ruleTrigger() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_content_1_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalParser.g:628:2: ( ( () ( (lv_content_1_0= ruleActivityContent ) ) ) )
+            // InternalParser.g:629:2: ( () ( (lv_content_1_0= ruleActivityContent ) ) )
+            {
+            // InternalParser.g:629:2: ( () ( (lv_content_1_0= ruleActivityContent ) ) )
+            // InternalParser.g:630:3: () ( (lv_content_1_0= ruleActivityContent ) )
+            {
+            // InternalParser.g:630:3: ()
+            // InternalParser.g:631:4: 
+            {
+
+            				current = forceCreateModelElement(
+            					grammarAccess.getTriggerAccess().getTriggerAction_0(),
+            					current);
+            			
+
+            }
+
+            // InternalParser.g:637:3: ( (lv_content_1_0= ruleActivityContent ) )
+            // InternalParser.g:638:4: (lv_content_1_0= ruleActivityContent )
+            {
+            // InternalParser.g:638:4: (lv_content_1_0= ruleActivityContent )
+            // InternalParser.g:639:5: lv_content_1_0= ruleActivityContent
+            {
+
+            					newCompositeNode(grammarAccess.getTriggerAccess().getContentActivityContentParserRuleCall_1_0());
+            				
+            pushFollow(FOLLOW_2);
+            lv_content_1_0=ruleActivityContent();
+
+            state._fsp--;
+
+
+            					if (current==null) {
+            						current = createModelElementForParent(grammarAccess.getTriggerRule());
+            					}
+            					set(
+            						current,
+            						"content",
+            						lv_content_1_0,
+            						"swt.most.statemachine.xtext.Parser.ActivityContent");
+            					afterParserOrEnumRuleCall();
+            				
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleTrigger"
+
+
+    // $ANTLR start "entryRuleGuard"
+    // InternalParser.g:660:1: entryRuleGuard returns [EObject current=null] : iv_ruleGuard= ruleGuard EOF ;
+    public final EObject entryRuleGuard() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleGuard = null;
+
+
+        try {
+            // InternalParser.g:660:46: (iv_ruleGuard= ruleGuard EOF )
+            // InternalParser.g:661:2: iv_ruleGuard= ruleGuard EOF
+            {
+             newCompositeNode(grammarAccess.getGuardRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleGuard=ruleGuard();
+
+            state._fsp--;
+
+             current =iv_ruleGuard; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleGuard"
+
+
+    // $ANTLR start "ruleGuard"
+    // InternalParser.g:667:1: ruleGuard returns [EObject current=null] : ( () ( (lv_content_1_0= ruleEString ) ) ) ;
+    public final EObject ruleGuard() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_content_1_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalParser.g:673:2: ( ( () ( (lv_content_1_0= ruleEString ) ) ) )
+            // InternalParser.g:674:2: ( () ( (lv_content_1_0= ruleEString ) ) )
+            {
+            // InternalParser.g:674:2: ( () ( (lv_content_1_0= ruleEString ) ) )
+            // InternalParser.g:675:3: () ( (lv_content_1_0= ruleEString ) )
+            {
+            // InternalParser.g:675:3: ()
+            // InternalParser.g:676:4: 
+            {
+
+            				current = forceCreateModelElement(
+            					grammarAccess.getGuardAccess().getGuardAction_0(),
+            					current);
+            			
+
+            }
+
+            // InternalParser.g:682:3: ( (lv_content_1_0= ruleEString ) )
+            // InternalParser.g:683:4: (lv_content_1_0= ruleEString )
+            {
+            // InternalParser.g:683:4: (lv_content_1_0= ruleEString )
+            // InternalParser.g:684:5: lv_content_1_0= ruleEString
+            {
+
+            					newCompositeNode(grammarAccess.getGuardAccess().getContentEStringParserRuleCall_1_0());
+            				
+            pushFollow(FOLLOW_2);
+            lv_content_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            					if (current==null) {
+            						current = createModelElementForParent(grammarAccess.getGuardRule());
+            					}
+            					set(
+            						current,
+            						"content",
+            						lv_content_1_0,
+            						"swt.most.statemachine.xtext.Parser.EString");
+            					afterParserOrEnumRuleCall();
+            				
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleGuard"
+
+
+    // $ANTLR start "entryRuleActivityContent"
+    // InternalParser.g:705:1: entryRuleActivityContent returns [String current=null] : iv_ruleActivityContent= ruleActivityContent EOF ;
+    public final String entryRuleActivityContent() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleActivityContent = null;
+
+
+        try {
+            // InternalParser.g:705:55: (iv_ruleActivityContent= ruleActivityContent EOF )
+            // InternalParser.g:706:2: iv_ruleActivityContent= ruleActivityContent EOF
+            {
+             newCompositeNode(grammarAccess.getActivityContentRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleActivityContent=ruleActivityContent();
+
+            state._fsp--;
+
+             current =iv_ruleActivityContent.getText(); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleActivityContent"
+
+
+    // $ANTLR start "ruleActivityContent"
+    // InternalParser.g:712:1: ruleActivityContent returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID | this_CALL_2= RULE_CALL ) ;
+    public final AntlrDatatypeRuleToken ruleActivityContent() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_STRING_0=null;
+        Token this_ID_1=null;
+        Token this_CALL_2=null;
+
+
+        	enterRule();
+
+        try {
+            // InternalParser.g:718:2: ( (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID | this_CALL_2= RULE_CALL ) )
+            // InternalParser.g:719:2: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID | this_CALL_2= RULE_CALL )
+            {
+            // InternalParser.g:719:2: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID | this_CALL_2= RULE_CALL )
+            int alt9=3;
+            switch ( input.LA(1) ) {
+            case RULE_STRING:
+                {
+                alt9=1;
+                }
+                break;
+            case RULE_ID:
+                {
+                alt9=2;
+                }
+                break;
+            case RULE_CALL:
+                {
+                alt9=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 9, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt9) {
+                case 1 :
+                    // InternalParser.g:720:3: this_STRING_0= RULE_STRING
+                    {
+                    this_STRING_0=(Token)match(input,RULE_STRING,FOLLOW_2); 
+
+                    			current.merge(this_STRING_0);
+                    		
+
+                    			newLeafNode(this_STRING_0, grammarAccess.getActivityContentAccess().getSTRINGTerminalRuleCall_0());
+                    		
+
+                    }
+                    break;
+                case 2 :
+                    // InternalParser.g:728:3: this_ID_1= RULE_ID
+                    {
+                    this_ID_1=(Token)match(input,RULE_ID,FOLLOW_2); 
+
+                    			current.merge(this_ID_1);
+                    		
+
+                    			newLeafNode(this_ID_1, grammarAccess.getActivityContentAccess().getIDTerminalRuleCall_1());
+                    		
+
+                    }
+                    break;
+                case 3 :
+                    // InternalParser.g:736:3: this_CALL_2= RULE_CALL
+                    {
+                    this_CALL_2=(Token)match(input,RULE_CALL,FOLLOW_2); 
+
+                    			current.merge(this_CALL_2);
+                    		
+
+                    			newLeafNode(this_CALL_2, grammarAccess.getActivityContentAccess().getCALLTerminalRuleCall_2());
+                    		
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleActivityContent"
+
+
+    // $ANTLR start "entryRuleEString"
+    // InternalParser.g:747:1: entryRuleEString returns [String current=null] : iv_ruleEString= ruleEString EOF ;
+    public final String entryRuleEString() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleEString = null;
+
+
+        try {
+            // InternalParser.g:747:47: (iv_ruleEString= ruleEString EOF )
+            // InternalParser.g:748:2: iv_ruleEString= ruleEString EOF
+            {
+             newCompositeNode(grammarAccess.getEStringRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleEString=ruleEString();
+
+            state._fsp--;
+
+             current =iv_ruleEString.getText(); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleEString"
+
+
+    // $ANTLR start "ruleEString"
+    // InternalParser.g:754:1: ruleEString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID | this_INITIALSTATENAME_2= RULE_INITIALSTATENAME | this_FINALSTATENAME_3= RULE_FINALSTATENAME ) ;
+    public final AntlrDatatypeRuleToken ruleEString() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_STRING_0=null;
+        Token this_ID_1=null;
+        Token this_INITIALSTATENAME_2=null;
+        Token this_FINALSTATENAME_3=null;
+
+
+        	enterRule();
+
+        try {
+            // InternalParser.g:760:2: ( (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID | this_INITIALSTATENAME_2= RULE_INITIALSTATENAME | this_FINALSTATENAME_3= RULE_FINALSTATENAME ) )
+            // InternalParser.g:761:2: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID | this_INITIALSTATENAME_2= RULE_INITIALSTATENAME | this_FINALSTATENAME_3= RULE_FINALSTATENAME )
+            {
+            // InternalParser.g:761:2: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID | this_INITIALSTATENAME_2= RULE_INITIALSTATENAME | this_FINALSTATENAME_3= RULE_FINALSTATENAME )
+            int alt10=4;
+            switch ( input.LA(1) ) {
+            case RULE_STRING:
+                {
+                alt10=1;
+                }
+                break;
+            case RULE_ID:
+                {
+                alt10=2;
+                }
+                break;
+            case RULE_INITIALSTATENAME:
+                {
+                alt10=3;
+                }
+                break;
+            case RULE_FINALSTATENAME:
+                {
+                alt10=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 10, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt10) {
+                case 1 :
+                    // InternalParser.g:762:3: this_STRING_0= RULE_STRING
+                    {
+                    this_STRING_0=(Token)match(input,RULE_STRING,FOLLOW_2); 
+
+                    			current.merge(this_STRING_0);
+                    		
+
+                    			newLeafNode(this_STRING_0, grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0());
+                    		
+
+                    }
+                    break;
+                case 2 :
+                    // InternalParser.g:770:3: this_ID_1= RULE_ID
+                    {
+                    this_ID_1=(Token)match(input,RULE_ID,FOLLOW_2); 
+
+                    			current.merge(this_ID_1);
+                    		
+
+                    			newLeafNode(this_ID_1, grammarAccess.getEStringAccess().getIDTerminalRuleCall_1());
+                    		
+
+                    }
+                    break;
+                case 3 :
+                    // InternalParser.g:778:3: this_INITIALSTATENAME_2= RULE_INITIALSTATENAME
+                    {
+                    this_INITIALSTATENAME_2=(Token)match(input,RULE_INITIALSTATENAME,FOLLOW_2); 
+
+                    			current.merge(this_INITIALSTATENAME_2);
+                    		
+
+                    			newLeafNode(this_INITIALSTATENAME_2, grammarAccess.getEStringAccess().getINITIALSTATENAMETerminalRuleCall_2());
+                    		
+
+                    }
+                    break;
+                case 4 :
+                    // InternalParser.g:786:3: this_FINALSTATENAME_3= RULE_FINALSTATENAME
+                    {
+                    this_FINALSTATENAME_3=(Token)match(input,RULE_FINALSTATENAME,FOLLOW_2); 
+
+                    			current.merge(this_FINALSTATENAME_3);
+                    		
+
+                    			newLeafNode(this_FINALSTATENAME_3, grammarAccess.getEStringAccess().getFINALSTATENAMETerminalRuleCall_3());
+                    		
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            	leaveRule();
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleEString"
+
+    // Delegated rules
+
+
+ 
+
+    public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x00000000000000F0L});
+    public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x00000000002300F0L});
+    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000008002L});
+    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x00000000001D0000L});
+    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x00000000000001C0L});
+    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000190000L});
+    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000000110000L});
+    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x000000000D0001C0L});
+    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x000000000D000000L});
+    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x000000000C000000L});
+    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000008000000L});
+
+}
\ No newline at end of file
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/scoping/AbstractParserScopeProvider.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/scoping/AbstractParserScopeProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..89bdd583ac6e03cccbf4bc3e5e9542a07a1c9550
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/scoping/AbstractParserScopeProvider.java
@@ -0,0 +1,9 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.scoping;
+
+import org.eclipse.xtext.scoping.impl.DelegatingScopeProvider;
+
+public abstract class AbstractParserScopeProvider extends DelegatingScopeProvider {
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/serializer/ParserSemanticSequencer.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/serializer/ParserSemanticSequencer.java
new file mode 100644
index 0000000000000000000000000000000000000000..7a5da0b568482b36bf9ec2c1b7c666090313b615
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/serializer/ParserSemanticSequencer.java
@@ -0,0 +1,215 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.serializer;
+
+import com.google.inject.Inject;
+import java.util.Set;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.Action;
+import org.eclipse.xtext.Parameter;
+import org.eclipse.xtext.ParserRule;
+import org.eclipse.xtext.serializer.ISerializationContext;
+import org.eclipse.xtext.serializer.acceptor.SequenceFeeder;
+import org.eclipse.xtext.serializer.sequencer.AbstractDelegatingSemanticSequencer;
+import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient;
+import swt.most.statemachine.FinalState;
+import swt.most.statemachine.Guard;
+import swt.most.statemachine.InitialState;
+import swt.most.statemachine.NormalState;
+import swt.most.statemachine.StateMachine;
+import swt.most.statemachine.StatemachinePackage;
+import swt.most.statemachine.Transition;
+import swt.most.statemachine.Trigger;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+
+@SuppressWarnings("all")
+public class ParserSemanticSequencer extends AbstractDelegatingSemanticSequencer {
+
+	@Inject
+	private ParserGrammarAccess grammarAccess;
+	
+	@Override
+	public void sequence(ISerializationContext context, EObject semanticObject) {
+		EPackage epackage = semanticObject.eClass().getEPackage();
+		ParserRule rule = context.getParserRule();
+		Action action = context.getAssignedAction();
+		Set<Parameter> parameters = context.getEnabledBooleanParameters();
+		if (epackage == StatemachinePackage.eINSTANCE)
+			switch (semanticObject.eClass().getClassifierID()) {
+			case StatemachinePackage.ACTION:
+				sequence_Action(context, (swt.most.statemachine.Action) semanticObject); 
+				return; 
+			case StatemachinePackage.FINAL_STATE:
+				sequence_FinalState(context, (FinalState) semanticObject); 
+				return; 
+			case StatemachinePackage.GUARD:
+				sequence_Guard(context, (Guard) semanticObject); 
+				return; 
+			case StatemachinePackage.INITIAL_STATE:
+				sequence_InitialState(context, (InitialState) semanticObject); 
+				return; 
+			case StatemachinePackage.NORMAL_STATE:
+				sequence_NormalState(context, (NormalState) semanticObject); 
+				return; 
+			case StatemachinePackage.STATE_MACHINE:
+				sequence_StateMachine(context, (StateMachine) semanticObject); 
+				return; 
+			case StatemachinePackage.TRANSITION:
+				sequence_Transition(context, (Transition) semanticObject); 
+				return; 
+			case StatemachinePackage.TRIGGER:
+				sequence_Trigger(context, (Trigger) semanticObject); 
+				return; 
+			}
+		if (errorAcceptor != null)
+			errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
+	}
+	
+	/**
+	 * <pre>
+	 * Contexts:
+	 *     Action returns Action
+	 *
+	 * Constraint:
+	 *     content=ActivityContent
+	 * </pre>
+	 */
+	protected void sequence_Action(ISerializationContext context, swt.most.statemachine.Action semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, StatemachinePackage.Literals.EXPRESSION__CONTENT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, StatemachinePackage.Literals.EXPRESSION__CONTENT));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getActionAccess().getContentActivityContentParserRuleCall_1_0(), semanticObject.getContent());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * <pre>
+	 * Contexts:
+	 *     State returns FinalState
+	 *     FinalState returns FinalState
+	 *
+	 * Constraint:
+	 *     name=FINALSTATENAME
+	 * </pre>
+	 */
+	protected void sequence_FinalState(ISerializationContext context, FinalState semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, StatemachinePackage.Literals.STATE__NAME) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, StatemachinePackage.Literals.STATE__NAME));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getFinalStateAccess().getNameFINALSTATENAMETerminalRuleCall_2_0(), semanticObject.getName());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * <pre>
+	 * Contexts:
+	 *     Guard returns Guard
+	 *
+	 * Constraint:
+	 *     content=EString
+	 * </pre>
+	 */
+	protected void sequence_Guard(ISerializationContext context, Guard semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, StatemachinePackage.Literals.EXPRESSION__CONTENT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, StatemachinePackage.Literals.EXPRESSION__CONTENT));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getGuardAccess().getContentEStringParserRuleCall_1_0(), semanticObject.getContent());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * <pre>
+	 * Contexts:
+	 *     State returns InitialState
+	 *     InitialState returns InitialState
+	 *
+	 * Constraint:
+	 *     name=INITIALSTATENAME
+	 * </pre>
+	 */
+	protected void sequence_InitialState(ISerializationContext context, InitialState semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, StatemachinePackage.Literals.STATE__NAME) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, StatemachinePackage.Literals.STATE__NAME));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getInitialStateAccess().getNameINITIALSTATENAMETerminalRuleCall_2_0(), semanticObject.getName());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * <pre>
+	 * Contexts:
+	 *     State returns NormalState
+	 *     NormalState returns NormalState
+	 *
+	 * Constraint:
+	 *     (name=EString entry_=Action? do_=Action? exit_=Action?)
+	 * </pre>
+	 */
+	protected void sequence_NormalState(ISerializationContext context, NormalState semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * <pre>
+	 * Contexts:
+	 *     StateMachine returns StateMachine
+	 *
+	 * Constraint:
+	 *     (name=EString initialstate=InitialState (states+=NormalState | finalstates+=FinalState | transitions+=Transition)*)
+	 * </pre>
+	 */
+	protected void sequence_StateMachine(ISerializationContext context, StateMachine semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * <pre>
+	 * Contexts:
+	 *     Transition returns Transition
+	 *
+	 * Constraint:
+	 *     (from=[State|EString] trigger=Trigger? guard=Guard? action=Action? to=[State|EString])
+	 * </pre>
+	 */
+	protected void sequence_Transition(ISerializationContext context, Transition semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * <pre>
+	 * Contexts:
+	 *     Trigger returns Trigger
+	 *
+	 * Constraint:
+	 *     content=ActivityContent
+	 * </pre>
+	 */
+	protected void sequence_Trigger(ISerializationContext context, Trigger semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, StatemachinePackage.Literals.EXPRESSION__CONTENT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, StatemachinePackage.Literals.EXPRESSION__CONTENT));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getTriggerAccess().getContentActivityContentParserRuleCall_1_0(), semanticObject.getContent());
+		feeder.finish();
+	}
+	
+	
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/serializer/ParserSyntacticSequencer.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/serializer/ParserSyntacticSequencer.java
new file mode 100644
index 0000000000000000000000000000000000000000..0044d42eb53ff34e9f971baa158509b9faad5fd5
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/serializer/ParserSyntacticSequencer.java
@@ -0,0 +1,64 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.serializer;
+
+import com.google.inject.Inject;
+import java.util.List;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.IGrammarAccess;
+import org.eclipse.xtext.RuleCall;
+import org.eclipse.xtext.nodemodel.INode;
+import org.eclipse.xtext.serializer.analysis.GrammarAlias.AbstractElementAlias;
+import org.eclipse.xtext.serializer.analysis.GrammarAlias.GroupAlias;
+import org.eclipse.xtext.serializer.analysis.GrammarAlias.TokenAlias;
+import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynNavigable;
+import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynTransition;
+import org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+
+@SuppressWarnings("all")
+public class ParserSyntacticSequencer extends AbstractSyntacticSequencer {
+
+	protected ParserGrammarAccess grammarAccess;
+	protected AbstractElementAlias match_NormalState___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_4__q;
+	
+	@Inject
+	protected void init(IGrammarAccess access) {
+		grammarAccess = (ParserGrammarAccess) access;
+		match_NormalState___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_4__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getNormalStateAccess().getLeftCurlyBracketKeyword_3_0()), new TokenAlias(false, false, grammarAccess.getNormalStateAccess().getRightCurlyBracketKeyword_3_4()));
+	}
+	
+	@Override
+	protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
+		return "";
+	}
+	
+	
+	@Override
+	protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
+		if (transition.getAmbiguousSyntaxes().isEmpty()) return;
+		List<INode> transitionNodes = collectNodes(fromNode, toNode);
+		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
+			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
+			if (match_NormalState___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_4__q.equals(syntax))
+				emit_NormalState___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_4__q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else acceptNodes(getLastNavigableState(), syntaxNodes);
+		}
+	}
+
+	/**
+	 * <pre>
+	 * Ambiguous syntax:
+	 *     ('{' '}')?
+	 *
+	 * This ambiguous syntax occurs at:
+	 *     name=EString (ambiguity) (rule end)
+	 
+	 * </pre>
+	 */
+	protected void emit_NormalState___LeftCurlyBracketKeyword_3_0_RightCurlyBracketKeyword_3_4__q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/services/ParserGrammarAccess.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/services/ParserGrammarAccess.java
new file mode 100644
index 0000000000000000000000000000000000000000..b41c62c5ed137194c860d9fc1aef3b60763fd841
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/services/ParserGrammarAccess.java
@@ -0,0 +1,780 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.services;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import java.util.List;
+import org.eclipse.xtext.Action;
+import org.eclipse.xtext.Alternatives;
+import org.eclipse.xtext.Assignment;
+import org.eclipse.xtext.CrossReference;
+import org.eclipse.xtext.Grammar;
+import org.eclipse.xtext.GrammarUtil;
+import org.eclipse.xtext.Group;
+import org.eclipse.xtext.Keyword;
+import org.eclipse.xtext.ParserRule;
+import org.eclipse.xtext.RuleCall;
+import org.eclipse.xtext.TerminalRule;
+import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
+import org.eclipse.xtext.service.AbstractElementFinder;
+import org.eclipse.xtext.service.GrammarProvider;
+
+@Singleton
+public class ParserGrammarAccess extends AbstractElementFinder.AbstractGrammarElementFinder {
+	
+	public class StateMachineElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.StateMachine");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cStateMachineAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cStateMachineKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cNameEStringParserRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cInitialstateAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cInitialstateInitialStateParserRuleCall_4_0 = (RuleCall)cInitialstateAssignment_4.eContents().get(0);
+		private final Alternatives cAlternatives_5 = (Alternatives)cGroup.eContents().get(5);
+		private final Assignment cStatesAssignment_5_0 = (Assignment)cAlternatives_5.eContents().get(0);
+		private final RuleCall cStatesNormalStateParserRuleCall_5_0_0 = (RuleCall)cStatesAssignment_5_0.eContents().get(0);
+		private final Assignment cFinalstatesAssignment_5_1 = (Assignment)cAlternatives_5.eContents().get(1);
+		private final RuleCall cFinalstatesFinalStateParserRuleCall_5_1_0 = (RuleCall)cFinalstatesAssignment_5_1.eContents().get(0);
+		private final Assignment cTransitionsAssignment_5_2 = (Assignment)cAlternatives_5.eContents().get(2);
+		private final RuleCall cTransitionsTransitionParserRuleCall_5_2_0 = (RuleCall)cTransitionsAssignment_5_2.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		
+		//StateMachine returns StateMachine:
+		//    {StateMachine}
+		//    'StateMachine' name=EString
+		//    '{'
+		//        initialstate=InitialState
+		//        ( states+=NormalState | finalstates+=FinalState | transitions+=Transition)*
+		//    '}';
+		@Override public ParserRule getRule() { return rule; }
+		
+		//{StateMachine}
+		//'StateMachine' name=EString
+		//'{'
+		//    initialstate=InitialState
+		//    ( states+=NormalState | finalstates+=FinalState | transitions+=Transition)*
+		//'}'
+		public Group getGroup() { return cGroup; }
+		
+		//{StateMachine}
+		public Action getStateMachineAction_0() { return cStateMachineAction_0; }
+		
+		//'StateMachine'
+		public Keyword getStateMachineKeyword_1() { return cStateMachineKeyword_1; }
+		
+		//name=EString
+		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
+		
+		//EString
+		public RuleCall getNameEStringParserRuleCall_2_0() { return cNameEStringParserRuleCall_2_0; }
+		
+		//'{'
+		public Keyword getLeftCurlyBracketKeyword_3() { return cLeftCurlyBracketKeyword_3; }
+		
+		//initialstate=InitialState
+		public Assignment getInitialstateAssignment_4() { return cInitialstateAssignment_4; }
+		
+		//InitialState
+		public RuleCall getInitialstateInitialStateParserRuleCall_4_0() { return cInitialstateInitialStateParserRuleCall_4_0; }
+		
+		//( states+=NormalState | finalstates+=FinalState | transitions+=Transition)*
+		public Alternatives getAlternatives_5() { return cAlternatives_5; }
+		
+		//states+=NormalState
+		public Assignment getStatesAssignment_5_0() { return cStatesAssignment_5_0; }
+		
+		//NormalState
+		public RuleCall getStatesNormalStateParserRuleCall_5_0_0() { return cStatesNormalStateParserRuleCall_5_0_0; }
+		
+		//finalstates+=FinalState
+		public Assignment getFinalstatesAssignment_5_1() { return cFinalstatesAssignment_5_1; }
+		
+		//FinalState
+		public RuleCall getFinalstatesFinalStateParserRuleCall_5_1_0() { return cFinalstatesFinalStateParserRuleCall_5_1_0; }
+		
+		//transitions+=Transition
+		public Assignment getTransitionsAssignment_5_2() { return cTransitionsAssignment_5_2; }
+		
+		//Transition
+		public RuleCall getTransitionsTransitionParserRuleCall_5_2_0() { return cTransitionsTransitionParserRuleCall_5_2_0; }
+		
+		//'}'
+		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }
+	}
+	public class StateElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.State");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cInitialStateParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cFinalStateParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cNormalStateParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		
+		//State returns State:
+		//    InitialState | FinalState | NormalState;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//InitialState | FinalState | NormalState
+		public Alternatives getAlternatives() { return cAlternatives; }
+		
+		//InitialState
+		public RuleCall getInitialStateParserRuleCall_0() { return cInitialStateParserRuleCall_0; }
+		
+		//FinalState
+		public RuleCall getFinalStateParserRuleCall_1() { return cFinalStateParserRuleCall_1; }
+		
+		//NormalState
+		public RuleCall getNormalStateParserRuleCall_2() { return cNormalStateParserRuleCall_2; }
+	}
+	public class NormalStateElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.NormalState");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cNormalStateAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cStateKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cNameEStringParserRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cLeftCurlyBracketKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Group cGroup_3_1 = (Group)cGroup_3.eContents().get(1);
+		private final Keyword cEntryKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
+		private final Assignment cEntry_Assignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
+		private final RuleCall cEntry_ActionParserRuleCall_3_1_1_0 = (RuleCall)cEntry_Assignment_3_1_1.eContents().get(0);
+		private final Group cGroup_3_2 = (Group)cGroup_3.eContents().get(2);
+		private final Keyword cDoKeyword_3_2_0 = (Keyword)cGroup_3_2.eContents().get(0);
+		private final Assignment cDo_Assignment_3_2_1 = (Assignment)cGroup_3_2.eContents().get(1);
+		private final RuleCall cDo_ActionParserRuleCall_3_2_1_0 = (RuleCall)cDo_Assignment_3_2_1.eContents().get(0);
+		private final Group cGroup_3_3 = (Group)cGroup_3.eContents().get(3);
+		private final Keyword cExitKeyword_3_3_0 = (Keyword)cGroup_3_3.eContents().get(0);
+		private final Assignment cExit_Assignment_3_3_1 = (Assignment)cGroup_3_3.eContents().get(1);
+		private final RuleCall cExit_ActionParserRuleCall_3_3_1_0 = (RuleCall)cExit_Assignment_3_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
+		
+		//NormalState returns NormalState:
+		//    {NormalState}
+		//    'state' name=EString ('{'
+		//        ('entry:' entry_=Action)?
+		//        ('do:' do_=Action)?
+		//        ('exit:' exit_=Action)?
+		//    '}')?;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//{NormalState}
+		//'state' name=EString ('{'
+		//    ('entry:' entry_=Action)?
+		//    ('do:' do_=Action)?
+		//    ('exit:' exit_=Action)?
+		//'}')?
+		public Group getGroup() { return cGroup; }
+		
+		//{NormalState}
+		public Action getNormalStateAction_0() { return cNormalStateAction_0; }
+		
+		//'state'
+		public Keyword getStateKeyword_1() { return cStateKeyword_1; }
+		
+		//name=EString
+		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
+		
+		//EString
+		public RuleCall getNameEStringParserRuleCall_2_0() { return cNameEStringParserRuleCall_2_0; }
+		
+		//('{'
+		//       ('entry:' entry_=Action)?
+		//       ('do:' do_=Action)?
+		//       ('exit:' exit_=Action)?
+		//   '}')?
+		public Group getGroup_3() { return cGroup_3; }
+		
+		//'{'
+		public Keyword getLeftCurlyBracketKeyword_3_0() { return cLeftCurlyBracketKeyword_3_0; }
+		
+		//('entry:' entry_=Action)?
+		public Group getGroup_3_1() { return cGroup_3_1; }
+		
+		//'entry:'
+		public Keyword getEntryKeyword_3_1_0() { return cEntryKeyword_3_1_0; }
+		
+		//entry_=Action
+		public Assignment getEntry_Assignment_3_1_1() { return cEntry_Assignment_3_1_1; }
+		
+		//Action
+		public RuleCall getEntry_ActionParserRuleCall_3_1_1_0() { return cEntry_ActionParserRuleCall_3_1_1_0; }
+		
+		//('do:' do_=Action)?
+		public Group getGroup_3_2() { return cGroup_3_2; }
+		
+		//'do:'
+		public Keyword getDoKeyword_3_2_0() { return cDoKeyword_3_2_0; }
+		
+		//do_=Action
+		public Assignment getDo_Assignment_3_2_1() { return cDo_Assignment_3_2_1; }
+		
+		//Action
+		public RuleCall getDo_ActionParserRuleCall_3_2_1_0() { return cDo_ActionParserRuleCall_3_2_1_0; }
+		
+		//('exit:' exit_=Action)?
+		public Group getGroup_3_3() { return cGroup_3_3; }
+		
+		//'exit:'
+		public Keyword getExitKeyword_3_3_0() { return cExitKeyword_3_3_0; }
+		
+		//exit_=Action
+		public Assignment getExit_Assignment_3_3_1() { return cExit_Assignment_3_3_1; }
+		
+		//Action
+		public RuleCall getExit_ActionParserRuleCall_3_3_1_0() { return cExit_ActionParserRuleCall_3_3_1_0; }
+		
+		//'}'
+		public Keyword getRightCurlyBracketKeyword_3_4() { return cRightCurlyBracketKeyword_3_4; }
+	}
+	public class FinalStateElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.FinalState");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cFinalStateAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cEndKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cNameFINALSTATENAMETerminalRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
+		
+		//FinalState returns FinalState:
+		//    {FinalState}
+		//    'end' name=FINALSTATENAME;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//{FinalState}
+		//'end' name=FINALSTATENAME
+		public Group getGroup() { return cGroup; }
+		
+		//{FinalState}
+		public Action getFinalStateAction_0() { return cFinalStateAction_0; }
+		
+		//'end'
+		public Keyword getEndKeyword_1() { return cEndKeyword_1; }
+		
+		//name=FINALSTATENAME
+		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
+		
+		//FINALSTATENAME
+		public RuleCall getNameFINALSTATENAMETerminalRuleCall_2_0() { return cNameFINALSTATENAMETerminalRuleCall_2_0; }
+	}
+	public class InitialStateElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.InitialState");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cInitialStateAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cStartKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cNameINITIALSTATENAMETerminalRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
+		
+		//InitialState returns InitialState:
+		//    {InitialState}
+		//    'start' name=INITIALSTATENAME;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//{InitialState}
+		//'start' name=INITIALSTATENAME
+		public Group getGroup() { return cGroup; }
+		
+		//{InitialState}
+		public Action getInitialStateAction_0() { return cInitialStateAction_0; }
+		
+		//'start'
+		public Keyword getStartKeyword_1() { return cStartKeyword_1; }
+		
+		//name=INITIALSTATENAME
+		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
+		
+		//INITIALSTATENAME
+		public RuleCall getNameINITIALSTATENAMETerminalRuleCall_2_0() { return cNameINITIALSTATENAMETerminalRuleCall_2_0; }
+	}
+	public class TransitionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.Transition");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cTransitionAction_0 = (Action)cGroup.eContents().get(0);
+		private final Assignment cFromAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final CrossReference cFromStateCrossReference_1_0 = (CrossReference)cFromAssignment_1.eContents().get(0);
+		private final RuleCall cFromStateEStringParserRuleCall_1_0_1 = (RuleCall)cFromStateCrossReference_1_0.eContents().get(1);
+		private final Keyword cHyphenMinusKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cTriggerAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cTriggerTriggerParserRuleCall_3_0 = (RuleCall)cTriggerAssignment_3.eContents().get(0);
+		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
+		private final Keyword cLeftSquareBracketKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
+		private final Assignment cGuardAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
+		private final RuleCall cGuardGuardParserRuleCall_4_1_0 = (RuleCall)cGuardAssignment_4_1.eContents().get(0);
+		private final Keyword cRightSquareBracketKeyword_4_2 = (Keyword)cGroup_4.eContents().get(2);
+		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
+		private final Keyword cSolidusKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
+		private final Assignment cActionAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
+		private final RuleCall cActionActionParserRuleCall_5_1_0 = (RuleCall)cActionAssignment_5_1.eContents().get(0);
+		private final Keyword cHyphenMinusGreaterThanSignKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		private final Assignment cToAssignment_7 = (Assignment)cGroup.eContents().get(7);
+		private final CrossReference cToStateCrossReference_7_0 = (CrossReference)cToAssignment_7.eContents().get(0);
+		private final RuleCall cToStateEStringParserRuleCall_7_0_1 = (RuleCall)cToStateCrossReference_7_0.eContents().get(1);
+		
+		///*
+		// * You can define further more detailed validations rules to check for the semantics of your language
+		// * in the '***Validator' class under 'src/***.validation'.
+		// * e.g. There must be no Transitions to the InitialState and no Transitions from a FinalState
+		//*/
+		//Transition returns Transition:
+		//    {Transition}
+		//    from=[State|EString] '-'(trigger=Trigger)?('[' guard=Guard ']')? ('/' action=Action)? '->' to=[State|EString];
+		@Override public ParserRule getRule() { return rule; }
+		
+		//{Transition}
+		//from=[State|EString] '-'(trigger=Trigger)?('[' guard=Guard ']')? ('/' action=Action)? '->' to=[State|EString]
+		public Group getGroup() { return cGroup; }
+		
+		//{Transition}
+		public Action getTransitionAction_0() { return cTransitionAction_0; }
+		
+		//from=[State|EString]
+		public Assignment getFromAssignment_1() { return cFromAssignment_1; }
+		
+		//[State|EString]
+		public CrossReference getFromStateCrossReference_1_0() { return cFromStateCrossReference_1_0; }
+		
+		//EString
+		public RuleCall getFromStateEStringParserRuleCall_1_0_1() { return cFromStateEStringParserRuleCall_1_0_1; }
+		
+		//'-'
+		public Keyword getHyphenMinusKeyword_2() { return cHyphenMinusKeyword_2; }
+		
+		//(trigger=Trigger)?
+		public Assignment getTriggerAssignment_3() { return cTriggerAssignment_3; }
+		
+		//Trigger
+		public RuleCall getTriggerTriggerParserRuleCall_3_0() { return cTriggerTriggerParserRuleCall_3_0; }
+		
+		//('[' guard=Guard ']')?
+		public Group getGroup_4() { return cGroup_4; }
+		
+		//'['
+		public Keyword getLeftSquareBracketKeyword_4_0() { return cLeftSquareBracketKeyword_4_0; }
+		
+		//guard=Guard
+		public Assignment getGuardAssignment_4_1() { return cGuardAssignment_4_1; }
+		
+		//Guard
+		public RuleCall getGuardGuardParserRuleCall_4_1_0() { return cGuardGuardParserRuleCall_4_1_0; }
+		
+		//']'
+		public Keyword getRightSquareBracketKeyword_4_2() { return cRightSquareBracketKeyword_4_2; }
+		
+		//('/' action=Action)?
+		public Group getGroup_5() { return cGroup_5; }
+		
+		//'/'
+		public Keyword getSolidusKeyword_5_0() { return cSolidusKeyword_5_0; }
+		
+		//action=Action
+		public Assignment getActionAssignment_5_1() { return cActionAssignment_5_1; }
+		
+		//Action
+		public RuleCall getActionActionParserRuleCall_5_1_0() { return cActionActionParserRuleCall_5_1_0; }
+		
+		//'->'
+		public Keyword getHyphenMinusGreaterThanSignKeyword_6() { return cHyphenMinusGreaterThanSignKeyword_6; }
+		
+		//to=[State|EString]
+		public Assignment getToAssignment_7() { return cToAssignment_7; }
+		
+		//[State|EString]
+		public CrossReference getToStateCrossReference_7_0() { return cToStateCrossReference_7_0; }
+		
+		//EString
+		public RuleCall getToStateEStringParserRuleCall_7_0_1() { return cToStateEStringParserRuleCall_7_0_1; }
+	}
+	public class ActionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.Action");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cActionAction_0 = (Action)cGroup.eContents().get(0);
+		private final Assignment cContentAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cContentActivityContentParserRuleCall_1_0 = (RuleCall)cContentAssignment_1.eContents().get(0);
+		
+		//Action returns Action:
+		//    {Action}
+		//    content=ActivityContent;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//{Action}
+		//content=ActivityContent
+		public Group getGroup() { return cGroup; }
+		
+		//{Action}
+		public Action getActionAction_0() { return cActionAction_0; }
+		
+		//content=ActivityContent
+		public Assignment getContentAssignment_1() { return cContentAssignment_1; }
+		
+		//ActivityContent
+		public RuleCall getContentActivityContentParserRuleCall_1_0() { return cContentActivityContentParserRuleCall_1_0; }
+	}
+	public class TriggerElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.Trigger");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cTriggerAction_0 = (Action)cGroup.eContents().get(0);
+		private final Assignment cContentAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cContentActivityContentParserRuleCall_1_0 = (RuleCall)cContentAssignment_1.eContents().get(0);
+		
+		//Trigger returns Trigger:
+		//    {Trigger}
+		//    content=ActivityContent;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//{Trigger}
+		//content=ActivityContent
+		public Group getGroup() { return cGroup; }
+		
+		//{Trigger}
+		public Action getTriggerAction_0() { return cTriggerAction_0; }
+		
+		//content=ActivityContent
+		public Assignment getContentAssignment_1() { return cContentAssignment_1; }
+		
+		//ActivityContent
+		public RuleCall getContentActivityContentParserRuleCall_1_0() { return cContentActivityContentParserRuleCall_1_0; }
+	}
+	public class GuardElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.Guard");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cGuardAction_0 = (Action)cGroup.eContents().get(0);
+		private final Assignment cContentAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cContentEStringParserRuleCall_1_0 = (RuleCall)cContentAssignment_1.eContents().get(0);
+		
+		//Guard returns Guard:
+		//    {Guard}
+		//    content=EString;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//{Guard}
+		//content=EString
+		public Group getGroup() { return cGroup; }
+		
+		//{Guard}
+		public Action getGuardAction_0() { return cGuardAction_0; }
+		
+		//content=EString
+		public Assignment getContentAssignment_1() { return cContentAssignment_1; }
+		
+		//EString
+		public RuleCall getContentEStringParserRuleCall_1_0() { return cContentEStringParserRuleCall_1_0; }
+	}
+	public class ActivityContentElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.ActivityContent");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cSTRINGTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cIDTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cCALLTerminalRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		
+		///*
+		// * You can use Strings syntax ('...') for unclear/abstract parts of your text syntax.
+		// * If your domain is defined enough you can create rules and terminal rules for these parts,too.
+		//*/
+		//ActivityContent returns ecore::EString:
+		//    STRING | ID | CALL;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//STRING | ID | CALL
+		public Alternatives getAlternatives() { return cAlternatives; }
+		
+		//STRING
+		public RuleCall getSTRINGTerminalRuleCall_0() { return cSTRINGTerminalRuleCall_0; }
+		
+		//ID
+		public RuleCall getIDTerminalRuleCall_1() { return cIDTerminalRuleCall_1; }
+		
+		//CALL
+		public RuleCall getCALLTerminalRuleCall_2() { return cCALLTerminalRuleCall_2; }
+	}
+	public class EStringElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.EString");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cSTRINGTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cIDTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cINITIALSTATENAMETerminalRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		private final RuleCall cFINALSTATENAMETerminalRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
+		
+		//EString returns ecore::EString:
+		//    STRING | ID | INITIALSTATENAME | FINALSTATENAME;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//STRING | ID | INITIALSTATENAME | FINALSTATENAME
+		public Alternatives getAlternatives() { return cAlternatives; }
+		
+		//STRING
+		public RuleCall getSTRINGTerminalRuleCall_0() { return cSTRINGTerminalRuleCall_0; }
+		
+		//ID
+		public RuleCall getIDTerminalRuleCall_1() { return cIDTerminalRuleCall_1; }
+		
+		//INITIALSTATENAME
+		public RuleCall getINITIALSTATENAMETerminalRuleCall_2() { return cINITIALSTATENAMETerminalRuleCall_2; }
+		
+		//FINALSTATENAME
+		public RuleCall getFINALSTATENAMETerminalRuleCall_3() { return cFINALSTATENAMETerminalRuleCall_3; }
+	}
+	
+	
+	private final StateMachineElements pStateMachine;
+	private final StateElements pState;
+	private final NormalStateElements pNormalState;
+	private final FinalStateElements pFinalState;
+	private final InitialStateElements pInitialState;
+	private final TransitionElements pTransition;
+	private final ActionElements pAction;
+	private final TriggerElements pTrigger;
+	private final GuardElements pGuard;
+	private final TerminalRule tINITIALSTATENAME;
+	private final TerminalRule tFINALSTATENAME;
+	private final ActivityContentElements pActivityContent;
+	private final TerminalRule tCALL;
+	private final EStringElements pEString;
+	
+	private final Grammar grammar;
+	
+	private final TerminalsGrammarAccess gaTerminals;
+
+	@Inject
+	public ParserGrammarAccess(GrammarProvider grammarProvider,
+			TerminalsGrammarAccess gaTerminals) {
+		this.grammar = internalFindGrammar(grammarProvider);
+		this.gaTerminals = gaTerminals;
+		this.pStateMachine = new StateMachineElements();
+		this.pState = new StateElements();
+		this.pNormalState = new NormalStateElements();
+		this.pFinalState = new FinalStateElements();
+		this.pInitialState = new InitialStateElements();
+		this.pTransition = new TransitionElements();
+		this.pAction = new ActionElements();
+		this.pTrigger = new TriggerElements();
+		this.pGuard = new GuardElements();
+		this.tINITIALSTATENAME = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.INITIALSTATENAME");
+		this.tFINALSTATENAME = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.FINALSTATENAME");
+		this.pActivityContent = new ActivityContentElements();
+		this.tCALL = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "swt.most.statemachine.xtext.Parser.CALL");
+		this.pEString = new EStringElements();
+	}
+	
+	protected Grammar internalFindGrammar(GrammarProvider grammarProvider) {
+		Grammar grammar = grammarProvider.getGrammar(this);
+		while (grammar != null) {
+			if ("swt.most.statemachine.xtext.Parser".equals(grammar.getName())) {
+				return grammar;
+			}
+			List<Grammar> grammars = grammar.getUsedGrammars();
+			if (!grammars.isEmpty()) {
+				grammar = grammars.iterator().next();
+			} else {
+				return null;
+			}
+		}
+		return grammar;
+	}
+	
+	@Override
+	public Grammar getGrammar() {
+		return grammar;
+	}
+	
+	
+	public TerminalsGrammarAccess getTerminalsGrammarAccess() {
+		return gaTerminals;
+	}
+
+	
+	//StateMachine returns StateMachine:
+	//    {StateMachine}
+	//    'StateMachine' name=EString
+	//    '{'
+	//        initialstate=InitialState
+	//        ( states+=NormalState | finalstates+=FinalState | transitions+=Transition)*
+	//    '}';
+	public StateMachineElements getStateMachineAccess() {
+		return pStateMachine;
+	}
+	
+	public ParserRule getStateMachineRule() {
+		return getStateMachineAccess().getRule();
+	}
+	
+	//State returns State:
+	//    InitialState | FinalState | NormalState;
+	public StateElements getStateAccess() {
+		return pState;
+	}
+	
+	public ParserRule getStateRule() {
+		return getStateAccess().getRule();
+	}
+	
+	//NormalState returns NormalState:
+	//    {NormalState}
+	//    'state' name=EString ('{'
+	//        ('entry:' entry_=Action)?
+	//        ('do:' do_=Action)?
+	//        ('exit:' exit_=Action)?
+	//    '}')?;
+	public NormalStateElements getNormalStateAccess() {
+		return pNormalState;
+	}
+	
+	public ParserRule getNormalStateRule() {
+		return getNormalStateAccess().getRule();
+	}
+	
+	//FinalState returns FinalState:
+	//    {FinalState}
+	//    'end' name=FINALSTATENAME;
+	public FinalStateElements getFinalStateAccess() {
+		return pFinalState;
+	}
+	
+	public ParserRule getFinalStateRule() {
+		return getFinalStateAccess().getRule();
+	}
+	
+	//InitialState returns InitialState:
+	//    {InitialState}
+	//    'start' name=INITIALSTATENAME;
+	public InitialStateElements getInitialStateAccess() {
+		return pInitialState;
+	}
+	
+	public ParserRule getInitialStateRule() {
+		return getInitialStateAccess().getRule();
+	}
+	
+	///*
+	// * You can define further more detailed validations rules to check for the semantics of your language
+	// * in the '***Validator' class under 'src/***.validation'.
+	// * e.g. There must be no Transitions to the InitialState and no Transitions from a FinalState
+	//*/
+	//Transition returns Transition:
+	//    {Transition}
+	//    from=[State|EString] '-'(trigger=Trigger)?('[' guard=Guard ']')? ('/' action=Action)? '->' to=[State|EString];
+	public TransitionElements getTransitionAccess() {
+		return pTransition;
+	}
+	
+	public ParserRule getTransitionRule() {
+		return getTransitionAccess().getRule();
+	}
+	
+	//Action returns Action:
+	//    {Action}
+	//    content=ActivityContent;
+	public ActionElements getActionAccess() {
+		return pAction;
+	}
+	
+	public ParserRule getActionRule() {
+		return getActionAccess().getRule();
+	}
+	
+	//Trigger returns Trigger:
+	//    {Trigger}
+	//    content=ActivityContent;
+	public TriggerElements getTriggerAccess() {
+		return pTrigger;
+	}
+	
+	public ParserRule getTriggerRule() {
+		return getTriggerAccess().getRule();
+	}
+	
+	//Guard returns Guard:
+	//    {Guard}
+	//    content=EString;
+	public GuardElements getGuardAccess() {
+		return pGuard;
+	}
+	
+	public ParserRule getGuardRule() {
+		return getGuardAccess().getRule();
+	}
+	
+	///*
+	// * Special naming conventions
+	// * Also possible via validator rules
+	//*/
+	//terminal INITIALSTATENAME returns ecore::EString:
+	//    ('I_')(INT|STRING|ID)+;
+	public TerminalRule getINITIALSTATENAMERule() {
+		return tINITIALSTATENAME;
+	}
+	
+	//terminal FINALSTATENAME returns ecore::EString:
+	//    ('F_')(INT|STRING|ID)+ ;
+	public TerminalRule getFINALSTATENAMERule() {
+		return tFINALSTATENAME;
+	}
+	
+	///*
+	// * You can use Strings syntax ('...') for unclear/abstract parts of your text syntax.
+	// * If your domain is defined enough you can create rules and terminal rules for these parts,too.
+	//*/
+	//ActivityContent returns ecore::EString:
+	//    STRING | ID | CALL;
+	public ActivityContentElements getActivityContentAccess() {
+		return pActivityContent;
+	}
+	
+	public ParserRule getActivityContentRule() {
+		return getActivityContentAccess().getRule();
+	}
+	
+	//terminal CALL returns ecore::EString:
+	//    (ID)('.'(ID))+;
+	public TerminalRule getCALLRule() {
+		return tCALL;
+	}
+	
+	//EString returns ecore::EString:
+	//    STRING | ID | INITIALSTATENAME | FINALSTATENAME;
+	public EStringElements getEStringAccess() {
+		return pEString;
+	}
+	
+	public ParserRule getEStringRule() {
+		return getEStringAccess().getRule();
+	}
+	
+	//terminal ID: '^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+	public TerminalRule getIDRule() {
+		return gaTerminals.getIDRule();
+	}
+	
+	//terminal INT returns ecore::EInt: ('0'..'9')+;
+	public TerminalRule getINTRule() {
+		return gaTerminals.getINTRule();
+	}
+	
+	//terminal STRING:
+	//            '"' ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|'"') )* '"' |
+	//            "'" ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|"'") )* "'"
+	//        ;
+	public TerminalRule getSTRINGRule() {
+		return gaTerminals.getSTRINGRule();
+	}
+	
+	//terminal ML_COMMENT : '/*' -> '*/';
+	public TerminalRule getML_COMMENTRule() {
+		return gaTerminals.getML_COMMENTRule();
+	}
+	
+	//terminal SL_COMMENT : '//' !('\n'|'\r')* ('\r'? '\n')?;
+	public TerminalRule getSL_COMMENTRule() {
+		return gaTerminals.getSL_COMMENTRule();
+	}
+	
+	//terminal WS         : (' '|'\t'|'\r'|'\n')+;
+	public TerminalRule getWSRule() {
+		return gaTerminals.getWSRule();
+	}
+	
+	//terminal ANY_OTHER: .;
+	public TerminalRule getANY_OTHERRule() {
+		return gaTerminals.getANY_OTHERRule();
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/validation/AbstractParserValidator.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/validation/AbstractParserValidator.java
new file mode 100644
index 0000000000000000000000000000000000000000..52477cb14ab030a1e3d005d2eea9ca575dcae7c0
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/validation/AbstractParserValidator.java
@@ -0,0 +1,19 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.validation.AbstractDeclarativeValidator;
+
+public abstract class AbstractParserValidator extends AbstractDeclarativeValidator {
+	
+	@Override
+	protected List<EPackage> getEPackages() {
+		List<EPackage> result = new ArrayList<EPackage>();
+		result.add(EPackage.Registry.INSTANCE.getEPackage("http://www.swt.org/most/statemachine"));
+		return result;
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/validation/ParserConfigurableIssueCodesProvider.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/validation/ParserConfigurableIssueCodesProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..46034b96eb73c70100aada3d608d0da3b5b5528c
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src-gen/swt/most/statemachine/xtext/validation/ParserConfigurableIssueCodesProvider.java
@@ -0,0 +1,21 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.validation;
+
+import org.eclipse.xtext.preferences.PreferenceKey;
+import org.eclipse.xtext.util.IAcceptor;
+import org.eclipse.xtext.validation.ConfigurableIssueCodesProvider;
+import org.eclipse.xtext.validation.SeverityConverter;
+
+public class ParserConfigurableIssueCodesProvider extends ConfigurableIssueCodesProvider {
+	protected static final String ISSUE_CODE_PREFIX = "swt.most.statemachine.xtext.";
+
+	public static final String DEPRECATED_MODEL_PART = ISSUE_CODE_PREFIX + "deprecatedModelPart";
+
+	@Override
+	protected void initialize(IAcceptor<PreferenceKey> acceptor) {
+		super.initialize(acceptor);
+		acceptor.accept(create(DEPRECATED_MODEL_PART, SeverityConverter.SEVERITY_WARNING));
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/GenerateParser.mwe2 b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/GenerateParser.mwe2
new file mode 100644
index 0000000000000000000000000000000000000000..df9ec2cb34402510bb10782fd86ed8d96932aeff
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/GenerateParser.mwe2
@@ -0,0 +1,59 @@
+module swt.most.statemachine.xtext.GenerateParser
+
+import org.eclipse.xtext.xtext.generator.*
+import org.eclipse.xtext.xtext.generator.model.project.*
+
+var rootPath = ".."
+
+Workflow {
+	
+	component = XtextGenerator {
+		configuration = {
+			project = StandardProjectConfig {
+				baseName = "swt.most.statemachine.xtext"
+				rootPath = rootPath
+				eclipsePlugin = {
+					enabled = true
+				}
+				createEclipseMetaData = true
+			}
+			code = {
+				encoding = "UTF-8"
+				lineDelimiter = "\r\n"
+				fileHeader = "/*\n * generated by Xtext \${version}\n */"
+				preferXtendStubs = false
+			}
+		}
+		language = StandardLanguage {
+			name = "swt.most.statemachine.xtext.Parser"
+			fileExtensions = "statemachine"
+			referencedResource = "platform:/resource/swt.most.statemachine/model/statemachine.genmodel"
+			
+			fragment = ecore2xtext.Ecore2XtextValueConverterServiceFragment2 auto-inject {}
+
+			formatter = {
+				generateStub = true
+				generateXtendStub = true
+			}
+
+			serializer = {
+				generateStub = false
+			}
+			validator = {
+				// composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
+
+				// Enables several checks on the inferred Jvm model for Xbase languages concerning Java inheritance relations
+				// composedCheck = "org.eclipse.xtext.xbase.validation.JvmGenericTypeValidator"
+
+				// Generates checks for @Deprecated grammar annotations, an IssueProvider and a corresponding PropertyPage
+				generateDeprecationValidation = true
+			}
+			generator = {
+				generateXtendStub = true
+			}
+			junitSupport = {
+				junitVersion = "5"
+			}
+		}
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/Parser.xtext b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/Parser.xtext
new file mode 100644
index 0000000000000000000000000000000000000000..29f5fde830a354ea646c41a50360b33056fa986d
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/Parser.xtext
@@ -0,0 +1,76 @@
+// automatically generated by Xtext
+grammar swt.most.statemachine.xtext.Parser with org.eclipse.xtext.common.Terminals
+
+import "http://www.swt.org/most/statemachine" 
+import "http://www.eclipse.org/emf/2002/Ecore" as ecore
+
+StateMachine returns StateMachine:
+	{StateMachine}
+	'StateMachine' name=EString
+	'{'
+		initialstate=InitialState
+		( states+=NormalState | finalstates+=FinalState | transitions+=Transition)*
+	'}';
+
+State returns State:
+	InitialState | FinalState | NormalState;
+
+NormalState returns NormalState:
+	{NormalState}
+	'state' name=EString ('{'
+	    ('entry:' entry_=Action)?
+		('do:' do_=Action)?
+		('exit:' exit_=Action)?	
+	'}')?;
+
+FinalState returns FinalState:
+	{FinalState}
+	'end' name=FINALSTATENAME;
+
+InitialState returns InitialState:
+	{InitialState}
+	'start' name=INITIALSTATENAME;
+
+/*
+ * You can define further more detailed validations rules to check for the semantics of your language 
+ * in the '***Validator' class under 'src/***.validation'.
+ * e.g. There must be no Transitions to the InitialState and no Transitions from a FinalState
+*/
+Transition returns Transition:
+	{Transition}
+	from=[State|EString] '-'(trigger=Trigger)?('[' guard=Guard ']')? ('/' action=Action)? '->' to=[State|EString];
+
+Action returns Action:
+	{Action}
+	content=ActivityContent;
+
+Trigger returns Trigger:
+	{Trigger}
+	content=ActivityContent;
+
+Guard returns Guard:
+	{Guard}
+	content=EString;
+
+/*
+ * Special naming conventions
+ * Also possible via validator rules
+*/	
+terminal INITIALSTATENAME returns ecore::EString:
+	('I_')(INT|STRING|ID)+;
+	
+terminal FINALSTATENAME returns ecore::EString:
+	('F_')(INT|STRING|ID)+ ;
+
+/*
+ * You can use Strings syntax ('...') for unclear/abstract parts of your text syntax.
+ * If your domain is defined enough you can create rules and terminal rules for these parts,too.
+*/  
+ActivityContent returns ecore::EString:
+	STRING | ID | CALL;
+	
+terminal CALL returns ecore::EString:
+	(ID)('.'(ID))+;
+	
+EString returns ecore::EString:
+	STRING | ID | INITIALSTATENAME | FINALSTATENAME;
\ No newline at end of file
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/ParserRuntimeModule.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/ParserRuntimeModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..698e811914fdecda25ea8d756e9caff7bea22ffb
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/ParserRuntimeModule.java
@@ -0,0 +1,11 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext;
+
+
+/**
+ * Use this class to register components to be used at runtime / without the Equinox extension registry.
+ */
+public class ParserRuntimeModule extends AbstractParserRuntimeModule {
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/ParserStandaloneSetup.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/ParserStandaloneSetup.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab7f0ed02355a63cf75fdf8296ea6b0b6534d2b0
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/ParserStandaloneSetup.java
@@ -0,0 +1,15 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext;
+
+
+/**
+ * Initialization support for running Xtext languages without Equinox extension registry.
+ */
+public class ParserStandaloneSetup extends ParserStandaloneSetupGenerated {
+
+	public static void doSetup() {
+		new ParserStandaloneSetup().createInjectorAndDoEMFRegistration();
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/formatting2/ParserFormatter.xtend b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/formatting2/ParserFormatter.xtend
new file mode 100644
index 0000000000000000000000000000000000000000..ce7545509cd4e9c7c5e345f44cf90cd0df9dc599
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/formatting2/ParserFormatter.xtend
@@ -0,0 +1,39 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.formatting2
+
+import com.google.inject.Inject
+import org.eclipse.xtext.formatting2.AbstractFormatter2
+import org.eclipse.xtext.formatting2.IFormattableDocument
+import swt.most.statemachine.NormalState
+import swt.most.statemachine.StateMachine
+import swt.most.statemachine.xtext.services.ParserGrammarAccess
+
+class ParserFormatter extends AbstractFormatter2 {
+	
+	@Inject extension ParserGrammarAccess
+
+	def dispatch void format(StateMachine stateMachine, extension IFormattableDocument document) {
+		// TODO: format HiddenRegions around keywords, attributes, cross references, etc. 
+		stateMachine.initialstate.format
+		for (normalState : stateMachine.states) {
+			normalState.format
+		}
+		for (finalState : stateMachine.finalstates) {
+			finalState.format
+		}
+		for (transition : stateMachine.transitions) {
+			transition.format
+		}
+	}
+
+	def dispatch void format(NormalState normalState, extension IFormattableDocument document) {
+		// TODO: format HiddenRegions around keywords, attributes, cross references, etc. 
+		normalState.entry_.format
+		normalState.do_.format
+		normalState.exit_.format
+	}
+	
+	// TODO: implement for Transition
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/generator/ParserGenerator.xtend b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/generator/ParserGenerator.xtend
new file mode 100644
index 0000000000000000000000000000000000000000..a953dd53f2dd7b153d95084bca9d6964aef96900
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/generator/ParserGenerator.xtend
@@ -0,0 +1,25 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.generator
+
+import org.eclipse.emf.ecore.resource.Resource
+import org.eclipse.xtext.generator.AbstractGenerator
+import org.eclipse.xtext.generator.IFileSystemAccess2
+import org.eclipse.xtext.generator.IGeneratorContext
+
+/**
+ * Generates code from your model files on save.
+ * 
+ * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#code-generation
+ */
+class ParserGenerator extends AbstractGenerator {
+
+	override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) {
+//		fsa.generateFile('greetings.txt', 'People to greet: ' + 
+//			resource.allContents
+//				.filter(Greeting)
+//				.map[name]
+//				.join(', '))
+	}
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/scoping/ParserScopeProvider.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/scoping/ParserScopeProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..c3d98249bf61e26f3f935f36008d6218cc79c7c2
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/scoping/ParserScopeProvider.java
@@ -0,0 +1,15 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.scoping;
+
+
+/**
+ * This class contains custom scoping description.
+ * 
+ * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping
+ * on how and when to use it.
+ */
+public class ParserScopeProvider extends AbstractParserScopeProvider {
+
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/validation/ParserValidator.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/validation/ParserValidator.java
new file mode 100644
index 0000000000000000000000000000000000000000..e83cd6ba94154495c294fb5866eca6251ab1e78b
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/src/swt/most/statemachine/xtext/validation/ParserValidator.java
@@ -0,0 +1,35 @@
+/*
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.validation;
+
+import org.eclipse.xtext.validation.Check;
+import org.eclipse.xtext.validation.CheckType;
+
+import swt.most.statemachine.FinalState;
+import swt.most.statemachine.InitialState;
+import swt.most.statemachine.StatemachinePackage;
+import swt.most.statemachine.Transition;
+
+/**
+ * This class contains custom validation rules. 
+ *
+ * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation
+ */
+public class ParserValidator extends AbstractParserValidator {
+	
+	/*
+	 * Small example of the validations of other non structural semantics.
+	 * It checks if the Transition to or from special states are correct, since these are not limited by the syntax (meta model).
+	 */
+	@Check(CheckType.FAST)
+	public void checkTransitionWithInvolvedSpecialStates( Transition transition ) {
+		if ( transition.getFrom() instanceof FinalState ) {
+			error("A transition can not start from a final state", StatemachinePackage.Literals.TRANSITION__FROM);
+		}
+		if ( transition.getTo() instanceof InitialState ) {
+			error("A transition can not end in an initial state", StatemachinePackage.Literals.TRANSITION__TO);
+		}
+	}
+	
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/formatting2/.ParserFormatter.java._trace b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/formatting2/.ParserFormatter.java._trace
new file mode 100644
index 0000000000000000000000000000000000000000..f1466224b5c01e0c42a9cd6d19bfbca5fd09d67a
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/formatting2/.ParserFormatter.java._trace differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/formatting2/.ParserFormatter.xtendbin b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/formatting2/.ParserFormatter.xtendbin
new file mode 100644
index 0000000000000000000000000000000000000000..d22c654acf07c193c8f99f8efc6cc1b81f948a9f
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/formatting2/.ParserFormatter.xtendbin differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/formatting2/ParserFormatter.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/formatting2/ParserFormatter.java
new file mode 100644
index 0000000000000000000000000000000000000000..39ffa7de33832634b424467e996aee4f6a043827
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/formatting2/ParserFormatter.java
@@ -0,0 +1,74 @@
+/**
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.formatting2;
+
+import com.google.inject.Inject;
+import java.util.Arrays;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.formatting2.AbstractFormatter2;
+import org.eclipse.xtext.formatting2.IFormattableDocument;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.xbase.lib.Extension;
+import swt.most.statemachine.Action;
+import swt.most.statemachine.FinalState;
+import swt.most.statemachine.InitialState;
+import swt.most.statemachine.NormalState;
+import swt.most.statemachine.StateMachine;
+import swt.most.statemachine.Transition;
+import swt.most.statemachine.xtext.services.ParserGrammarAccess;
+
+@SuppressWarnings("all")
+public class ParserFormatter extends AbstractFormatter2 {
+  @Inject
+  @Extension
+  private ParserGrammarAccess _parserGrammarAccess;
+
+  protected void _format(final StateMachine stateMachine, @Extension final IFormattableDocument document) {
+    document.<InitialState>format(stateMachine.getInitialstate());
+    EList<NormalState> _states = stateMachine.getStates();
+    for (final NormalState normalState : _states) {
+      document.<NormalState>format(normalState);
+    }
+    EList<FinalState> _finalstates = stateMachine.getFinalstates();
+    for (final FinalState finalState : _finalstates) {
+      document.<FinalState>format(finalState);
+    }
+    EList<Transition> _transitions = stateMachine.getTransitions();
+    for (final Transition transition : _transitions) {
+      document.<Transition>format(transition);
+    }
+  }
+
+  protected void _format(final NormalState normalState, @Extension final IFormattableDocument document) {
+    document.<Action>format(normalState.getEntry_());
+    document.<Action>format(normalState.getDo_());
+    document.<Action>format(normalState.getExit_());
+  }
+
+  public void format(final Object normalState, final IFormattableDocument document) {
+    if (normalState instanceof XtextResource) {
+      _format((XtextResource)normalState, document);
+      return;
+    } else if (normalState instanceof NormalState) {
+      _format((NormalState)normalState, document);
+      return;
+    } else if (normalState instanceof StateMachine) {
+      _format((StateMachine)normalState, document);
+      return;
+    } else if (normalState instanceof EObject) {
+      _format((EObject)normalState, document);
+      return;
+    } else if (normalState == null) {
+      _format((Void)null, document);
+      return;
+    } else if (normalState != null) {
+      _format(normalState, document);
+      return;
+    } else {
+      throw new IllegalArgumentException("Unhandled parameter types: " +
+        Arrays.<Object>asList(normalState, document).toString());
+    }
+  }
+}
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/generator/.ParserGenerator.java._trace b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/generator/.ParserGenerator.java._trace
new file mode 100644
index 0000000000000000000000000000000000000000..a5a7d58233f7bed7e2211dc84c2d0c728889ce2b
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/generator/.ParserGenerator.java._trace differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/generator/.ParserGenerator.xtendbin b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/generator/.ParserGenerator.xtendbin
new file mode 100644
index 0000000000000000000000000000000000000000..ef57e98ebab7924ec8ceadd5562b2fe83894012d
Binary files /dev/null and b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/generator/.ParserGenerator.xtendbin differ
diff --git a/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/generator/ParserGenerator.java b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/generator/ParserGenerator.java
new file mode 100644
index 0000000000000000000000000000000000000000..1d47795dc7d374bbbc5f0603630dbf1571986128
--- /dev/null
+++ b/domain_specific_language/textual/swt.most.statemachine.xtext/swt.most.statemachine.xtext/xtend-gen/swt/most/statemachine/xtext/generator/ParserGenerator.java
@@ -0,0 +1,21 @@
+/**
+ * generated by Xtext 2.35.0
+ */
+package swt.most.statemachine.xtext.generator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.xtext.generator.AbstractGenerator;
+import org.eclipse.xtext.generator.IFileSystemAccess2;
+import org.eclipse.xtext.generator.IGeneratorContext;
+
+/**
+ * Generates code from your model files on save.
+ * 
+ * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#code-generation
+ */
+@SuppressWarnings("all")
+public class ParserGenerator extends AbstractGenerator {
+  @Override
+  public void doGenerate(final Resource resource, final IFileSystemAccess2 fsa, final IGeneratorContext context) {
+  }
+}
diff --git a/metamodel/runtime/examples/.project b/metamodel/runtime/examples/.project
new file mode 100644
index 0000000000000000000000000000000000000000..0abae369dab5a23666bafac7c5f1207318ef4ab5
--- /dev/null
+++ b/metamodel/runtime/examples/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>examples</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/metamodel/runtime/examples/example.petrinet b/metamodel/runtime/examples/example.petrinet
new file mode 100644
index 0000000000000000000000000000000000000000..f42b0f5ce267f349924c4cd58ec3f65477ee7d2c
--- /dev/null
+++ b/metamodel/runtime/examples/example.petrinet
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<petrinet:PetriNet xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:petrinet="http://www.example.org/petrinet" name="Example">
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.3" source="//@elements.0"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.3" source="//@elements.2"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.3" target="//@elements.1"/>
+  <elements xsi:type="petrinet:Place" identifier="start">
+    <token/>
+  </elements>
+  <elements xsi:type="petrinet:Place" identifier="end"/>
+  <elements xsi:type="petrinet:Place" identifier="guard"/>
+  <elements xsi:type="petrinet:Transition" identifier="do something"/>
+</petrinet:PetriNet>
diff --git a/metamodel/runtime/examples/garagedoor.statemachine b/metamodel/runtime/examples/garagedoor.statemachine
new file mode 100644
index 0000000000000000000000000000000000000000..7e44c6fd1941ac4b5bb590516b2ae01299c04221
--- /dev/null
+++ b/metamodel/runtime/examples/garagedoor.statemachine
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<statemachine:StateMachine xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:statemachine="http://www.swt.org/most/statemachine" name="Garage Door">
+  <states name="Closed"/>
+  <states name="Open"/>
+  <states name="Opening"/>
+  <states name="Closing"/>
+  <finalstates name="final"/>
+  <initialstate name="initial"/>
+  <transitions from="//@initialstate" to="//@states.0"/>
+  <transitions from="//@states.0" to="//@states.2">
+    <trigger content="openDoor"/>
+    <action content="motor.upwards"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.1">
+    <guard content="stopper"/>
+    <action content="motor.stop"/>
+  </transitions>
+  <transitions from="//@states.1" to="//@states.3">
+    <trigger content="closeDoor"/>
+    <action content="motor.downwards"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.0">
+    <guard content="stopper"/>
+    <action content="motor.stop"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.2">
+    <trigger content="openDoor"/>
+    <action content="motor.upwards"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.3">
+    <trigger content="closeDoor"/>
+    <action content="motor.downwards"/>
+  </transitions>
+  <transitions from="//@states.0" to="//@finalstates.0">
+    <guard content="shutdown"/>
+  </transitions>
+  <transitions from="//@states.0" to="//@states.0">
+    <trigger content="closeDoor"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.3">
+    <trigger content="closeDoor"/>
+  </transitions>
+  <transitions from="//@states.1" to="//@states.1">
+    <trigger content="openDoor"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.2">
+    <trigger content="openDoor"/>
+  </transitions>
+</statemachine:StateMachine>
diff --git a/metamodel/runtime/examples/switch.statemachine b/metamodel/runtime/examples/switch.statemachine
new file mode 100644
index 0000000000000000000000000000000000000000..adbc574168f4eaff22326088d182925254a1c84e
--- /dev/null
+++ b/metamodel/runtime/examples/switch.statemachine
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<statemachine:StateMachine xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:statemachine="http://www.swt.org/most/statemachine" name="Switch">
+  <states name="on">
+    <do_ content="do_something"/>
+  </states>
+  <states name="off">
+    <do_ content="do_nothing"/>
+  </states>
+  <initialstate name="initial"/>
+  <transitions from="initial" to="off"/>
+  <transitions from="off" to="on">
+    <trigger content="flip"/>
+  </transitions>
+  <transitions from="on" to="off">
+    <trigger content="flip"/>
+  </transitions>
+</statemachine:StateMachine>
diff --git a/metamodel/swt.most.petrinet.edit/.classpath b/metamodel/swt.most.petrinet.edit/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..2377d859931ab6ce1560ef53742afa6e8f1cdefd
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/metamodel/swt.most.petrinet.edit/.gitignore b/metamodel/swt.most.petrinet.edit/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..ae3c1726048cd06b9a143e0376ed46dd9b9a8d53
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/metamodel/swt.most.petrinet.edit/.project b/metamodel/swt.most.petrinet.edit/.project
new file mode 100644
index 0000000000000000000000000000000000000000..c02cb91c7a108316b2e2265d92753230b267234f
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.petrinet.edit</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/metamodel/swt.most.petrinet.edit/.settings/org.eclipse.core.resources.prefs b/metamodel/swt.most.petrinet.edit/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/metamodel/swt.most.petrinet.edit/META-INF/MANIFEST.MF b/metamodel/swt.most.petrinet.edit/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..83a473245304ca7938e1a61f715555f23a184bc5
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: swt.most.petrinet.edit;singleton:=true
+Automatic-Module-Name: swt.most.petrinet.edit
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: swt.most.petrinet.provider.PetrinetEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: swt.most.petrinet.provider
+Require-Bundle: org.eclipse.core.runtime,
+ swt.most.petrinet;visibility:=reexport,
+ org.eclipse.emf.edit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/metamodel/swt.most.petrinet.edit/build.properties b/metamodel/swt.most.petrinet.edit/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..a3c4e32afd5c06df8bd4f0d371e56479e0822559
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src-gen/
+output.. = bin/
diff --git a/metamodel/swt.most.petrinet.edit/icons/full/obj16/Arc.gif b/metamodel/swt.most.petrinet.edit/icons/full/obj16/Arc.gif
new file mode 100644
index 0000000000000000000000000000000000000000..90d10f9470787d1465c462197b85d1d3621f84e4
Binary files /dev/null and b/metamodel/swt.most.petrinet.edit/icons/full/obj16/Arc.gif differ
diff --git a/metamodel/swt.most.petrinet.edit/icons/full/obj16/Element.gif b/metamodel/swt.most.petrinet.edit/icons/full/obj16/Element.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f8041d22553d3f326e3e82be501f2e9bac3794b0
Binary files /dev/null and b/metamodel/swt.most.petrinet.edit/icons/full/obj16/Element.gif differ
diff --git a/metamodel/swt.most.petrinet.edit/icons/full/obj16/IncomingArc.gif b/metamodel/swt.most.petrinet.edit/icons/full/obj16/IncomingArc.gif
new file mode 100644
index 0000000000000000000000000000000000000000..2b6925602975de13459862ee32e1b0d97549bf67
Binary files /dev/null and b/metamodel/swt.most.petrinet.edit/icons/full/obj16/IncomingArc.gif differ
diff --git a/metamodel/swt.most.petrinet.edit/icons/full/obj16/OutgoingArc.gif b/metamodel/swt.most.petrinet.edit/icons/full/obj16/OutgoingArc.gif
new file mode 100644
index 0000000000000000000000000000000000000000..a17dc7d88e993e89a1d5f913ddfab16b1676c5bb
Binary files /dev/null and b/metamodel/swt.most.petrinet.edit/icons/full/obj16/OutgoingArc.gif differ
diff --git a/metamodel/swt.most.petrinet.edit/icons/full/obj16/PetriNet.gif b/metamodel/swt.most.petrinet.edit/icons/full/obj16/PetriNet.gif
new file mode 100644
index 0000000000000000000000000000000000000000..106881e5d9bf05cb0cf3375cfd102e8039b8ace9
Binary files /dev/null and b/metamodel/swt.most.petrinet.edit/icons/full/obj16/PetriNet.gif differ
diff --git a/metamodel/swt.most.petrinet.edit/icons/full/obj16/Place.gif b/metamodel/swt.most.petrinet.edit/icons/full/obj16/Place.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e4bc22dd17e82d9350631bd55ad9671957cdaf50
Binary files /dev/null and b/metamodel/swt.most.petrinet.edit/icons/full/obj16/Place.gif differ
diff --git a/metamodel/swt.most.petrinet.edit/icons/full/obj16/Token.gif b/metamodel/swt.most.petrinet.edit/icons/full/obj16/Token.gif
new file mode 100644
index 0000000000000000000000000000000000000000..cb1755a712505aeaaa447d9b1cc5940e602f87b6
Binary files /dev/null and b/metamodel/swt.most.petrinet.edit/icons/full/obj16/Token.gif differ
diff --git a/metamodel/swt.most.petrinet.edit/icons/full/obj16/Transition.gif b/metamodel/swt.most.petrinet.edit/icons/full/obj16/Transition.gif
new file mode 100644
index 0000000000000000000000000000000000000000..7bac4fd3808df6247660dfb8d76e15609f279841
Binary files /dev/null and b/metamodel/swt.most.petrinet.edit/icons/full/obj16/Transition.gif differ
diff --git a/metamodel/swt.most.petrinet.edit/plugin.properties b/metamodel/swt.most.petrinet.edit/plugin.properties
new file mode 100644
index 0000000000000000000000000000000000000000..880eee4f1e4a942bd5f44ab5f53b5bc060354da2
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/plugin.properties
@@ -0,0 +1,37 @@
+#
+
+pluginName = swt.most.petrinet Edit Support
+providerName = www.example.org
+
+_UI_CreateChild_text = {0}
+_UI_CreateChild_text2 = {1} {0}
+_UI_CreateChild_text3 = {1}
+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description = The {0} of the {1}
+
+_UI_PetriNet_type = Petri Net
+_UI_Element_type = Element
+_UI_Arc_type = Arc
+_UI_IncomingArc_type = Incoming Arc
+_UI_OutgoingArc_type = Outgoing Arc
+_UI_Place_type = Place
+_UI_Transition_type = Transition
+_UI_Token_type = Token
+_UI_Unknown_type = Object
+
+_UI_Unknown_datatype= Value
+
+_UI_PetriNet_name_feature = Name
+_UI_PetriNet_arcs_feature = Arcs
+_UI_PetriNet_elements_feature = Elements
+_UI_Element_identifier_feature = Identifier
+_UI_IncomingArc_target_feature = Target
+_UI_IncomingArc_source_feature = Source
+_UI_OutgoingArc_source_feature = Source
+_UI_OutgoingArc_target_feature = Target
+_UI_Place_token_feature = Token
+_UI_Unknown_feature = Unspecified
+
diff --git a/metamodel/swt.most.petrinet.edit/plugin.xml b/metamodel/swt.most.petrinet.edit/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b1f5fbcfadbbf0d027071aa1f40862f96d97e64
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <!-- @generated petrinet -->
+      <factory
+            uri="http://www.example.org/petrinet"
+            class="swt.most.petrinet.provider.PetrinetItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+</plugin>
diff --git a/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/ArcItemProvider.java b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/ArcItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ba07602ccb6a53e041d2e9cf0c908d2bdd196f2
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/ArcItemProvider.java
@@ -0,0 +1,122 @@
+/**
+ */
+package swt.most.petrinet.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.petrinet.Arc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ArcItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArcItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns Arc.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Arc"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_Arc_type");
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return PetrinetEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/ElementItemProvider.java b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/ElementItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..02055d5928827fee79f5957809f5853ebc197edf
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/ElementItemProvider.java
@@ -0,0 +1,153 @@
+/**
+ */
+package swt.most.petrinet.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import swt.most.petrinet.Element;
+import swt.most.petrinet.PetrinetPackage;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.petrinet.Element} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ElementItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ElementItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addIdentifierPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Identifier feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIdentifierPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_Element_identifier_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_Element_identifier_feature",
+								"_UI_Element_type"),
+						PetrinetPackage.Literals.ELEMENT__IDENTIFIER, true, false, false,
+						ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This returns Element.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Element"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Element) object).getIdentifier();
+		return label == null || label.length() == 0 ? getString("_UI_Element_type")
+				: getString("_UI_Element_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Element.class)) {
+		case PetrinetPackage.ELEMENT__IDENTIFIER:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return PetrinetEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/IncomingArcItemProvider.java b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/IncomingArcItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..904408d5a07fa85184824c354626affbe0a94f86
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/IncomingArcItemProvider.java
@@ -0,0 +1,137 @@
+/**
+ */
+package swt.most.petrinet.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import swt.most.petrinet.PetrinetPackage;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.petrinet.IncomingArc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IncomingArcItemProvider extends ArcItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IncomingArcItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTargetPropertyDescriptor(object);
+			addSourcePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Target feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTargetPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_IncomingArc_target_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_IncomingArc_target_feature",
+								"_UI_IncomingArc_type"),
+						PetrinetPackage.Literals.INCOMING_ARC__TARGET, true, false, true, null, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Source feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSourcePropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_IncomingArc_source_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_IncomingArc_source_feature",
+								"_UI_IncomingArc_type"),
+						PetrinetPackage.Literals.INCOMING_ARC__SOURCE, true, false, true, null, null, null));
+	}
+
+	/**
+	 * This returns IncomingArc.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/IncomingArc"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_IncomingArc_type");
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/OutgoingArcItemProvider.java b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/OutgoingArcItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..dadfd5ddfd98367bd90466044ad9f0f2fbad8cd0
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/OutgoingArcItemProvider.java
@@ -0,0 +1,137 @@
+/**
+ */
+package swt.most.petrinet.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import swt.most.petrinet.PetrinetPackage;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.petrinet.OutgoingArc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class OutgoingArcItemProvider extends ArcItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OutgoingArcItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSourcePropertyDescriptor(object);
+			addTargetPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Source feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSourcePropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_OutgoingArc_source_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_OutgoingArc_source_feature",
+								"_UI_OutgoingArc_type"),
+						PetrinetPackage.Literals.OUTGOING_ARC__SOURCE, true, false, true, null, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Target feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTargetPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_OutgoingArc_target_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_OutgoingArc_target_feature",
+								"_UI_OutgoingArc_type"),
+						PetrinetPackage.Literals.OUTGOING_ARC__TARGET, true, false, true, null, null, null));
+	}
+
+	/**
+	 * This returns OutgoingArc.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/OutgoingArc"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_OutgoingArc_type");
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PetriNetItemProvider.java b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PetriNetItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..1671c3f3c263e7694179d76d829aadd04637c63a
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PetriNetItemProvider.java
@@ -0,0 +1,203 @@
+/**
+ */
+package swt.most.petrinet.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import swt.most.petrinet.PetriNet;
+import swt.most.petrinet.PetrinetFactory;
+import swt.most.petrinet.PetrinetPackage;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.petrinet.PetriNet} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PetriNetItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetriNetItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addNamePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_PetriNet_name_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_PetriNet_name_feature",
+								"_UI_PetriNet_type"),
+						PetrinetPackage.Literals.PETRI_NET__NAME, true, false, false,
+						ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(PetrinetPackage.Literals.PETRI_NET__ARCS);
+			childrenFeatures.add(PetrinetPackage.Literals.PETRI_NET__ELEMENTS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns PetriNet.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/PetriNet"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((PetriNet) object).getName();
+		return label == null || label.length() == 0 ? getString("_UI_PetriNet_type")
+				: getString("_UI_PetriNet_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(PetriNet.class)) {
+		case PetrinetPackage.PETRI_NET__NAME:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		case PetrinetPackage.PETRI_NET__ARCS:
+		case PetrinetPackage.PETRI_NET__ELEMENTS:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(createChildParameter(PetrinetPackage.Literals.PETRI_NET__ARCS,
+				PetrinetFactory.eINSTANCE.createIncomingArc()));
+
+		newChildDescriptors.add(createChildParameter(PetrinetPackage.Literals.PETRI_NET__ARCS,
+				PetrinetFactory.eINSTANCE.createOutgoingArc()));
+
+		newChildDescriptors.add(createChildParameter(PetrinetPackage.Literals.PETRI_NET__ELEMENTS,
+				PetrinetFactory.eINSTANCE.createPlace()));
+
+		newChildDescriptors.add(createChildParameter(PetrinetPackage.Literals.PETRI_NET__ELEMENTS,
+				PetrinetFactory.eINSTANCE.createTransition()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return PetrinetEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PetrinetEditPlugin.java b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PetrinetEditPlugin.java
new file mode 100644
index 0000000000000000000000000000000000000000..21406d271b53d7cd41e4293e96c53a60b8151502
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PetrinetEditPlugin.java
@@ -0,0 +1,87 @@
+/**
+ */
+package swt.most.petrinet.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Petrinet edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class PetrinetEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final PetrinetEditPlugin INSTANCE = new PetrinetEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetrinetEditPlugin() {
+		super(new ResourceLocator[] {});
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PetrinetItemProviderAdapterFactory.java b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PetrinetItemProviderAdapterFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..b80c66222fe76ecd17766d8e2dd1a45d8212ed43
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PetrinetItemProviderAdapterFactory.java
@@ -0,0 +1,326 @@
+/**
+ */
+package swt.most.petrinet.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import swt.most.petrinet.util.PetrinetAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PetrinetItemProviderAdapterFactory extends PetrinetAdapterFactory
+		implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetrinetItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.petrinet.PetriNet} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PetriNetItemProvider petriNetItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.petrinet.PetriNet}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createPetriNetAdapter() {
+		if (petriNetItemProvider == null) {
+			petriNetItemProvider = new PetriNetItemProvider(this);
+		}
+
+		return petriNetItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.petrinet.IncomingArc} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IncomingArcItemProvider incomingArcItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.petrinet.IncomingArc}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createIncomingArcAdapter() {
+		if (incomingArcItemProvider == null) {
+			incomingArcItemProvider = new IncomingArcItemProvider(this);
+		}
+
+		return incomingArcItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.petrinet.OutgoingArc} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OutgoingArcItemProvider outgoingArcItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.petrinet.OutgoingArc}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createOutgoingArcAdapter() {
+		if (outgoingArcItemProvider == null) {
+			outgoingArcItemProvider = new OutgoingArcItemProvider(this);
+		}
+
+		return outgoingArcItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.petrinet.Place} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PlaceItemProvider placeItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.petrinet.Place}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createPlaceAdapter() {
+		if (placeItemProvider == null) {
+			placeItemProvider = new PlaceItemProvider(this);
+		}
+
+		return placeItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.petrinet.Transition} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransitionItemProvider transitionItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.petrinet.Transition}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTransitionAdapter() {
+		if (transitionItemProvider == null) {
+			transitionItemProvider = new TransitionItemProvider(this);
+		}
+
+		return transitionItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.petrinet.Token} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TokenItemProvider tokenItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.petrinet.Token}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTokenAdapter() {
+		if (tokenItemProvider == null) {
+			tokenItemProvider = new TokenItemProvider(this);
+		}
+
+		return tokenItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>) type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (petriNetItemProvider != null)
+			petriNetItemProvider.dispose();
+		if (incomingArcItemProvider != null)
+			incomingArcItemProvider.dispose();
+		if (outgoingArcItemProvider != null)
+			outgoingArcItemProvider.dispose();
+		if (placeItemProvider != null)
+			placeItemProvider.dispose();
+		if (transitionItemProvider != null)
+			transitionItemProvider.dispose();
+		if (tokenItemProvider != null)
+			tokenItemProvider.dispose();
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PlaceItemProvider.java b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PlaceItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b6411d274640c2de2138b465746f0c4d0d452fb
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/PlaceItemProvider.java
@@ -0,0 +1,150 @@
+/**
+ */
+package swt.most.petrinet.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import swt.most.petrinet.PetrinetFactory;
+import swt.most.petrinet.PetrinetPackage;
+import swt.most.petrinet.Place;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.petrinet.Place} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PlaceItemProvider extends ElementItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PlaceItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(PetrinetPackage.Literals.PLACE__TOKEN);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Place.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Place"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Place) object).getIdentifier();
+		return label == null || label.length() == 0 ? getString("_UI_Place_type")
+				: getString("_UI_Place_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Place.class)) {
+		case PetrinetPackage.PLACE__TOKEN:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(
+				createChildParameter(PetrinetPackage.Literals.PLACE__TOKEN, PetrinetFactory.eINSTANCE.createToken()));
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/TokenItemProvider.java b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/TokenItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..6a47e008d272df85a026d98dbe6de0fb0cf80c9a
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/TokenItemProvider.java
@@ -0,0 +1,122 @@
+/**
+ */
+package swt.most.petrinet.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.petrinet.Token} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TokenItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TokenItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns Token.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Token"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_Token_type");
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return PetrinetEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/TransitionItemProvider.java b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/TransitionItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf8192cbc29ceb58a43248a2ee4fc0494a13a43d
--- /dev/null
+++ b/metamodel/swt.most.petrinet.edit/src-gen/swt/most/petrinet/provider/TransitionItemProvider.java
@@ -0,0 +1,106 @@
+/**
+ */
+package swt.most.petrinet.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import swt.most.petrinet.Transition;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.petrinet.Transition} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TransitionItemProvider extends ElementItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransitionItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns Transition.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Transition"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Transition) object).getIdentifier();
+		return label == null || label.length() == 0 ? getString("_UI_Transition_type")
+				: getString("_UI_Transition_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.editor/.classpath b/metamodel/swt.most.petrinet.editor/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..2377d859931ab6ce1560ef53742afa6e8f1cdefd
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/metamodel/swt.most.petrinet.editor/.gitignore b/metamodel/swt.most.petrinet.editor/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..ae3c1726048cd06b9a143e0376ed46dd9b9a8d53
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/metamodel/swt.most.petrinet.editor/.project b/metamodel/swt.most.petrinet.editor/.project
new file mode 100644
index 0000000000000000000000000000000000000000..ad91070d3c985bfed7dba6ff375cdbdfe753ef0b
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.petrinet.editor</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/metamodel/swt.most.petrinet.editor/.settings/org.eclipse.core.resources.prefs b/metamodel/swt.most.petrinet.editor/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/metamodel/swt.most.petrinet.editor/META-INF/MANIFEST.MF b/metamodel/swt.most.petrinet.editor/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..3928f845a02a7b20837a0b6b090be511425d1a5c
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: swt.most.petrinet.editor;singleton:=true
+Automatic-Module-Name: swt.most.petrinet.editor
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: swt.most.petrinet.presentation.PetrinetEditorPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: swt.most.petrinet.presentation
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources;visibility:=reexport,
+ swt.most.petrinet.edit;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.eclipse.emf.edit.ui;visibility:=reexport,
+ org.eclipse.ui.ide;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/metamodel/swt.most.petrinet.editor/build.properties b/metamodel/swt.most.petrinet.editor/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..11a57196868eef7d9f65dc239cdf49f3b6638ac8
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src-gen/
+output.. = bin
diff --git a/metamodel/swt.most.petrinet.editor/icons/full/obj16/PetrinetModelFile.gif b/metamodel/swt.most.petrinet.editor/icons/full/obj16/PetrinetModelFile.gif
new file mode 100644
index 0000000000000000000000000000000000000000..689b7281906a8495692dabb9df11ed27df1f312f
Binary files /dev/null and b/metamodel/swt.most.petrinet.editor/icons/full/obj16/PetrinetModelFile.gif differ
diff --git a/metamodel/swt.most.petrinet.editor/icons/full/wizban/NewPetrinet.gif b/metamodel/swt.most.petrinet.editor/icons/full/wizban/NewPetrinet.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e976e0776d200e1ce72d13ee80784885faff018e
Binary files /dev/null and b/metamodel/swt.most.petrinet.editor/icons/full/wizban/NewPetrinet.gif differ
diff --git a/metamodel/swt.most.petrinet.editor/plugin.properties b/metamodel/swt.most.petrinet.editor/plugin.properties
new file mode 100644
index 0000000000000000000000000000000000000000..37d15e17cd9883555afe1b0a6d9fd53942aac426
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/plugin.properties
@@ -0,0 +1,53 @@
+#
+
+pluginName = swt.most.petrinet Editor
+providerName = www.example.org
+
+_UI_PetrinetEditor_menu = &Petrinet Editor
+
+_UI_CreateChild_menu_item = &New Child
+_UI_CreateSibling_menu_item = N&ew Sibling
+
+_UI_ShowPropertiesView_menu_item = Show &Properties View
+_UI_RefreshViewer_menu_item = &Refresh
+
+_UI_SelectionPage_label = Selection
+_UI_ParentPage_label = Parent
+_UI_ListPage_label = List
+_UI_TreePage_label = Tree
+_UI_TablePage_label = Table
+_UI_TreeWithColumnsPage_label = Tree with Columns
+_UI_ObjectColumn_label = Object
+_UI_SelfColumn_label = Self
+
+_UI_NoObjectSelected = Selected Nothing
+_UI_SingleObjectSelected = Selected Object: {0}
+_UI_MultiObjectSelected = Selected {0} Objects
+
+_UI_OpenEditorError_label = Open Editor
+
+_UI_Wizard_category = Example EMF Model Creation Wizards
+
+_UI_CreateModelError_message = Problems encountered in file "{0}"
+
+_UI_PetrinetModelWizard_label = Petrinet Model
+_UI_PetrinetModelWizard_description = Create a new Petrinet model
+
+_UI_PetrinetEditor_label = Petrinet Model Editor
+
+_UI_PetrinetEditorFilenameDefaultBase = My
+_UI_PetrinetEditorFilenameExtensions = petrinet
+
+_UI_Wizard_label = New
+
+_WARN_FilenameExtension = The file name must end in ''.{0}''
+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}
+
+_UI_ModelObject = &Model Object
+_UI_XMLEncoding = &XML Encoding
+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1
+_UI_Wizard_initial_object_description = Select a model object to create
+
+_UI_FileConflict_label = File Conflict
+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor.  Do you wish to discard this editor's changes?
+
diff --git a/metamodel/swt.most.petrinet.editor/plugin.xml b/metamodel/swt.most.petrinet.editor/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0aad49100eba42f7cdf3d11bd60e1d4b15bc6130
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/plugin.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.ui.newWizards">
+      <!-- @generated petrinet -->
+      <category
+            id="org.eclipse.emf.ecore.Wizard.category.ID"
+            name="%_UI_Wizard_category"/>
+      <wizard
+            id="swt.most.petrinet.presentation.PetrinetModelWizardID"
+            name="%_UI_PetrinetModelWizard_label"
+            class="swt.most.petrinet.presentation.PetrinetModelWizard"
+            category="org.eclipse.emf.ecore.Wizard.category.ID"
+            icon="icons/full/obj16/PetrinetModelFile.gif">
+         <description>%_UI_PetrinetModelWizard_description</description>
+         <selection class="org.eclipse.core.resources.IResource"/>
+      </wizard>
+   </extension>
+
+   <extension point="org.eclipse.ui.editors">
+      <!-- @generated petrinet -->
+      <editor
+            id="swt.most.petrinet.presentation.PetrinetEditorID"
+            name="%_UI_PetrinetEditor_label"
+            icon="icons/full/obj16/PetrinetModelFile.gif"
+            extensions="petrinet"
+            class="swt.most.petrinet.presentation.PetrinetEditor"
+            contributorClass="swt.most.petrinet.presentation.PetrinetActionBarContributor">
+      </editor>
+   </extension>
+
+</plugin>
diff --git a/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetActionBarContributor.java b/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetActionBarContributor.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa464a3fd2800eadf66ffd8c13a8a24b92fc7b06
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetActionBarContributor.java
@@ -0,0 +1,422 @@
+/**
+ */
+package swt.most.petrinet.presentation;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Petrinet model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PetrinetActionBarContributor extends EditingDomainActionBarContributor
+		implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction = new Action(
+			PetrinetEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {
+		@Override
+		public void run() {
+			try {
+				getPage().showView("org.eclipse.ui.views.PropertySheet");
+			} catch (PartInitException exception) {
+				PetrinetEditorPlugin.INSTANCE.log(exception);
+			}
+		}
+	};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction = new Action(
+			PetrinetEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {
+		@Override
+		public boolean isEnabled() {
+			return activeEditorPart instanceof IViewerProvider;
+		}
+
+		@Override
+		public void run() {
+			if (activeEditorPart instanceof IViewerProvider) {
+				Viewer viewer = ((IViewerProvider) activeEditorPart).getViewer();
+				if (viewer != null) {
+					viewer.refresh();
+				}
+			}
+		}
+	};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetrinetActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		super.contributeToToolBar(toolBarManager);
+		toolBarManager.add(new Separator("petrinet-settings"));
+		toolBarManager.add(new Separator("petrinet-additions"));
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(
+				PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetEditor_menu"), "swt.most.petrinetMenuID");
+		menuManager.insertAfter("additions", submenuManager);
+		submenuManager.add(new Separator("settings"));
+		submenuManager.add(new Separator("actions"));
+		submenuManager.add(new Separator("additions"));
+		submenuManager.add(new Separator("additions-end"));
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(PetrinetEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+		submenuManager.insertBefore("additions", createChildMenuManager);
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(
+				PetrinetEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+		submenuManager.insertBefore("additions", createSiblingMenuManager);
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager menuManager) {
+				menuManager.updateAll(true);
+			}
+		});
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		} else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection) selection).size() == 1) {
+			Object object = ((IStructuredSelection) selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider) activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions,
+			String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				} else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem) contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem) contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(PetrinetEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager);
+
+		submenuManager = new MenuManager(PetrinetEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager);
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions"));
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction);
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());
+		menuManager.insertAfter("ui-actions", refreshViewerAction);
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetEditor.java b/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetEditor.java
new file mode 100644
index 0000000000000000000000000000000000000000..32669ff88f01e9fdee3379865eed40e104adebbd
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetEditor.java
@@ -0,0 +1,1775 @@
+/**
+ */
+package swt.most.petrinet.presentation;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+
+import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import swt.most.petrinet.provider.PetrinetItemProviderAdapterFactory;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+/**
+ * This is an example of a Petrinet model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PetrinetEditor extends MultiPageEditorPart
+		implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected List<PropertySheetPage> propertySheetPages = new ArrayList<PropertySheetPage>();
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This inverts the roll of parent and child in the content provider and show parents as a tree.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer parentViewer;
+
+	/**
+	 * This shows how a tree view works.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer treeViewer;
+
+	/**
+	 * This shows how a list view works.
+	 * A list viewer doesn't support icons.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ListViewer listViewer;
+
+	/**
+	 * This shows how a table view works.
+	 * A table can be used as a list with icons.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TableViewer tableViewer;
+
+	/**
+	 * This shows how a tree view with columns works.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer treeViewerWithColumns;
+
+	/**
+	 * This keeps track of the active viewer pane, in the book.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ViewerPane currentViewerPane;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener = new IPartListener() {
+		public void partActivated(IWorkbenchPart p) {
+			if (p instanceof ContentOutline) {
+				if (((ContentOutline) p).getCurrentPage() == contentOutlinePage) {
+					getActionBarContributor().setActiveEditor(PetrinetEditor.this);
+
+					setCurrentViewer(contentOutlineViewer);
+				}
+			} else if (p instanceof PropertySheet) {
+				if (propertySheetPages.contains(((PropertySheet) p).getCurrentPage())) {
+					getActionBarContributor().setActiveEditor(PetrinetEditor.this);
+					handleActivate();
+				}
+			} else if (p == PetrinetEditor.this) {
+				handleActivate();
+			}
+		}
+
+		public void partBroughtToTop(IWorkbenchPart p) {
+			// Ignore.
+		}
+
+		public void partClosed(IWorkbenchPart p) {
+			// Ignore.
+		}
+
+		public void partDeactivated(IWorkbenchPart p) {
+			// Ignore.
+		}
+
+		public void partOpened(IWorkbenchPart p) {
+			// Ignore.
+		}
+	};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = new EContentAdapter() {
+		protected boolean dispatching;
+
+		@Override
+		public void notifyChanged(Notification notification) {
+			if (notification.getNotifier() instanceof Resource) {
+				switch (notification.getFeatureID(Resource.class)) {
+				case Resource.RESOURCE__IS_LOADED:
+				case Resource.RESOURCE__ERRORS:
+				case Resource.RESOURCE__WARNINGS: {
+					Resource resource = (Resource) notification.getNotifier();
+					Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+					if (diagnostic.getSeverity() != Diagnostic.OK) {
+						resourceToDiagnosticMap.put(resource, diagnostic);
+					} else {
+						resourceToDiagnosticMap.remove(resource);
+					}
+					dispatchUpdateProblemIndication();
+					break;
+				}
+				}
+			} else {
+				super.notifyChanged(notification);
+			}
+		}
+
+		protected void dispatchUpdateProblemIndication() {
+			if (updateProblemIndication && !dispatching) {
+				dispatching = true;
+				getSite().getShell().getDisplay().asyncExec(new Runnable() {
+					public void run() {
+						dispatching = false;
+						updateProblemIndication();
+					}
+				});
+			}
+		}
+
+		@Override
+		protected void setTarget(Resource target) {
+			basicSetTarget(target);
+		}
+
+		@Override
+		protected void unsetTarget(Resource target) {
+			basicUnsetTarget(target);
+			resourceToDiagnosticMap.remove(target);
+			dispatchUpdateProblemIndication();
+		}
+	};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener = new IResourceChangeListener() {
+		public void resourceChanged(IResourceChangeEvent event) {
+			IResourceDelta delta = event.getDelta();
+			try {
+				class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+					protected ResourceSet resourceSet = editingDomain.getResourceSet();
+					protected Collection<Resource> changedResources = new ArrayList<Resource>();
+					protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+					public boolean visit(IResourceDelta delta) {
+						if (delta.getResource().getType() == IResource.FILE) {
+							if (delta.getKind() == IResourceDelta.REMOVED || delta.getKind() == IResourceDelta.CHANGED
+									&& delta.getFlags() != IResourceDelta.MARKERS) {
+								Resource resource = resourceSet.getResource(
+										URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+								if (resource != null) {
+									if (delta.getKind() == IResourceDelta.REMOVED) {
+										removedResources.add(resource);
+									} else if (!savedResources.remove(resource)) {
+										changedResources.add(resource);
+									}
+								}
+							}
+							return false;
+						}
+
+						return true;
+					}
+
+					public Collection<Resource> getChangedResources() {
+						return changedResources;
+					}
+
+					public Collection<Resource> getRemovedResources() {
+						return removedResources;
+					}
+				}
+
+				final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+				delta.accept(visitor);
+
+				if (!visitor.getRemovedResources().isEmpty()) {
+					getSite().getShell().getDisplay().asyncExec(new Runnable() {
+						public void run() {
+							removedResources.addAll(visitor.getRemovedResources());
+							if (!isDirty()) {
+								getSite().getPage().closeEditor(PetrinetEditor.this, false);
+							}
+						}
+					});
+				}
+
+				if (!visitor.getChangedResources().isEmpty()) {
+					getSite().getShell().getDisplay().asyncExec(new Runnable() {
+						public void run() {
+							changedResources.addAll(visitor.getChangedResources());
+							if (getSite().getPage().getActiveEditor() == PetrinetEditor.this) {
+								handleActivate();
+							}
+						}
+					});
+				}
+			} catch (CoreException exception) {
+				PetrinetEditorPlugin.INSTANCE.log(exception);
+			}
+		}
+	};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+			editingDomain.getResourceToReadOnlyMap().clear();
+
+			// Refresh any actions that may become enabled or disabled.
+			//
+			setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(PetrinetEditor.this, false);
+			} else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		} else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			ResourceSet resourceSet = editingDomain.getResourceSet();
+			if (isDirty()) {
+				changedResources.addAll(resourceSet.getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(resourceSet.getLoadOptions());
+					} catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic = new BasicDiagnostic(Diagnostic.OK, "swt.most.petrinet.editor", 0, null,
+					new Object[] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart) getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			} else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				} catch (PartInitException exception) {
+					PetrinetEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				try {
+					markerHelper.updateMarkers(diagnostic);
+				} catch (CoreException exception) {
+					PetrinetEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return MessageDialog.openQuestion(getSite().getShell(), getString("_UI_FileConflict_label"),
+				getString("_WARN_FileConflict"));
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetrinetEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new PetrinetItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener(new CommandStackListener() {
+			public void commandStackChanged(final EventObject event) {
+				getContainer().getDisplay().asyncExec(new Runnable() {
+					public void run() {
+						firePropertyChange(IEditorPart.PROP_DIRTY);
+
+						// Try to select the affected objects.
+						//
+						Command mostRecentCommand = ((CommandStack) event.getSource()).getMostRecentCommand();
+						if (mostRecentCommand != null) {
+							setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+						}
+						for (Iterator<PropertySheetPage> i = propertySheetPages.iterator(); i.hasNext();) {
+							PropertySheetPage propertySheetPage = i.next();
+							if (propertySheetPage.getControl() == null || propertySheetPage.getControl().isDisposed()) {
+								i.remove();
+							} else {
+								propertySheetPage.refresh();
+							}
+						}
+					}
+				});
+			}
+		});
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable = new Runnable() {
+				public void run() {
+					// Try to select the items in the current content viewer of the editor.
+					//
+					if (currentViewer != null) {
+						currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+					}
+				}
+			};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object[] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object[] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewerPane(ViewerPane viewerPane) {
+		if (currentViewerPane != viewerPane) {
+			if (currentViewerPane != null) {
+				currentViewerPane.showFocus(false);
+			}
+			currentViewerPane = viewerPane;
+		}
+		setCurrentViewer(currentViewerPane.getViewer());
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener = new ISelectionChangedListener() {
+					// This just notifies those things that are affected by the section.
+					//
+					public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+						setSelection(selectionChangedEvent.getSelection());
+					}
+				};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp");
+		contextMenu.add(new Separator("additions"));
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu = contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance(), LocalSelectionTransfer.getTransfer(),
+				FileTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput(), editingDomain.getResourceSet().getURIConverter());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		} catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		boolean hasErrors = !resource.getErrors().isEmpty();
+		if (hasErrors || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic = new BasicDiagnostic(hasErrors ? Diagnostic.ERROR : Diagnostic.WARNING,
+					"swt.most.petrinet.editor", 0, getString("_UI_CreateModelError_message", resource.getURI()),
+					new Object[] { exception == null ? (Object) resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		} else if (exception != null) {
+			return new BasicDiagnostic(Diagnostic.ERROR, "swt.most.petrinet.editor", 0,
+					getString("_UI_CreateModelError_message", resource.getURI()), new Object[] { exception });
+		} else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), PetrinetEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						Tree tree = new Tree(composite, SWT.MULTI);
+						TreeViewer newTreeViewer = new TreeViewer(tree);
+						return newTreeViewer;
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+
+				selectionViewer = (TreeViewer) viewerPane.getViewer();
+				selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				selectionViewer.setUseHashlookup(true);
+
+				selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+				selectionViewer.setInput(editingDomain.getResourceSet());
+				selectionViewer.setSelection(
+						new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+				viewerPane.setTitle(editingDomain.getResourceSet());
+
+				new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+				createContextMenuFor(selectionViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_SelectionPage_label"));
+			}
+
+			// Create a page for the parent tree view.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), PetrinetEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						Tree tree = new Tree(composite, SWT.MULTI);
+						TreeViewer newTreeViewer = new TreeViewer(tree);
+						return newTreeViewer;
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+
+				parentViewer = (TreeViewer) viewerPane.getViewer();
+				parentViewer.setAutoExpandLevel(30);
+				parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));
+				parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(parentViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_ParentPage_label"));
+			}
+
+			// This is the page for the list viewer
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), PetrinetEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new ListViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+				listViewer = (ListViewer) viewerPane.getViewer();
+				listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(listViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_ListPage_label"));
+			}
+
+			// This is the page for the tree viewer
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), PetrinetEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new TreeViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+				treeViewer = (TreeViewer) viewerPane.getViewer();
+				treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
+
+				createContextMenuFor(treeViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TreePage_label"));
+			}
+
+			// This is the page for the table viewer.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), PetrinetEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new TableViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+				tableViewer = (TableViewer) viewerPane.getViewer();
+
+				Table table = tableViewer.getTable();
+				TableLayout layout = new TableLayout();
+				table.setLayout(layout);
+				table.setHeaderVisible(true);
+				table.setLinesVisible(true);
+
+				TableColumn objectColumn = new TableColumn(table, SWT.NONE);
+				layout.addColumnData(new ColumnWeightData(3, 100, true));
+				objectColumn.setText(getString("_UI_ObjectColumn_label"));
+				objectColumn.setResizable(true);
+
+				TableColumn selfColumn = new TableColumn(table, SWT.NONE);
+				layout.addColumnData(new ColumnWeightData(2, 100, true));
+				selfColumn.setText(getString("_UI_SelfColumn_label"));
+				selfColumn.setResizable(true);
+
+				tableViewer.setColumnProperties(new String[] { "a", "b" });
+				tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(tableViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TablePage_label"));
+			}
+
+			// This is the page for the table tree viewer.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), PetrinetEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new TreeViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+
+				treeViewerWithColumns = (TreeViewer) viewerPane.getViewer();
+
+				Tree tree = treeViewerWithColumns.getTree();
+				tree.setLayoutData(new FillLayout());
+				tree.setHeaderVisible(true);
+				tree.setLinesVisible(true);
+
+				TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);
+				objectColumn.setText(getString("_UI_ObjectColumn_label"));
+				objectColumn.setResizable(true);
+				objectColumn.setWidth(250);
+
+				TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);
+				selfColumn.setText(getString("_UI_SelfColumn_label"));
+				selfColumn.setResizable(true);
+				selfColumn.setWidth(200);
+
+				treeViewerWithColumns.setColumnProperties(new String[] { "a", "b" });
+				treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(treeViewerWithColumns);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));
+			}
+
+			getSite().getShell().getDisplay().asyncExec(new Runnable() {
+				public void run() {
+					if (!getContainer().isDisposed()) {
+						setActivePage(0);
+					}
+				}
+			});
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener(new ControlAdapter() {
+			boolean guard = false;
+
+			@Override
+			public void controlResized(ControlEvent event) {
+				if (!guard) {
+					guard = true;
+					hideTabs();
+					guard = false;
+				}
+			}
+		});
+
+		getSite().getShell().getDisplay().asyncExec(new Runnable() {
+			public void run() {
+				updateProblemIndication();
+			}
+		});
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, "");
+			if (getContainer() instanceof CTabFolder) {
+				Point point = getContainer().getSize();
+				Rectangle clientArea = getContainer().getClientArea();
+				getContainer().setSize(point.x, 2 * point.y - clientArea.height - clientArea.y);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label"));
+			if (getContainer() instanceof CTabFolder) {
+				Point point = getContainer().getSize();
+				Rectangle clientArea = getContainer().getClientArea();
+				getContainer().setSize(point.x, clientArea.height + clientArea.y);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public <T> T getAdapter(Class<T> key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? key.cast(getContentOutlinePage()) : null;
+		} else if (key.equals(IPropertySheetPage.class)) {
+			return key.cast(getPropertySheetPage());
+		} else if (key.equals(IGotoMarker.class)) {
+			return key.cast(this);
+		} else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setUseHashlookup(true);
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+						// Select the root object in the view.
+						//
+						contentOutlineViewer.setSelection(
+								new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager,
+						IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener(new ISelectionChangedListener() {
+				// This ensures that we handle selections correctly.
+				//
+				public void selectionChanged(SelectionChangedEvent event) {
+					handleContentOutlineSelection(event.getSelection());
+				}
+			});
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		PropertySheetPage propertySheetPage = new ExtendedPropertySheetPage(editingDomain,
+				ExtendedPropertySheetPage.Decoration.NONE, null, 0, false) {
+			@Override
+			public void setSelectionToViewer(List<?> selection) {
+				PetrinetEditor.this.setSelectionToViewer(selection);
+				PetrinetEditor.this.setFocus();
+			}
+
+			@Override
+			public void setActionBars(IActionBars actionBars) {
+				super.setActionBars(actionBars);
+				getActionBarContributor().shareGlobalActions(this, actionBars);
+			}
+		};
+		propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		propertySheetPages.add(propertySheetPage);
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection) selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				// If it's the selection viewer, then we want it to select the same selection as this selection.
+				//
+				if (currentViewerPane.getViewer() == selectionViewer) {
+					ArrayList<Object> selectionList = new ArrayList<Object>();
+					selectionList.add(selectedElement);
+					while (selectedElements.hasNext()) {
+						selectionList.add(selectedElements.next());
+					}
+
+					// Set the selection to the widget.
+					//
+					selectionViewer.setSelection(new StructuredSelection(selectionList));
+				} else {
+					// Set the input to the widget.
+					//
+					if (currentViewerPane.getViewer().getInput() != selectedElement) {
+						currentViewerPane.getViewer().setInput(selectedElement);
+						currentViewerPane.setTitle(selectedElement);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack) editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+		saveOptions.put(Resource.OPTION_LINE_DELIMITER, Resource.OPTION_LINE_DELIMITER_UNSPECIFIED);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+			// This is the method that gets invoked when the operation runs.
+			//
+			@Override
+			public void execute(IProgressMonitor monitor) {
+				// Save the resources to the file system.
+				//
+				boolean first = true;
+				List<Resource> resources = editingDomain.getResourceSet().getResources();
+				for (int i = 0; i < resources.size(); ++i) {
+					Resource resource = resources.get(i);
+					if ((first || !resource.getContents().isEmpty() || isPersisted(resource))
+							&& !editingDomain.isReadOnly(resource)) {
+						try {
+							long timeStamp = resource.getTimeStamp();
+							resource.save(saveOptions);
+							if (resource.getTimeStamp() != timeStamp) {
+								savedResources.add(resource);
+							}
+						} catch (Exception exception) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+						first = false;
+					}
+				}
+			}
+		};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack) editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		} catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			PetrinetEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		} catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor = getActionBars().getStatusLineManager() != null
+				? getActionBars().getStatusLineManager().getProgressMonitor()
+				: new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		List<?> targetObjects = markerHelper.getTargetObjects(editingDomain, marker);
+		if (!targetObjects.isEmpty()) {
+			setSelectionToViewer(targetObjects);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener,
+				IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		if (currentViewerPane != null) {
+			currentViewerPane.setFocus();
+		} else {
+			getControl(getActivePage()).setFocus();
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer
+				? contentOutlineStatusLineManager
+				: getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection) selection).toList();
+				switch (collection.size()) {
+				case 0: {
+					statusLineManager.setMessage(getString("_UI_NoObjectSelected"));
+					break;
+				}
+				case 1: {
+					String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+					statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));
+					break;
+				}
+				default: {
+					statusLineManager
+							.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size())));
+					break;
+				}
+				}
+			} else {
+				statusLineManager.setMessage("");
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return PetrinetEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return PetrinetEditorPlugin.INSTANCE.getString(key, new Object[] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener) getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor) getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		for (PropertySheetPage propertySheetPage : propertySheetPages) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return true;
+	}
+}
diff --git a/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetEditorPlugin.java b/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetEditorPlugin.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ec83fd7e79abecba139db881caa85145f791d86
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetEditorPlugin.java
@@ -0,0 +1,89 @@
+/**
+ */
+package swt.most.petrinet.presentation;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Petrinet editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class PetrinetEditorPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final PetrinetEditorPlugin INSTANCE = new PetrinetEditorPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetrinetEditorPlugin() {
+		super(new ResourceLocator[] {});
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetModelWizard.java b/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetModelWizard.java
new file mode 100644
index 0000000000000000000000000000000000000000..ca520f33fcbe058795b97d2a34e52b005300dadb
--- /dev/null
+++ b/metamodel/swt.most.petrinet.editor/src-gen/swt/most/petrinet/presentation/PetrinetModelWizard.java
@@ -0,0 +1,624 @@
+/**
+ */
+package swt.most.petrinet.presentation;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.StringTokenizer;
+
+import org.eclipse.emf.common.CommonPlugin;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.ModifyEvent;
+
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+import swt.most.petrinet.PetrinetFactory;
+import swt.most.petrinet.PetrinetPackage;
+import swt.most.petrinet.provider.PetrinetEditPlugin;
+
+import org.eclipse.core.runtime.Path;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PetrinetModelWizard extends Wizard implements INewWizard {
+	/**
+	 * The supported extensions for created files.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List<String> FILE_EXTENSIONS = Collections.unmodifiableList(Arrays.asList(
+			PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetEditorFilenameExtensions").split("\\s*,\\s*")));
+
+	/**
+	 * A formatted list of supported file extensions, suitable for display.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String FORMATTED_FILE_EXTENSIONS = PetrinetEditorPlugin.INSTANCE
+			.getString("_UI_PetrinetEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");
+
+	/**
+	 * This caches an instance of the model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PetrinetPackage petrinetPackage = PetrinetPackage.eINSTANCE;
+
+	/**
+	 * This caches an instance of the model factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PetrinetFactory petrinetFactory = petrinetPackage.getPetrinetFactory();
+
+	/**
+	 * This is the file creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PetrinetModelWizardNewFileCreationPage newFileCreationPage;
+
+	/**
+	 * This is the initial object creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PetrinetModelWizardInitialObjectCreationPage initialObjectCreationPage;
+
+	/**
+	 * Remember the selection during initialization for populating the default container.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStructuredSelection selection;
+
+	/**
+	 * Remember the workbench during initialization.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IWorkbench workbench;
+
+	/**
+	 * Caches the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected List<String> initialObjectNames;
+
+	/**
+	 * This just records the information.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		this.workbench = workbench;
+		this.selection = selection;
+		setWindowTitle(PetrinetEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));
+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE
+				.getImageDescriptor(PetrinetEditorPlugin.INSTANCE.getImage("full/wizban/NewPetrinet")));
+	}
+
+	/**
+	 * Returns the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<String> getInitialObjectNames() {
+		if (initialObjectNames == null) {
+			initialObjectNames = new ArrayList<String>();
+			for (EClassifier eClassifier : petrinetPackage.getEClassifiers()) {
+				if (eClassifier instanceof EClass) {
+					EClass eClass = (EClass) eClassifier;
+					if (!eClass.isAbstract()) {
+						initialObjectNames.add(eClass.getName());
+					}
+				}
+			}
+			Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
+		}
+		return initialObjectNames;
+	}
+
+	/**
+	 * Create a new model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EObject createInitialModel() {
+		EClass eClass = (EClass) petrinetPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+		EObject rootObject = petrinetFactory.create(eClass);
+		return rootObject;
+	}
+
+	/**
+	 * Do the work after everything is specified.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean performFinish() {
+		try {
+			// Remember the file.
+			//
+			final IFile modelFile = getModelFile();
+
+			// Do the work within an operation.
+			//
+			WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+				@Override
+				protected void execute(IProgressMonitor progressMonitor) {
+					try {
+						// Create a resource set
+						//
+						ResourceSet resourceSet = new ResourceSetImpl();
+
+						// Get the URI of the model file.
+						//
+						URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);
+
+						// Create a resource for this file.
+						//
+						Resource resource = resourceSet.createResource(fileURI);
+
+						// Add the initial model object to the contents.
+						//
+						EObject rootObject = createInitialModel();
+						if (rootObject != null) {
+							resource.getContents().add(rootObject);
+						}
+
+						// Save the contents of the resource to the file system.
+						//
+						Map<Object, Object> options = new HashMap<Object, Object>();
+						options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+						resource.save(options);
+					} catch (Exception exception) {
+						PetrinetEditorPlugin.INSTANCE.log(exception);
+					} finally {
+						progressMonitor.done();
+					}
+				}
+			};
+
+			getContainer().run(false, false, operation);
+
+			// Select the new file resource in the current view.
+			//
+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+			IWorkbenchPage page = workbenchWindow.getActivePage();
+			final IWorkbenchPart activePart = page.getActivePart();
+			if (activePart instanceof ISetSelectionTarget) {
+				final ISelection targetSelection = new StructuredSelection(modelFile);
+				getShell().getDisplay().asyncExec(new Runnable() {
+					public void run() {
+						((ISetSelectionTarget) activePart).selectReveal(targetSelection);
+					}
+				});
+			}
+
+			// Open an editor on the new file.
+			//
+			try {
+				page.openEditor(new FileEditorInput(modelFile),
+						workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());
+			} catch (PartInitException exception) {
+				MessageDialog.openError(workbenchWindow.getShell(),
+						PetrinetEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());
+				return false;
+			}
+
+			return true;
+		} catch (Exception exception) {
+			PetrinetEditorPlugin.INSTANCE.log(exception);
+			return false;
+		}
+	}
+
+	/**
+	 * This is the one page of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class PetrinetModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public PetrinetModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {
+			super(pageId, selection);
+		}
+
+		/**
+		 * The framework calls this to see if the file is correct.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		protected boolean validatePage() {
+			if (super.validatePage()) {
+				String extension = new Path(getFileName()).getFileExtension();
+				if (extension == null || !FILE_EXTENSIONS.contains(extension)) {
+					String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";
+					setErrorMessage(
+							PetrinetEditorPlugin.INSTANCE.getString(key, new Object[] { FORMATTED_FILE_EXTENSIONS }));
+					return false;
+				}
+				return true;
+			}
+			return false;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public IFile getModelFile() {
+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));
+		}
+	}
+
+	/**
+	 * This is the page where the type of object to create is selected.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class PetrinetModelWizardInitialObjectCreationPage extends WizardPage {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo initialObjectField;
+
+		/**
+		 * @generated
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 */
+		protected List<String> encodings;
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo encodingField;
+
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public PetrinetModelWizardInitialObjectCreationPage(String pageId) {
+			super(pageId);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void createControl(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE);
+			{
+				GridLayout layout = new GridLayout();
+				layout.numColumns = 1;
+				layout.verticalSpacing = 12;
+				composite.setLayout(layout);
+
+				GridData data = new GridData();
+				data.verticalAlignment = GridData.FILL;
+				data.grabExcessVerticalSpace = true;
+				data.horizontalAlignment = GridData.FILL;
+				composite.setLayoutData(data);
+			}
+
+			Label containerLabel = new Label(composite, SWT.LEFT);
+			{
+				containerLabel.setText(PetrinetEditorPlugin.INSTANCE.getString("_UI_ModelObject"));
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				containerLabel.setLayoutData(data);
+			}
+
+			initialObjectField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				initialObjectField.setLayoutData(data);
+			}
+
+			for (String objectName : getInitialObjectNames()) {
+				initialObjectField.add(getLabel(objectName));
+			}
+
+			if (initialObjectField.getItemCount() == 1) {
+				initialObjectField.select(0);
+			}
+			initialObjectField.addModifyListener(validator);
+
+			Label encodingLabel = new Label(composite, SWT.LEFT);
+			{
+				encodingLabel.setText(PetrinetEditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				encodingLabel.setLayoutData(data);
+			}
+			encodingField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				encodingField.setLayoutData(data);
+			}
+
+			for (String encoding : getEncodings()) {
+				encodingField.add(encoding);
+			}
+
+			encodingField.select(0);
+			encodingField.addModifyListener(validator);
+
+			setPageComplete(validatePage());
+			setControl(composite);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected ModifyListener validator = new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				setPageComplete(validatePage());
+			}
+		};
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected boolean validatePage() {
+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public void setVisible(boolean visible) {
+			super.setVisible(visible);
+			if (visible) {
+				if (initialObjectField.getItemCount() == 1) {
+					initialObjectField.clearSelection();
+					encodingField.setFocus();
+				} else {
+					encodingField.clearSelection();
+					initialObjectField.setFocus();
+				}
+			}
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public String getInitialObjectName() {
+			String label = initialObjectField.getText();
+
+			for (String name : getInitialObjectNames()) {
+				if (getLabel(name).equals(label)) {
+					return name;
+				}
+			}
+			return null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public String getEncoding() {
+			return encodingField.getText();
+		}
+
+		/**
+		 * Returns the label for the specified type name.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected String getLabel(String typeName) {
+			try {
+				return PetrinetEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");
+			} catch (MissingResourceException mre) {
+				PetrinetEditorPlugin.INSTANCE.log(mre);
+			}
+			return typeName;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Collection<String> getEncodings() {
+			if (encodings == null) {
+				encodings = new ArrayList<String>();
+				for (StringTokenizer stringTokenizer = new StringTokenizer(
+						PetrinetEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer
+								.hasMoreTokens();) {
+					encodings.add(stringTokenizer.nextToken());
+				}
+			}
+			return encodings;
+		}
+	}
+
+	/**
+	 * The framework calls this to create the contents of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void addPages() {
+		// Create a page, set the title, and the initial model file name.
+		//
+		newFileCreationPage = new PetrinetModelWizardNewFileCreationPage("Whatever", selection);
+		newFileCreationPage.setTitle(PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetModelWizard_label"));
+		newFileCreationPage
+				.setDescription(PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetModelWizard_description"));
+		newFileCreationPage.setFileName(PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetEditorFilenameDefaultBase")
+				+ "." + FILE_EXTENSIONS.get(0));
+		addPage(newFileCreationPage);
+
+		// Try and get the resource selection to determine a current directory for the file dialog.
+		//
+		if (selection != null && !selection.isEmpty()) {
+			// Get the resource...
+			//
+			Object selectedElement = selection.iterator().next();
+			if (selectedElement instanceof IResource) {
+				// Get the resource parent, if its a file.
+				//
+				IResource selectedResource = (IResource) selectedElement;
+				if (selectedResource.getType() == IResource.FILE) {
+					selectedResource = selectedResource.getParent();
+				}
+
+				// This gives us a directory...
+				//
+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {
+					// Set this for the container.
+					//
+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());
+
+					// Make up a unique new name here.
+					//
+					String defaultModelBaseFilename = PetrinetEditorPlugin.INSTANCE
+							.getString("_UI_PetrinetEditorFilenameDefaultBase");
+					String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);
+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;
+					for (int i = 1; ((IContainer) selectedResource).findMember(modelFilename) != null; ++i) {
+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;
+					}
+					newFileCreationPage.setFileName(modelFilename);
+				}
+			}
+		}
+		initialObjectCreationPage = new PetrinetModelWizardInitialObjectCreationPage("Whatever2");
+		initialObjectCreationPage.setTitle(PetrinetEditorPlugin.INSTANCE.getString("_UI_PetrinetModelWizard_label"));
+		initialObjectCreationPage
+				.setDescription(PetrinetEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description"));
+		addPage(initialObjectCreationPage);
+	}
+
+	/**
+	 * Get the file from the page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IFile getModelFile() {
+		return newFileCreationPage.getModelFile();
+	}
+
+}
diff --git a/metamodel/swt.most.petrinet/.classpath b/metamodel/swt.most.petrinet/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..c3f9cf33e920a2477e584487d0015da314361b97
--- /dev/null
+++ b/metamodel/swt.most.petrinet/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/metamodel/swt.most.petrinet/.project b/metamodel/swt.most.petrinet/.project
new file mode 100644
index 0000000000000000000000000000000000000000..b86c38ac72f887b6a74866758535335d2d30c5db
--- /dev/null
+++ b/metamodel/swt.most.petrinet/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.petrinet</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.sirius.nature.modelingproject</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/metamodel/swt.most.petrinet/.settings/org.eclipse.core.resources.prefs b/metamodel/swt.most.petrinet/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/metamodel/swt.most.petrinet/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/metamodel/swt.most.petrinet/META-INF/MANIFEST.MF b/metamodel/swt.most.petrinet/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..1ec2a8765d59c7e2a6b5c3e79bed72fd95a3c3d3
--- /dev/null
+++ b/metamodel/swt.most.petrinet/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: swt.most.petrinet;singleton:=true
+Automatic-Module-Name: swt.most.petrinet
+Bundle-Version: 0.1.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: swt.most.petrinet,
+ swt.most.petrinet.impl,
+ swt.most.petrinet.util
+Require-Bundle: org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.core.runtime
+Bundle-ActivationPolicy: lazy
diff --git a/metamodel/swt.most.petrinet/bin/.gitkeep b/metamodel/swt.most.petrinet/bin/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..49cc8ef0e116cef009fe0bd72473a964bbd07f9b
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/.gitkeep differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Arc.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Arc.class
new file mode 100644
index 0000000000000000000000000000000000000000..00ae59c08799669a1ab447e2f938a1b374a6d14b
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Arc.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Element.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Element.class
new file mode 100644
index 0000000000000000000000000000000000000000..637b322e3e6b6e46772ff5d016de531f00caffe5
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Element.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/IncomingArc.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/IncomingArc.class
new file mode 100644
index 0000000000000000000000000000000000000000..bd1f1839a7f275569c9ea767bec33e8708a4817b
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/IncomingArc.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/OutgoingArc.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/OutgoingArc.class
new file mode 100644
index 0000000000000000000000000000000000000000..66eb1967d4046d8fa1ddedb3f45545182c903015
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/OutgoingArc.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetriNet.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetriNet.class
new file mode 100644
index 0000000000000000000000000000000000000000..aed7b2302c7aac227ee7246bcfa46ab3d81db0ce
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetriNet.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetrinetFactory.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetrinetFactory.class
new file mode 100644
index 0000000000000000000000000000000000000000..96d53a66e79c669b29a50d52958c49d31222c399
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetrinetFactory.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetrinetPackage$Literals.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetrinetPackage$Literals.class
new file mode 100644
index 0000000000000000000000000000000000000000..5cd80e2699b500b2653e31d7d7b8d94f2b777845
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetrinetPackage$Literals.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetrinetPackage.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetrinetPackage.class
new file mode 100644
index 0000000000000000000000000000000000000000..0d84c0522318dee3828765174b70c6e33f771469
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/PetrinetPackage.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Place.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Place.class
new file mode 100644
index 0000000000000000000000000000000000000000..e4b8a377a31174eec0cbff1ddff44cf0d8a368d8
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Place.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Token.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Token.class
new file mode 100644
index 0000000000000000000000000000000000000000..9b2d9d81a034bb566b104ce742601384fdaf6466
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Token.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Transition.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Transition.class
new file mode 100644
index 0000000000000000000000000000000000000000..c3fb18a40efc988a4d4f7df6a787ce5d7884ef12
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/Transition.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/ArcImpl.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/ArcImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..2dee7b713266ee4b03d9f0c688a9356b5735b5d6
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/ArcImpl.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/ElementImpl.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/ElementImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..2905ea46bd769bfa7aad5d17fb0e1bd8e85ff327
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/ElementImpl.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/IncomingArcImpl.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/IncomingArcImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..f191772f6d4b9fef15ebf4a351f3ce9e9d39dfee
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/IncomingArcImpl.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/OutgoingArcImpl.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/OutgoingArcImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..16635350be9b09a69a129185cf3bc8f53679449a
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/OutgoingArcImpl.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PetriNetImpl.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PetriNetImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..b5695fdd0688e1898463275a075e0da0c43702f6
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PetriNetImpl.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PetrinetFactoryImpl.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PetrinetFactoryImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..67a6ae79d11c185b770d2c9e5fee9f565d0b31e6
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PetrinetFactoryImpl.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PetrinetPackageImpl.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PetrinetPackageImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..18396c406a79c8c34574fcf33b6bfa2e817f83a8
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PetrinetPackageImpl.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PlaceImpl.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PlaceImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..1650862fc5b7ef57a9faf73a658039326f9b87f7
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/PlaceImpl.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/TokenImpl.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/TokenImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..b509feafe93fe24b8d841a9166256d929bc5305a
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/TokenImpl.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/TransitionImpl.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/TransitionImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..a535d059398223e45f2d74e194ea3b5e530d8ef6
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/impl/TransitionImpl.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/util/PetrinetAdapterFactory$1.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/util/PetrinetAdapterFactory$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..1426616276e707ef38f0f64493bc1a9848ca5dec
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/util/PetrinetAdapterFactory$1.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/util/PetrinetAdapterFactory.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/util/PetrinetAdapterFactory.class
new file mode 100644
index 0000000000000000000000000000000000000000..a723d31d77f41e7558b4b7b4f503725198da8572
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/util/PetrinetAdapterFactory.class differ
diff --git a/metamodel/swt.most.petrinet/bin/swt/most/petrinet/util/PetrinetSwitch.class b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/util/PetrinetSwitch.class
new file mode 100644
index 0000000000000000000000000000000000000000..0c1a576e82a9828177e3a3d613f3299044c09f3c
Binary files /dev/null and b/metamodel/swt.most.petrinet/bin/swt/most/petrinet/util/PetrinetSwitch.class differ
diff --git a/metamodel/swt.most.petrinet/build.properties b/metamodel/swt.most.petrinet/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..697ca964527a545764d3a69847c122b371257973
--- /dev/null
+++ b/metamodel/swt.most.petrinet/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src-gen/
+output.. = bin/
diff --git a/metamodel/swt.most.petrinet/model/petrinet.aird b/metamodel/swt.most.petrinet/model/petrinet.aird
new file mode 100644
index 0000000000000000000000000000000000000000..14bf545e886b4c4f5f5659d900c9d59888f79849
--- /dev/null
+++ b/metamodel/swt.most.petrinet/model/petrinet.aird
@@ -0,0 +1,535 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.3/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style">
+  <viewpoint:DAnalysis uid="_OYqr8CylEe-wqd8WJDWOGA" selectedViews="_eJxNMCylEe-wqd8WJDWOGA _eJ-okCylEe-wqd8WJDWOGA _eJ_2sCylEe-wqd8WJDWOGA _eKDhECylEe-wqd8WJDWOGA" version="15.2.0.202303281325">
+    <semanticResources>model/petrinet.ecore</semanticResources>
+    <semanticResources>model/petrinet.genmodel</semanticResources>
+    <semanticResources>petrinet.ecore</semanticResources>
+    <semanticResources>petrinet.genmodel</semanticResources>
+    <ownedViews xmi:type="viewpoint:DView" uid="_eJxNMCylEe-wqd8WJDWOGA">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/>
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_fBp3cCylEe-wqd8WJDWOGA" name="petrinet class diagram" repPath="#_fBjw0CylEe-wqd8WJDWOGA" changeId="1718627695256">
+        <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+        <target xmi:type="ecore:EPackage" href="petrinet.ecore#/"/>
+      </ownedRepresentationDescriptors>
+    </ownedViews>
+    <ownedViews xmi:type="viewpoint:DView" uid="_eJ-okCylEe-wqd8WJDWOGA">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Review']"/>
+    </ownedViews>
+    <ownedViews xmi:type="viewpoint:DView" uid="_eJ_2sCylEe-wqd8WJDWOGA">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']"/>
+    </ownedViews>
+    <ownedViews xmi:type="viewpoint:DView" uid="_eKDhECylEe-wqd8WJDWOGA">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Generation']"/>
+    </ownedViews>
+  </viewpoint:DAnalysis>
+  <diagram:DSemanticDiagram uid="_fBjw0CylEe-wqd8WJDWOGA">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_fB3S0CylEe-wqd8WJDWOGA" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_fB3S0SylEe-wqd8WJDWOGA" type="Sirius" element="_fBjw0CylEe-wqd8WJDWOGA" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_fcFwsCylEe-wqd8WJDWOGA" type="2003" element="_fbodsCylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcGXwCylEe-wqd8WJDWOGA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_fcG-0CylEe-wqd8WJDWOGA" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_fcLQQCylEe-wqd8WJDWOGA" type="3010" element="_fb5jcCylEe-wqd8WJDWOGA">
+              <styles xmi:type="notation:FontStyle" xmi:id="_fcLQQSylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_fcLQQiylEe-wqd8WJDWOGA"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_fcG-0SylEe-wqd8WJDWOGA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_fcG-0iylEe-wqd8WJDWOGA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_fcFwsSylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcFwsiylEe-wqd8WJDWOGA" x="420" y="-126"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_fcHl4CylEe-wqd8WJDWOGA" type="2003" element="_fbsIECylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcHl4yylEe-wqd8WJDWOGA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_fcHl5CylEe-wqd8WJDWOGA" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_fcL3UCylEe-wqd8WJDWOGA" type="3010" element="_fb6KgCylEe-wqd8WJDWOGA">
+              <styles xmi:type="notation:FontStyle" xmi:id="_fcL3USylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_fcL3UiylEe-wqd8WJDWOGA"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_fcHl5SylEe-wqd8WJDWOGA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_fcHl5iylEe-wqd8WJDWOGA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_fcHl4SylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8" italic="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcHl4iylEe-wqd8WJDWOGA" x="240" y="64"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_fcHl5yylEe-wqd8WJDWOGA" type="2003" element="_fbtWMCylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcIM8CylEe-wqd8WJDWOGA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_fcIM8SylEe-wqd8WJDWOGA" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_fcIM8iylEe-wqd8WJDWOGA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_fcIM8yylEe-wqd8WJDWOGA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_fcHl6CylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8" italic="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcHl6SylEe-wqd8WJDWOGA" x="637" y="64"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_fcIM9CylEe-wqd8WJDWOGA" type="2003" element="_fbukUCylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcI0ACylEe-wqd8WJDWOGA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_fcI0ASylEe-wqd8WJDWOGA" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_fcI0AiylEe-wqd8WJDWOGA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_fcI0AyylEe-wqd8WJDWOGA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_fcIM9SylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcIM9iylEe-wqd8WJDWOGA" x="560" y="231"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_fcI0BCylEe-wqd8WJDWOGA" type="2003" element="_fbvycSylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcJbECylEe-wqd8WJDWOGA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_fcJbESylEe-wqd8WJDWOGA" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_fcJbEiylEe-wqd8WJDWOGA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_fcJbEyylEe-wqd8WJDWOGA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_fcI0BSylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcI0BiylEe-wqd8WJDWOGA" x="770" y="231"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_fcJbFCylEe-wqd8WJDWOGA" type="2003" element="_fbxAkSylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcJbFyylEe-wqd8WJDWOGA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_fcJbGCylEe-wqd8WJDWOGA" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_fcJbGSylEe-wqd8WJDWOGA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_fcJbGiylEe-wqd8WJDWOGA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_fcJbFSylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcJbFiylEe-wqd8WJDWOGA" x="133" y="420"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_fcJbGyylEe-wqd8WJDWOGA" type="2003" element="_fbyOsSylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcKCICylEe-wqd8WJDWOGA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_fcKCISylEe-wqd8WJDWOGA" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_fcKCIiylEe-wqd8WJDWOGA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_fcKCIyylEe-wqd8WJDWOGA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_fcJbHCylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcJbHSylEe-wqd8WJDWOGA" x="315" y="315"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_fcKCJCylEe-wqd8WJDWOGA" type="2003" element="_fbzc0CylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcKpMCylEe-wqd8WJDWOGA" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_fcKpMSylEe-wqd8WJDWOGA" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_fcKpMiylEe-wqd8WJDWOGA"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_fcKpMyylEe-wqd8WJDWOGA"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_fcKCJSylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcKCJiylEe-wqd8WJDWOGA" x="16" y="105"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_fB3S0iylEe-wqd8WJDWOGA"/>
+        <edges xmi:type="notation:Edge" xmi:id="_fcTMECylEe-wqd8WJDWOGA" type="4001" element="_fb7_sCylEe-wqd8WJDWOGA" source="_fcFwsCylEe-wqd8WJDWOGA" target="_fcHl5yylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcTzICylEe-wqd8WJDWOGA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcTzISylEe-wqd8WJDWOGA" x="59" y="124"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcUaMCylEe-wqd8WJDWOGA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcUaMSylEe-wqd8WJDWOGA" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcVBQCylEe-wqd8WJDWOGA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcVBQSylEe-wqd8WJDWOGA" x="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fcTMESylEe-wqd8WJDWOGA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fcTMEiylEe-wqd8WJDWOGA" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fcTMEyylEe-wqd8WJDWOGA" points="[64, 1, -148, -189]$[216, 1, 4, -189]$[216, 141, 4, -49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcW2cCylEe-wqd8WJDWOGA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcW2cSylEe-wqd8WJDWOGA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_fcXdgCylEe-wqd8WJDWOGA" type="4001" element="_fb9N0CylEe-wqd8WJDWOGA" source="_fcFwsCylEe-wqd8WJDWOGA" target="_fcHl4CylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcXdhCylEe-wqd8WJDWOGA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcXdhSylEe-wqd8WJDWOGA" x="107" y="65"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcXdhiylEe-wqd8WJDWOGA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcXdhyylEe-wqd8WJDWOGA" x="-1" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcXdiCylEe-wqd8WJDWOGA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcXdiSylEe-wqd8WJDWOGA" x="11"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fcXdgSylEe-wqd8WJDWOGA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fcXdgiylEe-wqd8WJDWOGA" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fcXdgyylEe-wqd8WJDWOGA" points="[-64, 1, 105, -189]$[-169, 1, 0, -189]$[-169, 141, 0, -49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcXdiiylEe-wqd8WJDWOGA" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcXdiyylEe-wqd8WJDWOGA" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_fcXdjCylEe-wqd8WJDWOGA" type="4001" element="_fb904yylEe-wqd8WJDWOGA" source="_fcIM9CylEe-wqd8WJDWOGA" target="_fcJbGyylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcYEkCylEe-wqd8WJDWOGA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcYEkSylEe-wqd8WJDWOGA" x="38" y="-17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcYEkiylEe-wqd8WJDWOGA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcYEkyylEe-wqd8WJDWOGA" x="64" y="-9"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcYElCylEe-wqd8WJDWOGA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcYElSylEe-wqd8WJDWOGA" x="20" y="7"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fcXdjSylEe-wqd8WJDWOGA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fcXdjiylEe-wqd8WJDWOGA" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fcXdjyylEe-wqd8WJDWOGA" points="[-25, 98, 220, -84]$[-25, 119, 220, -63]$[-187, 119, 58, -63]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcYEliylEe-wqd8WJDWOGA" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcYElyylEe-wqd8WJDWOGA" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_fcYEmCylEe-wqd8WJDWOGA" type="4001" element="_fb-b-SylEe-wqd8WJDWOGA" source="_fcIM9CylEe-wqd8WJDWOGA" target="_fcJbFCylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcYEnCylEe-wqd8WJDWOGA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcYEnSylEe-wqd8WJDWOGA" x="207" y="-17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcYroCylEe-wqd8WJDWOGA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcYroSylEe-wqd8WJDWOGA" x="58" y="318"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcYroiylEe-wqd8WJDWOGA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcYroyylEe-wqd8WJDWOGA" x="5" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fcYEmSylEe-wqd8WJDWOGA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fcYEmiylEe-wqd8WJDWOGA" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fcYEmyylEe-wqd8WJDWOGA" points="[0, 98, 427, -189]$[0, 154, 427, -133]$[10, 154, 437, -133]$[10, 167, 437, -120]$[-2, 167, 425, -120]$[-2, 223, 425, -64]$[-369, 223, 58, -64]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcYrpCylEe-wqd8WJDWOGA" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcYrpSylEe-wqd8WJDWOGA" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_fcYrpiylEe-wqd8WJDWOGA" type="4001" element="_fb_DBiylEe-wqd8WJDWOGA" source="_fcI0BCylEe-wqd8WJDWOGA" target="_fcJbGyylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcYrqiylEe-wqd8WJDWOGA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcYrqyylEe-wqd8WJDWOGA" x="164" y="-18"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcYrrCylEe-wqd8WJDWOGA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcYrrSylEe-wqd8WJDWOGA" x="122" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcYrriylEe-wqd8WJDWOGA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcYrryylEe-wqd8WJDWOGA" x="56" y="7"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fcYrpyylEe-wqd8WJDWOGA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fcYrqCylEe-wqd8WJDWOGA" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fcYrqSylEe-wqd8WJDWOGA" points="[-18, 98, 437, -84]$[-18, 161, 437, -21]$[-397, 161, 58, -21]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcZSsCylEe-wqd8WJDWOGA" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcZSsSylEe-wqd8WJDWOGA" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_fcZSsiylEe-wqd8WJDWOGA" type="4001" element="_fb_qFCylEe-wqd8WJDWOGA" source="_fcI0BCylEe-wqd8WJDWOGA" target="_fcJbFCylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcZStiylEe-wqd8WJDWOGA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcZStyylEe-wqd8WJDWOGA" x="328" y="-17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcZSuCylEe-wqd8WJDWOGA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcZSuSylEe-wqd8WJDWOGA" x="43" y="29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcZSuiylEe-wqd8WJDWOGA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcZSuyylEe-wqd8WJDWOGA" x="-343" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fcZSsyylEe-wqd8WJDWOGA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fcZStCylEe-wqd8WJDWOGA" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fcZStSylEe-wqd8WJDWOGA" points="[17, 98, 654, -189]$[17, 265, 654, -22]$[-579, 265, 58, -22]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcZSvCylEe-wqd8WJDWOGA" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcZSvSylEe-wqd8WJDWOGA" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_fcZSviylEe-wqd8WJDWOGA" type="4001" element="_fcARIyylEe-wqd8WJDWOGA" source="_fcJbFCylEe-wqd8WJDWOGA" target="_fcKCJCylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcZSwiylEe-wqd8WJDWOGA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcZ5wCylEe-wqd8WJDWOGA" x="145" y="48"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcZ5wSylEe-wqd8WJDWOGA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcZ5wiylEe-wqd8WJDWOGA" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcZ5wyylEe-wqd8WJDWOGA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcZ5xCylEe-wqd8WJDWOGA" x="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fcZSvyylEe-wqd8WJDWOGA" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fcZSwCylEe-wqd8WJDWOGA" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fcZSwSylEe-wqd8WJDWOGA" points="[-60, 50, 57, 267]$[-119, 50, -2, 267]$[-119, -217, -2, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcZ5xSylEe-wqd8WJDWOGA" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcZ5xiylEe-wqd8WJDWOGA" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_fcZ5xyylEe-wqd8WJDWOGA" type="4001" element="_fcA4NiylEe-wqd8WJDWOGA" source="_fcIM9CylEe-wqd8WJDWOGA" target="_fcHl5yylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcZ5yyylEe-wqd8WJDWOGA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcZ5zCylEe-wqd8WJDWOGA" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcZ5zSylEe-wqd8WJDWOGA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcZ5ziylEe-wqd8WJDWOGA" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcZ5zyylEe-wqd8WJDWOGA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcZ50CylEe-wqd8WJDWOGA" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fcZ5yCylEe-wqd8WJDWOGA" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fcZ5ySylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fcZ5yiylEe-wqd8WJDWOGA" points="[-1, 0, -271, 60]$[269, -60, -1, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcag0CylEe-wqd8WJDWOGA" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcag0SylEe-wqd8WJDWOGA" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_fcag0iylEe-wqd8WJDWOGA" type="4001" element="_fcCGUyylEe-wqd8WJDWOGA" source="_fcI0BCylEe-wqd8WJDWOGA" target="_fcHl5yylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcag1iylEe-wqd8WJDWOGA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcag1yylEe-wqd8WJDWOGA" x="84" y="-32"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcag2CylEe-wqd8WJDWOGA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcag2SylEe-wqd8WJDWOGA" x="-54" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcag2iylEe-wqd8WJDWOGA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcag2yylEe-wqd8WJDWOGA" x="100" y="11"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fcag0yylEe-wqd8WJDWOGA" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fcag1CylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fcag1SylEe-wqd8WJDWOGA" points="[0, 0, 133, 69]$[0, -42, 133, 27]$[-133, -42, 0, 27]$[-133, -69, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcbH4CylEe-wqd8WJDWOGA" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcbH4SylEe-wqd8WJDWOGA" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_fcbH4iylEe-wqd8WJDWOGA" type="4001" element="_fcCtYyylEe-wqd8WJDWOGA" source="_fcJbFCylEe-wqd8WJDWOGA" target="_fcHl4CylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcbH5iylEe-wqd8WJDWOGA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcbH5yylEe-wqd8WJDWOGA" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcbH6CylEe-wqd8WJDWOGA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcbH6SylEe-wqd8WJDWOGA" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcbH6iylEe-wqd8WJDWOGA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcbH6yylEe-wqd8WJDWOGA" x="-9" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fcbH4yylEe-wqd8WJDWOGA" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fcbH5CylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fcbH5SylEe-wqd8WJDWOGA" points="[0, 0, -123, 258]$[0, -231, -123, 27]$[123, -231, 0, 27]$[123, -258, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcbH7CylEe-wqd8WJDWOGA" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcbH7SylEe-wqd8WJDWOGA" id="(0.5033112582781457,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_fcbu8CylEe-wqd8WJDWOGA" type="4001" element="_fcDUcCylEe-wqd8WJDWOGA" source="_fcJbGyylEe-wqd8WJDWOGA" target="_fcHl4CylEe-wqd8WJDWOGA">
+          <children xmi:type="notation:Node" xmi:id="_fcbu9CylEe-wqd8WJDWOGA" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcbu9SylEe-wqd8WJDWOGA" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcbu9iylEe-wqd8WJDWOGA" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcbu9yylEe-wqd8WJDWOGA" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_fcbu-CylEe-wqd8WJDWOGA" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fcbu-SylEe-wqd8WJDWOGA" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_fcbu8SylEe-wqd8WJDWOGA" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_fcbu8iylEe-wqd8WJDWOGA" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fcbu8yylEe-wqd8WJDWOGA" points="[-1, 0, -136, 60]$[134, -60, -1, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcbu-iylEe-wqd8WJDWOGA" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fcbu-yylEe-wqd8WJDWOGA" id="(0.5033112582781457,1.0)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_fB_OoCylEe-wqd8WJDWOGA" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_fB_OoSylEe-wqd8WJDWOGA">
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_fb8mwCylEe-wqd8WJDWOGA" sourceArrow="FillDiamond" routingStyle="manhattan">
+          <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_fb8mwSylEe-wqd8WJDWOGA" showIcon="false" labelExpression="service:render">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </centerLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_fb8mwiylEe-wqd8WJDWOGA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+          </endLabelStyleDescription>
+        </computedStyleDescriptions>
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_fb-b8CylEe-wqd8WJDWOGA" routingStyle="manhattan">
+          <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_fb-b8SylEe-wqd8WJDWOGA" showIcon="false" labelExpression="service:render">
+            <labelFormat>bold</labelFormat>
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </centerLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_fb-b8iylEe-wqd8WJDWOGA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+          </endLabelStyleDescription>
+        </computedStyleDescriptions>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_fbodsCylEe-wqd8WJDWOGA" name="PetriNet" tooltipText="" outgoingEdges="_fb7_sCylEe-wqd8WJDWOGA _fb9N0CylEe-wqd8WJDWOGA" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//PetriNet"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//PetriNet"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_fbpr0CylEe-wqd8WJDWOGA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_fb5jcCylEe-wqd8WJDWOGA" name="name : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="petrinet.ecore#//PetriNet/name"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="petrinet.ecore#//PetriNet/name"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_fb5jcSylEe-wqd8WJDWOGA" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_fbsIECylEe-wqd8WJDWOGA" name="Element" tooltipText="" incomingEdges="_fb9N0CylEe-wqd8WJDWOGA _fcCtYyylEe-wqd8WJDWOGA _fcDUcCylEe-wqd8WJDWOGA" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//Element"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//Element"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_fbsvICylEe-wqd8WJDWOGA" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+        <labelFormat>italic</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_fb6KgCylEe-wqd8WJDWOGA" name="identifier : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="petrinet.ecore#//Element/identifier"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="petrinet.ecore#//Element/identifier"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_fb6xkCylEe-wqd8WJDWOGA" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_fbtWMCylEe-wqd8WJDWOGA" name="Arc" tooltipText="" incomingEdges="_fb7_sCylEe-wqd8WJDWOGA _fcA4NiylEe-wqd8WJDWOGA _fcCGUyylEe-wqd8WJDWOGA" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//Arc"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//Arc"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_fbt9QCylEe-wqd8WJDWOGA" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+        <labelFormat>italic</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_fbukUCylEe-wqd8WJDWOGA" name="IncomingArc" tooltipText="" outgoingEdges="_fb904yylEe-wqd8WJDWOGA _fb-b-SylEe-wqd8WJDWOGA _fcA4NiylEe-wqd8WJDWOGA" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//IncomingArc"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//IncomingArc"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_fbvLYCylEe-wqd8WJDWOGA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_fbvycSylEe-wqd8WJDWOGA" name="OutgoingArc" tooltipText="" outgoingEdges="_fb_DBiylEe-wqd8WJDWOGA _fb_qFCylEe-wqd8WJDWOGA _fcCGUyylEe-wqd8WJDWOGA" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//OutgoingArc"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//OutgoingArc"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_fbwZgCylEe-wqd8WJDWOGA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_fbxAkSylEe-wqd8WJDWOGA" name="Place" tooltipText="" outgoingEdges="_fcARIyylEe-wqd8WJDWOGA _fcCtYyylEe-wqd8WJDWOGA" incomingEdges="_fb-b-SylEe-wqd8WJDWOGA _fb_qFCylEe-wqd8WJDWOGA" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//Place"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//Place"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_fbxnoCylEe-wqd8WJDWOGA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_fbyOsSylEe-wqd8WJDWOGA" name="Transition" tooltipText="" outgoingEdges="_fcDUcCylEe-wqd8WJDWOGA" incomingEdges="_fb904yylEe-wqd8WJDWOGA _fb_DBiylEe-wqd8WJDWOGA" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//Transition"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//Transition"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_fby1wCylEe-wqd8WJDWOGA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_fbzc0CylEe-wqd8WJDWOGA" name="Token" tooltipText="" incomingEdges="_fcARIyylEe-wqd8WJDWOGA" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//Token"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//Token"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_fbzc0SylEe-wqd8WJDWOGA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_fb7_sCylEe-wqd8WJDWOGA" name="[0..*] arcs" sourceNode="_fbodsCylEe-wqd8WJDWOGA" targetNode="_fbtWMCylEe-wqd8WJDWOGA">
+      <target xmi:type="ecore:EReference" href="petrinet.ecore#//PetriNet/arcs"/>
+      <semanticElements xmi:type="ecore:EReference" href="petrinet.ecore#//PetriNet/arcs"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fb8mwyylEe-wqd8WJDWOGA" description="_fb8mwCylEe-wqd8WJDWOGA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fb8mxSylEe-wqd8WJDWOGA" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_fb8mxCylEe-wqd8WJDWOGA" showIcon="false" labelColor="39,76,114"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_fb9N0CylEe-wqd8WJDWOGA" name="[0..*] elements" sourceNode="_fbodsCylEe-wqd8WJDWOGA" targetNode="_fbsIECylEe-wqd8WJDWOGA">
+      <target xmi:type="ecore:EReference" href="petrinet.ecore#//PetriNet/elements"/>
+      <semanticElements xmi:type="ecore:EReference" href="petrinet.ecore#//PetriNet/elements"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fb9N0SylEe-wqd8WJDWOGA" description="_fb8mwCylEe-wqd8WJDWOGA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fb9N0yylEe-wqd8WJDWOGA" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_fb9N0iylEe-wqd8WJDWOGA" showIcon="false" labelColor="39,76,114"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_fb904yylEe-wqd8WJDWOGA" name="[1..1] target" sourceNode="_fbukUCylEe-wqd8WJDWOGA" targetNode="_fbyOsSylEe-wqd8WJDWOGA">
+      <target xmi:type="ecore:EReference" href="petrinet.ecore#//IncomingArc/target"/>
+      <semanticElements xmi:type="ecore:EReference" href="petrinet.ecore#//IncomingArc/target"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fb-b8yylEe-wqd8WJDWOGA" description="_fb-b8CylEe-wqd8WJDWOGA" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fb-b9SylEe-wqd8WJDWOGA" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_fb-b9CylEe-wqd8WJDWOGA" showIcon="false" labelColor="39,76,114"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_fb-b-SylEe-wqd8WJDWOGA" name="[1..1] source" sourceNode="_fbukUCylEe-wqd8WJDWOGA" targetNode="_fbxAkSylEe-wqd8WJDWOGA">
+      <target xmi:type="ecore:EReference" href="petrinet.ecore#//IncomingArc/source"/>
+      <semanticElements xmi:type="ecore:EReference" href="petrinet.ecore#//IncomingArc/source"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fb_DACylEe-wqd8WJDWOGA" description="_fb-b8CylEe-wqd8WJDWOGA" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fb_DAiylEe-wqd8WJDWOGA" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_fb_DASylEe-wqd8WJDWOGA" showIcon="false" labelColor="39,76,114"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_fb_DBiylEe-wqd8WJDWOGA" name="[1..1] source" sourceNode="_fbvycSylEe-wqd8WJDWOGA" targetNode="_fbyOsSylEe-wqd8WJDWOGA">
+      <target xmi:type="ecore:EReference" href="petrinet.ecore#//OutgoingArc/source"/>
+      <semanticElements xmi:type="ecore:EReference" href="petrinet.ecore#//OutgoingArc/source"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fb_DByylEe-wqd8WJDWOGA" description="_fb-b8CylEe-wqd8WJDWOGA" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fb_qECylEe-wqd8WJDWOGA" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_fb_DCCylEe-wqd8WJDWOGA" showIcon="false" labelColor="39,76,114"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_fb_qFCylEe-wqd8WJDWOGA" name="[1..1] target" sourceNode="_fbvycSylEe-wqd8WJDWOGA" targetNode="_fbxAkSylEe-wqd8WJDWOGA">
+      <target xmi:type="ecore:EReference" href="petrinet.ecore#//OutgoingArc/target"/>
+      <semanticElements xmi:type="ecore:EReference" href="petrinet.ecore#//OutgoingArc/target"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fb_qFSylEe-wqd8WJDWOGA" description="_fb-b8CylEe-wqd8WJDWOGA" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fb_qFyylEe-wqd8WJDWOGA" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_fb_qFiylEe-wqd8WJDWOGA" showIcon="false" labelColor="39,76,114"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_fcARIyylEe-wqd8WJDWOGA" name="[0..1] token" sourceNode="_fbxAkSylEe-wqd8WJDWOGA" targetNode="_fbzc0CylEe-wqd8WJDWOGA">
+      <target xmi:type="ecore:EReference" href="petrinet.ecore#//Place/token"/>
+      <semanticElements xmi:type="ecore:EReference" href="petrinet.ecore#//Place/token"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fcA4MCylEe-wqd8WJDWOGA" description="_fb8mwCylEe-wqd8WJDWOGA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fcA4MiylEe-wqd8WJDWOGA" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_fcA4MSylEe-wqd8WJDWOGA" showIcon="false" labelColor="39,76,114"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_fcA4NiylEe-wqd8WJDWOGA" sourceNode="_fbukUCylEe-wqd8WJDWOGA" targetNode="_fbtWMCylEe-wqd8WJDWOGA">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//IncomingArc"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//IncomingArc"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fcBfQCylEe-wqd8WJDWOGA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_fcBfQSylEe-wqd8WJDWOGA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fcBfQiylEe-wqd8WJDWOGA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_fcCGUyylEe-wqd8WJDWOGA" sourceNode="_fbvycSylEe-wqd8WJDWOGA" targetNode="_fbtWMCylEe-wqd8WJDWOGA">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//OutgoingArc"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//OutgoingArc"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fcCGVCylEe-wqd8WJDWOGA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_fcCGVSylEe-wqd8WJDWOGA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fcCGViylEe-wqd8WJDWOGA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_fcCtYyylEe-wqd8WJDWOGA" sourceNode="_fbxAkSylEe-wqd8WJDWOGA" targetNode="_fbsIECylEe-wqd8WJDWOGA">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//Place"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//Place"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fcCtZCylEe-wqd8WJDWOGA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_fcCtZSylEe-wqd8WJDWOGA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fcCtZiylEe-wqd8WJDWOGA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_fcDUcCylEe-wqd8WJDWOGA" sourceNode="_fbyOsSylEe-wqd8WJDWOGA" targetNode="_fbsIECylEe-wqd8WJDWOGA">
+      <target xmi:type="ecore:EClass" href="petrinet.ecore#//Transition"/>
+      <semanticElements xmi:type="ecore:EClass" href="petrinet.ecore#//Transition"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fcDUcSylEe-wqd8WJDWOGA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_fcDUciylEe-wqd8WJDWOGA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fcDUcyylEe-wqd8WJDWOGA" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+    <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_fBoCQCylEe-wqd8WJDWOGA"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
+    <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
+    <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
+    <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']/@ownedRepresentationExtensions[name='Entities%20With%20Archetypes']/@layers[name='Archetypes']"/>
+    <target xmi:type="ecore:EPackage" href="petrinet.ecore#/"/>
+  </diagram:DSemanticDiagram>
+</xmi:XMI>
diff --git a/metamodel/swt.most.petrinet/model/petrinet.ecore b/metamodel/swt.most.petrinet/model/petrinet.ecore
new file mode 100644
index 0000000000000000000000000000000000000000..9ec0189ca8a1bd1ce3ee942d0b863eb0423a468f
--- /dev/null
+++ b/metamodel/swt.most.petrinet/model/petrinet.ecore
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="petrinet" nsURI="http://www.example.org/petrinet" nsPrefix="petrinet">
+  <eClassifiers xsi:type="ecore:EClass" name="PetriNet">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="arcs" upperBound="-1" eType="#//Arc"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elements" upperBound="-1"
+        eType="#//Element" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Element" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="identifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Arc" abstract="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IncomingArc" eSuperTypes="#//Arc">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"
+        eType="#//Transition"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
+        eType="#//Place"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="OutgoingArc" eSuperTypes="#//Arc">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
+        eType="#//Transition"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"
+        eType="#//Place"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Place" eSuperTypes="#//Element">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="token" eType="#//Token"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Transition" eSuperTypes="#//Element"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Token"/>
+</ecore:EPackage>
diff --git a/metamodel/swt.most.petrinet/model/petrinet.genmodel b/metamodel/swt.most.petrinet/model/petrinet.genmodel
new file mode 100644
index 0000000000000000000000000000000000000000..1accf9b3aae6820614e48604ff96f2ced3bebb88
--- /dev/null
+++ b/metamodel/swt.most.petrinet/model/petrinet.genmodel
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel"
+    modelDirectory="/swt.most.petrinet/src-gen" creationIcons="false"
+    editDirectory="/swt.most.petrinet.edit/src-gen" editorDirectory="/swt.most.petrinet.editor/src-gen"
+    modelPluginID="swt.most.petrinet" modelName="Petrinet" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    codeFormatting="true" importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0"
+    copyrightFields="false" operationReflection="true" importOrganizing="true">
+  <foreignModel>petrinet.ecore</foreignModel>
+  <testsDirectory xsi:nil="true"/>
+  <genPackages prefix="Petrinet" basePackage="swt.most" disposableProviderFactory="true"
+      ecorePackage="petrinet.ecore#/">
+    <genClasses ecoreClass="petrinet.ecore#//PetriNet">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute petrinet.ecore#//PetriNet/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference petrinet.ecore#//PetriNet/arcs"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference petrinet.ecore#//PetriNet/elements"/>
+    </genClasses>
+    <genClasses ecoreClass="petrinet.ecore#//Element">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute petrinet.ecore#//Element/identifier"/>
+    </genClasses>
+    <genClasses ecoreClass="petrinet.ecore#//Arc"/>
+    <genClasses ecoreClass="petrinet.ecore#//IncomingArc">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference petrinet.ecore#//IncomingArc/target"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference petrinet.ecore#//IncomingArc/source"/>
+    </genClasses>
+    <genClasses ecoreClass="petrinet.ecore#//OutgoingArc">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference petrinet.ecore#//OutgoingArc/source"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference petrinet.ecore#//OutgoingArc/target"/>
+    </genClasses>
+    <genClasses ecoreClass="petrinet.ecore#//Place">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference petrinet.ecore#//Place/token"/>
+    </genClasses>
+    <genClasses ecoreClass="petrinet.ecore#//Transition"/>
+    <genClasses ecoreClass="petrinet.ecore#//Token"/>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/metamodel/swt.most.petrinet/model/petrinet.svg b/metamodel/swt.most.petrinet/model/petrinet.svg
new file mode 100644
index 0000000000000000000000000000000000000000..75b1e57363e68910af94793568963f461c583df3
--- /dev/null
+++ b/metamodel/swt.most.petrinet/model/petrinet.svg
@@ -0,0 +1,361 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-dasharray="none" shape-rendering="auto" font-family="'Dialog'" width="894" text-rendering="auto" fill-opacity="1" contentScriptType="text/ecmascript" color-interpolation="auto" color-rendering="auto" preserveAspectRatio="xMidYMid meet" font-size="12px" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" diagram:semanticRoot="platform:/resource/swt.most.petrinet/model/petrinet.ecore#/" viewBox="0 0 894 683" fill="black" stroke="black" image-rendering="auto" stroke-miterlimit="10" zoomAndPan="magnify" version="1.0" stroke-linecap="square" stroke-linejoin="miter" contentStyleType="text/css" font-style="normal" height="683" stroke-width="1" stroke-dashoffset="0" font-weight="normal" stroke-opacity="1">
+    <!--Generated by the Batik Graphics2D SVG Generator-->
+    <defs id="genericDefs"/>
+    <g>
+        <defs id="defs1">
+            <linearGradient x1="414" x2="542" y1="3" gradientUnits="userSpaceOnUse" y2="116" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient1" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="234" x2="385" y1="187" gradientUnits="userSpaceOnUse" y2="311" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient2" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(228,228,228)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="631" x2="749" y1="195" gradientUnits="userSpaceOnUse" y2="303" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient3" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(228,228,228)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="554" x2="672" y1="362" gradientUnits="userSpaceOnUse" y2="470" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient4" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="764" x2="882" y1="362" gradientUnits="userSpaceOnUse" y2="470" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient5" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="127" x2="245" y1="551" gradientUnits="userSpaceOnUse" y2="659" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient6" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="309" x2="427" y1="446" gradientUnits="userSpaceOnUse" y2="554" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient7" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="10" x2="128" y1="236" gradientUnits="userSpaceOnUse" y2="344" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient8" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
+                <path d="M413 9 L545 9 L545 111 L413 111 L413 9 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
+                <path d="M413 9 L543 9 L543 109 L413 109 L413 9 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath3">
+                <path d="M439 14 L516 14 L516 37 L439 37 L439 14 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4">
+                <path d="M439 14 L519 14 L519 37 L439 37 L439 14 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath5">
+                <path d="M418 42 L538 42 L538 65 L418 65 L418 42 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath6">
+                <path d="M418 42 L541 42 L541 65 L418 65 L418 42 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath7">
+                <path d="M414 40 L542 40 L542 108 L414 108 L414 40 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath8">
+                <path d="M233 199 L388 199 L388 301 L233 301 L233 199 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath9">
+                <path d="M233 199 L386 199 L386 299 L233 299 L233 199 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath10">
+                <path d="M271 204 L348 204 L348 227 L271 227 L271 204 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath11">
+                <path d="M271 204 L352 204 L352 227 L271 227 L271 204 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath12">
+                <path d="M238 232 L381 232 L381 255 L238 255 L238 232 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath13">
+                <path d="M238 232 L384 232 L384 255 L238 255 L238 232 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath14">
+                <path d="M234 230 L385 230 L385 298 L234 298 L234 230 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath15">
+                <path d="M630 199 L752 199 L752 301 L630 301 L630 199 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath16">
+                <path d="M630 199 L750 199 L750 299 L630 299 L630 199 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath17">
+                <path d="M668 204 L712 204 L712 227 L668 227 L668 204 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath18">
+                <path d="M668 204 L715 204 L715 227 L668 227 L668 204 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath19">
+                <path d="M631 230 L749 230 L749 298 L631 298 L631 230 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath20">
+                <path d="M553 366 L675 366 L675 468 L553 468 L553 366 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath21">
+                <path d="M553 366 L673 366 L673 466 L553 466 L553 366 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath22">
+                <path d="M558 371 L667 371 L667 394 L558 394 L558 371 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath23">
+                <path d="M558 371 L671 371 L671 394 L558 394 L558 371 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath24">
+                <path d="M554 397 L672 397 L672 465 L554 465 L554 397 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath25">
+                <path d="M763 366 L885 366 L885 468 L763 468 L763 366 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath26">
+                <path d="M763 366 L883 366 L883 466 L763 466 L763 366 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath27">
+                <path d="M768 371 L878 371 L878 394 L768 394 L768 371 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath28">
+                <path d="M768 371 L882 371 L882 394 L768 394 L768 371 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath29">
+                <path d="M764 397 L882 397 L882 465 L764 465 L764 397 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath30">
+                <path d="M126 555 L248 555 L248 657 L126 657 L126 555 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath31">
+                <path d="M126 555 L246 555 L246 655 L126 655 L126 555 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath32">
+                <path d="M157 560 L214 560 L214 583 L157 583 L157 560 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath33">
+                <path d="M157 560 L217 560 L217 583 L157 583 L157 560 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath34">
+                <path d="M127 586 L245 586 L245 654 L127 654 L127 586 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath35">
+                <path d="M308 450 L430 450 L430 552 L308 552 L308 450 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath36">
+                <path d="M308 450 L428 450 L428 550 L308 550 L308 450 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath37">
+                <path d="M323 455 L412 455 L412 478 L323 478 L323 455 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath38">
+                <path d="M323 455 L415 455 L415 478 L323 478 L323 455 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath39">
+                <path d="M309 481 L427 481 L427 549 L309 549 L309 481 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath40">
+                <path d="M9 240 L131 240 L131 342 L9 342 L9 240 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath41">
+                <path d="M9 240 L129 240 L129 340 L9 340 L9 240 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath42">
+                <path d="M38 245 L99 245 L99 268 L38 268 L38 245 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath43">
+                <path d="M38 245 L103 245 L103 268 L38 268 L38 245 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath44">
+                <path d="M10 271 L128 271 L128 339 L10 339 L10 271 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath45">
+                <path d="M-1 -1 L895 -1 L895 684 L-1 684 L-1 -1 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath46">
+                <path d="M714 173 L782 173 L782 196 L714 196 L714 173 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath47">
+                <path d="M541 56 L556 56 L556 65 L541 65 L541 56 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath48">
+                <path d="M690 192 L699 192 L699 202 L690 202 L690 192 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath49">
+                <path d="M194 173 L298 173 L298 196 L194 196 L194 173 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath50">
+                <path d="M401 56 L416 56 L416 65 L401 65 L401 56 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath51">
+                <path d="M305 192 L314 192 L314 202 L305 202 L305 192 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath52">
+                <path d="M441 492 L525 492 L525 515 L441 515 L441 492 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath53">
+                <path d="M426 482 L436 482 L436 491 L426 491 L426 482 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath54">
+                <path d="M252 596 L341 596 L341 619 L252 619 L252 596 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath55">
+                <path d="M244 586 L254 586 L254 595 L244 595 L244 586 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath56">
+                <path d="M441 535 L530 535 L530 558 L441 558 L441 535 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath57">
+                <path d="M426 524 L436 524 L436 533 L426 533 L426 524 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath58">
+                <path d="M259 638 L343 638 L343 661 L259 661 L259 638 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath59">
+                <path d="M244 628 L254 628 L254 637 L244 637 L244 628 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath60">
+                <path d="M77 346 L159 346 L159 369 L77 369 L77 346 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath61">
+                <path d="M114 602 L129 602 L129 611 L114 611 L114 602 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath62">
+                <path d="M64 338 L73 338 L73 348 L64 348 L64 338 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath63">
+                <path d="M686 297 L697 297 L697 308 L686 308 L686 297 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath64">
+                <path d="M305 297 L316 297 L316 308 L305 308 L305 297 Z"/>
+            </clipPath>
+        </defs>
+        <g font-size="16px" fill="rgb(131,122,133)" font-family="'Segoe UI'" stroke-linejoin="round" stroke="rgb(131,122,133)" stroke-width="0" stroke-miterlimit="0">
+            <rect x="415" y="11" clip-path="url(#clipPath1)" width="128" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="416" y="12" clip-path="url(#clipPath1)" width="128" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="414" y="10" clip-path="url(#clipPath2)" fill="url(#linearGradient1)" width="128" rx="4" ry="4" height="98" stroke="none"/>
+        </g>
+        <g font-size="16px" stroke-width="1.1" font-family="'Segoe UI'" stroke-linecap="butt">
+            <rect x="414" y="10" clip-path="url(#clipPath2)" fill="none" width="127" rx="4" ry="4" height="97"/>
+            <image x="440" y="17" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="459" xml:space="preserve" y="33" clip-path="url(#clipPath4)" stroke="none">PetriNet</text>
+            <image x="419" y="45" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAWUlEQVR4XmNgGAWD&#13;&#10;EMyt0f9PCKPrQQFTKwz///h5EScGyaPrQQFdRaYYmpAxSB5dDwqozbH8//3HNTD+&#13;&#10;8ROKYWwgDZJH14MCitJs/2cl2ePEIHl0PaOAQgAAf2WC/D0GsQEAAAAASUVORK5C&#13;&#10;YII=" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="438" xml:space="preserve" y="61" clip-path="url(#clipPath6)" stroke="none">name : EString</text>
+            <line y2="41" fill="none" x1="415" clip-path="url(#clipPath7)" x2="541" y1="41"/>
+            <rect x="235" y="201" clip-path="url(#clipPath8)" fill="rgb(131,122,133)" width="151" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="236" y="202" clip-path="url(#clipPath8)" fill="rgb(131,122,133)" width="151" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="234" y="200" clip-path="url(#clipPath9)" fill="url(#linearGradient2)" width="151" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="234" y="200" clip-path="url(#clipPath9)" fill="none" width="150" rx="4" ry="4" height="97" stroke="rgb(125,125,125)"/>
+            <image stroke="rgb(125,125,125)" width="16" xlink:show="embed" xlink:type="simple" fill="rgb(125,125,125)" preserveAspectRatio="none" height="16" font-style="italic" x="272" y="207" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAw0lEQVR4XmP4//8/&#13;&#10;AyUYQgApZIyuCB8Ga0YHILG5Nfo4MUgJDMMNQLIdTP/4eRErxmkAMsBnwOxqA7AS&#13;&#10;GMbpgu8/rgE1QDGMDaSnV2AxAKoRJgDmL5iRgxVPLjdCNQCZA8J9pSYYzkbGIHm8&#13;&#10;BnQWmWFoQsYgebwGNOebg/2PKwxA8ngNqMux+N/U1vi/qRU7BsnjNaAyywrD2cgY&#13;&#10;JI/XgJIMGwxNyBgkj9eAglRbvGEAksdrQG6K/f+sJNwYJI/XAFIxAHIn7dCPjVWK&#13;&#10;AAAAAElFTkSuQmCC" xlink:actuate="onLoad"/>
+            <text font-style="italic" x="291" xml:space="preserve" y="223" clip-path="url(#clipPath11)" stroke="none">Element</text>
+            <image x="239" y="235" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAWUlEQVR4XmNgGAWD&#13;&#10;EMyt0f9PCKPrQQFTKwz///h5EScGyaPrQQFdRaYYmpAxSB5dDwqozbH8//3HNTD+&#13;&#10;8ROKYWwgDZJH14MCitJs/2cl2ePEIHl0PaOAQgAAf2WC/D0GsQEAAAAASUVORK5C&#13;&#10;YII=" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="258" xml:space="preserve" y="251" clip-path="url(#clipPath13)" stroke="none">identifier : EString</text>
+            <line clip-path="url(#clipPath14)" fill="none" x1="235" x2="384" y1="231" y2="231" stroke="rgb(125,125,125)"/>
+            <rect x="632" y="201" clip-path="url(#clipPath15)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="633" y="202" clip-path="url(#clipPath15)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="631" y="200" clip-path="url(#clipPath16)" fill="url(#linearGradient3)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="631" y="200" clip-path="url(#clipPath16)" fill="none" width="117" rx="4" ry="4" height="97" stroke="rgb(125,125,125)"/>
+            <image stroke="rgb(125,125,125)" width="16" xlink:show="embed" xlink:type="simple" fill="rgb(125,125,125)" preserveAspectRatio="none" height="16" font-style="italic" x="669" y="207" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAw0lEQVR4XmP4//8/&#13;&#10;AyUYQgApZIyuCB8Ga0YHILG5Nfo4MUgJDMMNQLIdTP/4eRErxmkAMsBnwOxqA7AS&#13;&#10;GMbpgu8/rgE1QDGMDaSnV2AxAKoRJgDmL5iRgxVPLjdCNQCZA8J9pSYYzkbGIHm8&#13;&#10;BnQWmWFoQsYgebwGNOebg/2PKwxA8ngNqMux+N/U1vi/qRU7BsnjNaAyywrD2cgY&#13;&#10;JI/XgJIMGwxNyBgkj9eAglRbvGEAksdrQG6K/f+sJNwYJI/XAFIxAHIn7dCPjVWK&#13;&#10;AAAAAElFTkSuQmCC" xlink:actuate="onLoad"/>
+            <text font-style="italic" x="688" xml:space="preserve" y="223" clip-path="url(#clipPath18)" stroke="none">Arc</text>
+            <line clip-path="url(#clipPath19)" fill="none" x1="632" x2="748" y1="231" y2="231" stroke="rgb(125,125,125)"/>
+            <rect x="555" y="368" clip-path="url(#clipPath20)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="556" y="369" clip-path="url(#clipPath20)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="554" y="367" clip-path="url(#clipPath21)" fill="url(#linearGradient4)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="554" y="367" clip-path="url(#clipPath21)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="559" y="374" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="578" xml:space="preserve" y="390" clip-path="url(#clipPath23)" stroke="none">IncomingArc</text>
+            <line y2="398" fill="none" x1="555" clip-path="url(#clipPath24)" x2="671" y1="398"/>
+            <rect x="765" y="368" clip-path="url(#clipPath25)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="766" y="369" clip-path="url(#clipPath25)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="764" y="367" clip-path="url(#clipPath26)" fill="url(#linearGradient5)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="764" y="367" clip-path="url(#clipPath26)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="769" y="374" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="788" xml:space="preserve" y="390" clip-path="url(#clipPath28)" stroke="none">OutgoingArc</text>
+            <line y2="398" fill="none" x1="765" clip-path="url(#clipPath29)" x2="881" y1="398"/>
+            <rect x="128" y="557" clip-path="url(#clipPath30)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="129" y="558" clip-path="url(#clipPath30)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="127" y="556" clip-path="url(#clipPath31)" fill="url(#linearGradient6)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="127" y="556" clip-path="url(#clipPath31)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="158" y="563" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="177" xml:space="preserve" y="579" clip-path="url(#clipPath33)" stroke="none">Place</text>
+            <line y2="587" fill="none" x1="128" clip-path="url(#clipPath34)" x2="244" y1="587"/>
+            <rect x="310" y="452" clip-path="url(#clipPath35)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="311" y="453" clip-path="url(#clipPath35)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="309" y="451" clip-path="url(#clipPath36)" fill="url(#linearGradient7)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="309" y="451" clip-path="url(#clipPath36)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="324" y="458" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="343" xml:space="preserve" y="474" clip-path="url(#clipPath38)" stroke="none">Transition</text>
+            <line y2="482" fill="none" x1="310" clip-path="url(#clipPath39)" x2="426" y1="482"/>
+            <rect x="11" y="242" clip-path="url(#clipPath40)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="12" y="243" clip-path="url(#clipPath40)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="10" y="241" clip-path="url(#clipPath41)" fill="url(#linearGradient8)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="10" y="241" clip-path="url(#clipPath41)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="39" y="248" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="58" xml:space="preserve" y="264" clip-path="url(#clipPath43)" stroke="none">Token</text>
+            <line y2="272" fill="none" x1="11" clip-path="url(#clipPath44)" x2="127" y1="272"/>
+            <line y2="60" fill="none" x1="542" clip-path="url(#clipPath45)" x2="694" y1="60"/>
+            <line y2="200" fill="none" x1="694" clip-path="url(#clipPath45)" x2="694" y1="60"/>
+            <text x="715" xml:space="preserve" y="192" clip-path="url(#clipPath46)" stroke="none">[0..*] arcs</text>
+            <polygon points=" 542 60 548 57 554 60 548 63" clip-path="url(#clipPath47)" stroke="none"/>
+            <polygon fill="none" points=" 542 60 548 57 554 60 548 63" clip-path="url(#clipPath47)"/>
+            <line y2="200" fill="none" x1="691" clip-path="url(#clipPath48)" x2="694" y1="193"/>
+            <line y2="193" fill="none" x1="694" clip-path="url(#clipPath48)" x2="697" y1="200"/>
+            <line y2="60" fill="none" x1="414" clip-path="url(#clipPath45)" x2="309" y1="60"/>
+            <line y2="200" fill="none" x1="309" clip-path="url(#clipPath45)" x2="309" y1="60"/>
+            <text x="195" xml:space="preserve" y="192" clip-path="url(#clipPath49)" stroke="none">[0..*] elements</text>
+            <polygon points=" 414 60 408 63 402 60 408 57" clip-path="url(#clipPath50)" stroke="none"/>
+            <polygon fill="none" points=" 414 60 408 63 402 60 408 57" clip-path="url(#clipPath50)"/>
+            <line y2="200" fill="none" x1="306" clip-path="url(#clipPath51)" x2="309" y1="193"/>
+            <line y2="193" fill="none" x1="309" clip-path="url(#clipPath51)" x2="312" y1="200"/>
+            <line y2="486" fill="none" x1="589" clip-path="url(#clipPath45)" x2="589" y1="465"/>
+            <line y2="486" fill="none" x1="589" clip-path="url(#clipPath45)" x2="427" y1="486"/>
+            <text x="442" xml:space="preserve" y="511" clip-path="url(#clipPath52)" stroke="none">[1..1] target</text>
+            <line y2="486" fill="none" x1="434" clip-path="url(#clipPath53)" x2="427" y1="483"/>
+            <line y2="489" fill="none" x1="427" clip-path="url(#clipPath53)" x2="434" y1="486"/>
+            <line y2="521" fill="none" x1="614" clip-path="url(#clipPath45)" x2="614" y1="465"/>
+            <line y2="521" fill="none" x1="614" clip-path="url(#clipPath45)" x2="624" y1="521"/>
+            <line y2="534" fill="none" x1="624" clip-path="url(#clipPath45)" x2="624" y1="521"/>
+            <line y2="534" fill="none" x1="624" clip-path="url(#clipPath45)" x2="612" y1="534"/>
+            <line y2="590" fill="none" x1="612" clip-path="url(#clipPath45)" x2="612" y1="534"/>
+            <line y2="590" fill="none" x1="612" clip-path="url(#clipPath45)" x2="245" y1="590"/>
+            <text x="253" xml:space="preserve" y="615" clip-path="url(#clipPath54)" stroke="none">[1..1] source</text>
+            <line y2="590" fill="none" x1="252" clip-path="url(#clipPath55)" x2="245" y1="587"/>
+            <line y2="593" fill="none" x1="245" clip-path="url(#clipPath55)" x2="252" y1="590"/>
+            <line y2="528" fill="none" x1="806" clip-path="url(#clipPath45)" x2="806" y1="465"/>
+            <line y2="528" fill="none" x1="806" clip-path="url(#clipPath45)" x2="427" y1="528"/>
+            <text x="442" xml:space="preserve" y="554" clip-path="url(#clipPath56)" stroke="none">[1..1] source</text>
+            <line y2="528" fill="none" x1="434" clip-path="url(#clipPath57)" x2="427" y1="525"/>
+            <line y2="531" fill="none" x1="427" clip-path="url(#clipPath57)" x2="434" y1="528"/>
+            <line y2="632" fill="none" x1="841" clip-path="url(#clipPath45)" x2="841" y1="465"/>
+            <line y2="632" fill="none" x1="841" clip-path="url(#clipPath45)" x2="245" y1="632"/>
+            <text x="260" xml:space="preserve" y="657" clip-path="url(#clipPath58)" stroke="none">[1..1] target</text>
+            <line y2="632" fill="none" x1="252" clip-path="url(#clipPath59)" x2="245" y1="629"/>
+            <line y2="635" fill="none" x1="245" clip-path="url(#clipPath59)" x2="252" y1="632"/>
+            <line y2="606" fill="none" x1="127" clip-path="url(#clipPath45)" x2="68" y1="606"/>
+            <line y2="339" fill="none" x1="68" clip-path="url(#clipPath45)" x2="68" y1="606"/>
+            <text x="78" xml:space="preserve" y="365" clip-path="url(#clipPath60)" stroke="none">[0..1] token</text>
+            <polygon points=" 127 606 121 609 115 606 121 603" clip-path="url(#clipPath61)" stroke="none"/>
+            <polygon fill="none" points=" 127 606 121 609 115 606 121 603" clip-path="url(#clipPath61)"/>
+            <line y2="339" fill="none" x1="71" clip-path="url(#clipPath62)" x2="68" y1="346"/>
+            <line y2="346" fill="none" x1="68" clip-path="url(#clipPath62)" x2="65" y1="339"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="614" x2="614" y1="367" y2="325" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="614" x2="691" y1="325" y2="325" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="691" x2="691" y1="325" y2="298" stroke="rgb(136,136,136)"/>
+            <polygon fill="white" clip-path="url(#clipPath63)" points=" 691 298 695 306 687 306" stroke="none"/>
+            <polygon fill="none" clip-path="url(#clipPath63)" points=" 691 298 695 306 687 306" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="824" x2="824" y1="367" y2="325" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="824" x2="691" y1="325" y2="325" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="691" x2="691" y1="325" y2="298" stroke="rgb(136,136,136)"/>
+            <polygon fill="white" clip-path="url(#clipPath63)" points=" 691 298 695 306 687 306" stroke="none"/>
+            <polygon fill="none" clip-path="url(#clipPath63)" points=" 691 298 695 306 687 306" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="187" x2="187" y1="556" y2="325" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="187" x2="310" y1="325" y2="325" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="310" x2="310" y1="325" y2="298" stroke="rgb(136,136,136)"/>
+            <polygon fill="white" clip-path="url(#clipPath64)" points=" 310 298 314 306 306 306" stroke="none"/>
+            <polygon fill="none" clip-path="url(#clipPath64)" points=" 310 298 314 306 306 306" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="369" x2="369" y1="451" y2="325" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="369" x2="310" y1="325" y2="325" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath45)" fill="none" x1="310" x2="310" y1="325" y2="298" stroke="rgb(136,136,136)"/>
+            <polygon fill="white" clip-path="url(#clipPath64)" points=" 310 298 314 306 306 306" stroke="none"/>
+            <polygon fill="none" clip-path="url(#clipPath64)" points=" 310 298 314 306 306 306" stroke="rgb(136,136,136)"/>
+        </g>
+    </g>
+</svg>
diff --git a/metamodel/swt.most.petrinet/plugin.properties b/metamodel/swt.most.petrinet/plugin.properties
new file mode 100644
index 0000000000000000000000000000000000000000..69c8f3c8e73d45d2163be4bf3c678cadd4d9ef89
--- /dev/null
+++ b/metamodel/swt.most.petrinet/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = swt.most.petrinet
+providerName = www.example.org
diff --git a/metamodel/swt.most.petrinet/plugin.xml b/metamodel/swt.most.petrinet/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e741d689236b62d5080005d188d421c8a9e6eded
--- /dev/null
+++ b/metamodel/swt.most.petrinet/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated petrinet -->
+      <package
+            uri="http://www.example.org/petrinet"
+            class="swt.most.petrinet.PetrinetPackage"
+            genModel="model/petrinet.genmodel"/>
+   </extension>
+
+</plugin>
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Arc.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Arc.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba76cc95989a1252547e621d42d2deead1834549
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Arc.java
@@ -0,0 +1,18 @@
+/**
+ */
+package swt.most.petrinet;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Arc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see swt.most.petrinet.PetrinetPackage#getArc()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Arc extends EObject {
+} // Arc
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Element.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Element.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2f93130c60de51e95cd8161a8f4ef1a3c179ed4
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Element.java
@@ -0,0 +1,46 @@
+/**
+ */
+package swt.most.petrinet;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Element</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.petrinet.Element#getIdentifier <em>Identifier</em>}</li>
+ * </ul>
+ *
+ * @see swt.most.petrinet.PetrinetPackage#getElement()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Element extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Identifier</em>' attribute.
+	 * @see #setIdentifier(String)
+	 * @see swt.most.petrinet.PetrinetPackage#getElement_Identifier()
+	 * @model
+	 * @generated
+	 */
+	String getIdentifier();
+
+	/**
+	 * Sets the value of the '{@link swt.most.petrinet.Element#getIdentifier <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Identifier</em>' attribute.
+	 * @see #getIdentifier()
+	 * @generated
+	 */
+	void setIdentifier(String value);
+
+} // Element
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/IncomingArc.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/IncomingArc.java
new file mode 100644
index 0000000000000000000000000000000000000000..c03936fea26d9818d4ceef079d9a0283632e9828
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/IncomingArc.java
@@ -0,0 +1,67 @@
+/**
+ */
+package swt.most.petrinet;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Incoming Arc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.petrinet.IncomingArc#getTarget <em>Target</em>}</li>
+ *   <li>{@link swt.most.petrinet.IncomingArc#getSource <em>Source</em>}</li>
+ * </ul>
+ *
+ * @see swt.most.petrinet.PetrinetPackage#getIncomingArc()
+ * @model
+ * @generated
+ */
+public interface IncomingArc extends Arc {
+	/**
+	 * Returns the value of the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Target</em>' reference.
+	 * @see #setTarget(Transition)
+	 * @see swt.most.petrinet.PetrinetPackage#getIncomingArc_Target()
+	 * @model required="true"
+	 * @generated
+	 */
+	Transition getTarget();
+
+	/**
+	 * Sets the value of the '{@link swt.most.petrinet.IncomingArc#getTarget <em>Target</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Target</em>' reference.
+	 * @see #getTarget()
+	 * @generated
+	 */
+	void setTarget(Transition value);
+
+	/**
+	 * Returns the value of the '<em><b>Source</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Source</em>' reference.
+	 * @see #setSource(Place)
+	 * @see swt.most.petrinet.PetrinetPackage#getIncomingArc_Source()
+	 * @model required="true"
+	 * @generated
+	 */
+	Place getSource();
+
+	/**
+	 * Sets the value of the '{@link swt.most.petrinet.IncomingArc#getSource <em>Source</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Source</em>' reference.
+	 * @see #getSource()
+	 * @generated
+	 */
+	void setSource(Place value);
+
+} // IncomingArc
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/OutgoingArc.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/OutgoingArc.java
new file mode 100644
index 0000000000000000000000000000000000000000..f7204ecdf653e5ed3e65fae848516951ef79317c
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/OutgoingArc.java
@@ -0,0 +1,67 @@
+/**
+ */
+package swt.most.petrinet;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Outgoing Arc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.petrinet.OutgoingArc#getSource <em>Source</em>}</li>
+ *   <li>{@link swt.most.petrinet.OutgoingArc#getTarget <em>Target</em>}</li>
+ * </ul>
+ *
+ * @see swt.most.petrinet.PetrinetPackage#getOutgoingArc()
+ * @model
+ * @generated
+ */
+public interface OutgoingArc extends Arc {
+	/**
+	 * Returns the value of the '<em><b>Source</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Source</em>' reference.
+	 * @see #setSource(Transition)
+	 * @see swt.most.petrinet.PetrinetPackage#getOutgoingArc_Source()
+	 * @model required="true"
+	 * @generated
+	 */
+	Transition getSource();
+
+	/**
+	 * Sets the value of the '{@link swt.most.petrinet.OutgoingArc#getSource <em>Source</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Source</em>' reference.
+	 * @see #getSource()
+	 * @generated
+	 */
+	void setSource(Transition value);
+
+	/**
+	 * Returns the value of the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Target</em>' reference.
+	 * @see #setTarget(Place)
+	 * @see swt.most.petrinet.PetrinetPackage#getOutgoingArc_Target()
+	 * @model required="true"
+	 * @generated
+	 */
+	Place getTarget();
+
+	/**
+	 * Sets the value of the '{@link swt.most.petrinet.OutgoingArc#getTarget <em>Target</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Target</em>' reference.
+	 * @see #getTarget()
+	 * @generated
+	 */
+	void setTarget(Place value);
+
+} // OutgoingArc
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/PetriNet.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/PetriNet.java
new file mode 100644
index 0000000000000000000000000000000000000000..4431b19f3d5a0306d0c86fca2177504286fb3839
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/PetriNet.java
@@ -0,0 +1,74 @@
+/**
+ */
+package swt.most.petrinet;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Petri Net</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.petrinet.PetriNet#getName <em>Name</em>}</li>
+ *   <li>{@link swt.most.petrinet.PetriNet#getArcs <em>Arcs</em>}</li>
+ *   <li>{@link swt.most.petrinet.PetriNet#getElements <em>Elements</em>}</li>
+ * </ul>
+ *
+ * @see swt.most.petrinet.PetrinetPackage#getPetriNet()
+ * @model
+ * @generated
+ */
+public interface PetriNet extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see swt.most.petrinet.PetrinetPackage#getPetriNet_Name()
+	 * @model
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link swt.most.petrinet.PetriNet#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Arcs</b></em>' containment reference list.
+	 * The list contents are of type {@link swt.most.petrinet.Arc}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Arcs</em>' containment reference list.
+	 * @see swt.most.petrinet.PetrinetPackage#getPetriNet_Arcs()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Arc> getArcs();
+
+	/**
+	 * Returns the value of the '<em><b>Elements</b></em>' containment reference list.
+	 * The list contents are of type {@link swt.most.petrinet.Element}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Elements</em>' containment reference list.
+	 * @see swt.most.petrinet.PetrinetPackage#getPetriNet_Elements()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Element> getElements();
+
+} // PetriNet
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/PetrinetFactory.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/PetrinetFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6461800f64fddeea2fc22fb486ef8a99825d98b
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/PetrinetFactory.java
@@ -0,0 +1,87 @@
+/**
+ */
+package swt.most.petrinet;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see swt.most.petrinet.PetrinetPackage
+ * @generated
+ */
+public interface PetrinetFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	PetrinetFactory eINSTANCE = swt.most.petrinet.impl.PetrinetFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Petri Net</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Petri Net</em>'.
+	 * @generated
+	 */
+	PetriNet createPetriNet();
+
+	/**
+	 * Returns a new object of class '<em>Incoming Arc</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Incoming Arc</em>'.
+	 * @generated
+	 */
+	IncomingArc createIncomingArc();
+
+	/**
+	 * Returns a new object of class '<em>Outgoing Arc</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Outgoing Arc</em>'.
+	 * @generated
+	 */
+	OutgoingArc createOutgoingArc();
+
+	/**
+	 * Returns a new object of class '<em>Place</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Place</em>'.
+	 * @generated
+	 */
+	Place createPlace();
+
+	/**
+	 * Returns a new object of class '<em>Transition</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Transition</em>'.
+	 * @generated
+	 */
+	Transition createTransition();
+
+	/**
+	 * Returns a new object of class '<em>Token</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Token</em>'.
+	 * @generated
+	 */
+	Token createToken();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	PetrinetPackage getPetrinetPackage();
+
+} //PetrinetFactory
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/PetrinetPackage.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/PetrinetPackage.java
new file mode 100644
index 0000000000000000000000000000000000000000..adc743e4232b2c7cbaca991b2fd156896229f2cf
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/PetrinetPackage.java
@@ -0,0 +1,738 @@
+/**
+ */
+package swt.most.petrinet;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each operation of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see swt.most.petrinet.PetrinetFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface PetrinetPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "petrinet";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http://www.example.org/petrinet";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "petrinet";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	PetrinetPackage eINSTANCE = swt.most.petrinet.impl.PetrinetPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link swt.most.petrinet.impl.PetriNetImpl <em>Petri Net</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.petrinet.impl.PetriNetImpl
+	 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getPetriNet()
+	 * @generated
+	 */
+	int PETRI_NET = 0;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PETRI_NET__NAME = 0;
+
+	/**
+	 * The feature id for the '<em><b>Arcs</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PETRI_NET__ARCS = 1;
+
+	/**
+	 * The feature id for the '<em><b>Elements</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PETRI_NET__ELEMENTS = 2;
+
+	/**
+	 * The number of structural features of the '<em>Petri Net</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PETRI_NET_FEATURE_COUNT = 3;
+
+	/**
+	 * The number of operations of the '<em>Petri Net</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PETRI_NET_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.petrinet.impl.ElementImpl <em>Element</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.petrinet.impl.ElementImpl
+	 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getElement()
+	 * @generated
+	 */
+	int ELEMENT = 1;
+
+	/**
+	 * The feature id for the '<em><b>Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELEMENT__IDENTIFIER = 0;
+
+	/**
+	 * The number of structural features of the '<em>Element</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELEMENT_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Element</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELEMENT_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.petrinet.impl.ArcImpl <em>Arc</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.petrinet.impl.ArcImpl
+	 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getArc()
+	 * @generated
+	 */
+	int ARC = 2;
+
+	/**
+	 * The number of structural features of the '<em>Arc</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARC_FEATURE_COUNT = 0;
+
+	/**
+	 * The number of operations of the '<em>Arc</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARC_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.petrinet.impl.IncomingArcImpl <em>Incoming Arc</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.petrinet.impl.IncomingArcImpl
+	 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getIncomingArc()
+	 * @generated
+	 */
+	int INCOMING_ARC = 3;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INCOMING_ARC__TARGET = ARC_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INCOMING_ARC__SOURCE = ARC_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Incoming Arc</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INCOMING_ARC_FEATURE_COUNT = ARC_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of operations of the '<em>Incoming Arc</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INCOMING_ARC_OPERATION_COUNT = ARC_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.petrinet.impl.OutgoingArcImpl <em>Outgoing Arc</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.petrinet.impl.OutgoingArcImpl
+	 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getOutgoingArc()
+	 * @generated
+	 */
+	int OUTGOING_ARC = 4;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OUTGOING_ARC__SOURCE = ARC_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OUTGOING_ARC__TARGET = ARC_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Outgoing Arc</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OUTGOING_ARC_FEATURE_COUNT = ARC_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of operations of the '<em>Outgoing Arc</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OUTGOING_ARC_OPERATION_COUNT = ARC_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.petrinet.impl.PlaceImpl <em>Place</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.petrinet.impl.PlaceImpl
+	 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getPlace()
+	 * @generated
+	 */
+	int PLACE = 5;
+
+	/**
+	 * The feature id for the '<em><b>Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLACE__IDENTIFIER = ELEMENT__IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Token</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLACE__TOKEN = ELEMENT_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Place</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLACE_FEATURE_COUNT = ELEMENT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Place</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PLACE_OPERATION_COUNT = ELEMENT_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.petrinet.impl.TransitionImpl <em>Transition</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.petrinet.impl.TransitionImpl
+	 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getTransition()
+	 * @generated
+	 */
+	int TRANSITION = 6;
+
+	/**
+	 * The feature id for the '<em><b>Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION__IDENTIFIER = ELEMENT__IDENTIFIER;
+
+	/**
+	 * The number of structural features of the '<em>Transition</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION_FEATURE_COUNT = ELEMENT_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of operations of the '<em>Transition</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION_OPERATION_COUNT = ELEMENT_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.petrinet.impl.TokenImpl <em>Token</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.petrinet.impl.TokenImpl
+	 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getToken()
+	 * @generated
+	 */
+	int TOKEN = 7;
+
+	/**
+	 * The number of structural features of the '<em>Token</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TOKEN_FEATURE_COUNT = 0;
+
+	/**
+	 * The number of operations of the '<em>Token</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TOKEN_OPERATION_COUNT = 0;
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.petrinet.PetriNet <em>Petri Net</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Petri Net</em>'.
+	 * @see swt.most.petrinet.PetriNet
+	 * @generated
+	 */
+	EClass getPetriNet();
+
+	/**
+	 * Returns the meta object for the attribute '{@link swt.most.petrinet.PetriNet#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see swt.most.petrinet.PetriNet#getName()
+	 * @see #getPetriNet()
+	 * @generated
+	 */
+	EAttribute getPetriNet_Name();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link swt.most.petrinet.PetriNet#getArcs <em>Arcs</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Arcs</em>'.
+	 * @see swt.most.petrinet.PetriNet#getArcs()
+	 * @see #getPetriNet()
+	 * @generated
+	 */
+	EReference getPetriNet_Arcs();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link swt.most.petrinet.PetriNet#getElements <em>Elements</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Elements</em>'.
+	 * @see swt.most.petrinet.PetriNet#getElements()
+	 * @see #getPetriNet()
+	 * @generated
+	 */
+	EReference getPetriNet_Elements();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.petrinet.Element <em>Element</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Element</em>'.
+	 * @see swt.most.petrinet.Element
+	 * @generated
+	 */
+	EClass getElement();
+
+	/**
+	 * Returns the meta object for the attribute '{@link swt.most.petrinet.Element#getIdentifier <em>Identifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Identifier</em>'.
+	 * @see swt.most.petrinet.Element#getIdentifier()
+	 * @see #getElement()
+	 * @generated
+	 */
+	EAttribute getElement_Identifier();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.petrinet.Arc <em>Arc</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Arc</em>'.
+	 * @see swt.most.petrinet.Arc
+	 * @generated
+	 */
+	EClass getArc();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.petrinet.IncomingArc <em>Incoming Arc</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Incoming Arc</em>'.
+	 * @see swt.most.petrinet.IncomingArc
+	 * @generated
+	 */
+	EClass getIncomingArc();
+
+	/**
+	 * Returns the meta object for the reference '{@link swt.most.petrinet.IncomingArc#getTarget <em>Target</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Target</em>'.
+	 * @see swt.most.petrinet.IncomingArc#getTarget()
+	 * @see #getIncomingArc()
+	 * @generated
+	 */
+	EReference getIncomingArc_Target();
+
+	/**
+	 * Returns the meta object for the reference '{@link swt.most.petrinet.IncomingArc#getSource <em>Source</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Source</em>'.
+	 * @see swt.most.petrinet.IncomingArc#getSource()
+	 * @see #getIncomingArc()
+	 * @generated
+	 */
+	EReference getIncomingArc_Source();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.petrinet.OutgoingArc <em>Outgoing Arc</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Outgoing Arc</em>'.
+	 * @see swt.most.petrinet.OutgoingArc
+	 * @generated
+	 */
+	EClass getOutgoingArc();
+
+	/**
+	 * Returns the meta object for the reference '{@link swt.most.petrinet.OutgoingArc#getSource <em>Source</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Source</em>'.
+	 * @see swt.most.petrinet.OutgoingArc#getSource()
+	 * @see #getOutgoingArc()
+	 * @generated
+	 */
+	EReference getOutgoingArc_Source();
+
+	/**
+	 * Returns the meta object for the reference '{@link swt.most.petrinet.OutgoingArc#getTarget <em>Target</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Target</em>'.
+	 * @see swt.most.petrinet.OutgoingArc#getTarget()
+	 * @see #getOutgoingArc()
+	 * @generated
+	 */
+	EReference getOutgoingArc_Target();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.petrinet.Place <em>Place</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Place</em>'.
+	 * @see swt.most.petrinet.Place
+	 * @generated
+	 */
+	EClass getPlace();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link swt.most.petrinet.Place#getToken <em>Token</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Token</em>'.
+	 * @see swt.most.petrinet.Place#getToken()
+	 * @see #getPlace()
+	 * @generated
+	 */
+	EReference getPlace_Token();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.petrinet.Transition <em>Transition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Transition</em>'.
+	 * @see swt.most.petrinet.Transition
+	 * @generated
+	 */
+	EClass getTransition();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.petrinet.Token <em>Token</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Token</em>'.
+	 * @see swt.most.petrinet.Token
+	 * @generated
+	 */
+	EClass getToken();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	PetrinetFactory getPetrinetFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each operation of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link swt.most.petrinet.impl.PetriNetImpl <em>Petri Net</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.petrinet.impl.PetriNetImpl
+		 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getPetriNet()
+		 * @generated
+		 */
+		EClass PETRI_NET = eINSTANCE.getPetriNet();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PETRI_NET__NAME = eINSTANCE.getPetriNet_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>Arcs</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PETRI_NET__ARCS = eINSTANCE.getPetriNet_Arcs();
+
+		/**
+		 * The meta object literal for the '<em><b>Elements</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PETRI_NET__ELEMENTS = eINSTANCE.getPetriNet_Elements();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.petrinet.impl.ElementImpl <em>Element</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.petrinet.impl.ElementImpl
+		 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getElement()
+		 * @generated
+		 */
+		EClass ELEMENT = eINSTANCE.getElement();
+
+		/**
+		 * The meta object literal for the '<em><b>Identifier</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ELEMENT__IDENTIFIER = eINSTANCE.getElement_Identifier();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.petrinet.impl.ArcImpl <em>Arc</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.petrinet.impl.ArcImpl
+		 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getArc()
+		 * @generated
+		 */
+		EClass ARC = eINSTANCE.getArc();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.petrinet.impl.IncomingArcImpl <em>Incoming Arc</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.petrinet.impl.IncomingArcImpl
+		 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getIncomingArc()
+		 * @generated
+		 */
+		EClass INCOMING_ARC = eINSTANCE.getIncomingArc();
+
+		/**
+		 * The meta object literal for the '<em><b>Target</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference INCOMING_ARC__TARGET = eINSTANCE.getIncomingArc_Target();
+
+		/**
+		 * The meta object literal for the '<em><b>Source</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference INCOMING_ARC__SOURCE = eINSTANCE.getIncomingArc_Source();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.petrinet.impl.OutgoingArcImpl <em>Outgoing Arc</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.petrinet.impl.OutgoingArcImpl
+		 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getOutgoingArc()
+		 * @generated
+		 */
+		EClass OUTGOING_ARC = eINSTANCE.getOutgoingArc();
+
+		/**
+		 * The meta object literal for the '<em><b>Source</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference OUTGOING_ARC__SOURCE = eINSTANCE.getOutgoingArc_Source();
+
+		/**
+		 * The meta object literal for the '<em><b>Target</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference OUTGOING_ARC__TARGET = eINSTANCE.getOutgoingArc_Target();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.petrinet.impl.PlaceImpl <em>Place</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.petrinet.impl.PlaceImpl
+		 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getPlace()
+		 * @generated
+		 */
+		EClass PLACE = eINSTANCE.getPlace();
+
+		/**
+		 * The meta object literal for the '<em><b>Token</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PLACE__TOKEN = eINSTANCE.getPlace_Token();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.petrinet.impl.TransitionImpl <em>Transition</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.petrinet.impl.TransitionImpl
+		 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getTransition()
+		 * @generated
+		 */
+		EClass TRANSITION = eINSTANCE.getTransition();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.petrinet.impl.TokenImpl <em>Token</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.petrinet.impl.TokenImpl
+		 * @see swt.most.petrinet.impl.PetrinetPackageImpl#getToken()
+		 * @generated
+		 */
+		EClass TOKEN = eINSTANCE.getToken();
+
+	}
+
+} //PetrinetPackage
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Place.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Place.java
new file mode 100644
index 0000000000000000000000000000000000000000..64b3486e36479a1ebb46363e6418e492e821a456
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Place.java
@@ -0,0 +1,44 @@
+/**
+ */
+package swt.most.petrinet;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Place</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.petrinet.Place#getToken <em>Token</em>}</li>
+ * </ul>
+ *
+ * @see swt.most.petrinet.PetrinetPackage#getPlace()
+ * @model
+ * @generated
+ */
+public interface Place extends Element {
+	/**
+	 * Returns the value of the '<em><b>Token</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Token</em>' containment reference.
+	 * @see #setToken(Token)
+	 * @see swt.most.petrinet.PetrinetPackage#getPlace_Token()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Token getToken();
+
+	/**
+	 * Sets the value of the '{@link swt.most.petrinet.Place#getToken <em>Token</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Token</em>' containment reference.
+	 * @see #getToken()
+	 * @generated
+	 */
+	void setToken(Token value);
+
+} // Place
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Token.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Token.java
new file mode 100644
index 0000000000000000000000000000000000000000..f7e9e600627ee6cdb050e79ee704783e218a257e
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Token.java
@@ -0,0 +1,18 @@
+/**
+ */
+package swt.most.petrinet;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Token</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see swt.most.petrinet.PetrinetPackage#getToken()
+ * @model
+ * @generated
+ */
+public interface Token extends EObject {
+} // Token
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Transition.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Transition.java
new file mode 100644
index 0000000000000000000000000000000000000000..1205c20b7b4d022b6521df91b6d36628fa917a6a
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/Transition.java
@@ -0,0 +1,16 @@
+/**
+ */
+package swt.most.petrinet;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Transition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see swt.most.petrinet.PetrinetPackage#getTransition()
+ * @model
+ * @generated
+ */
+public interface Transition extends Element {
+} // Transition
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/ArcImpl.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/ArcImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..216596226d99b51b62bb4b2018e2e9209bdce270
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/ArcImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package swt.most.petrinet.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import swt.most.petrinet.Arc;
+import swt.most.petrinet.PetrinetPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Arc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public abstract class ArcImpl extends MinimalEObjectImpl.Container implements Arc {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArcImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PetrinetPackage.Literals.ARC;
+	}
+
+} //ArcImpl
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/ElementImpl.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/ElementImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7c7616312d53db652a702c882c736ce0833c724
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/ElementImpl.java
@@ -0,0 +1,165 @@
+/**
+ */
+package swt.most.petrinet.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import swt.most.petrinet.Element;
+import swt.most.petrinet.PetrinetPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Element</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.petrinet.impl.ElementImpl#getIdentifier <em>Identifier</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ElementImpl extends MinimalEObjectImpl.Container implements Element {
+	/**
+	 * The default value of the '{@link #getIdentifier() <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String IDENTIFIER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getIdentifier() <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected String identifier = IDENTIFIER_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ElementImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PetrinetPackage.Literals.ELEMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getIdentifier() {
+		return identifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIdentifier(String newIdentifier) {
+		String oldIdentifier = identifier;
+		identifier = newIdentifier;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.ELEMENT__IDENTIFIER, oldIdentifier,
+					identifier));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case PetrinetPackage.ELEMENT__IDENTIFIER:
+			return getIdentifier();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case PetrinetPackage.ELEMENT__IDENTIFIER:
+			setIdentifier((String) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case PetrinetPackage.ELEMENT__IDENTIFIER:
+			setIdentifier(IDENTIFIER_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case PetrinetPackage.ELEMENT__IDENTIFIER:
+			return IDENTIFIER_EDEFAULT == null ? identifier != null : !IDENTIFIER_EDEFAULT.equals(identifier);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (identifier: ");
+		result.append(identifier);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ElementImpl
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/IncomingArcImpl.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/IncomingArcImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..29c436d9bb41b517e7d86c10919babf09c75dd6e
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/IncomingArcImpl.java
@@ -0,0 +1,223 @@
+/**
+ */
+package swt.most.petrinet.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import swt.most.petrinet.IncomingArc;
+import swt.most.petrinet.PetrinetPackage;
+import swt.most.petrinet.Place;
+import swt.most.petrinet.Transition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Incoming Arc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.petrinet.impl.IncomingArcImpl#getTarget <em>Target</em>}</li>
+ *   <li>{@link swt.most.petrinet.impl.IncomingArcImpl#getSource <em>Source</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class IncomingArcImpl extends ArcImpl implements IncomingArc {
+	/**
+	 * The cached value of the '{@link #getTarget() <em>Target</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTarget()
+	 * @generated
+	 * @ordered
+	 */
+	protected Transition target;
+
+	/**
+	 * The cached value of the '{@link #getSource() <em>Source</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected Place source;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IncomingArcImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PetrinetPackage.Literals.INCOMING_ARC;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Transition getTarget() {
+		if (target != null && target.eIsProxy()) {
+			InternalEObject oldTarget = (InternalEObject) target;
+			target = (Transition) eResolveProxy(oldTarget);
+			if (target != oldTarget) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, PetrinetPackage.INCOMING_ARC__TARGET,
+							oldTarget, target));
+			}
+		}
+		return target;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Transition basicGetTarget() {
+		return target;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTarget(Transition newTarget) {
+		Transition oldTarget = target;
+		target = newTarget;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.INCOMING_ARC__TARGET, oldTarget,
+					target));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Place getSource() {
+		if (source != null && source.eIsProxy()) {
+			InternalEObject oldSource = (InternalEObject) source;
+			source = (Place) eResolveProxy(oldSource);
+			if (source != oldSource) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, PetrinetPackage.INCOMING_ARC__SOURCE,
+							oldSource, source));
+			}
+		}
+		return source;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Place basicGetSource() {
+		return source;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSource(Place newSource) {
+		Place oldSource = source;
+		source = newSource;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.INCOMING_ARC__SOURCE, oldSource,
+					source));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case PetrinetPackage.INCOMING_ARC__TARGET:
+			if (resolve)
+				return getTarget();
+			return basicGetTarget();
+		case PetrinetPackage.INCOMING_ARC__SOURCE:
+			if (resolve)
+				return getSource();
+			return basicGetSource();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case PetrinetPackage.INCOMING_ARC__TARGET:
+			setTarget((Transition) newValue);
+			return;
+		case PetrinetPackage.INCOMING_ARC__SOURCE:
+			setSource((Place) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case PetrinetPackage.INCOMING_ARC__TARGET:
+			setTarget((Transition) null);
+			return;
+		case PetrinetPackage.INCOMING_ARC__SOURCE:
+			setSource((Place) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case PetrinetPackage.INCOMING_ARC__TARGET:
+			return target != null;
+		case PetrinetPackage.INCOMING_ARC__SOURCE:
+			return source != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //IncomingArcImpl
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/OutgoingArcImpl.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/OutgoingArcImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..af9f6eb184069994892eb3eb7a7c499f8e1baa56
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/OutgoingArcImpl.java
@@ -0,0 +1,223 @@
+/**
+ */
+package swt.most.petrinet.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import swt.most.petrinet.OutgoingArc;
+import swt.most.petrinet.PetrinetPackage;
+import swt.most.petrinet.Place;
+import swt.most.petrinet.Transition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Outgoing Arc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.petrinet.impl.OutgoingArcImpl#getSource <em>Source</em>}</li>
+ *   <li>{@link swt.most.petrinet.impl.OutgoingArcImpl#getTarget <em>Target</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class OutgoingArcImpl extends ArcImpl implements OutgoingArc {
+	/**
+	 * The cached value of the '{@link #getSource() <em>Source</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected Transition source;
+
+	/**
+	 * The cached value of the '{@link #getTarget() <em>Target</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTarget()
+	 * @generated
+	 * @ordered
+	 */
+	protected Place target;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OutgoingArcImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PetrinetPackage.Literals.OUTGOING_ARC;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Transition getSource() {
+		if (source != null && source.eIsProxy()) {
+			InternalEObject oldSource = (InternalEObject) source;
+			source = (Transition) eResolveProxy(oldSource);
+			if (source != oldSource) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, PetrinetPackage.OUTGOING_ARC__SOURCE,
+							oldSource, source));
+			}
+		}
+		return source;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Transition basicGetSource() {
+		return source;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSource(Transition newSource) {
+		Transition oldSource = source;
+		source = newSource;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.OUTGOING_ARC__SOURCE, oldSource,
+					source));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Place getTarget() {
+		if (target != null && target.eIsProxy()) {
+			InternalEObject oldTarget = (InternalEObject) target;
+			target = (Place) eResolveProxy(oldTarget);
+			if (target != oldTarget) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, PetrinetPackage.OUTGOING_ARC__TARGET,
+							oldTarget, target));
+			}
+		}
+		return target;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Place basicGetTarget() {
+		return target;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTarget(Place newTarget) {
+		Place oldTarget = target;
+		target = newTarget;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.OUTGOING_ARC__TARGET, oldTarget,
+					target));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case PetrinetPackage.OUTGOING_ARC__SOURCE:
+			if (resolve)
+				return getSource();
+			return basicGetSource();
+		case PetrinetPackage.OUTGOING_ARC__TARGET:
+			if (resolve)
+				return getTarget();
+			return basicGetTarget();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case PetrinetPackage.OUTGOING_ARC__SOURCE:
+			setSource((Transition) newValue);
+			return;
+		case PetrinetPackage.OUTGOING_ARC__TARGET:
+			setTarget((Place) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case PetrinetPackage.OUTGOING_ARC__SOURCE:
+			setSource((Transition) null);
+			return;
+		case PetrinetPackage.OUTGOING_ARC__TARGET:
+			setTarget((Place) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case PetrinetPackage.OUTGOING_ARC__SOURCE:
+			return source != null;
+		case PetrinetPackage.OUTGOING_ARC__TARGET:
+			return target != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //OutgoingArcImpl
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PetriNetImpl.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PetriNetImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ac5a18f10aa95581d30edea7bd94dc4a4afeb85
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PetriNetImpl.java
@@ -0,0 +1,260 @@
+/**
+ */
+package swt.most.petrinet.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import swt.most.petrinet.Arc;
+import swt.most.petrinet.Element;
+import swt.most.petrinet.PetriNet;
+import swt.most.petrinet.PetrinetPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Petri Net</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.petrinet.impl.PetriNetImpl#getName <em>Name</em>}</li>
+ *   <li>{@link swt.most.petrinet.impl.PetriNetImpl#getArcs <em>Arcs</em>}</li>
+ *   <li>{@link swt.most.petrinet.impl.PetriNetImpl#getElements <em>Elements</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class PetriNetImpl extends MinimalEObjectImpl.Container implements PetriNet {
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getArcs() <em>Arcs</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getArcs()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Arc> arcs;
+
+	/**
+	 * The cached value of the '{@link #getElements() <em>Elements</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getElements()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Element> elements;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PetriNetImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PetrinetPackage.Literals.PETRI_NET;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.PETRI_NET__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Arc> getArcs() {
+		if (arcs == null) {
+			arcs = new EObjectContainmentEList<Arc>(Arc.class, this, PetrinetPackage.PETRI_NET__ARCS);
+		}
+		return arcs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Element> getElements() {
+		if (elements == null) {
+			elements = new EObjectContainmentEList<Element>(Element.class, this, PetrinetPackage.PETRI_NET__ELEMENTS);
+		}
+		return elements;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case PetrinetPackage.PETRI_NET__ARCS:
+			return ((InternalEList<?>) getArcs()).basicRemove(otherEnd, msgs);
+		case PetrinetPackage.PETRI_NET__ELEMENTS:
+			return ((InternalEList<?>) getElements()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case PetrinetPackage.PETRI_NET__NAME:
+			return getName();
+		case PetrinetPackage.PETRI_NET__ARCS:
+			return getArcs();
+		case PetrinetPackage.PETRI_NET__ELEMENTS:
+			return getElements();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case PetrinetPackage.PETRI_NET__NAME:
+			setName((String) newValue);
+			return;
+		case PetrinetPackage.PETRI_NET__ARCS:
+			getArcs().clear();
+			getArcs().addAll((Collection<? extends Arc>) newValue);
+			return;
+		case PetrinetPackage.PETRI_NET__ELEMENTS:
+			getElements().clear();
+			getElements().addAll((Collection<? extends Element>) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case PetrinetPackage.PETRI_NET__NAME:
+			setName(NAME_EDEFAULT);
+			return;
+		case PetrinetPackage.PETRI_NET__ARCS:
+			getArcs().clear();
+			return;
+		case PetrinetPackage.PETRI_NET__ELEMENTS:
+			getElements().clear();
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case PetrinetPackage.PETRI_NET__NAME:
+			return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+		case PetrinetPackage.PETRI_NET__ARCS:
+			return arcs != null && !arcs.isEmpty();
+		case PetrinetPackage.PETRI_NET__ELEMENTS:
+			return elements != null && !elements.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //PetriNetImpl
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PetrinetFactoryImpl.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PetrinetFactoryImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e19c1dd044cfc53f694cb3796681d67b732ccf6
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PetrinetFactoryImpl.java
@@ -0,0 +1,156 @@
+/**
+ */
+package swt.most.petrinet.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import swt.most.petrinet.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PetrinetFactoryImpl extends EFactoryImpl implements PetrinetFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PetrinetFactory init() {
+		try {
+			PetrinetFactory thePetrinetFactory = (PetrinetFactory) EPackage.Registry.INSTANCE
+					.getEFactory(PetrinetPackage.eNS_URI);
+			if (thePetrinetFactory != null) {
+				return thePetrinetFactory;
+			}
+		} catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new PetrinetFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetrinetFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+		case PetrinetPackage.PETRI_NET:
+			return createPetriNet();
+		case PetrinetPackage.INCOMING_ARC:
+			return createIncomingArc();
+		case PetrinetPackage.OUTGOING_ARC:
+			return createOutgoingArc();
+		case PetrinetPackage.PLACE:
+			return createPlace();
+		case PetrinetPackage.TRANSITION:
+			return createTransition();
+		case PetrinetPackage.TOKEN:
+			return createToken();
+		default:
+			throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetriNet createPetriNet() {
+		PetriNetImpl petriNet = new PetriNetImpl();
+		return petriNet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IncomingArc createIncomingArc() {
+		IncomingArcImpl incomingArc = new IncomingArcImpl();
+		return incomingArc;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OutgoingArc createOutgoingArc() {
+		OutgoingArcImpl outgoingArc = new OutgoingArcImpl();
+		return outgoingArc;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Place createPlace() {
+		PlaceImpl place = new PlaceImpl();
+		return place;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Transition createTransition() {
+		TransitionImpl transition = new TransitionImpl();
+		return transition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Token createToken() {
+		TokenImpl token = new TokenImpl();
+		return token;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetrinetPackage getPetrinetPackage() {
+		return (PetrinetPackage) getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static PetrinetPackage getPackage() {
+		return PetrinetPackage.eINSTANCE;
+	}
+
+} //PetrinetFactoryImpl
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PetrinetPackageImpl.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PetrinetPackageImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..eac5512809a1616816d24d18c728adf56deec76d
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PetrinetPackageImpl.java
@@ -0,0 +1,442 @@
+/**
+ */
+package swt.most.petrinet.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import swt.most.petrinet.Arc;
+import swt.most.petrinet.Element;
+import swt.most.petrinet.IncomingArc;
+import swt.most.petrinet.OutgoingArc;
+import swt.most.petrinet.PetriNet;
+import swt.most.petrinet.PetrinetFactory;
+import swt.most.petrinet.PetrinetPackage;
+import swt.most.petrinet.Place;
+import swt.most.petrinet.Token;
+import swt.most.petrinet.Transition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PetrinetPackageImpl extends EPackageImpl implements PetrinetPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass petriNetEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass elementEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass arcEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass incomingArcEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass outgoingArcEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass placeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass transitionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass tokenEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see swt.most.petrinet.PetrinetPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private PetrinetPackageImpl() {
+		super(eNS_URI, PetrinetFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 *
+	 * <p>This method is used to initialize {@link PetrinetPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static PetrinetPackage init() {
+		if (isInited)
+			return (PetrinetPackage) EPackage.Registry.INSTANCE.getEPackage(PetrinetPackage.eNS_URI);
+
+		// Obtain or create and register package
+		Object registeredPetrinetPackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+		PetrinetPackageImpl thePetrinetPackage = registeredPetrinetPackage instanceof PetrinetPackageImpl
+				? (PetrinetPackageImpl) registeredPetrinetPackage
+				: new PetrinetPackageImpl();
+
+		isInited = true;
+
+		// Create package meta-data objects
+		thePetrinetPackage.createPackageContents();
+
+		// Initialize created meta-data
+		thePetrinetPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		thePetrinetPackage.freeze();
+
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(PetrinetPackage.eNS_URI, thePetrinetPackage);
+		return thePetrinetPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPetriNet() {
+		return petriNetEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPetriNet_Name() {
+		return (EAttribute) petriNetEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPetriNet_Arcs() {
+		return (EReference) petriNetEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPetriNet_Elements() {
+		return (EReference) petriNetEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getElement() {
+		return elementEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getElement_Identifier() {
+		return (EAttribute) elementEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getArc() {
+		return arcEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIncomingArc() {
+		return incomingArcEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getIncomingArc_Target() {
+		return (EReference) incomingArcEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getIncomingArc_Source() {
+		return (EReference) incomingArcEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getOutgoingArc() {
+		return outgoingArcEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getOutgoingArc_Source() {
+		return (EReference) outgoingArcEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getOutgoingArc_Target() {
+		return (EReference) outgoingArcEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPlace() {
+		return placeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPlace_Token() {
+		return (EReference) placeEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTransition() {
+		return transitionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getToken() {
+		return tokenEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetrinetFactory getPetrinetFactory() {
+		return (PetrinetFactory) getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated)
+			return;
+		isCreated = true;
+
+		// Create classes and their features
+		petriNetEClass = createEClass(PETRI_NET);
+		createEAttribute(petriNetEClass, PETRI_NET__NAME);
+		createEReference(petriNetEClass, PETRI_NET__ARCS);
+		createEReference(petriNetEClass, PETRI_NET__ELEMENTS);
+
+		elementEClass = createEClass(ELEMENT);
+		createEAttribute(elementEClass, ELEMENT__IDENTIFIER);
+
+		arcEClass = createEClass(ARC);
+
+		incomingArcEClass = createEClass(INCOMING_ARC);
+		createEReference(incomingArcEClass, INCOMING_ARC__TARGET);
+		createEReference(incomingArcEClass, INCOMING_ARC__SOURCE);
+
+		outgoingArcEClass = createEClass(OUTGOING_ARC);
+		createEReference(outgoingArcEClass, OUTGOING_ARC__SOURCE);
+		createEReference(outgoingArcEClass, OUTGOING_ARC__TARGET);
+
+		placeEClass = createEClass(PLACE);
+		createEReference(placeEClass, PLACE__TOKEN);
+
+		transitionEClass = createEClass(TRANSITION);
+
+		tokenEClass = createEClass(TOKEN);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized)
+			return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		incomingArcEClass.getESuperTypes().add(this.getArc());
+		outgoingArcEClass.getESuperTypes().add(this.getArc());
+		placeEClass.getESuperTypes().add(this.getElement());
+		transitionEClass.getESuperTypes().add(this.getElement());
+
+		// Initialize classes, features, and operations; add parameters
+		initEClass(petriNetEClass, PetriNet.class, "PetriNet", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getPetriNet_Name(), ecorePackage.getEString(), "name", null, 0, 1, PetriNet.class, !IS_TRANSIENT,
+				!IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPetriNet_Arcs(), this.getArc(), null, "arcs", null, 0, -1, PetriNet.class, !IS_TRANSIENT,
+				!IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
+				IS_ORDERED);
+		initEReference(getPetriNet_Elements(), this.getElement(), null, "elements", null, 0, -1, PetriNet.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(elementEClass, Element.class, "Element", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getElement_Identifier(), ecorePackage.getEString(), "identifier", null, 0, 1, Element.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(arcEClass, Arc.class, "Arc", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(incomingArcEClass, IncomingArc.class, "IncomingArc", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getIncomingArc_Target(), this.getTransition(), null, "target", null, 1, 1, IncomingArc.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getIncomingArc_Source(), this.getPlace(), null, "source", null, 1, 1, IncomingArc.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(outgoingArcEClass, OutgoingArc.class, "OutgoingArc", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getOutgoingArc_Source(), this.getTransition(), null, "source", null, 1, 1, OutgoingArc.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getOutgoingArc_Target(), this.getPlace(), null, "target", null, 1, 1, OutgoingArc.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(placeEClass, Place.class, "Place", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getPlace_Token(), this.getToken(), null, "token", null, 0, 1, Place.class, !IS_TRANSIENT,
+				!IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
+				IS_ORDERED);
+
+		initEClass(transitionEClass, Transition.class, "Transition", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(tokenEClass, Token.class, "Token", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //PetrinetPackageImpl
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PlaceImpl.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PlaceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..91e90acbe954311376f88e5b8ccf910395ff279b
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/PlaceImpl.java
@@ -0,0 +1,181 @@
+/**
+ */
+package swt.most.petrinet.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import swt.most.petrinet.PetrinetPackage;
+import swt.most.petrinet.Place;
+import swt.most.petrinet.Token;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Place</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.petrinet.impl.PlaceImpl#getToken <em>Token</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class PlaceImpl extends ElementImpl implements Place {
+	/**
+	 * The cached value of the '{@link #getToken() <em>Token</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getToken()
+	 * @generated
+	 * @ordered
+	 */
+	protected Token token;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PlaceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PetrinetPackage.Literals.PLACE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Token getToken() {
+		return token;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetToken(Token newToken, NotificationChain msgs) {
+		Token oldToken = token;
+		token = newToken;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, PetrinetPackage.PLACE__TOKEN,
+					oldToken, newToken);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setToken(Token newToken) {
+		if (newToken != token) {
+			NotificationChain msgs = null;
+			if (token != null)
+				msgs = ((InternalEObject) token).eInverseRemove(this,
+						EOPPOSITE_FEATURE_BASE - PetrinetPackage.PLACE__TOKEN, null, msgs);
+			if (newToken != null)
+				msgs = ((InternalEObject) newToken).eInverseAdd(this,
+						EOPPOSITE_FEATURE_BASE - PetrinetPackage.PLACE__TOKEN, null, msgs);
+			msgs = basicSetToken(newToken, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PetrinetPackage.PLACE__TOKEN, newToken, newToken));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case PetrinetPackage.PLACE__TOKEN:
+			return basicSetToken(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case PetrinetPackage.PLACE__TOKEN:
+			return getToken();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case PetrinetPackage.PLACE__TOKEN:
+			setToken((Token) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case PetrinetPackage.PLACE__TOKEN:
+			setToken((Token) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case PetrinetPackage.PLACE__TOKEN:
+			return token != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //PlaceImpl
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/TokenImpl.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/TokenImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae4d34a8c328348a279ec7b72acad8bed8d95073
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/TokenImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package swt.most.petrinet.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import swt.most.petrinet.PetrinetPackage;
+import swt.most.petrinet.Token;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Token</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class TokenImpl extends MinimalEObjectImpl.Container implements Token {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TokenImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PetrinetPackage.Literals.TOKEN;
+	}
+
+} //TokenImpl
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/TransitionImpl.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/TransitionImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d206c2e64aae7cef8e1846e8909bf92f172a445
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/impl/TransitionImpl.java
@@ -0,0 +1,37 @@
+/**
+ */
+package swt.most.petrinet.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import swt.most.petrinet.PetrinetPackage;
+import swt.most.petrinet.Transition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Transition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class TransitionImpl extends ElementImpl implements Transition {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransitionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PetrinetPackage.Literals.TRANSITION;
+	}
+
+} //TransitionImpl
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/util/PetrinetAdapterFactory.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/util/PetrinetAdapterFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..381c6184cc4cf42e73359bca018d36c548a772ac
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/util/PetrinetAdapterFactory.java
@@ -0,0 +1,252 @@
+/**
+ */
+package swt.most.petrinet.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import swt.most.petrinet.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see swt.most.petrinet.PetrinetPackage
+ * @generated
+ */
+public class PetrinetAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static PetrinetPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetrinetAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = PetrinetPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject) object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PetrinetSwitch<Adapter> modelSwitch = new PetrinetSwitch<Adapter>() {
+		@Override
+		public Adapter casePetriNet(PetriNet object) {
+			return createPetriNetAdapter();
+		}
+
+		@Override
+		public Adapter caseElement(Element object) {
+			return createElementAdapter();
+		}
+
+		@Override
+		public Adapter caseArc(Arc object) {
+			return createArcAdapter();
+		}
+
+		@Override
+		public Adapter caseIncomingArc(IncomingArc object) {
+			return createIncomingArcAdapter();
+		}
+
+		@Override
+		public Adapter caseOutgoingArc(OutgoingArc object) {
+			return createOutgoingArcAdapter();
+		}
+
+		@Override
+		public Adapter casePlace(Place object) {
+			return createPlaceAdapter();
+		}
+
+		@Override
+		public Adapter caseTransition(Transition object) {
+			return createTransitionAdapter();
+		}
+
+		@Override
+		public Adapter caseToken(Token object) {
+			return createTokenAdapter();
+		}
+
+		@Override
+		public Adapter defaultCase(EObject object) {
+			return createEObjectAdapter();
+		}
+	};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject) target);
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.petrinet.PetriNet <em>Petri Net</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.petrinet.PetriNet
+	 * @generated
+	 */
+	public Adapter createPetriNetAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.petrinet.Element <em>Element</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.petrinet.Element
+	 * @generated
+	 */
+	public Adapter createElementAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.petrinet.Arc <em>Arc</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.petrinet.Arc
+	 * @generated
+	 */
+	public Adapter createArcAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.petrinet.IncomingArc <em>Incoming Arc</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.petrinet.IncomingArc
+	 * @generated
+	 */
+	public Adapter createIncomingArcAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.petrinet.OutgoingArc <em>Outgoing Arc</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.petrinet.OutgoingArc
+	 * @generated
+	 */
+	public Adapter createOutgoingArcAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.petrinet.Place <em>Place</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.petrinet.Place
+	 * @generated
+	 */
+	public Adapter createPlaceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.petrinet.Transition <em>Transition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.petrinet.Transition
+	 * @generated
+	 */
+	public Adapter createTransitionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.petrinet.Token <em>Token</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.petrinet.Token
+	 * @generated
+	 */
+	public Adapter createTokenAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //PetrinetAdapterFactory
diff --git a/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/util/PetrinetSwitch.java b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/util/PetrinetSwitch.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d1e96cb21787c1d0691de546d748f0fb2d0f440
--- /dev/null
+++ b/metamodel/swt.most.petrinet/src-gen/swt/most/petrinet/util/PetrinetSwitch.java
@@ -0,0 +1,274 @@
+/**
+ */
+package swt.most.petrinet.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import swt.most.petrinet.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see swt.most.petrinet.PetrinetPackage
+ * @generated
+ */
+public class PetrinetSwitch<T> extends Switch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static PetrinetPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PetrinetSwitch() {
+		if (modelPackage == null) {
+			modelPackage = PetrinetPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Checks whether this is a switch for the given package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param ePackage the package in question.
+	 * @return whether this is a switch for the given package.
+	 * @generated
+	 */
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	@Override
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+		case PetrinetPackage.PETRI_NET: {
+			PetriNet petriNet = (PetriNet) theEObject;
+			T result = casePetriNet(petriNet);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case PetrinetPackage.ELEMENT: {
+			Element element = (Element) theEObject;
+			T result = caseElement(element);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case PetrinetPackage.ARC: {
+			Arc arc = (Arc) theEObject;
+			T result = caseArc(arc);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case PetrinetPackage.INCOMING_ARC: {
+			IncomingArc incomingArc = (IncomingArc) theEObject;
+			T result = caseIncomingArc(incomingArc);
+			if (result == null)
+				result = caseArc(incomingArc);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case PetrinetPackage.OUTGOING_ARC: {
+			OutgoingArc outgoingArc = (OutgoingArc) theEObject;
+			T result = caseOutgoingArc(outgoingArc);
+			if (result == null)
+				result = caseArc(outgoingArc);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case PetrinetPackage.PLACE: {
+			Place place = (Place) theEObject;
+			T result = casePlace(place);
+			if (result == null)
+				result = caseElement(place);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case PetrinetPackage.TRANSITION: {
+			Transition transition = (Transition) theEObject;
+			T result = caseTransition(transition);
+			if (result == null)
+				result = caseElement(transition);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case PetrinetPackage.TOKEN: {
+			Token token = (Token) theEObject;
+			T result = caseToken(token);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		default:
+			return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Petri Net</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Petri Net</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePetriNet(PetriNet object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Element</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Element</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseElement(Element object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Arc</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Arc</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseArc(Arc object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Incoming Arc</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Incoming Arc</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIncomingArc(IncomingArc object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Outgoing Arc</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Outgoing Arc</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseOutgoingArc(OutgoingArc object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Place</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Place</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePlace(Place object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Transition</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Transition</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTransition(Transition object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Token</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Token</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseToken(Token object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	@Override
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //PetrinetSwitch
diff --git a/metamodel/swt.most.petrinet/src/.gitkeep b/metamodel/swt.most.petrinet/src/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..49cc8ef0e116cef009fe0bd72473a964bbd07f9b
Binary files /dev/null and b/metamodel/swt.most.petrinet/src/.gitkeep differ
diff --git a/metamodel/swt.most.statemachine.edit/.classpath b/metamodel/swt.most.statemachine.edit/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..2377d859931ab6ce1560ef53742afa6e8f1cdefd
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/metamodel/swt.most.statemachine.edit/.gitignore b/metamodel/swt.most.statemachine.edit/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..ae3c1726048cd06b9a143e0376ed46dd9b9a8d53
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/metamodel/swt.most.statemachine.edit/.project b/metamodel/swt.most.statemachine.edit/.project
new file mode 100644
index 0000000000000000000000000000000000000000..93527abd92e6b574becf95ab7b6f92a629cca930
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.statemachine.edit</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/metamodel/swt.most.statemachine.edit/.settings/org.eclipse.core.resources.prefs b/metamodel/swt.most.statemachine.edit/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/metamodel/swt.most.statemachine.edit/META-INF/MANIFEST.MF b/metamodel/swt.most.statemachine.edit/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..eedc10e53e3f5f464922b129beed099a9f7988bf
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: swt.most.statemachine.edit;singleton:=true
+Automatic-Module-Name: swt.most.statemachine.edit
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: swt.most.statemachine.provider.StatemachineEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: swt.most.statemachine.provider
+Require-Bundle: org.eclipse.core.runtime,
+ swt.most.statemachine;visibility:=reexport,
+ org.eclipse.emf.edit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/metamodel/swt.most.statemachine.edit/build.properties b/metamodel/swt.most.statemachine.edit/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..a3c4e32afd5c06df8bd4f0d371e56479e0822559
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src-gen/
+output.. = bin/
diff --git a/metamodel/swt.most.statemachine.edit/icons/full/obj16/Action.gif b/metamodel/swt.most.statemachine.edit/icons/full/obj16/Action.gif
new file mode 100644
index 0000000000000000000000000000000000000000..cb1755a712505aeaaa447d9b1cc5940e602f87b6
Binary files /dev/null and b/metamodel/swt.most.statemachine.edit/icons/full/obj16/Action.gif differ
diff --git a/metamodel/swt.most.statemachine.edit/icons/full/obj16/FinalState.gif b/metamodel/swt.most.statemachine.edit/icons/full/obj16/FinalState.gif
new file mode 100644
index 0000000000000000000000000000000000000000..ea58a657dc0c287f6bb84e6cbd38008c96713db3
Binary files /dev/null and b/metamodel/swt.most.statemachine.edit/icons/full/obj16/FinalState.gif differ
diff --git a/metamodel/swt.most.statemachine.edit/icons/full/obj16/Guard.gif b/metamodel/swt.most.statemachine.edit/icons/full/obj16/Guard.gif
new file mode 100644
index 0000000000000000000000000000000000000000..5a9bc7514facefe049e8f5d98bb2e1e37f03c0c2
Binary files /dev/null and b/metamodel/swt.most.statemachine.edit/icons/full/obj16/Guard.gif differ
diff --git a/metamodel/swt.most.statemachine.edit/icons/full/obj16/InitialState.gif b/metamodel/swt.most.statemachine.edit/icons/full/obj16/InitialState.gif
new file mode 100644
index 0000000000000000000000000000000000000000..7b7c428c715e615c179d42a8462ee953741414d4
Binary files /dev/null and b/metamodel/swt.most.statemachine.edit/icons/full/obj16/InitialState.gif differ
diff --git a/metamodel/swt.most.statemachine.edit/icons/full/obj16/NormalState.gif b/metamodel/swt.most.statemachine.edit/icons/full/obj16/NormalState.gif
new file mode 100644
index 0000000000000000000000000000000000000000..b1f8afa47661703c49bd5fa535dcb1342deb6fc4
Binary files /dev/null and b/metamodel/swt.most.statemachine.edit/icons/full/obj16/NormalState.gif differ
diff --git a/metamodel/swt.most.statemachine.edit/icons/full/obj16/StateMachine.gif b/metamodel/swt.most.statemachine.edit/icons/full/obj16/StateMachine.gif
new file mode 100644
index 0000000000000000000000000000000000000000..badaab0664ae45de5d990f64638197daeabf31bf
Binary files /dev/null and b/metamodel/swt.most.statemachine.edit/icons/full/obj16/StateMachine.gif differ
diff --git a/metamodel/swt.most.statemachine.edit/icons/full/obj16/Transition.gif b/metamodel/swt.most.statemachine.edit/icons/full/obj16/Transition.gif
new file mode 100644
index 0000000000000000000000000000000000000000..7bac4fd3808df6247660dfb8d76e15609f279841
Binary files /dev/null and b/metamodel/swt.most.statemachine.edit/icons/full/obj16/Transition.gif differ
diff --git a/metamodel/swt.most.statemachine.edit/icons/full/obj16/Trigger.gif b/metamodel/swt.most.statemachine.edit/icons/full/obj16/Trigger.gif
new file mode 100644
index 0000000000000000000000000000000000000000..ea58a657dc0c287f6bb84e6cbd38008c96713db3
Binary files /dev/null and b/metamodel/swt.most.statemachine.edit/icons/full/obj16/Trigger.gif differ
diff --git a/metamodel/swt.most.statemachine.edit/plugin.properties b/metamodel/swt.most.statemachine.edit/plugin.properties
new file mode 100644
index 0000000000000000000000000000000000000000..2cad14548c22c317804dd13c379c7cd1643f0e25
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/plugin.properties
@@ -0,0 +1,46 @@
+#
+
+pluginName = swt.most.statemachine Edit Support
+providerName = www.example.org
+
+_UI_CreateChild_text = {0}
+_UI_CreateChild_text2 = {1} {0}
+_UI_CreateChild_text3 = {1}
+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description = The {0} of the {1}
+
+_UI_StateMachine_type = State Machine
+_UI_State_type = State
+_UI_Transition_type = Transition
+_UI_Trigger_type = Trigger
+_UI_Guard_type = Guard
+_UI_Action_type = Action
+_UI_Expression_type = Expression
+_UI_InitialState_type = Initial State
+_UI_FinalState_type = Final State
+_UI_NormalState_type = Normal State
+_UI_Unknown_type = Object
+
+_UI_Unknown_datatype= Value
+
+_UI_StateMachine_identifier_feature = Identifier
+_UI_StateMachine_states_feature = States
+_UI_StateMachine_finalstates_feature = Finalstates
+_UI_StateMachine_initialstate_feature = Initialstate
+_UI_StateMachine_transitions_feature = Transitions
+_UI_State_name_feature = Name
+_UI_Transition_from_feature = From
+_UI_Transition_to_feature = To
+_UI_Transition_trigger_feature = Trigger
+_UI_Transition_guard_feature = Guard
+_UI_Transition_action_feature = Action
+_UI_Expression_content_feature = Content
+_UI_NormalState_do__feature = Do 
+_UI_NormalState_exit__feature = Exit 
+_UI_NormalState_entry__feature = Entry 
+_UI_Unknown_feature = Unspecified
+
+_UI_StateMachine_name_feature = Name
diff --git a/metamodel/swt.most.statemachine.edit/plugin.xml b/metamodel/swt.most.statemachine.edit/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..16aacfbc1c010e2f319bea1f4b002b07ae625b02
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <!-- @generated statemachine -->
+      <factory
+            uri="http://www.swt.org/most/statemachine"
+            class="swt.most.statemachine.provider.StatemachineItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+</plugin>
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/ActionItemProvider.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/ActionItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..836a8ed3767c4ad7893f193f4e767090c76cd5d1
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/ActionItemProvider.java
@@ -0,0 +1,106 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import swt.most.statemachine.Action;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.statemachine.Action} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ActionItemProvider extends ExpressionItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ActionItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns Action.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Action"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Action) object).getContent();
+		return label == null || label.length() == 0 ? getString("_UI_Action_type")
+				: getString("_UI_Action_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/ExpressionItemProvider.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/ExpressionItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..705da2c2be1c037d3c51b183eef62fb856ee68ea
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/ExpressionItemProvider.java
@@ -0,0 +1,142 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import swt.most.statemachine.Expression;
+import swt.most.statemachine.StatemachinePackage;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.statemachine.Expression} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExpressionItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExpressionItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addContentPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Content feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addContentPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_Expression_content_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_Expression_content_feature",
+								"_UI_Expression_type"),
+						StatemachinePackage.Literals.EXPRESSION__CONTENT, true, false, false,
+						ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Expression) object).getContent();
+		return label == null || label.length() == 0 ? getString("_UI_Expression_type")
+				: getString("_UI_Expression_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Expression.class)) {
+		case StatemachinePackage.EXPRESSION__CONTENT:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return StatemachineEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/FinalStateItemProvider.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/FinalStateItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..35e6d8bdcbf2f5f10207b7c670228b9409ecc790
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/FinalStateItemProvider.java
@@ -0,0 +1,106 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import swt.most.statemachine.FinalState;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.statemachine.FinalState} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class FinalStateItemProvider extends StateItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FinalStateItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns FinalState.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/FinalState"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((FinalState) object).getName();
+		return label == null || label.length() == 0 ? getString("_UI_FinalState_type")
+				: getString("_UI_FinalState_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/GuardItemProvider.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/GuardItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..93e36a4a3ceaf52a1a969668fb9c3bdcd30a1bf6
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/GuardItemProvider.java
@@ -0,0 +1,106 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import swt.most.statemachine.Guard;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.statemachine.Guard} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class GuardItemProvider extends ExpressionItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GuardItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns Guard.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Guard"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Guard) object).getContent();
+		return label == null || label.length() == 0 ? getString("_UI_Guard_type")
+				: getString("_UI_Guard_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/InitialStateItemProvider.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/InitialStateItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..228917616b44a78e1cab4fe48211f7206ac27c42
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/InitialStateItemProvider.java
@@ -0,0 +1,106 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import swt.most.statemachine.InitialState;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.statemachine.InitialState} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InitialStateItemProvider extends StateItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public InitialStateItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns InitialState.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/InitialState"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((InitialState) object).getName();
+		return label == null || label.length() == 0 ? getString("_UI_InitialState_type")
+				: getString("_UI_InitialState_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/NormalStateItemProvider.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/NormalStateItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..44b11fd19687de048500967db295c5fe85bf1e26
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/NormalStateItemProvider.java
@@ -0,0 +1,182 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import swt.most.statemachine.NormalState;
+import swt.most.statemachine.StatemachineFactory;
+import swt.most.statemachine.StatemachinePackage;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.statemachine.NormalState} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NormalStateItemProvider extends StateItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NormalStateItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(StatemachinePackage.Literals.NORMAL_STATE__DO_);
+			childrenFeatures.add(StatemachinePackage.Literals.NORMAL_STATE__EXIT_);
+			childrenFeatures.add(StatemachinePackage.Literals.NORMAL_STATE__ENTRY_);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns NormalState.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/NormalState"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((NormalState) object).getName();
+		return label == null || label.length() == 0 ? getString("_UI_NormalState_type")
+				: getString("_UI_NormalState_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(NormalState.class)) {
+		case StatemachinePackage.NORMAL_STATE__DO_:
+		case StatemachinePackage.NORMAL_STATE__EXIT_:
+		case StatemachinePackage.NORMAL_STATE__ENTRY_:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(createChildParameter(StatemachinePackage.Literals.NORMAL_STATE__DO_,
+				StatemachineFactory.eINSTANCE.createAction()));
+
+		newChildDescriptors.add(createChildParameter(StatemachinePackage.Literals.NORMAL_STATE__EXIT_,
+				StatemachineFactory.eINSTANCE.createAction()));
+
+		newChildDescriptors.add(createChildParameter(StatemachinePackage.Literals.NORMAL_STATE__ENTRY_,
+				StatemachineFactory.eINSTANCE.createAction()));
+	}
+
+	/**
+	 * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getCreateChildText(Object owner, Object feature, Object child, Collection<?> selection) {
+		Object childFeature = feature;
+		Object childObject = child;
+
+		boolean qualify = childFeature == StatemachinePackage.Literals.NORMAL_STATE__DO_
+				|| childFeature == StatemachinePackage.Literals.NORMAL_STATE__EXIT_
+				|| childFeature == StatemachinePackage.Literals.NORMAL_STATE__ENTRY_;
+
+		if (qualify) {
+			return getString("_UI_CreateChild_text2",
+					new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });
+		}
+		return super.getCreateChildText(owner, feature, child, selection);
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StateItemProvider.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StateItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5c23392f1e3b7d9727baf5d217064ccbba1c9ef
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StateItemProvider.java
@@ -0,0 +1,141 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import swt.most.statemachine.State;
+import swt.most.statemachine.StatemachinePackage;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.statemachine.State} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StateItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StateItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addNamePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_State_name_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_State_name_feature", "_UI_State_type"),
+						StatemachinePackage.Literals.STATE__NAME, true, false, false,
+						ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((State) object).getName();
+		return label == null || label.length() == 0 ? getString("_UI_State_type")
+				: getString("_UI_State_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(State.class)) {
+		case StatemachinePackage.STATE__NAME:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return StatemachineEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StateMachineItemProvider.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StateMachineItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..2f4fb440f933588006cf2e0f5a5a20f33dcb0be5
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StateMachineItemProvider.java
@@ -0,0 +1,207 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import swt.most.statemachine.StateMachine;
+import swt.most.statemachine.StatemachineFactory;
+import swt.most.statemachine.StatemachinePackage;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.statemachine.StateMachine} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StateMachineItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StateMachineItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addNamePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_StateMachine_name_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_StateMachine_name_feature",
+								"_UI_StateMachine_type"),
+						StatemachinePackage.Literals.STATE_MACHINE__NAME, true, false, false,
+						ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(StatemachinePackage.Literals.STATE_MACHINE__STATES);
+			childrenFeatures.add(StatemachinePackage.Literals.STATE_MACHINE__FINALSTATES);
+			childrenFeatures.add(StatemachinePackage.Literals.STATE_MACHINE__INITIALSTATE);
+			childrenFeatures.add(StatemachinePackage.Literals.STATE_MACHINE__TRANSITIONS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns StateMachine.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/StateMachine"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StateMachine) object).getName();
+		return label == null || label.length() == 0 ? getString("_UI_StateMachine_type")
+				: getString("_UI_StateMachine_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(StateMachine.class)) {
+		case StatemachinePackage.STATE_MACHINE__NAME:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		case StatemachinePackage.STATE_MACHINE__STATES:
+		case StatemachinePackage.STATE_MACHINE__FINALSTATES:
+		case StatemachinePackage.STATE_MACHINE__INITIALSTATE:
+		case StatemachinePackage.STATE_MACHINE__TRANSITIONS:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(createChildParameter(StatemachinePackage.Literals.STATE_MACHINE__STATES,
+				StatemachineFactory.eINSTANCE.createNormalState()));
+
+		newChildDescriptors.add(createChildParameter(StatemachinePackage.Literals.STATE_MACHINE__FINALSTATES,
+				StatemachineFactory.eINSTANCE.createFinalState()));
+
+		newChildDescriptors.add(createChildParameter(StatemachinePackage.Literals.STATE_MACHINE__INITIALSTATE,
+				StatemachineFactory.eINSTANCE.createInitialState()));
+
+		newChildDescriptors.add(createChildParameter(StatemachinePackage.Literals.STATE_MACHINE__TRANSITIONS,
+				StatemachineFactory.eINSTANCE.createTransition()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return StatemachineEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StatemachineEditPlugin.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StatemachineEditPlugin.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b60b5862eafe6e1aeef4220a4033dd82c32eb42
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StatemachineEditPlugin.java
@@ -0,0 +1,87 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Statemachine edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class StatemachineEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final StatemachineEditPlugin INSTANCE = new StatemachineEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StatemachineEditPlugin() {
+		super(new ResourceLocator[] {});
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipsePlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StatemachineItemProviderAdapterFactory.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StatemachineItemProviderAdapterFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ae9ad4e8ad36af9d0a6fd9e5828c55ce2f6e010
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/StatemachineItemProviderAdapterFactory.java
@@ -0,0 +1,376 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import swt.most.statemachine.util.StatemachineAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StatemachineItemProviderAdapterFactory extends StatemachineAdapterFactory
+		implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StatemachineItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.statemachine.StateMachine} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StateMachineItemProvider stateMachineItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.statemachine.StateMachine}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createStateMachineAdapter() {
+		if (stateMachineItemProvider == null) {
+			stateMachineItemProvider = new StateMachineItemProvider(this);
+		}
+
+		return stateMachineItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.statemachine.Transition} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransitionItemProvider transitionItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.statemachine.Transition}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTransitionAdapter() {
+		if (transitionItemProvider == null) {
+			transitionItemProvider = new TransitionItemProvider(this);
+		}
+
+		return transitionItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.statemachine.Trigger} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TriggerItemProvider triggerItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.statemachine.Trigger}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTriggerAdapter() {
+		if (triggerItemProvider == null) {
+			triggerItemProvider = new TriggerItemProvider(this);
+		}
+
+		return triggerItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.statemachine.Guard} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GuardItemProvider guardItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.statemachine.Guard}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createGuardAdapter() {
+		if (guardItemProvider == null) {
+			guardItemProvider = new GuardItemProvider(this);
+		}
+
+		return guardItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.statemachine.Action} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ActionItemProvider actionItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.statemachine.Action}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createActionAdapter() {
+		if (actionItemProvider == null) {
+			actionItemProvider = new ActionItemProvider(this);
+		}
+
+		return actionItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.statemachine.InitialState} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected InitialStateItemProvider initialStateItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.statemachine.InitialState}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createInitialStateAdapter() {
+		if (initialStateItemProvider == null) {
+			initialStateItemProvider = new InitialStateItemProvider(this);
+		}
+
+		return initialStateItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.statemachine.FinalState} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FinalStateItemProvider finalStateItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.statemachine.FinalState}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createFinalStateAdapter() {
+		if (finalStateItemProvider == null) {
+			finalStateItemProvider = new FinalStateItemProvider(this);
+		}
+
+		return finalStateItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link swt.most.statemachine.NormalState} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NormalStateItemProvider normalStateItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link swt.most.statemachine.NormalState}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createNormalStateAdapter() {
+		if (normalStateItemProvider == null) {
+			normalStateItemProvider = new NormalStateItemProvider(this);
+		}
+
+		return normalStateItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>) type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (stateMachineItemProvider != null)
+			stateMachineItemProvider.dispose();
+		if (transitionItemProvider != null)
+			transitionItemProvider.dispose();
+		if (triggerItemProvider != null)
+			triggerItemProvider.dispose();
+		if (guardItemProvider != null)
+			guardItemProvider.dispose();
+		if (actionItemProvider != null)
+			actionItemProvider.dispose();
+		if (initialStateItemProvider != null)
+			initialStateItemProvider.dispose();
+		if (finalStateItemProvider != null)
+			finalStateItemProvider.dispose();
+		if (normalStateItemProvider != null)
+			normalStateItemProvider.dispose();
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/TransitionItemProvider.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/TransitionItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..85102ffedfed2f4a2054e7cae0ffdaa5e11d37a2
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/TransitionItemProvider.java
@@ -0,0 +1,211 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import swt.most.statemachine.StatemachineFactory;
+import swt.most.statemachine.StatemachinePackage;
+import swt.most.statemachine.Transition;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.statemachine.Transition} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TransitionItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransitionItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addFromPropertyDescriptor(object);
+			addToPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the From feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addFromPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_Transition_from_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_Transition_from_feature",
+								"_UI_Transition_type"),
+						StatemachinePackage.Literals.TRANSITION__FROM, true, false, true, null, null, null));
+	}
+
+	/**
+	 * This adds a property descriptor for the To feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addToPropertyDescriptor(Object object) {
+		itemPropertyDescriptors
+				.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+						getResourceLocator(), getString("_UI_Transition_to_feature"),
+						getString("_UI_PropertyDescriptor_description", "_UI_Transition_to_feature",
+								"_UI_Transition_type"),
+						StatemachinePackage.Literals.TRANSITION__TO, true, false, true, null, null, null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(StatemachinePackage.Literals.TRANSITION__TRIGGER);
+			childrenFeatures.add(StatemachinePackage.Literals.TRANSITION__GUARD);
+			childrenFeatures.add(StatemachinePackage.Literals.TRANSITION__ACTION);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Transition.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Transition"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_Transition_type");
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Transition.class)) {
+		case StatemachinePackage.TRANSITION__TRIGGER:
+		case StatemachinePackage.TRANSITION__GUARD:
+		case StatemachinePackage.TRANSITION__ACTION:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(createChildParameter(StatemachinePackage.Literals.TRANSITION__TRIGGER,
+				StatemachineFactory.eINSTANCE.createTrigger()));
+
+		newChildDescriptors.add(createChildParameter(StatemachinePackage.Literals.TRANSITION__GUARD,
+				StatemachineFactory.eINSTANCE.createGuard()));
+
+		newChildDescriptors.add(createChildParameter(StatemachinePackage.Literals.TRANSITION__ACTION,
+				StatemachineFactory.eINSTANCE.createAction()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return StatemachineEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/TriggerItemProvider.java b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/TriggerItemProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..02b1f537fca4f21ff779d4f593e91d70730b5b82
--- /dev/null
+++ b/metamodel/swt.most.statemachine.edit/src-gen/swt/most/statemachine/provider/TriggerItemProvider.java
@@ -0,0 +1,106 @@
+/**
+ */
+package swt.most.statemachine.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+import swt.most.statemachine.Trigger;
+
+/**
+ * This is the item provider adapter for a {@link swt.most.statemachine.Trigger} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TriggerItemProvider extends ExpressionItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns Trigger.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Trigger"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Trigger) object).getContent();
+		return label == null || label.length() == 0 ? getString("_UI_Trigger_type")
+				: getString("_UI_Trigger_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.editor/.classpath b/metamodel/swt.most.statemachine.editor/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..2377d859931ab6ce1560ef53742afa6e8f1cdefd
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/metamodel/swt.most.statemachine.editor/.gitignore b/metamodel/swt.most.statemachine.editor/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..ae3c1726048cd06b9a143e0376ed46dd9b9a8d53
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/metamodel/swt.most.statemachine.editor/.project b/metamodel/swt.most.statemachine.editor/.project
new file mode 100644
index 0000000000000000000000000000000000000000..410edf8b046ce38c23b29c8ab2517f9eb8b38e8c
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.statemachine.editor</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/metamodel/swt.most.statemachine.editor/.settings/org.eclipse.core.resources.prefs b/metamodel/swt.most.statemachine.editor/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/metamodel/swt.most.statemachine.editor/META-INF/MANIFEST.MF b/metamodel/swt.most.statemachine.editor/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..d05232014bc2334201aacac3aec205217b1dac72
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: swt.most.statemachine.editor;singleton:=true
+Automatic-Module-Name: swt.most.statemachine.editor
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: swt.most.statemachine.presentation.StatemachineEditorPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: swt.most.statemachine.presentation
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources;visibility:=reexport,
+ swt.most.statemachine.edit;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.eclipse.emf.edit.ui;visibility:=reexport,
+ org.eclipse.ui.ide;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/metamodel/swt.most.statemachine.editor/build.properties b/metamodel/swt.most.statemachine.editor/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..11a57196868eef7d9f65dc239cdf49f3b6638ac8
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src-gen/
+output.. = bin
diff --git a/metamodel/swt.most.statemachine.editor/icons/full/obj16/StatemachineModelFile.gif b/metamodel/swt.most.statemachine.editor/icons/full/obj16/StatemachineModelFile.gif
new file mode 100644
index 0000000000000000000000000000000000000000..415a3b6e05f910f571beefc62a17c6e917ba4fac
Binary files /dev/null and b/metamodel/swt.most.statemachine.editor/icons/full/obj16/StatemachineModelFile.gif differ
diff --git a/metamodel/swt.most.statemachine.editor/icons/full/wizban/NewStatemachine.gif b/metamodel/swt.most.statemachine.editor/icons/full/wizban/NewStatemachine.gif
new file mode 100644
index 0000000000000000000000000000000000000000..acfcd368e5023e5244370e7ba66a2111068ddc06
Binary files /dev/null and b/metamodel/swt.most.statemachine.editor/icons/full/wizban/NewStatemachine.gif differ
diff --git a/metamodel/swt.most.statemachine.editor/plugin.properties b/metamodel/swt.most.statemachine.editor/plugin.properties
new file mode 100644
index 0000000000000000000000000000000000000000..f29de99bb378f44c971b07eb22fb6c832d0b65b5
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/plugin.properties
@@ -0,0 +1,53 @@
+#
+
+pluginName = swt.most.statemachine Editor
+providerName = www.example.org
+
+_UI_StatemachineEditor_menu = &Statemachine Editor
+
+_UI_CreateChild_menu_item = &New Child
+_UI_CreateSibling_menu_item = N&ew Sibling
+
+_UI_ShowPropertiesView_menu_item = Show &Properties View
+_UI_RefreshViewer_menu_item = &Refresh
+
+_UI_SelectionPage_label = Selection
+_UI_ParentPage_label = Parent
+_UI_ListPage_label = List
+_UI_TreePage_label = Tree
+_UI_TablePage_label = Table
+_UI_TreeWithColumnsPage_label = Tree with Columns
+_UI_ObjectColumn_label = Object
+_UI_SelfColumn_label = Self
+
+_UI_NoObjectSelected = Selected Nothing
+_UI_SingleObjectSelected = Selected Object: {0}
+_UI_MultiObjectSelected = Selected {0} Objects
+
+_UI_OpenEditorError_label = Open Editor
+
+_UI_Wizard_category = Example EMF Model Creation Wizards
+
+_UI_CreateModelError_message = Problems encountered in file "{0}"
+
+_UI_StatemachineModelWizard_label = Statemachine Model
+_UI_StatemachineModelWizard_description = Create a new Statemachine model
+
+_UI_StatemachineEditor_label = Statemachine Model Editor
+
+_UI_StatemachineEditorFilenameDefaultBase = My
+_UI_StatemachineEditorFilenameExtensions = statemachine
+
+_UI_Wizard_label = New
+
+_WARN_FilenameExtension = The file name must end in ''.{0}''
+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}
+
+_UI_ModelObject = &Model Object
+_UI_XMLEncoding = &XML Encoding
+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1
+_UI_Wizard_initial_object_description = Select a model object to create
+
+_UI_FileConflict_label = File Conflict
+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor.  Do you wish to discard this editor's changes?
+
diff --git a/metamodel/swt.most.statemachine.editor/plugin.xml b/metamodel/swt.most.statemachine.editor/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6e8cbfa8ed4ca74c4ab63f65d5406577a49c9a01
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/plugin.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.ui.newWizards">
+      <!-- @generated statemachine -->
+      <category
+            id="org.eclipse.emf.ecore.Wizard.category.ID"
+            name="%_UI_Wizard_category"/>
+      <wizard
+            id="swt.most.statemachine.presentation.StatemachineModelWizardID"
+            name="%_UI_StatemachineModelWizard_label"
+            class="swt.most.statemachine.presentation.StatemachineModelWizard"
+            category="org.eclipse.emf.ecore.Wizard.category.ID"
+            icon="icons/full/obj16/StatemachineModelFile.gif">
+         <description>%_UI_StatemachineModelWizard_description</description>
+         <selection class="org.eclipse.core.resources.IResource"/>
+      </wizard>
+   </extension>
+
+   <extension point="org.eclipse.ui.editors">
+      <!-- @generated statemachine -->
+      <editor
+            id="swt.most.statemachine.presentation.StatemachineEditorID"
+            name="%_UI_StatemachineEditor_label"
+            icon="icons/full/obj16/StatemachineModelFile.gif"
+            extensions="statemachine"
+            class="swt.most.statemachine.presentation.StatemachineEditor"
+            contributorClass="swt.most.statemachine.presentation.StatemachineActionBarContributor">
+      </editor>
+   </extension>
+
+</plugin>
diff --git a/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineActionBarContributor.java b/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineActionBarContributor.java
new file mode 100644
index 0000000000000000000000000000000000000000..bc325a046533ca19706ee5ad180914ff767d54fd
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineActionBarContributor.java
@@ -0,0 +1,424 @@
+/**
+ */
+package swt.most.statemachine.presentation;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Statemachine model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StatemachineActionBarContributor extends EditingDomainActionBarContributor
+		implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction = new Action(
+			StatemachineEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {
+		@Override
+		public void run() {
+			try {
+				getPage().showView("org.eclipse.ui.views.PropertySheet");
+			} catch (PartInitException exception) {
+				StatemachineEditorPlugin.INSTANCE.log(exception);
+			}
+		}
+	};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction = new Action(
+			StatemachineEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {
+		@Override
+		public boolean isEnabled() {
+			return activeEditorPart instanceof IViewerProvider;
+		}
+
+		@Override
+		public void run() {
+			if (activeEditorPart instanceof IViewerProvider) {
+				Viewer viewer = ((IViewerProvider) activeEditorPart).getViewer();
+				if (viewer != null) {
+					viewer.refresh();
+				}
+			}
+		}
+	};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StatemachineActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		super.contributeToToolBar(toolBarManager);
+		toolBarManager.add(new Separator("statemachine-settings"));
+		toolBarManager.add(new Separator("statemachine-additions"));
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(
+				StatemachineEditorPlugin.INSTANCE.getString("_UI_StatemachineEditor_menu"),
+				"swt.most.statemachineMenuID");
+		menuManager.insertAfter("additions", submenuManager);
+		submenuManager.add(new Separator("settings"));
+		submenuManager.add(new Separator("actions"));
+		submenuManager.add(new Separator("additions"));
+		submenuManager.add(new Separator("additions-end"));
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(
+				StatemachineEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+		submenuManager.insertBefore("additions", createChildMenuManager);
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(
+				StatemachineEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+		submenuManager.insertBefore("additions", createSiblingMenuManager);
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager menuManager) {
+				menuManager.updateAll(true);
+			}
+		});
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		} else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection) selection).size() == 1) {
+			Object object = ((IStructuredSelection) selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider) activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions,
+			String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				} else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem) contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem) contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(StatemachineEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager);
+
+		submenuManager = new MenuManager(StatemachineEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager);
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions"));
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction);
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());
+		menuManager.insertAfter("ui-actions", refreshViewerAction);
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineEditor.java b/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineEditor.java
new file mode 100644
index 0000000000000000000000000000000000000000..3edf894e1ced4e38d3d7b73c82a4d792fde07d56
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineEditor.java
@@ -0,0 +1,1775 @@
+/**
+ */
+package swt.most.statemachine.presentation;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+
+import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import swt.most.statemachine.provider.StatemachineItemProviderAdapterFactory;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+/**
+ * This is an example of a Statemachine model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StatemachineEditor extends MultiPageEditorPart
+		implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected List<PropertySheetPage> propertySheetPages = new ArrayList<PropertySheetPage>();
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This inverts the roll of parent and child in the content provider and show parents as a tree.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer parentViewer;
+
+	/**
+	 * This shows how a tree view works.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer treeViewer;
+
+	/**
+	 * This shows how a list view works.
+	 * A list viewer doesn't support icons.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ListViewer listViewer;
+
+	/**
+	 * This shows how a table view works.
+	 * A table can be used as a list with icons.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TableViewer tableViewer;
+
+	/**
+	 * This shows how a tree view with columns works.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer treeViewerWithColumns;
+
+	/**
+	 * This keeps track of the active viewer pane, in the book.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ViewerPane currentViewerPane;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener = new IPartListener() {
+		public void partActivated(IWorkbenchPart p) {
+			if (p instanceof ContentOutline) {
+				if (((ContentOutline) p).getCurrentPage() == contentOutlinePage) {
+					getActionBarContributor().setActiveEditor(StatemachineEditor.this);
+
+					setCurrentViewer(contentOutlineViewer);
+				}
+			} else if (p instanceof PropertySheet) {
+				if (propertySheetPages.contains(((PropertySheet) p).getCurrentPage())) {
+					getActionBarContributor().setActiveEditor(StatemachineEditor.this);
+					handleActivate();
+				}
+			} else if (p == StatemachineEditor.this) {
+				handleActivate();
+			}
+		}
+
+		public void partBroughtToTop(IWorkbenchPart p) {
+			// Ignore.
+		}
+
+		public void partClosed(IWorkbenchPart p) {
+			// Ignore.
+		}
+
+		public void partDeactivated(IWorkbenchPart p) {
+			// Ignore.
+		}
+
+		public void partOpened(IWorkbenchPart p) {
+			// Ignore.
+		}
+	};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = new EContentAdapter() {
+		protected boolean dispatching;
+
+		@Override
+		public void notifyChanged(Notification notification) {
+			if (notification.getNotifier() instanceof Resource) {
+				switch (notification.getFeatureID(Resource.class)) {
+				case Resource.RESOURCE__IS_LOADED:
+				case Resource.RESOURCE__ERRORS:
+				case Resource.RESOURCE__WARNINGS: {
+					Resource resource = (Resource) notification.getNotifier();
+					Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+					if (diagnostic.getSeverity() != Diagnostic.OK) {
+						resourceToDiagnosticMap.put(resource, diagnostic);
+					} else {
+						resourceToDiagnosticMap.remove(resource);
+					}
+					dispatchUpdateProblemIndication();
+					break;
+				}
+				}
+			} else {
+				super.notifyChanged(notification);
+			}
+		}
+
+		protected void dispatchUpdateProblemIndication() {
+			if (updateProblemIndication && !dispatching) {
+				dispatching = true;
+				getSite().getShell().getDisplay().asyncExec(new Runnable() {
+					public void run() {
+						dispatching = false;
+						updateProblemIndication();
+					}
+				});
+			}
+		}
+
+		@Override
+		protected void setTarget(Resource target) {
+			basicSetTarget(target);
+		}
+
+		@Override
+		protected void unsetTarget(Resource target) {
+			basicUnsetTarget(target);
+			resourceToDiagnosticMap.remove(target);
+			dispatchUpdateProblemIndication();
+		}
+	};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener = new IResourceChangeListener() {
+		public void resourceChanged(IResourceChangeEvent event) {
+			IResourceDelta delta = event.getDelta();
+			try {
+				class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+					protected ResourceSet resourceSet = editingDomain.getResourceSet();
+					protected Collection<Resource> changedResources = new ArrayList<Resource>();
+					protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+					public boolean visit(IResourceDelta delta) {
+						if (delta.getResource().getType() == IResource.FILE) {
+							if (delta.getKind() == IResourceDelta.REMOVED || delta.getKind() == IResourceDelta.CHANGED
+									&& delta.getFlags() != IResourceDelta.MARKERS) {
+								Resource resource = resourceSet.getResource(
+										URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+								if (resource != null) {
+									if (delta.getKind() == IResourceDelta.REMOVED) {
+										removedResources.add(resource);
+									} else if (!savedResources.remove(resource)) {
+										changedResources.add(resource);
+									}
+								}
+							}
+							return false;
+						}
+
+						return true;
+					}
+
+					public Collection<Resource> getChangedResources() {
+						return changedResources;
+					}
+
+					public Collection<Resource> getRemovedResources() {
+						return removedResources;
+					}
+				}
+
+				final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+				delta.accept(visitor);
+
+				if (!visitor.getRemovedResources().isEmpty()) {
+					getSite().getShell().getDisplay().asyncExec(new Runnable() {
+						public void run() {
+							removedResources.addAll(visitor.getRemovedResources());
+							if (!isDirty()) {
+								getSite().getPage().closeEditor(StatemachineEditor.this, false);
+							}
+						}
+					});
+				}
+
+				if (!visitor.getChangedResources().isEmpty()) {
+					getSite().getShell().getDisplay().asyncExec(new Runnable() {
+						public void run() {
+							changedResources.addAll(visitor.getChangedResources());
+							if (getSite().getPage().getActiveEditor() == StatemachineEditor.this) {
+								handleActivate();
+							}
+						}
+					});
+				}
+			} catch (CoreException exception) {
+				StatemachineEditorPlugin.INSTANCE.log(exception);
+			}
+		}
+	};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+			editingDomain.getResourceToReadOnlyMap().clear();
+
+			// Refresh any actions that may become enabled or disabled.
+			//
+			setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(StatemachineEditor.this, false);
+			} else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		} else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			ResourceSet resourceSet = editingDomain.getResourceSet();
+			if (isDirty()) {
+				changedResources.addAll(resourceSet.getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(resourceSet.getLoadOptions());
+					} catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic = new BasicDiagnostic(Diagnostic.OK, "swt.most.statemachine.editor", 0, null,
+					new Object[] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart) getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			} else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				} catch (PartInitException exception) {
+					StatemachineEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				try {
+					markerHelper.updateMarkers(diagnostic);
+				} catch (CoreException exception) {
+					StatemachineEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return MessageDialog.openQuestion(getSite().getShell(), getString("_UI_FileConflict_label"),
+				getString("_WARN_FileConflict"));
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StatemachineEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new StatemachineItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener(new CommandStackListener() {
+			public void commandStackChanged(final EventObject event) {
+				getContainer().getDisplay().asyncExec(new Runnable() {
+					public void run() {
+						firePropertyChange(IEditorPart.PROP_DIRTY);
+
+						// Try to select the affected objects.
+						//
+						Command mostRecentCommand = ((CommandStack) event.getSource()).getMostRecentCommand();
+						if (mostRecentCommand != null) {
+							setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+						}
+						for (Iterator<PropertySheetPage> i = propertySheetPages.iterator(); i.hasNext();) {
+							PropertySheetPage propertySheetPage = i.next();
+							if (propertySheetPage.getControl() == null || propertySheetPage.getControl().isDisposed()) {
+								i.remove();
+							} else {
+								propertySheetPage.refresh();
+							}
+						}
+					}
+				});
+			}
+		});
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable = new Runnable() {
+				public void run() {
+					// Try to select the items in the current content viewer of the editor.
+					//
+					if (currentViewer != null) {
+						currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+					}
+				}
+			};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object[] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object[] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewerPane(ViewerPane viewerPane) {
+		if (currentViewerPane != viewerPane) {
+			if (currentViewerPane != null) {
+				currentViewerPane.showFocus(false);
+			}
+			currentViewerPane = viewerPane;
+		}
+		setCurrentViewer(currentViewerPane.getViewer());
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener = new ISelectionChangedListener() {
+					// This just notifies those things that are affected by the section.
+					//
+					public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+						setSelection(selectionChangedEvent.getSelection());
+					}
+				};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp");
+		contextMenu.add(new Separator("additions"));
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu = contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance(), LocalSelectionTransfer.getTransfer(),
+				FileTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput(), editingDomain.getResourceSet().getURIConverter());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		} catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		boolean hasErrors = !resource.getErrors().isEmpty();
+		if (hasErrors || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic = new BasicDiagnostic(hasErrors ? Diagnostic.ERROR : Diagnostic.WARNING,
+					"swt.most.statemachine.editor", 0, getString("_UI_CreateModelError_message", resource.getURI()),
+					new Object[] { exception == null ? (Object) resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		} else if (exception != null) {
+			return new BasicDiagnostic(Diagnostic.ERROR, "swt.most.statemachine.editor", 0,
+					getString("_UI_CreateModelError_message", resource.getURI()), new Object[] { exception });
+		} else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), StatemachineEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						Tree tree = new Tree(composite, SWT.MULTI);
+						TreeViewer newTreeViewer = new TreeViewer(tree);
+						return newTreeViewer;
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+
+				selectionViewer = (TreeViewer) viewerPane.getViewer();
+				selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				selectionViewer.setUseHashlookup(true);
+
+				selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+				selectionViewer.setInput(editingDomain.getResourceSet());
+				selectionViewer.setSelection(
+						new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+				viewerPane.setTitle(editingDomain.getResourceSet());
+
+				new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+				createContextMenuFor(selectionViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_SelectionPage_label"));
+			}
+
+			// Create a page for the parent tree view.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), StatemachineEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						Tree tree = new Tree(composite, SWT.MULTI);
+						TreeViewer newTreeViewer = new TreeViewer(tree);
+						return newTreeViewer;
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+
+				parentViewer = (TreeViewer) viewerPane.getViewer();
+				parentViewer.setAutoExpandLevel(30);
+				parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));
+				parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(parentViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_ParentPage_label"));
+			}
+
+			// This is the page for the list viewer
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), StatemachineEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new ListViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+				listViewer = (ListViewer) viewerPane.getViewer();
+				listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(listViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_ListPage_label"));
+			}
+
+			// This is the page for the tree viewer
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), StatemachineEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new TreeViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+				treeViewer = (TreeViewer) viewerPane.getViewer();
+				treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
+
+				createContextMenuFor(treeViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TreePage_label"));
+			}
+
+			// This is the page for the table viewer.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), StatemachineEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new TableViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+				tableViewer = (TableViewer) viewerPane.getViewer();
+
+				Table table = tableViewer.getTable();
+				TableLayout layout = new TableLayout();
+				table.setLayout(layout);
+				table.setHeaderVisible(true);
+				table.setLinesVisible(true);
+
+				TableColumn objectColumn = new TableColumn(table, SWT.NONE);
+				layout.addColumnData(new ColumnWeightData(3, 100, true));
+				objectColumn.setText(getString("_UI_ObjectColumn_label"));
+				objectColumn.setResizable(true);
+
+				TableColumn selfColumn = new TableColumn(table, SWT.NONE);
+				layout.addColumnData(new ColumnWeightData(2, 100, true));
+				selfColumn.setText(getString("_UI_SelfColumn_label"));
+				selfColumn.setResizable(true);
+
+				tableViewer.setColumnProperties(new String[] { "a", "b" });
+				tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(tableViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TablePage_label"));
+			}
+
+			// This is the page for the table tree viewer.
+			//
+			{
+				ViewerPane viewerPane = new ViewerPane(getSite().getPage(), StatemachineEditor.this) {
+					@Override
+					public Viewer createViewer(Composite composite) {
+						return new TreeViewer(composite);
+					}
+
+					@Override
+					public void requestActivation() {
+						super.requestActivation();
+						setCurrentViewerPane(this);
+					}
+				};
+				viewerPane.createControl(getContainer());
+
+				treeViewerWithColumns = (TreeViewer) viewerPane.getViewer();
+
+				Tree tree = treeViewerWithColumns.getTree();
+				tree.setLayoutData(new FillLayout());
+				tree.setHeaderVisible(true);
+				tree.setLinesVisible(true);
+
+				TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);
+				objectColumn.setText(getString("_UI_ObjectColumn_label"));
+				objectColumn.setResizable(true);
+				objectColumn.setWidth(250);
+
+				TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);
+				selfColumn.setText(getString("_UI_SelfColumn_label"));
+				selfColumn.setResizable(true);
+				selfColumn.setWidth(200);
+
+				treeViewerWithColumns.setColumnProperties(new String[] { "a", "b" });
+				treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(treeViewerWithColumns);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));
+			}
+
+			getSite().getShell().getDisplay().asyncExec(new Runnable() {
+				public void run() {
+					if (!getContainer().isDisposed()) {
+						setActivePage(0);
+					}
+				}
+			});
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener(new ControlAdapter() {
+			boolean guard = false;
+
+			@Override
+			public void controlResized(ControlEvent event) {
+				if (!guard) {
+					guard = true;
+					hideTabs();
+					guard = false;
+				}
+			}
+		});
+
+		getSite().getShell().getDisplay().asyncExec(new Runnable() {
+			public void run() {
+				updateProblemIndication();
+			}
+		});
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, "");
+			if (getContainer() instanceof CTabFolder) {
+				Point point = getContainer().getSize();
+				Rectangle clientArea = getContainer().getClientArea();
+				getContainer().setSize(point.x, 2 * point.y - clientArea.height - clientArea.y);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label"));
+			if (getContainer() instanceof CTabFolder) {
+				Point point = getContainer().getSize();
+				Rectangle clientArea = getContainer().getClientArea();
+				getContainer().setSize(point.x, clientArea.height + clientArea.y);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public <T> T getAdapter(Class<T> key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? key.cast(getContentOutlinePage()) : null;
+		} else if (key.equals(IPropertySheetPage.class)) {
+			return key.cast(getPropertySheetPage());
+		} else if (key.equals(IGotoMarker.class)) {
+			return key.cast(this);
+		} else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setUseHashlookup(true);
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+						// Select the root object in the view.
+						//
+						contentOutlineViewer.setSelection(
+								new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager,
+						IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener(new ISelectionChangedListener() {
+				// This ensures that we handle selections correctly.
+				//
+				public void selectionChanged(SelectionChangedEvent event) {
+					handleContentOutlineSelection(event.getSelection());
+				}
+			});
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		PropertySheetPage propertySheetPage = new ExtendedPropertySheetPage(editingDomain,
+				ExtendedPropertySheetPage.Decoration.NONE, null, 0, false) {
+			@Override
+			public void setSelectionToViewer(List<?> selection) {
+				StatemachineEditor.this.setSelectionToViewer(selection);
+				StatemachineEditor.this.setFocus();
+			}
+
+			@Override
+			public void setActionBars(IActionBars actionBars) {
+				super.setActionBars(actionBars);
+				getActionBarContributor().shareGlobalActions(this, actionBars);
+			}
+		};
+		propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		propertySheetPages.add(propertySheetPage);
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection) selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				// If it's the selection viewer, then we want it to select the same selection as this selection.
+				//
+				if (currentViewerPane.getViewer() == selectionViewer) {
+					ArrayList<Object> selectionList = new ArrayList<Object>();
+					selectionList.add(selectedElement);
+					while (selectedElements.hasNext()) {
+						selectionList.add(selectedElements.next());
+					}
+
+					// Set the selection to the widget.
+					//
+					selectionViewer.setSelection(new StructuredSelection(selectionList));
+				} else {
+					// Set the input to the widget.
+					//
+					if (currentViewerPane.getViewer().getInput() != selectedElement) {
+						currentViewerPane.getViewer().setInput(selectedElement);
+						currentViewerPane.setTitle(selectedElement);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack) editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+		saveOptions.put(Resource.OPTION_LINE_DELIMITER, Resource.OPTION_LINE_DELIMITER_UNSPECIFIED);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+			// This is the method that gets invoked when the operation runs.
+			//
+			@Override
+			public void execute(IProgressMonitor monitor) {
+				// Save the resources to the file system.
+				//
+				boolean first = true;
+				List<Resource> resources = editingDomain.getResourceSet().getResources();
+				for (int i = 0; i < resources.size(); ++i) {
+					Resource resource = resources.get(i);
+					if ((first || !resource.getContents().isEmpty() || isPersisted(resource))
+							&& !editingDomain.isReadOnly(resource)) {
+						try {
+							long timeStamp = resource.getTimeStamp();
+							resource.save(saveOptions);
+							if (resource.getTimeStamp() != timeStamp) {
+								savedResources.add(resource);
+							}
+						} catch (Exception exception) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+						first = false;
+					}
+				}
+			}
+		};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack) editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		} catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			StatemachineEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		} catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor = getActionBars().getStatusLineManager() != null
+				? getActionBars().getStatusLineManager().getProgressMonitor()
+				: new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		List<?> targetObjects = markerHelper.getTargetObjects(editingDomain, marker);
+		if (!targetObjects.isEmpty()) {
+			setSelectionToViewer(targetObjects);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener,
+				IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		if (currentViewerPane != null) {
+			currentViewerPane.setFocus();
+		} else {
+			getControl(getActivePage()).setFocus();
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer
+				? contentOutlineStatusLineManager
+				: getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection) selection).toList();
+				switch (collection.size()) {
+				case 0: {
+					statusLineManager.setMessage(getString("_UI_NoObjectSelected"));
+					break;
+				}
+				case 1: {
+					String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+					statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));
+					break;
+				}
+				default: {
+					statusLineManager
+							.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size())));
+					break;
+				}
+				}
+			} else {
+				statusLineManager.setMessage("");
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return StatemachineEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return StatemachineEditorPlugin.INSTANCE.getString(key, new Object[] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener) getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor) getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		for (PropertySheetPage propertySheetPage : propertySheetPages) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return true;
+	}
+}
diff --git a/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineEditorPlugin.java b/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineEditorPlugin.java
new file mode 100644
index 0000000000000000000000000000000000000000..40386e66713bdce6dda2df4a744f362aae676fcb
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineEditorPlugin.java
@@ -0,0 +1,89 @@
+/**
+ */
+package swt.most.statemachine.presentation;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Statemachine editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class StatemachineEditorPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final StatemachineEditorPlugin INSTANCE = new StatemachineEditorPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StatemachineEditorPlugin() {
+		super(new ResourceLocator[] {});
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation extends EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineModelWizard.java b/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineModelWizard.java
new file mode 100644
index 0000000000000000000000000000000000000000..17263098ffe4fba36edfb8755bccefeb5a93ab49
--- /dev/null
+++ b/metamodel/swt.most.statemachine.editor/src-gen/swt/most/statemachine/presentation/StatemachineModelWizard.java
@@ -0,0 +1,628 @@
+/**
+ */
+package swt.most.statemachine.presentation;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.StringTokenizer;
+
+import org.eclipse.emf.common.CommonPlugin;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.ModifyEvent;
+
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+import swt.most.statemachine.StatemachineFactory;
+import swt.most.statemachine.StatemachinePackage;
+import swt.most.statemachine.provider.StatemachineEditPlugin;
+
+import org.eclipse.core.runtime.Path;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StatemachineModelWizard extends Wizard implements INewWizard {
+	/**
+	 * The supported extensions for created files.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List<String> FILE_EXTENSIONS = Collections
+			.unmodifiableList(Arrays.asList(StatemachineEditorPlugin.INSTANCE
+					.getString("_UI_StatemachineEditorFilenameExtensions").split("\\s*,\\s*")));
+
+	/**
+	 * A formatted list of supported file extensions, suitable for display.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String FORMATTED_FILE_EXTENSIONS = StatemachineEditorPlugin.INSTANCE
+			.getString("_UI_StatemachineEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");
+
+	/**
+	 * This caches an instance of the model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StatemachinePackage statemachinePackage = StatemachinePackage.eINSTANCE;
+
+	/**
+	 * This caches an instance of the model factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StatemachineFactory statemachineFactory = statemachinePackage.getStatemachineFactory();
+
+	/**
+	 * This is the file creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StatemachineModelWizardNewFileCreationPage newFileCreationPage;
+
+	/**
+	 * This is the initial object creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StatemachineModelWizardInitialObjectCreationPage initialObjectCreationPage;
+
+	/**
+	 * Remember the selection during initialization for populating the default container.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStructuredSelection selection;
+
+	/**
+	 * Remember the workbench during initialization.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IWorkbench workbench;
+
+	/**
+	 * Caches the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected List<String> initialObjectNames;
+
+	/**
+	 * This just records the information.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		this.workbench = workbench;
+		this.selection = selection;
+		setWindowTitle(StatemachineEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));
+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE
+				.getImageDescriptor(StatemachineEditorPlugin.INSTANCE.getImage("full/wizban/NewStatemachine")));
+	}
+
+	/**
+	 * Returns the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<String> getInitialObjectNames() {
+		if (initialObjectNames == null) {
+			initialObjectNames = new ArrayList<String>();
+			for (EClassifier eClassifier : statemachinePackage.getEClassifiers()) {
+				if (eClassifier instanceof EClass) {
+					EClass eClass = (EClass) eClassifier;
+					if (!eClass.isAbstract()) {
+						initialObjectNames.add(eClass.getName());
+					}
+				}
+			}
+			Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
+		}
+		return initialObjectNames;
+	}
+
+	/**
+	 * Create a new model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EObject createInitialModel() {
+		EClass eClass = (EClass) statemachinePackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+		EObject rootObject = statemachineFactory.create(eClass);
+		return rootObject;
+	}
+
+	/**
+	 * Do the work after everything is specified.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean performFinish() {
+		try {
+			// Remember the file.
+			//
+			final IFile modelFile = getModelFile();
+
+			// Do the work within an operation.
+			//
+			WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+				@Override
+				protected void execute(IProgressMonitor progressMonitor) {
+					try {
+						// Create a resource set
+						//
+						ResourceSet resourceSet = new ResourceSetImpl();
+
+						// Get the URI of the model file.
+						//
+						URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);
+
+						// Create a resource for this file.
+						//
+						Resource resource = resourceSet.createResource(fileURI);
+
+						// Add the initial model object to the contents.
+						//
+						EObject rootObject = createInitialModel();
+						if (rootObject != null) {
+							resource.getContents().add(rootObject);
+						}
+
+						// Save the contents of the resource to the file system.
+						//
+						Map<Object, Object> options = new HashMap<Object, Object>();
+						options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+						resource.save(options);
+					} catch (Exception exception) {
+						StatemachineEditorPlugin.INSTANCE.log(exception);
+					} finally {
+						progressMonitor.done();
+					}
+				}
+			};
+
+			getContainer().run(false, false, operation);
+
+			// Select the new file resource in the current view.
+			//
+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+			IWorkbenchPage page = workbenchWindow.getActivePage();
+			final IWorkbenchPart activePart = page.getActivePart();
+			if (activePart instanceof ISetSelectionTarget) {
+				final ISelection targetSelection = new StructuredSelection(modelFile);
+				getShell().getDisplay().asyncExec(new Runnable() {
+					public void run() {
+						((ISetSelectionTarget) activePart).selectReveal(targetSelection);
+					}
+				});
+			}
+
+			// Open an editor on the new file.
+			//
+			try {
+				page.openEditor(new FileEditorInput(modelFile),
+						workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());
+			} catch (PartInitException exception) {
+				MessageDialog.openError(workbenchWindow.getShell(),
+						StatemachineEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"),
+						exception.getMessage());
+				return false;
+			}
+
+			return true;
+		} catch (Exception exception) {
+			StatemachineEditorPlugin.INSTANCE.log(exception);
+			return false;
+		}
+	}
+
+	/**
+	 * This is the one page of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class StatemachineModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public StatemachineModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {
+			super(pageId, selection);
+		}
+
+		/**
+		 * The framework calls this to see if the file is correct.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		protected boolean validatePage() {
+			if (super.validatePage()) {
+				String extension = new Path(getFileName()).getFileExtension();
+				if (extension == null || !FILE_EXTENSIONS.contains(extension)) {
+					String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";
+					setErrorMessage(StatemachineEditorPlugin.INSTANCE.getString(key,
+							new Object[] { FORMATTED_FILE_EXTENSIONS }));
+					return false;
+				}
+				return true;
+			}
+			return false;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public IFile getModelFile() {
+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));
+		}
+	}
+
+	/**
+	 * This is the page where the type of object to create is selected.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class StatemachineModelWizardInitialObjectCreationPage extends WizardPage {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo initialObjectField;
+
+		/**
+		 * @generated
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 */
+		protected List<String> encodings;
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo encodingField;
+
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public StatemachineModelWizardInitialObjectCreationPage(String pageId) {
+			super(pageId);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void createControl(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE);
+			{
+				GridLayout layout = new GridLayout();
+				layout.numColumns = 1;
+				layout.verticalSpacing = 12;
+				composite.setLayout(layout);
+
+				GridData data = new GridData();
+				data.verticalAlignment = GridData.FILL;
+				data.grabExcessVerticalSpace = true;
+				data.horizontalAlignment = GridData.FILL;
+				composite.setLayoutData(data);
+			}
+
+			Label containerLabel = new Label(composite, SWT.LEFT);
+			{
+				containerLabel.setText(StatemachineEditorPlugin.INSTANCE.getString("_UI_ModelObject"));
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				containerLabel.setLayoutData(data);
+			}
+
+			initialObjectField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				initialObjectField.setLayoutData(data);
+			}
+
+			for (String objectName : getInitialObjectNames()) {
+				initialObjectField.add(getLabel(objectName));
+			}
+
+			if (initialObjectField.getItemCount() == 1) {
+				initialObjectField.select(0);
+			}
+			initialObjectField.addModifyListener(validator);
+
+			Label encodingLabel = new Label(composite, SWT.LEFT);
+			{
+				encodingLabel.setText(StatemachineEditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				encodingLabel.setLayoutData(data);
+			}
+			encodingField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				encodingField.setLayoutData(data);
+			}
+
+			for (String encoding : getEncodings()) {
+				encodingField.add(encoding);
+			}
+
+			encodingField.select(0);
+			encodingField.addModifyListener(validator);
+
+			setPageComplete(validatePage());
+			setControl(composite);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected ModifyListener validator = new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				setPageComplete(validatePage());
+			}
+		};
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected boolean validatePage() {
+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public void setVisible(boolean visible) {
+			super.setVisible(visible);
+			if (visible) {
+				if (initialObjectField.getItemCount() == 1) {
+					initialObjectField.clearSelection();
+					encodingField.setFocus();
+				} else {
+					encodingField.clearSelection();
+					initialObjectField.setFocus();
+				}
+			}
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public String getInitialObjectName() {
+			String label = initialObjectField.getText();
+
+			for (String name : getInitialObjectNames()) {
+				if (getLabel(name).equals(label)) {
+					return name;
+				}
+			}
+			return null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public String getEncoding() {
+			return encodingField.getText();
+		}
+
+		/**
+		 * Returns the label for the specified type name.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected String getLabel(String typeName) {
+			try {
+				return StatemachineEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");
+			} catch (MissingResourceException mre) {
+				StatemachineEditorPlugin.INSTANCE.log(mre);
+			}
+			return typeName;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Collection<String> getEncodings() {
+			if (encodings == null) {
+				encodings = new ArrayList<String>();
+				for (StringTokenizer stringTokenizer = new StringTokenizer(
+						StatemachineEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer
+								.hasMoreTokens();) {
+					encodings.add(stringTokenizer.nextToken());
+				}
+			}
+			return encodings;
+		}
+	}
+
+	/**
+	 * The framework calls this to create the contents of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void addPages() {
+		// Create a page, set the title, and the initial model file name.
+		//
+		newFileCreationPage = new StatemachineModelWizardNewFileCreationPage("Whatever", selection);
+		newFileCreationPage.setTitle(StatemachineEditorPlugin.INSTANCE.getString("_UI_StatemachineModelWizard_label"));
+		newFileCreationPage
+				.setDescription(StatemachineEditorPlugin.INSTANCE.getString("_UI_StatemachineModelWizard_description"));
+		newFileCreationPage
+				.setFileName(StatemachineEditorPlugin.INSTANCE.getString("_UI_StatemachineEditorFilenameDefaultBase")
+						+ "." + FILE_EXTENSIONS.get(0));
+		addPage(newFileCreationPage);
+
+		// Try and get the resource selection to determine a current directory for the file dialog.
+		//
+		if (selection != null && !selection.isEmpty()) {
+			// Get the resource...
+			//
+			Object selectedElement = selection.iterator().next();
+			if (selectedElement instanceof IResource) {
+				// Get the resource parent, if its a file.
+				//
+				IResource selectedResource = (IResource) selectedElement;
+				if (selectedResource.getType() == IResource.FILE) {
+					selectedResource = selectedResource.getParent();
+				}
+
+				// This gives us a directory...
+				//
+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {
+					// Set this for the container.
+					//
+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());
+
+					// Make up a unique new name here.
+					//
+					String defaultModelBaseFilename = StatemachineEditorPlugin.INSTANCE
+							.getString("_UI_StatemachineEditorFilenameDefaultBase");
+					String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);
+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;
+					for (int i = 1; ((IContainer) selectedResource).findMember(modelFilename) != null; ++i) {
+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;
+					}
+					newFileCreationPage.setFileName(modelFilename);
+				}
+			}
+		}
+		initialObjectCreationPage = new StatemachineModelWizardInitialObjectCreationPage("Whatever2");
+		initialObjectCreationPage
+				.setTitle(StatemachineEditorPlugin.INSTANCE.getString("_UI_StatemachineModelWizard_label"));
+		initialObjectCreationPage
+				.setDescription(StatemachineEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description"));
+		addPage(initialObjectCreationPage);
+	}
+
+	/**
+	 * Get the file from the page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IFile getModelFile() {
+		return newFileCreationPage.getModelFile();
+	}
+
+}
diff --git a/metamodel/swt.most.statemachine/.classpath b/metamodel/swt.most.statemachine/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..c3f9cf33e920a2477e584487d0015da314361b97
--- /dev/null
+++ b/metamodel/swt.most.statemachine/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/metamodel/swt.most.statemachine/.project b/metamodel/swt.most.statemachine/.project
new file mode 100644
index 0000000000000000000000000000000000000000..0889fd61cc2f90c7a833845e4345f01b6b30f482
--- /dev/null
+++ b/metamodel/swt.most.statemachine/.project
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.statemachine</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.sirius.nature.modelingproject</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+	</natures>
+</projectDescription>
diff --git a/metamodel/swt.most.statemachine/.settings/org.eclipse.core.resources.prefs b/metamodel/swt.most.statemachine/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/metamodel/swt.most.statemachine/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/metamodel/swt.most.statemachine/META-INF/MANIFEST.MF b/metamodel/swt.most.statemachine/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..e4a1810dafe39d3efd18ce1ec4e407dbd356a589
--- /dev/null
+++ b/metamodel/swt.most.statemachine/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: swt.most.statemachine;singleton:=true
+Automatic-Module-Name: swt.most.statemachine
+Bundle-Version: 0.1.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: swt.most.statemachine,
+ swt.most.statemachine.impl,
+ swt.most.statemachine.util
+Require-Bundle: org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.core.runtime
+Bundle-ActivationPolicy: lazy
diff --git a/metamodel/swt.most.statemachine/bin/.gitkeep b/metamodel/swt.most.statemachine/bin/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..49cc8ef0e116cef009fe0bd72473a964bbd07f9b
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/.gitkeep differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Action.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Action.class
new file mode 100644
index 0000000000000000000000000000000000000000..f870b81fd6cb6b43a21f2e9814c6516c908b1e19
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Action.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Expression.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Expression.class
new file mode 100644
index 0000000000000000000000000000000000000000..6e9bc61562126aa012ed4c128f63122f20ddd7bc
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Expression.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/FinalState.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/FinalState.class
new file mode 100644
index 0000000000000000000000000000000000000000..f7b40197fb61970459d1897801a9056bbc366556
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/FinalState.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Guard.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Guard.class
new file mode 100644
index 0000000000000000000000000000000000000000..c61835cb05c157ef11e14dabef31cb93ff4bcd08
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Guard.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/InitialState.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/InitialState.class
new file mode 100644
index 0000000000000000000000000000000000000000..caa43f8c9d18e7e2616884c006af58bafa5b1e23
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/InitialState.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/NormalState.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/NormalState.class
new file mode 100644
index 0000000000000000000000000000000000000000..e2646a56c67d8ba63eaeb2eb699a92ff801e7f41
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/NormalState.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/State.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/State.class
new file mode 100644
index 0000000000000000000000000000000000000000..e8bdaee3fc67f24695e1a090dfa1e99b7427d612
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/State.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StateMachine.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StateMachine.class
new file mode 100644
index 0000000000000000000000000000000000000000..c797580f49f7fffebec0c7a9f820b5b30a1498ee
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StateMachine.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StatemachineFactory.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StatemachineFactory.class
new file mode 100644
index 0000000000000000000000000000000000000000..4f3a1e380ce766c7a5d6c58ac3bcceeada37d92e
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StatemachineFactory.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StatemachinePackage$Literals.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StatemachinePackage$Literals.class
new file mode 100644
index 0000000000000000000000000000000000000000..237c127112f52bfcfb7d8dbde262358474dfb1e8
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StatemachinePackage$Literals.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StatemachinePackage.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StatemachinePackage.class
new file mode 100644
index 0000000000000000000000000000000000000000..bb0717f2bb879feac9d6975d4f11606b82be13c4
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/StatemachinePackage.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Transition.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Transition.class
new file mode 100644
index 0000000000000000000000000000000000000000..48cfc9c66cb032918650e43abe7f95466bd5936b
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Transition.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Trigger.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Trigger.class
new file mode 100644
index 0000000000000000000000000000000000000000..512f1c348b00dcecf7a19958b82a2900563a48a7
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/Trigger.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/ActionImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/ActionImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..2a6bad30a795022df26b35e99a693af161df8534
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/ActionImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/ExpressionImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/ExpressionImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..9f81b4565c661f5889d12939641611bf413c0c36
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/ExpressionImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/FinalStateImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/FinalStateImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..9f4c5d8a44dbb0fe4ac191c16b97481ec21afae1
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/FinalStateImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/GuardImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/GuardImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..621503c9c429bc1dc017d16ac0da1515242d8b44
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/GuardImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/InitialStateImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/InitialStateImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..7d73a2343ed50f22d919e55110e1f115b56a4560
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/InitialStateImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/NormalStateImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/NormalStateImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..3cded65db9283550c9eb415efb36331cf18a097b
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/NormalStateImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StateImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StateImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..77de38ac501f98532e9609237432cf74293c0d50
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StateImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StateMachineImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StateMachineImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..70dfd0481615f6dce18e46b1319bdec0f794a650
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StateMachineImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StatemachineFactoryImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StatemachineFactoryImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..24e9e0133766180440ba63e5a939c0a0565877df
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StatemachineFactoryImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StatemachinePackageImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StatemachinePackageImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..ea51f30b4b3fd0c0d9954269256dab253ae49655
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/StatemachinePackageImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/TransitionImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/TransitionImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..9a04ccef9cdb76bf3ca4ccb7d0deb6ab90445bb6
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/TransitionImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/TriggerImpl.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/TriggerImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..caca244c015bc14e96d8fafa234ea675390fbef5
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/impl/TriggerImpl.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/util/StatemachineAdapterFactory$1.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/util/StatemachineAdapterFactory$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..946ad8b56ef4eeb45664cf9a0ce9e15da948b9cc
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/util/StatemachineAdapterFactory$1.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/util/StatemachineAdapterFactory.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/util/StatemachineAdapterFactory.class
new file mode 100644
index 0000000000000000000000000000000000000000..8981ae01fdf9f91693fbf7eb8a648973f240bea0
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/util/StatemachineAdapterFactory.class differ
diff --git a/metamodel/swt.most.statemachine/bin/swt/most/statemachine/util/StatemachineSwitch.class b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/util/StatemachineSwitch.class
new file mode 100644
index 0000000000000000000000000000000000000000..7bd4d12ef9fb7c9137d138a9c93f29a5d9b66ea2
Binary files /dev/null and b/metamodel/swt.most.statemachine/bin/swt/most/statemachine/util/StatemachineSwitch.class differ
diff --git a/metamodel/swt.most.statemachine/build.properties b/metamodel/swt.most.statemachine/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..697ca964527a545764d3a69847c122b371257973
--- /dev/null
+++ b/metamodel/swt.most.statemachine/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src-gen/
+output.. = bin/
diff --git a/metamodel/swt.most.statemachine/model/statemachine.aird b/metamodel/swt.most.statemachine/model/statemachine.aird
new file mode 100644
index 0000000000000000000000000000000000000000..be08415dda53b1f3b55d0a11305066cbe1c1b06f
--- /dev/null
+++ b/metamodel/swt.most.statemachine/model/statemachine.aird
@@ -0,0 +1,822 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.3/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style">
+  <viewpoint:DAnalysis uid="_L24nQFOpEe2H3LXgl620PA" selectedViews="_MIiX8FOpEe2H3LXgl620PA" version="15.2.0.202303281325">
+    <semanticResources>statemachine.ecore</semanticResources>
+    <ownedViews xmi:type="viewpoint:DView" uid="_MIiX8FOpEe2H3LXgl620PA">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/>
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_MK4hUFOpEe2H3LXgl620PA" name="statemachine" repPath="#_MKHsUFOpEe2H3LXgl620PA" changeId="1718626992484">
+        <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+        <target xmi:type="ecore:EPackage" href="statemachine.ecore#/"/>
+      </ownedRepresentationDescriptors>
+    </ownedViews>
+  </viewpoint:DAnalysis>
+  <diagram:DSemanticDiagram uid="_MKHsUFOpEe2H3LXgl620PA">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_MLWbYFOpEe2H3LXgl620PA" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_MLWbYVOpEe2H3LXgl620PA" type="Sirius" element="_MKHsUFOpEe2H3LXgl620PA" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_yD77sFOqEe2NKN60v8idTQ" type="2003" element="_yDDK4FOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yD77s1OqEe2NKN60v8idTQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_yD77tFOqEe2NKN60v8idTQ" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_yEDQcFOqEe2NKN60v8idTQ" type="3010" element="_yDXT8FOqEe2NKN60v8idTQ">
+              <styles xmi:type="notation:FontStyle" xmi:id="_yEDQcVOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8" bold="true"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_yEDQclOqEe2NKN60v8idTQ"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_yD77tVOqEe2NKN60v8idTQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_yD77tlOqEe2NKN60v8idTQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_yD77sVOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yD77slOqEe2NKN60v8idTQ" x="108" y="42"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_yD8iwFOqEe2NKN60v8idTQ" type="2003" element="_yDFAEFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yD9J0FOqEe2NKN60v8idTQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_yD9J0VOqEe2NKN60v8idTQ" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_yED3gFOqEe2NKN60v8idTQ" type="3010" element="_yDczgFOqEe2NKN60v8idTQ">
+              <styles xmi:type="notation:FontStyle" xmi:id="_yED3gVOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8" bold="true"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_yED3glOqEe2NKN60v8idTQ"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_yD9J0lOqEe2NKN60v8idTQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_yD9J01OqEe2NKN60v8idTQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_yD8iwVOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8" italic="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yD8iwlOqEe2NKN60v8idTQ" x="456" y="474"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_yD9w4FOqEe2NKN60v8idTQ" type="2003" element="_yDG1QFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yD9w41OqEe2NKN60v8idTQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_yD9w5FOqEe2NKN60v8idTQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_yD9w5VOqEe2NKN60v8idTQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_yD9w5lOqEe2NKN60v8idTQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_yD9w4VOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yD9w4lOqEe2NKN60v8idTQ" x="803" y="474"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_yD9w51OqEe2NKN60v8idTQ" type="2003" element="_yDIDYFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yD-X8FOqEe2NKN60v8idTQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_yD-X8VOqEe2NKN60v8idTQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_yD-X8lOqEe2NKN60v8idTQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_yD-X81OqEe2NKN60v8idTQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_yD9w6FOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yD9w6VOqEe2NKN60v8idTQ" x="528" y="246"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_yD-X9FOqEe2NKN60v8idTQ" type="2003" element="_yDIqcVOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yD-X91OqEe2NKN60v8idTQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_yD-X-FOqEe2NKN60v8idTQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_yD-X-VOqEe2NKN60v8idTQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_yD-X-lOqEe2NKN60v8idTQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_yD-X9VOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yD-X9lOqEe2NKN60v8idTQ" x="708" y="240"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_yD-_AFOqEe2NKN60v8idTQ" type="2003" element="_yDJ4kFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yD-_A1OqEe2NKN60v8idTQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_yD_mEFOqEe2NKN60v8idTQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_yD_mEVOqEe2NKN60v8idTQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_yD_mElOqEe2NKN60v8idTQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_yD-_AVOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yD-_AlOqEe2NKN60v8idTQ" x="882" y="240"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_yEANIFOqEe2NKN60v8idTQ" type="2003" element="_yDLGsFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEANI1OqEe2NKN60v8idTQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_yEANJFOqEe2NKN60v8idTQ" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_yEEekFOqEe2NKN60v8idTQ" type="3010" element="_yDeosFOqEe2NKN60v8idTQ">
+              <styles xmi:type="notation:FontStyle" xmi:id="_yEEekVOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8" bold="true"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_yEEeklOqEe2NKN60v8idTQ"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_yEANJVOqEe2NKN60v8idTQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_yEANJlOqEe2NKN60v8idTQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_yEANIVOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8" italic="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEANIlOqEe2NKN60v8idTQ" x="384" y="72"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_yEA0MFOqEe2NKN60v8idTQ" type="2003" element="_yDLtwVOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEA0M1OqEe2NKN60v8idTQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_yEA0NFOqEe2NKN60v8idTQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_yEA0NVOqEe2NKN60v8idTQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_yEA0NlOqEe2NKN60v8idTQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_yEA0MVOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEA0MlOqEe2NKN60v8idTQ" x="24" y="318"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_yEBbQFOqEe2NKN60v8idTQ" type="2003" element="_yDM74FOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEBbQ1OqEe2NKN60v8idTQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_yEBbRFOqEe2NKN60v8idTQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_yEBbRVOqEe2NKN60v8idTQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_yEBbRlOqEe2NKN60v8idTQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_yEBbQVOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEBbQlOqEe2NKN60v8idTQ" x="156" y="318"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_yECCUFOqEe2NKN60v8idTQ" type="2003" element="_yDNi8VOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yECCU1OqEe2NKN60v8idTQ" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_yECCVFOqEe2NKN60v8idTQ" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_yECCVVOqEe2NKN60v8idTQ"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_yECCVlOqEe2NKN60v8idTQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_yECCUVOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yECCUlOqEe2NKN60v8idTQ" x="291" y="318"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_MLWbYlOpEe2H3LXgl620PA"/>
+        <edges xmi:type="notation:Edge" xmi:id="_yEKlMFOqEe2NKN60v8idTQ" type="4001" element="_yDkIQFOqEe2NKN60v8idTQ" source="_yD77sFOqEe2NKN60v8idTQ" target="_yECCUFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yELMQFOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yELMQVOqEe2NKN60v8idTQ" x="122" y="42"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yENogFOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yENogVOqEe2NKN60v8idTQ" x="71" y="-95"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEOPkFOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEOPkVOqEe2NKN60v8idTQ" x="-7"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEKlMVOqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEKlMlOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEKlM1OqEe2NKN60v8idTQ" points="[47, 49, -124, -227]$[47, 155, -124, -121]$[170, 155, -1, -121]$[170, 227, -1, -49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEWycFOqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEWycVOqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEXZgFOqEe2NKN60v8idTQ" type="4001" element="_yDsEEFOqEe2NKN60v8idTQ" source="_yD77sFOqEe2NKN60v8idTQ" target="_yEBbQFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEXZhFOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEXZhVOqEe2NKN60v8idTQ" x="68" y="-67"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEXZhlOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEXZh1OqEe2NKN60v8idTQ" x="20" y="4"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEXZiFOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEXZiVOqEe2NKN60v8idTQ" x="-19"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEXZgVOqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEXZglOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEXZg1OqEe2NKN60v8idTQ" points="[5, 49, -19, -227]$[5, 227, -19, -49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEYAkFOqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEYAkVOqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEYAklOqEe2NKN60v8idTQ" type="4001" element="_yDsrJlOqEe2NKN60v8idTQ" source="_yD77sFOqEe2NKN60v8idTQ" target="_yEA0MFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEYAllOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEYAl1OqEe2NKN60v8idTQ" x="94" y="-65"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEYAmFOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEYAmVOqEe2NKN60v8idTQ" x="135" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEYAmlOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEYAm1OqEe2NKN60v8idTQ" x="-78" y="-6"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEYAk1OqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEYAlFOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEYAlVOqEe2NKN60v8idTQ" points="[-19, 49, 89, -227]$[-19, 138, 89, -138]$[-65, 138, 43, -138]$[-65, 227, 43, -49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEYnoFOqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEYnoVOqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEYnolOqEe2NKN60v8idTQ" type="4001" element="_yDt5QFOqEe2NKN60v8idTQ" source="_yD77sFOqEe2NKN60v8idTQ" target="_yD9w4FOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEYnplOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEYnp1OqEe2NKN60v8idTQ" x="-729" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEYnqFOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEYnqVOqEe2NKN60v8idTQ" x="-154" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEZOsFOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEZOsVOqEe2NKN60v8idTQ" x="-40" y="359"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEYno1OqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEYnpFOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEYnpVOqEe2NKN60v8idTQ" points="[71, -31, -612, -463]$[937, -31, 254, -463]$[937, 527, 254, 95]$[684, 527, 1, 95]$[684, 481, 1, 49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEZOslOqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEZOs1OqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEZOtFOqEe2NKN60v8idTQ" type="4001" element="_yDt5R1OqEe2NKN60v8idTQ" source="_yD9w4FOqEe2NKN60v8idTQ" target="_yD8iwFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEZOuFOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEZOuVOqEe2NKN60v8idTQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEZOulOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEZOu1OqEe2NKN60v8idTQ" x="193" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEZOvFOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEZOvVOqEe2NKN60v8idTQ" x="33" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEZOtVOqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEZOtlOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEZOt1OqEe2NKN60v8idTQ" points="[-59, 17, 288, 17]$[-287, 17, 60, 17]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEZ1wFOqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEZ1wVOqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEZ1wlOqEe2NKN60v8idTQ" type="4001" element="_yDvHYFOqEe2NKN60v8idTQ" source="_yD9w4FOqEe2NKN60v8idTQ" target="_yD8iwFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEZ1xlOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEZ1x1OqEe2NKN60v8idTQ" x="-7" y="16"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEZ1yFOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEZ1yVOqEe2NKN60v8idTQ" x="13"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEZ1ylOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEZ1y1OqEe2NKN60v8idTQ" x="12"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEZ1w1OqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEZ1xFOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEZ1xVOqEe2NKN60v8idTQ" points="[-59, -19, 288, -19]$[-287, -19, 60, -19]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEZ1zFOqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEZ1zVOqEe2NKN60v8idTQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEZ1zlOqEe2NKN60v8idTQ" type="4001" element="_yDvuc1OqEe2NKN60v8idTQ" source="_yD9w4FOqEe2NKN60v8idTQ" target="_yD9w51OqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEac0FOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEac0VOqEe2NKN60v8idTQ" x="-330" y="-78"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEac0lOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEac01OqEe2NKN60v8idTQ" x="28" y="-257"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEac1FOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEac1VOqEe2NKN60v8idTQ" x="26" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEZ1z1OqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEZ10FOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEZ10VOqEe2NKN60v8idTQ" points="[58, 78, 333, 208]$[229, 78, 504, 208]$[229, -264, 504, -134]$[-245, -264, 30, -134]$[-245, -228, 30, -98]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEac1lOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEac11OqEe2NKN60v8idTQ" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEac2FOqEe2NKN60v8idTQ" type="4001" element="_yDwVhlOqEe2NKN60v8idTQ" source="_yD9w4FOqEe2NKN60v8idTQ" target="_yD-X9FOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEac3FOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEac3VOqEe2NKN60v8idTQ" x="-208" y="-69"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEac3lOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEac31OqEe2NKN60v8idTQ" x="52" y="-225"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEbD4FOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEbD4VOqEe2NKN60v8idTQ" x="21" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEac2VOqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEac2lOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEac21OqEe2NKN60v8idTQ" points="[58, 48, 153, 184]$[223, 48, 318, 184]$[223, -252, 318, -116]$[-65, -252, 30, -116]$[-65, -234, 30, -98]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEbD4lOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEbD41OqEe2NKN60v8idTQ" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEbD5FOqEe2NKN60v8idTQ" type="4001" element="_yDxjoFOqEe2NKN60v8idTQ" source="_yD9w4FOqEe2NKN60v8idTQ" target="_yD-_AFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEbD6FOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEbD6VOqEe2NKN60v8idTQ" x="-45" y="-63"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEbD6lOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEbD61OqEe2NKN60v8idTQ" x="92" y="-147"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEbD7FOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEbD7VOqEe2NKN60v8idTQ" x="-13" y="-95"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEbD5VOqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEbD5lOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEbD51OqEe2NKN60v8idTQ" points="[58, 18, -21, 154]$[217, 18, 138, 154]$[217, -184, 138, -48]$[137, -184, 58, -48]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEbq8FOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEbq8VOqEe2NKN60v8idTQ" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEbq8lOqEe2NKN60v8idTQ" type="4001" element="_yDyKtlOqEe2NKN60v8idTQ" source="_yECCUFOqEe2NKN60v8idTQ" target="_yD-_AFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEbq9lOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEbq91OqEe2NKN60v8idTQ" x="-12" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEbq-FOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEbq-VOqEe2NKN60v8idTQ" x="66" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEbq-lOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEbq-1OqEe2NKN60v8idTQ" x="-241" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEbq81OqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEbq9FOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEbq9VOqEe2NKN60v8idTQ" points="[58, 54, -533, 34]$[573, 54, -18, 34]$[573, 20, -18, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEbq_FOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEbq_VOqEe2NKN60v8idTQ" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEcSAFOqEe2NKN60v8idTQ" type="4001" element="_yDzY0FOqEe2NKN60v8idTQ" source="_yECCUFOqEe2NKN60v8idTQ" target="_yD-_AFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEcSBFOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEcSBVOqEe2NKN60v8idTQ" x="-29" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEcSBlOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEcSB1OqEe2NKN60v8idTQ" x="62" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEcSCFOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEcSCVOqEe2NKN60v8idTQ" x="-267" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEcSAVOqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEcSAlOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEcSA1OqEe2NKN60v8idTQ" points="[58, 72, -533, 52]$[585, 72, -6, 52]$[585, 20, -6, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEcSClOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEcSC1OqEe2NKN60v8idTQ" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEcSDFOqEe2NKN60v8idTQ" type="4001" element="_yDz_41OqEe2NKN60v8idTQ" source="_yECCUFOqEe2NKN60v8idTQ" target="_yD-_AFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEc5EFOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEc5EVOqEe2NKN60v8idTQ" x="-44" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEc5ElOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEc5E1OqEe2NKN60v8idTQ" x="57" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEc5FFOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEc5FVOqEe2NKN60v8idTQ" x="-292" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEcSDVOqEe2NKN60v8idTQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEcSDlOqEe2NKN60v8idTQ" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEcSD1OqEe2NKN60v8idTQ" points="[58, 90, -533, 70]$[597, 90, 6, 70]$[597, 20, 6, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEc5FlOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEc5F1OqEe2NKN60v8idTQ" id="(0.5084745762711864,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEc5GFOqEe2NKN60v8idTQ" type="4001" element="_yD1OAFOqEe2NKN60v8idTQ" source="_yD9w51OqEe2NKN60v8idTQ" target="_yEANIFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEc5HFOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEc5HVOqEe2NKN60v8idTQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEdgIFOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEdgIVOqEe2NKN60v8idTQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEdgIlOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEdgI1OqEe2NKN60v8idTQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEc5GVOqEe2NKN60v8idTQ" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEc5GlOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEc5G1OqEe2NKN60v8idTQ" points="[-1, 0, -181, 60]$[179, -60, -1, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEdgJFOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEdgJVOqEe2NKN60v8idTQ" id="(0.5075757575757576,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEdgJlOqEe2NKN60v8idTQ" type="4001" element="_yD3DM1OqEe2NKN60v8idTQ" source="_yD-X9FOqEe2NKN60v8idTQ" target="_yEANIFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEdgKlOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEdgK1OqEe2NKN60v8idTQ" x="-4" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEdgLFOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEdgLVOqEe2NKN60v8idTQ" x="-4" y="6"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEdgLlOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEdgL1OqEe2NKN60v8idTQ" x="-4" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEdgJ1OqEe2NKN60v8idTQ" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEdgKFOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEdgKVOqEe2NKN60v8idTQ" points="[0, 0, -219, 58]$[0, -36, -219, 22]$[219, -36, 0, 22]$[219, -58, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEeHMFOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEeHMVOqEe2NKN60v8idTQ" id="(0.5075757575757576,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEeHMlOqEe2NKN60v8idTQ" type="4001" element="_yD3qQ1OqEe2NKN60v8idTQ" source="_yD-_AFOqEe2NKN60v8idTQ" target="_yEANIFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEeHNlOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEeHN1OqEe2NKN60v8idTQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEeHOFOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEeHOVOqEe2NKN60v8idTQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEeHOlOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEeHO1OqEe2NKN60v8idTQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEeHM1OqEe2NKN60v8idTQ" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEeHNFOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEeHNVOqEe2NKN60v8idTQ" points="[-1, 0, 179, 60]$[-181, -60, -1, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEeuQFOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEeuQVOqEe2NKN60v8idTQ" id="(0.5075757575757576,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEfVUFOqEe2NKN60v8idTQ" type="4001" element="_yD4RU1OqEe2NKN60v8idTQ" source="_yEA0MFOqEe2NKN60v8idTQ" target="_yD8iwFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEf8YFOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEf8YVOqEe2NKN60v8idTQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEgjcFOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEgjcVOqEe2NKN60v8idTQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEgjclOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEgjc1OqEe2NKN60v8idTQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEfVUVOqEe2NKN60v8idTQ" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEfVUlOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEfVU1OqEe2NKN60v8idTQ" points="[-1, 0, 98, 60]$[-100, -60, -1, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEhKgFOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEhKgVOqEe2NKN60v8idTQ" id="(0.5042016806722689,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEhKglOqEe2NKN60v8idTQ" type="4001" element="_yD44Y1OqEe2NKN60v8idTQ" source="_yEBbQFOqEe2NKN60v8idTQ" target="_yD8iwFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEhKhlOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEhKh1OqEe2NKN60v8idTQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEhxkFOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEhxkVOqEe2NKN60v8idTQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEhxklOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEhxk1OqEe2NKN60v8idTQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEhKg1OqEe2NKN60v8idTQ" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEhKhFOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEhKhVOqEe2NKN60v8idTQ" points="[-1, 0, -82, 60]$[80, -60, -1, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEhxlFOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEhxlVOqEe2NKN60v8idTQ" id="(0.5042016806722689,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_yEhxllOqEe2NKN60v8idTQ" type="4001" element="_yD5fc1OqEe2NKN60v8idTQ" source="_yECCUFOqEe2NKN60v8idTQ" target="_yD8iwFOqEe2NKN60v8idTQ">
+          <children xmi:type="notation:Node" xmi:id="_yEhxmlOqEe2NKN60v8idTQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEhxm1OqEe2NKN60v8idTQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEhxnFOqEe2NKN60v8idTQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEhxnVOqEe2NKN60v8idTQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_yEhxnlOqEe2NKN60v8idTQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yEhxn1OqEe2NKN60v8idTQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_yEhxl1OqEe2NKN60v8idTQ" routing="Tree"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_yEhxmFOqEe2NKN60v8idTQ" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yEhxmVOqEe2NKN60v8idTQ" points="[-1, 0, 540, 60]$[-542, -60, -1, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEiYoFOqEe2NKN60v8idTQ" id="(0.5084745762711864,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yEiYoVOqEe2NKN60v8idTQ" id="(0.5546218487394958,0.05102040816326531)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_MNRuAFOpEe2H3LXgl620PA" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_MNSVEFOpEe2H3LXgl620PA">
+        <computedStyleDescriptions xmi:type="style:BundledImageDescription" xmi:id="_yDYiEFOqEe2NKN60v8idTQ" labelExpression="service:render" labelAlignment="LEFT" tooltipExpression="service:renderTooltip" sizeComputationExpression="1">
+          <borderColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <labelFormat>bold</labelFormat>
+          <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <color xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+        </computedStyleDescriptions>
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_yDmkgFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan">
+          <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_yDmkgVOqEe2NKN60v8idTQ" showIcon="false" labelExpression="service:render">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </centerLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_yDmkglOqEe2NKN60v8idTQ" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+          </endLabelStyleDescription>
+        </computedStyleDescriptions>
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_yDtSMFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan">
+          <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_yDtSMVOqEe2NKN60v8idTQ" showIcon="false" labelExpression="service:render">
+            <labelFormat>bold</labelFormat>
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </centerLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_yDtSMlOqEe2NKN60v8idTQ" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+          </endLabelStyleDescription>
+        </computedStyleDescriptions>
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_yDugUFOqEe2NKN60v8idTQ" routingStyle="manhattan">
+          <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_yDugUVOqEe2NKN60v8idTQ" showIcon="false" labelExpression="service:render">
+            <labelFormat>bold</labelFormat>
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </centerLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_yDugUlOqEe2NKN60v8idTQ" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+          </endLabelStyleDescription>
+        </computedStyleDescriptions>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yDDK4FOqEe2NKN60v8idTQ" name="StateMachine" tooltipText="" outgoingEdges="_yDkIQFOqEe2NKN60v8idTQ _yDsEEFOqEe2NKN60v8idTQ _yDsrJlOqEe2NKN60v8idTQ _yDt5QFOqEe2NKN60v8idTQ" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//StateMachine"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//StateMachine"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yDEZAFOqEe2NKN60v8idTQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_yDXT8FOqEe2NKN60v8idTQ" name="name : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="statemachine.ecore#//StateMachine/name"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="statemachine.ecore#//StateMachine/name"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_yDcMcFOqEe2NKN60v8idTQ" labelAlignment="LEFT" description="_yDYiEFOqEe2NKN60v8idTQ">
+          <labelFormat>bold</labelFormat>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yDFAEFOqEe2NKN60v8idTQ" name="State" tooltipText="" incomingEdges="_yDt5R1OqEe2NKN60v8idTQ _yDvHYFOqEe2NKN60v8idTQ _yD4RU1OqEe2NKN60v8idTQ _yD44Y1OqEe2NKN60v8idTQ _yD5fc1OqEe2NKN60v8idTQ" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//State"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//State"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yDFnIFOqEe2NKN60v8idTQ" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+        <labelFormat>italic</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_yDczgFOqEe2NKN60v8idTQ" name="name : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="statemachine.ecore#//State/name"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="statemachine.ecore#//State/name"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_yDdakFOqEe2NKN60v8idTQ" labelAlignment="LEFT" description="_yDYiEFOqEe2NKN60v8idTQ">
+          <labelFormat>bold</labelFormat>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yDG1QFOqEe2NKN60v8idTQ" name="Transition" tooltipText="" outgoingEdges="_yDt5R1OqEe2NKN60v8idTQ _yDvHYFOqEe2NKN60v8idTQ _yDvuc1OqEe2NKN60v8idTQ _yDwVhlOqEe2NKN60v8idTQ _yDxjoFOqEe2NKN60v8idTQ" incomingEdges="_yDt5QFOqEe2NKN60v8idTQ" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//Transition"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//Transition"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yDHcUFOqEe2NKN60v8idTQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yDIDYFOqEe2NKN60v8idTQ" name="Trigger" tooltipText="" outgoingEdges="_yD1OAFOqEe2NKN60v8idTQ" incomingEdges="_yDvuc1OqEe2NKN60v8idTQ" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//Trigger"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//Trigger"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yDIDYVOqEe2NKN60v8idTQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yDIqcVOqEe2NKN60v8idTQ" name="Guard" tooltipText="" outgoingEdges="_yD3DM1OqEe2NKN60v8idTQ" incomingEdges="_yDwVhlOqEe2NKN60v8idTQ" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//Guard"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//Guard"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yDJRgFOqEe2NKN60v8idTQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yDJ4kFOqEe2NKN60v8idTQ" name="Action" tooltipText="" outgoingEdges="_yD3qQ1OqEe2NKN60v8idTQ" incomingEdges="_yDxjoFOqEe2NKN60v8idTQ _yDyKtlOqEe2NKN60v8idTQ _yDzY0FOqEe2NKN60v8idTQ _yDz_41OqEe2NKN60v8idTQ" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//Action"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//Action"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yDKfoFOqEe2NKN60v8idTQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yDLGsFOqEe2NKN60v8idTQ" name="Expression" tooltipText="" incomingEdges="_yD1OAFOqEe2NKN60v8idTQ _yD3DM1OqEe2NKN60v8idTQ _yD3qQ1OqEe2NKN60v8idTQ" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//Expression"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//Expression"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yDLGsVOqEe2NKN60v8idTQ" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+        <labelFormat>italic</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_yDeosFOqEe2NKN60v8idTQ" name="content : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="statemachine.ecore#//Expression/content"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="statemachine.ecore#//Expression/content"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_yDfPwFOqEe2NKN60v8idTQ" labelAlignment="LEFT" description="_yDYiEFOqEe2NKN60v8idTQ">
+          <labelFormat>bold</labelFormat>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yDLtwVOqEe2NKN60v8idTQ" name="InitialState" tooltipText="" outgoingEdges="_yD4RU1OqEe2NKN60v8idTQ" incomingEdges="_yDsrJlOqEe2NKN60v8idTQ" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//InitialState"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//InitialState"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yDMU0FOqEe2NKN60v8idTQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yDM74FOqEe2NKN60v8idTQ" name="FinalState" tooltipText="" outgoingEdges="_yD44Y1OqEe2NKN60v8idTQ" incomingEdges="_yDsEEFOqEe2NKN60v8idTQ" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//FinalState"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//FinalState"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yDM74VOqEe2NKN60v8idTQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_yDNi8VOqEe2NKN60v8idTQ" name="NormalState" tooltipText="" outgoingEdges="_yDyKtlOqEe2NKN60v8idTQ _yDzY0FOqEe2NKN60v8idTQ _yDz_41OqEe2NKN60v8idTQ _yD5fc1OqEe2NKN60v8idTQ" incomingEdges="_yDkIQFOqEe2NKN60v8idTQ" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//NormalState"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//NormalState"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_yDOKAFOqEe2NKN60v8idTQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDkIQFOqEe2NKN60v8idTQ" name="[0..*] states" sourceNode="_yDDK4FOqEe2NKN60v8idTQ" targetNode="_yDNi8VOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//StateMachine/states"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//StateMachine/states"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yDqO4FOqEe2NKN60v8idTQ" description="_yDmkgFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yDq18VOqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yDq18FOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDsEEFOqEe2NKN60v8idTQ" name="[0..*] finalstates" sourceNode="_yDDK4FOqEe2NKN60v8idTQ" targetNode="_yDM74FOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//StateMachine/finalstates"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//StateMachine/finalstates"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yDsrIFOqEe2NKN60v8idTQ" description="_yDmkgFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yDsrIlOqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yDsrIVOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDsrJlOqEe2NKN60v8idTQ" name="[1..1] initialstate" sourceNode="_yDDK4FOqEe2NKN60v8idTQ" targetNode="_yDLtwVOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//StateMachine/initialstate"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//StateMachine/initialstate"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yDtSM1OqEe2NKN60v8idTQ" description="_yDtSMFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yDtSNVOqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+          <labelFormat>bold</labelFormat>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yDtSNFOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDt5QFOqEe2NKN60v8idTQ" name="[0..*] transitions" sourceNode="_yDDK4FOqEe2NKN60v8idTQ" targetNode="_yDG1QFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//StateMachine/transitions"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//StateMachine/transitions"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yDt5QVOqEe2NKN60v8idTQ" description="_yDmkgFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yDt5Q1OqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yDt5QlOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDt5R1OqEe2NKN60v8idTQ" name="[1..1] from" sourceNode="_yDG1QFOqEe2NKN60v8idTQ" targetNode="_yDFAEFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//Transition/from"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//Transition/from"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yDugU1OqEe2NKN60v8idTQ" description="_yDugUFOqEe2NKN60v8idTQ" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yDugVVOqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+          <labelFormat>bold</labelFormat>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yDugVFOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDvHYFOqEe2NKN60v8idTQ" name="[1..1] to" sourceNode="_yDG1QFOqEe2NKN60v8idTQ" targetNode="_yDFAEFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//Transition/to"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//Transition/to"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yDvHYVOqEe2NKN60v8idTQ" description="_yDugUFOqEe2NKN60v8idTQ" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yDvHY1OqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+          <labelFormat>bold</labelFormat>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yDvHYlOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDvuc1OqEe2NKN60v8idTQ" name="[0..1] trigger" sourceNode="_yDG1QFOqEe2NKN60v8idTQ" targetNode="_yDIDYFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//Transition/trigger"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//Transition/trigger"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yDwVgFOqEe2NKN60v8idTQ" description="_yDmkgFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yDwVglOqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yDwVgVOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDwVhlOqEe2NKN60v8idTQ" name="[0..1] guard" sourceNode="_yDG1QFOqEe2NKN60v8idTQ" targetNode="_yDIqcVOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//Transition/guard"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//Transition/guard"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yDw8kFOqEe2NKN60v8idTQ" description="_yDmkgFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yDw8klOqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yDw8kVOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDxjoFOqEe2NKN60v8idTQ" name="[0..1] action" sourceNode="_yDG1QFOqEe2NKN60v8idTQ" targetNode="_yDJ4kFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//Transition/action"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//Transition/action"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yDyKsFOqEe2NKN60v8idTQ" description="_yDmkgFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yDyKslOqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yDyKsVOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDyKtlOqEe2NKN60v8idTQ" name="[0..1] do_" sourceNode="_yDNi8VOqEe2NKN60v8idTQ" targetNode="_yDJ4kFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//NormalState/do_"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//NormalState/do_"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yDyxwFOqEe2NKN60v8idTQ" description="_yDmkgFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yDyxwlOqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yDyxwVOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDzY0FOqEe2NKN60v8idTQ" name="[0..1] exit_" sourceNode="_yDNi8VOqEe2NKN60v8idTQ" targetNode="_yDJ4kFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//NormalState/exit_"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//NormalState/exit_"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yDzY0VOqEe2NKN60v8idTQ" description="_yDmkgFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yDzY01OqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yDzY0lOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yDz_41OqEe2NKN60v8idTQ" name="[0..1] entry_" sourceNode="_yDNi8VOqEe2NKN60v8idTQ" targetNode="_yDJ4kFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EReference" href="statemachine.ecore#//NormalState/entry_"/>
+      <semanticElements xmi:type="ecore:EReference" href="statemachine.ecore#//NormalState/entry_"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yD0m8FOqEe2NKN60v8idTQ" description="_yDmkgFOqEe2NKN60v8idTQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yD0m8lOqEe2NKN60v8idTQ" showIcon="false">
+          <customFeatures>labelSize</customFeatures>
+        </centerLabelStyle>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_yD0m8VOqEe2NKN60v8idTQ" showIcon="false" labelColor="39,76,114">
+          <customFeatures>labelSize</customFeatures>
+        </endLabelStyle>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yD1OAFOqEe2NKN60v8idTQ" sourceNode="_yDIDYFOqEe2NKN60v8idTQ" targetNode="_yDLGsFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//Trigger"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//Trigger"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yD11EFOqEe2NKN60v8idTQ" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_yD2cIFOqEe2NKN60v8idTQ" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yD2cIVOqEe2NKN60v8idTQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yD3DM1OqEe2NKN60v8idTQ" sourceNode="_yDIqcVOqEe2NKN60v8idTQ" targetNode="_yDLGsFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//Guard"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//Guard"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yD3DNFOqEe2NKN60v8idTQ" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_yD3DNVOqEe2NKN60v8idTQ" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yD3DNlOqEe2NKN60v8idTQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yD3qQ1OqEe2NKN60v8idTQ" sourceNode="_yDJ4kFOqEe2NKN60v8idTQ" targetNode="_yDLGsFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//Action"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//Action"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yD3qRFOqEe2NKN60v8idTQ" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_yD3qRVOqEe2NKN60v8idTQ" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yD3qRlOqEe2NKN60v8idTQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yD4RU1OqEe2NKN60v8idTQ" sourceNode="_yDLtwVOqEe2NKN60v8idTQ" targetNode="_yDFAEFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//InitialState"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//InitialState"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yD4RVFOqEe2NKN60v8idTQ" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_yD4RVVOqEe2NKN60v8idTQ" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yD4RVlOqEe2NKN60v8idTQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yD44Y1OqEe2NKN60v8idTQ" sourceNode="_yDM74FOqEe2NKN60v8idTQ" targetNode="_yDFAEFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//FinalState"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//FinalState"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yD44ZFOqEe2NKN60v8idTQ" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_yD44ZVOqEe2NKN60v8idTQ" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yD44ZlOqEe2NKN60v8idTQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_yD5fc1OqEe2NKN60v8idTQ" sourceNode="_yDNi8VOqEe2NKN60v8idTQ" targetNode="_yDFAEFOqEe2NKN60v8idTQ">
+      <target xmi:type="ecore:EClass" href="statemachine.ecore#//NormalState"/>
+      <semanticElements xmi:type="ecore:EClass" href="statemachine.ecore#//NormalState"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_yD6GgFOqEe2NKN60v8idTQ" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_yD6GgVOqEe2NKN60v8idTQ" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_yD6GglOqEe2NKN60v8idTQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+    </ownedDiagramElements>
+    <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+    <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_MKp30FOpEe2H3LXgl620PA"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
+    <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
+    <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
+    <target xmi:type="ecore:EPackage" href="statemachine.ecore#/"/>
+  </diagram:DSemanticDiagram>
+</xmi:XMI>
diff --git a/metamodel/swt.most.statemachine/model/statemachine.ecore b/metamodel/swt.most.statemachine/model/statemachine.ecore
new file mode 100644
index 0000000000000000000000000000000000000000..df0090b8686c64b761d651ffecead4a391c931af
--- /dev/null
+++ b/metamodel/swt.most.statemachine/model/statemachine.ecore
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="statemachine" nsURI="http://www.swt.org/most/statemachine" nsPrefix="statemachine">
+  <eClassifiers xsi:type="ecore:EClass" name="StateMachine">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        iD="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="states" upperBound="-1"
+        eType="#//NormalState" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="finalstates" upperBound="-1"
+        eType="#//FinalState" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="initialstate" lowerBound="1"
+        eType="#//InitialState" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="transitions" upperBound="-1"
+        eType="#//Transition" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="State" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        iD="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Transition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="from" lowerBound="1" eType="#//State"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="to" lowerBound="1" eType="#//State"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="trigger" eType="#//Trigger"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="guard" eType="#//Guard"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="action" eType="#//Action"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Trigger" eSuperTypes="#//Expression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Guard" eSuperTypes="#//Expression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Action" eSuperTypes="#//Expression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Expression" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="content" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="InitialState" eSuperTypes="#//State"/>
+  <eClassifiers xsi:type="ecore:EClass" name="FinalState" eSuperTypes="#//State"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NormalState" eSuperTypes="#//State">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="do_" eType="#//Action"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exit_" eType="#//Action"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="entry_" eType="#//Action"
+        containment="true"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/metamodel/swt.most.statemachine/model/statemachine.genmodel b/metamodel/swt.most.statemachine/model/statemachine.genmodel
new file mode 100644
index 0000000000000000000000000000000000000000..1aab0aeeee7779dc0bfbac79462164951e3b2bfe
--- /dev/null
+++ b/metamodel/swt.most.statemachine/model/statemachine.genmodel
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel"
+    modelDirectory="/swt.most.statemachine/src-gen" creationIcons="false"
+    editDirectory="/swt.most.statemachine.edit/src-gen" editorDirectory="/swt.most.statemachine.editor/src-gen"
+    modelPluginID="swt.most.statemachine" modelName="Statemachine" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    codeFormatting="true" importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0"
+    copyrightFields="false" operationReflection="true" importOrganizing="true">
+  <foreignModel>statemachine.ecore</foreignModel>
+  <testsDirectory xsi:nil="true"/>
+  <genPackages prefix="Statemachine" basePackage="swt.most" disposableProviderFactory="true"
+      ecorePackage="statemachine.ecore#/">
+    <genClasses ecoreClass="statemachine.ecore#//StateMachine">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute statemachine.ecore#//StateMachine/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference statemachine.ecore#//StateMachine/states"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference statemachine.ecore#//StateMachine/finalstates"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference statemachine.ecore#//StateMachine/initialstate"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference statemachine.ecore#//StateMachine/transitions"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="statemachine.ecore#//State">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute statemachine.ecore#//State/name"/>
+    </genClasses>
+    <genClasses ecoreClass="statemachine.ecore#//Transition">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference statemachine.ecore#//Transition/from"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference statemachine.ecore#//Transition/to"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference statemachine.ecore#//Transition/trigger"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference statemachine.ecore#//Transition/guard"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference statemachine.ecore#//Transition/action"/>
+    </genClasses>
+    <genClasses ecoreClass="statemachine.ecore#//Trigger"/>
+    <genClasses ecoreClass="statemachine.ecore#//Guard"/>
+    <genClasses ecoreClass="statemachine.ecore#//Action"/>
+    <genClasses image="false" ecoreClass="statemachine.ecore#//Expression">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute statemachine.ecore#//Expression/content"/>
+    </genClasses>
+    <genClasses ecoreClass="statemachine.ecore#//InitialState"/>
+    <genClasses ecoreClass="statemachine.ecore#//FinalState"/>
+    <genClasses ecoreClass="statemachine.ecore#//NormalState">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference statemachine.ecore#//NormalState/do_"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference statemachine.ecore#//NormalState/exit_"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference statemachine.ecore#//NormalState/entry_"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/metamodel/swt.most.statemachine/model/statemachine.svg b/metamodel/swt.most.statemachine/model/statemachine.svg
new file mode 100644
index 0000000000000000000000000000000000000000..55deaaee81f5c72a09a62e6ea4f36cbcc9334689
--- /dev/null
+++ b/metamodel/swt.most.statemachine/model/statemachine.svg
@@ -0,0 +1,521 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-dasharray="none" shape-rendering="auto" font-family="'Dialog'" width="1151" text-rendering="auto" fill-opacity="1" contentScriptType="text/ecmascript" color-interpolation="auto" color-rendering="auto" preserveAspectRatio="xMidYMid meet" font-size="12px" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" diagram:semanticRoot="platform:/resource/swt.most.statemachine/model/statemachine.ecore#/" viewBox="0 0 1151 635" fill="black" stroke="black" image-rendering="auto" stroke-miterlimit="10" zoomAndPan="magnify" version="1.0" stroke-linecap="square" stroke-linejoin="miter" contentStyleType="text/css" font-style="normal" height="635" stroke-width="1" stroke-dashoffset="0" font-weight="normal" stroke-opacity="1">
+    <!--Generated by the Batik Graphics2D SVG Generator-->
+    <defs id="genericDefs"/>
+    <g>
+        <defs id="defs1">
+            <linearGradient x1="113" x2="255" y1="12" gradientUnits="userSpaceOnUse" y2="132" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient1" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="467" x2="586" y1="462" gradientUnits="userSpaceOnUse" y2="570" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient2" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(228,228,228)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="814" x2="932" y1="462" gradientUnits="userSpaceOnUse" y2="570" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient3" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="539" x2="657" y1="234" gradientUnits="userSpaceOnUse" y2="342" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient4" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="719" x2="837" y1="228" gradientUnits="userSpaceOnUse" y2="336" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient5" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="893" x2="1011" y1="228" gradientUnits="userSpaceOnUse" y2="336" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient6" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="419" x2="551" y1="57" gradientUnits="userSpaceOnUse" y2="172" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient7" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(228,228,228)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="35" x2="153" y1="306" gradientUnits="userSpaceOnUse" y2="414" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient8" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="167" x2="285" y1="306" gradientUnits="userSpaceOnUse" y2="414" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient9" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="302" x2="420" y1="306" gradientUnits="userSpaceOnUse" y2="414" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient10" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="white" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,252,216)" offset="100%"/>
+            </linearGradient>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
+                <path d="M112 22 L258 22 L258 124 L112 124 L112 22 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
+                <path d="M112 22 L256 22 L256 122 L112 122 L112 22 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath3">
+                <path d="M134 27 L233 27 L233 46 L134 46 L134 27 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4">
+                <path d="M134 27 L236 27 L236 46 L134 46 L134 27 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath5">
+                <path d="M117 51 L251 51 L251 70 L117 70 L117 51 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath6">
+                <path d="M117 51 L253 51 L253 70 L117 70 L117 51 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath7">
+                <path d="M113 49 L255 49 L255 121 L113 121 L113 49 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath8">
+                <path d="M466 466 L589 466 L589 568 L466 568 L466 466 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath9">
+                <path d="M466 466 L587 466 L587 566 L466 566 L466 466 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath10">
+                <path d="M502 471 L550 471 L550 490 L502 490 L502 471 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath11">
+                <path d="M502 471 L552 471 L552 490 L502 490 L502 471 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath12">
+                <path d="M471 495 L582 495 L582 514 L471 514 L471 495 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath13">
+                <path d="M471 495 L585 495 L585 514 L471 514 L471 495 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath14">
+                <path d="M467 493 L586 493 L586 565 L467 565 L467 493 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath15">
+                <path d="M813 466 L935 466 L935 568 L813 568 L813 466 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath16">
+                <path d="M813 466 L933 466 L933 566 L813 566 L813 466 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath17">
+                <path d="M834 471 L911 471 L911 490 L834 490 L834 471 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath18">
+                <path d="M834 471 L913 471 L913 490 L834 490 L834 471 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath19">
+                <path d="M814 493 L932 493 L932 565 L814 565 L814 493 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath20">
+                <path d="M538 238 L660 238 L660 340 L538 340 L538 238 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath21">
+                <path d="M538 238 L658 238 L658 338 L538 338 L538 238 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath22">
+                <path d="M566 243 L629 243 L629 262 L566 262 L566 243 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath23">
+                <path d="M566 243 L632 243 L632 262 L566 262 L566 243 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath24">
+                <path d="M539 265 L657 265 L657 337 L539 337 L539 265 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath25">
+                <path d="M718 232 L840 232 L840 334 L718 334 L718 232 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath26">
+                <path d="M718 232 L838 232 L838 332 L718 332 L718 232 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath27">
+                <path d="M749 237 L806 237 L806 256 L749 256 L749 237 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath28">
+                <path d="M749 237 L809 237 L809 256 L749 256 L749 237 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath29">
+                <path d="M719 259 L837 259 L837 331 L719 331 L719 259 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath30">
+                <path d="M892 232 L1014 232 L1014 334 L892 334 L892 232 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath31">
+                <path d="M892 232 L1012 232 L1012 332 L892 332 L892 232 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath32">
+                <path d="M923 237 L980 237 L980 256 L923 256 L923 237 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath33">
+                <path d="M923 237 L983 237 L983 256 L923 256 L923 237 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath34">
+                <path d="M893 259 L1011 259 L1011 331 L893 331 L893 259 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath35">
+                <path d="M418 64 L554 64 L554 166 L418 166 L418 64 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath36">
+                <path d="M418 64 L552 64 L552 164 L418 164 L418 64 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath37">
+                <path d="M446 69 L524 69 L524 88 L446 88 L446 69 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath38">
+                <path d="M446 69 L526 69 L526 88 L446 88 L446 69 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath39">
+                <path d="M423 93 L547 93 L547 112 L423 112 L423 93 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath40">
+                <path d="M423 93 L550 93 L550 112 L423 112 L423 93 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath41">
+                <path d="M419 91 L551 91 L551 163 L419 163 L419 91 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath42">
+                <path d="M34 310 L156 310 L156 412 L34 412 L34 310 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath43">
+                <path d="M34 310 L154 310 L154 410 L34 410 L34 310 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath44">
+                <path d="M54 315 L134 315 L134 334 L54 334 L54 315 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath45">
+                <path d="M54 315 L136 315 L136 334 L54 334 L54 315 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath46">
+                <path d="M35 337 L153 337 L153 409 L35 409 L35 337 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath47">
+                <path d="M166 310 L288 310 L288 412 L166 412 L166 310 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath48">
+                <path d="M166 310 L286 310 L286 410 L166 410 L166 310 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath49">
+                <path d="M188 315 L264 315 L264 334 L188 334 L188 315 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath50">
+                <path d="M188 315 L266 315 L266 334 L188 334 L188 315 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath51">
+                <path d="M167 337 L285 337 L285 409 L167 409 L167 337 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath52">
+                <path d="M301 310 L423 310 L423 412 L301 412 L301 310 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath53">
+                <path d="M301 310 L421 310 L421 410 L301 410 L301 310 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath54">
+                <path d="M314 315 L408 315 L408 334 L314 334 L314 315 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath55">
+                <path d="M314 315 L411 315 L411 334 L314 334 L314 315 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath56">
+                <path d="M302 337 L420 337 L420 409 L302 409 L302 337 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath57">
+                <path d="M-1 -1 L1152 -1 L1152 636 L-1 636 L-1 -1 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath58">
+                <path d="M370 272 L438 272 L438 291 L370 291 L370 272 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath59">
+                <path d="M227 120 L236 120 L236 135 L227 135 L227 120 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath60">
+                <path d="M356 303 L365 303 L365 313 L356 313 L356 303 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath61">
+                <path d="M196 274 L288 274 L288 293 L196 293 L196 274 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath62">
+                <path d="M187 120 L196 120 L196 135 L187 135 L187 120 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath63">
+                <path d="M187 303 L196 303 L196 313 L187 313 L187 303 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath64">
+                <path d="M22 278 L128 278 L128 297 L22 297 L22 278 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath65">
+                <path d="M127 120 L136 120 L136 135 L127 135 L127 120 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath66">
+                <path d="M127 303 L136 303 L136 313 L127 313 L127 303 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath67">
+                <path d="M347 22 L441 22 L441 41 L347 41 L347 22 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath68">
+                <path d="M254 37 L269 37 L269 46 L254 46 L254 37 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath69">
+                <path d="M870 564 L879 564 L879 574 L870 574 L870 564 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath70">
+                <path d="M666 514 L737 514 L737 533 L666 533 L666 514 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath71">
+                <path d="M585 529 L595 529 L595 538 L585 538 L585 529 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath72">
+                <path d="M682 472 L735 472 L735 491 L682 491 L682 472 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath73">
+                <path d="M585 493 L595 493 L595 502 L585 502 L585 493 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath74">
+                <path d="M988 526 L1064 526 L1064 545 L988 545 L988 526 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath75">
+                <path d="M931 541 L946 541 L946 550 L931 550 L931 541 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath76">
+                <path d="M625 231 L634 231 L634 241 L625 241 L625 231 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath77">
+                <path d="M994 494 L1065 494 L1065 513 L994 513 L994 494 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath78">
+                <path d="M931 511 L946 511 L946 520 L931 520 L931 511 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath79">
+                <path d="M805 225 L814 225 L814 235 L805 235 L805 225 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath80">
+                <path d="M994 460 L1065 460 L1065 479 L994 479 L994 460 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath81">
+                <path d="M931 481 L946 481 L946 490 L931 490 L931 481 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath82">
+                <path d="M1010 279 L1020 279 L1020 288 L1010 288 L1010 279 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath83">
+                <path d="M655 346 L712 346 L712 365 L655 365 L655 346 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath84">
+                <path d="M419 361 L434 361 L434 370 L419 370 L419 361 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath85">
+                <path d="M931 330 L940 330 L940 340 L931 340 L931 330 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath86">
+                <path d="M651 364 L712 364 L712 383 L651 383 L651 364 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath87">
+                <path d="M419 379 L434 379 L434 388 L419 388 L419 379 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath88">
+                <path d="M943 330 L952 330 L952 340 L943 340 L943 330 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath89">
+                <path d="M646 382 L716 382 L716 401 L646 401 L646 382 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath90">
+                <path d="M419 397 L434 397 L434 406 L419 406 L419 397 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath91">
+                <path d="M955 330 L964 330 L964 340 L955 340 L955 330 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath92">
+                <path d="M481 162 L492 162 L492 173 L481 173 L481 162 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath93">
+                <path d="M522 458 L533 458 L533 469 L522 469 L522 458 Z"/>
+            </clipPath>
+        </defs>
+        <g font-size="13px" fill="rgb(131,122,133)" font-family="'Segoe UI'" stroke-linejoin="round" stroke="rgb(131,122,133)" stroke-width="0" stroke-miterlimit="0">
+            <rect x="114" y="24" clip-path="url(#clipPath1)" width="142" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="115" y="25" clip-path="url(#clipPath1)" width="142" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="113" y="23" clip-path="url(#clipPath2)" fill="url(#linearGradient1)" width="142" rx="4" ry="4" height="98" stroke="none"/>
+        </g>
+        <g font-size="13px" stroke-width="1.1" font-family="'Segoe UI'" stroke-linecap="butt">
+            <rect x="113" y="23" clip-path="url(#clipPath2)" fill="none" width="141" rx="4" ry="4" height="97"/>
+            <image x="135" y="28" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="154" xml:space="preserve" y="42" clip-path="url(#clipPath4)" stroke="none">StateMachine</text>
+            <image x="118" y="52" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAa0lEQVR4XmNgGAUY&#13;&#10;YG6N/n9CGF0PCphaYfj/x8+LODFIHl0PCugqMsXQhIxB8uh6UEBtjuX/7z+ugfGP&#13;&#10;n1AMYwNpkDy6HhRQlGb7PyvJHicGyaProS2QtC8j30aQZooMAIGBNQDmBYoMIQQA&#13;&#10;VHKRZGFCvOoAAAAASUVORK5CYII=" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed" font-weight="bold"/>
+            <text x="137" xml:space="preserve" y="66" clip-path="url(#clipPath6)" font-weight="bold" stroke="none">identifier : EString</text>
+            <line y2="50" fill="none" x1="114" clip-path="url(#clipPath7)" x2="254" y1="50"/>
+            <rect x="468" y="468" clip-path="url(#clipPath8)" fill="rgb(131,122,133)" width="119" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="469" y="469" clip-path="url(#clipPath8)" fill="rgb(131,122,133)" width="119" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="467" y="467" clip-path="url(#clipPath9)" fill="url(#linearGradient2)" width="119" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="467" y="467" clip-path="url(#clipPath9)" fill="none" width="118" rx="4" ry="4" height="97" stroke="rgb(125,125,125)"/>
+            <image stroke="rgb(125,125,125)" width="16" xlink:show="embed" xlink:type="simple" fill="rgb(125,125,125)" preserveAspectRatio="none" height="16" font-style="italic" x="503" y="472" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAw0lEQVR4XmP4//8/&#13;&#10;AyUYQgApZIyuCB8Ga0YHILG5Nfo4MUgJDMMNQLIdTP/4eRErxmkAMsBnwOxqA7AS&#13;&#10;GMbpgu8/rgE1QDGMDaSnV2AxAKoRJgDmL5iRgxVPLjdCNQCZA8J9pSYYzkbGIHm8&#13;&#10;BnQWmWFoQsYgebwGNOebg/2PKwxA8ngNqMux+N/U1vi/qRU7BsnjNaAyywrD2cgY&#13;&#10;JI/XgJIMGwxNyBgkj9eAglRbvGEAksdrQG6K/f+sJNwYJI/XAFIxAHIn7dCPjVWK&#13;&#10;AAAAAElFTkSuQmCC" xlink:actuate="onLoad"/>
+            <text font-style="italic" x="522" xml:space="preserve" y="486" clip-path="url(#clipPath11)" stroke="none">State</text>
+            <image x="472" y="496" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAa0lEQVR4XmNgGAUY&#13;&#10;YG6N/n9CGF0PCphaYfj/x8+LODFIHl0PCugqMsXQhIxB8uh6UEBtjuX/7z+ugfGP&#13;&#10;n1AMYwNpkDy6HhRQlGb7PyvJHicGyaProS2QtC8j30aQZooMAIGBNQDmBYoMIQQA&#13;&#10;VHKRZGFCvOoAAAAASUVORK5CYII=" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed" font-weight="bold"/>
+            <text x="491" xml:space="preserve" y="510" clip-path="url(#clipPath13)" font-weight="bold" stroke="none">name : EString</text>
+            <line clip-path="url(#clipPath14)" fill="none" x1="468" x2="585" y1="494" y2="494" stroke="rgb(125,125,125)"/>
+            <rect x="815" y="468" clip-path="url(#clipPath15)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="816" y="469" clip-path="url(#clipPath15)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="814" y="467" clip-path="url(#clipPath16)" fill="url(#linearGradient3)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="814" y="467" clip-path="url(#clipPath16)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="835" y="472" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="854" xml:space="preserve" y="486" clip-path="url(#clipPath18)" stroke="none">Transition</text>
+            <line y2="494" fill="none" x1="815" clip-path="url(#clipPath19)" x2="931" y1="494"/>
+            <rect x="540" y="240" clip-path="url(#clipPath20)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="541" y="241" clip-path="url(#clipPath20)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="539" y="239" clip-path="url(#clipPath21)" fill="url(#linearGradient4)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="539" y="239" clip-path="url(#clipPath21)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="567" y="244" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="586" xml:space="preserve" y="258" clip-path="url(#clipPath23)" stroke="none">Trigger</text>
+            <line y2="266" fill="none" x1="540" clip-path="url(#clipPath24)" x2="656" y1="266"/>
+            <rect x="720" y="234" clip-path="url(#clipPath25)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="721" y="235" clip-path="url(#clipPath25)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="719" y="233" clip-path="url(#clipPath26)" fill="url(#linearGradient5)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="719" y="233" clip-path="url(#clipPath26)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="750" y="238" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="769" xml:space="preserve" y="252" clip-path="url(#clipPath28)" stroke="none">Guard</text>
+            <line y2="260" fill="none" x1="720" clip-path="url(#clipPath29)" x2="836" y1="260"/>
+            <rect x="894" y="234" clip-path="url(#clipPath30)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="895" y="235" clip-path="url(#clipPath30)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="893" y="233" clip-path="url(#clipPath31)" fill="url(#linearGradient6)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="893" y="233" clip-path="url(#clipPath31)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="924" y="238" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="943" xml:space="preserve" y="252" clip-path="url(#clipPath33)" stroke="none">Action</text>
+            <line y2="260" fill="none" x1="894" clip-path="url(#clipPath34)" x2="1010" y1="260"/>
+            <rect x="420" y="66" clip-path="url(#clipPath35)" fill="rgb(131,122,133)" width="132" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="421" y="67" clip-path="url(#clipPath35)" fill="rgb(131,122,133)" width="132" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="419" y="65" clip-path="url(#clipPath36)" fill="url(#linearGradient7)" width="132" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="419" y="65" clip-path="url(#clipPath36)" fill="none" width="131" rx="4" ry="4" height="97" stroke="rgb(125,125,125)"/>
+            <image stroke="rgb(125,125,125)" width="16" xlink:show="embed" xlink:type="simple" fill="rgb(125,125,125)" preserveAspectRatio="none" height="16" font-style="italic" x="447" y="70" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAw0lEQVR4XmP4//8/&#13;&#10;AyUYQgApZIyuCB8Ga0YHILG5Nfo4MUgJDMMNQLIdTP/4eRErxmkAMsBnwOxqA7AS&#13;&#10;GMbpgu8/rgE1QDGMDaSnV2AxAKoRJgDmL5iRgxVPLjdCNQCZA8J9pSYYzkbGIHm8&#13;&#10;BnQWmWFoQsYgebwGNOebg/2PKwxA8ngNqMux+N/U1vi/qRU7BsnjNaAyywrD2cgY&#13;&#10;JI/XgJIMGwxNyBgkj9eAglRbvGEAksdrQG6K/f+sJNwYJI/XAFIxAHIn7dCPjVWK&#13;&#10;AAAAAElFTkSuQmCC" xlink:actuate="onLoad"/>
+            <text font-style="italic" x="466" xml:space="preserve" y="84" clip-path="url(#clipPath38)" stroke="none">Expression</text>
+            <image x="424" y="94" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAa0lEQVR4XmNgGAUY&#13;&#10;YG6N/n9CGF0PCphaYfj/x8+LODFIHl0PCugqMsXQhIxB8uh6UEBtjuX/7z+ugfGP&#13;&#10;n1AMYwNpkDy6HhRQlGb7PyvJHicGyaProS2QtC8j30aQZooMAIGBNQDmBYoMIQQA&#13;&#10;VHKRZGFCvOoAAAAASUVORK5CYII=" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed" font-weight="bold"/>
+            <text x="443" xml:space="preserve" y="108" clip-path="url(#clipPath40)" font-weight="bold" stroke="none">content : EString</text>
+            <line clip-path="url(#clipPath41)" fill="none" x1="420" x2="550" y1="92" y2="92" stroke="rgb(125,125,125)"/>
+            <rect x="36" y="312" clip-path="url(#clipPath42)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="37" y="313" clip-path="url(#clipPath42)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="35" y="311" clip-path="url(#clipPath43)" fill="url(#linearGradient8)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="35" y="311" clip-path="url(#clipPath43)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="55" y="316" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="74" xml:space="preserve" y="330" clip-path="url(#clipPath45)" stroke="none">InitialState</text>
+            <line y2="338" fill="none" x1="36" clip-path="url(#clipPath46)" x2="152" y1="338"/>
+            <rect x="168" y="312" clip-path="url(#clipPath47)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="169" y="313" clip-path="url(#clipPath47)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="167" y="311" clip-path="url(#clipPath48)" fill="url(#linearGradient9)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="167" y="311" clip-path="url(#clipPath48)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="189" y="316" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="208" xml:space="preserve" y="330" clip-path="url(#clipPath50)" stroke="none">FinalState</text>
+            <line y2="338" fill="none" x1="168" clip-path="url(#clipPath51)" x2="284" y1="338"/>
+            <rect x="303" y="312" clip-path="url(#clipPath52)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="304" y="313" clip-path="url(#clipPath52)" fill="rgb(131,122,133)" width="118" rx="4" opacity="0.255" ry="4" height="98" stroke="none"/>
+            <rect x="302" y="311" clip-path="url(#clipPath53)" fill="url(#linearGradient10)" width="118" rx="4" ry="4" height="98" stroke="none"/>
+            <rect x="302" y="311" clip-path="url(#clipPath53)" fill="none" width="117" rx="4" ry="4" height="97"/>
+            <image x="315" y="316" width="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAsklEQVR4XqWQ0QoB&#13;&#10;QRSG941sEhJ5F1HaViRCpKwoN25cUFI8khuvYvbq8IuaOuaftr34mmm+ztdpAhEJ&#13;&#10;8qAesqIeLouC+PAGTHp34g2c56EasoGngeM0lKd5fDDpl9/9fcLTwGFSlNsplqsD&#13;&#10;eBrYj0tqbRt4GtgNy2rIBp4G1v0K/QN4GljGVUm2K0k2/4GngVlUU2vbwNPAqFtX&#13;&#10;QzbwNDDoNOgfwNNAr92UqOUGngay8gIKdwdeFkAbDAAAAABJRU5ErkJggg==" xlink:type="simple" xlink:actuate="onLoad" height="16" preserveAspectRatio="none" xlink:show="embed"/>
+            <text x="334" xml:space="preserve" y="330" clip-path="url(#clipPath55)" stroke="none">NormalState</text>
+            <line y2="338" fill="none" x1="303" clip-path="url(#clipPath56)" x2="419" y1="338"/>
+            <line y2="239" fill="none" x1="231" clip-path="url(#clipPath57)" x2="231" y1="121"/>
+            <line y2="239" fill="none" x1="231" clip-path="url(#clipPath57)" x2="360" y1="239"/>
+            <line y2="311" fill="none" x1="360" clip-path="url(#clipPath57)" x2="360" y1="239"/>
+            <text x="371" xml:space="preserve" y="287" clip-path="url(#clipPath58)" stroke="none">[0..*] states</text>
+            <polygon points=" 231 121 234 127 231 133 228 127" clip-path="url(#clipPath59)" stroke="none"/>
+            <polygon fill="none" points=" 231 121 234 127 231 133 228 127" clip-path="url(#clipPath59)"/>
+            <line y2="311" fill="none" x1="357" clip-path="url(#clipPath60)" x2="360" y1="304"/>
+            <line y2="304" fill="none" x1="360" clip-path="url(#clipPath60)" x2="363" y1="311"/>
+            <line y2="311" fill="none" x1="191" clip-path="url(#clipPath57)" x2="191" y1="121"/>
+            <text x="197" xml:space="preserve" y="289" clip-path="url(#clipPath61)" stroke="none">[0..*] finalstates</text>
+            <polygon points=" 191 121 194 127 191 133 188 127" clip-path="url(#clipPath62)" stroke="none"/>
+            <polygon fill="none" points=" 191 121 194 127 191 133 188 127" clip-path="url(#clipPath62)"/>
+            <line y2="311" fill="none" x1="188" clip-path="url(#clipPath63)" x2="191" y1="304"/>
+            <line y2="304" fill="none" x1="191" clip-path="url(#clipPath63)" x2="194" y1="311"/>
+            <line y2="311" fill="none" x1="131" clip-path="url(#clipPath57)" x2="131" y1="121"/>
+            <text x="23" xml:space="preserve" y="293" clip-path="url(#clipPath64)" font-weight="bold" stroke="none">[1..1] initialstate</text>
+            <polygon points=" 131 121 134 127 131 133 128 127" clip-path="url(#clipPath65)" stroke="none"/>
+            <polygon fill="none" points=" 131 121 134 127 131 133 128 127" clip-path="url(#clipPath65)"/>
+            <line y2="311" fill="none" x1="128" clip-path="url(#clipPath66)" x2="131" y1="304"/>
+            <line y2="304" fill="none" x1="131" clip-path="url(#clipPath66)" x2="134" y1="311"/>
+            <line y2="41" fill="none" x1="255" clip-path="url(#clipPath57)" x2="1127" y1="41"/>
+            <line y2="611" fill="none" x1="1127" clip-path="url(#clipPath57)" x2="1127" y1="41"/>
+            <line y2="611" fill="none" x1="1127" clip-path="url(#clipPath57)" x2="874" y1="611"/>
+            <line y2="565" fill="none" x1="874" clip-path="url(#clipPath57)" x2="874" y1="611"/>
+            <text x="348" xml:space="preserve" y="37" clip-path="url(#clipPath67)" stroke="none">[0..*] transitions</text>
+            <polygon points=" 255 41 261 38 267 41 261 44" clip-path="url(#clipPath68)" stroke="none"/>
+            <polygon fill="none" points=" 255 41 261 38 267 41 261 44" clip-path="url(#clipPath68)"/>
+            <line y2="565" fill="none" x1="877" clip-path="url(#clipPath69)" x2="874" y1="572"/>
+            <line y2="572" fill="none" x1="874" clip-path="url(#clipPath69)" x2="871" y1="565"/>
+            <line y2="533" fill="none" x1="814" clip-path="url(#clipPath57)" x2="586" y1="533"/>
+            <text x="667" xml:space="preserve" y="529" clip-path="url(#clipPath70)" font-weight="bold" stroke="none">[1..1] from</text>
+            <line y2="533" fill="none" x1="593" clip-path="url(#clipPath71)" x2="586" y1="530"/>
+            <line y2="536" fill="none" x1="586" clip-path="url(#clipPath71)" x2="593" y1="533"/>
+            <line y2="497" fill="none" x1="814" clip-path="url(#clipPath57)" x2="586" y1="497"/>
+            <text x="683" xml:space="preserve" y="487" clip-path="url(#clipPath72)" font-weight="bold" stroke="none">[1..1] to</text>
+            <line y2="497" fill="none" x1="593" clip-path="url(#clipPath73)" x2="586" y1="494"/>
+            <line y2="500" fill="none" x1="586" clip-path="url(#clipPath73)" x2="593" y1="497"/>
+            <line y2="545" fill="none" x1="932" clip-path="url(#clipPath57)" x2="1103" y1="545"/>
+            <line y2="203" fill="none" x1="1103" clip-path="url(#clipPath57)" x2="1103" y1="545"/>
+            <line y2="203" fill="none" x1="1103" clip-path="url(#clipPath57)" x2="629" y1="203"/>
+            <line y2="239" fill="none" x1="629" clip-path="url(#clipPath57)" x2="629" y1="203"/>
+            <text x="989" xml:space="preserve" y="541" clip-path="url(#clipPath74)" stroke="none">[0..1] trigger</text>
+            <polygon points=" 932 545 938 542 944 545 938 548" clip-path="url(#clipPath75)" stroke="none"/>
+            <polygon fill="none" points=" 932 545 938 542 944 545 938 548" clip-path="url(#clipPath75)"/>
+            <line y2="239" fill="none" x1="626" clip-path="url(#clipPath76)" x2="629" y1="232"/>
+            <line y2="232" fill="none" x1="629" clip-path="url(#clipPath76)" x2="632" y1="239"/>
+            <line y2="515" fill="none" x1="932" clip-path="url(#clipPath57)" x2="1097" y1="515"/>
+            <line y2="215" fill="none" x1="1097" clip-path="url(#clipPath57)" x2="1097" y1="515"/>
+            <line y2="215" fill="none" x1="1097" clip-path="url(#clipPath57)" x2="809" y1="215"/>
+            <line y2="233" fill="none" x1="809" clip-path="url(#clipPath57)" x2="809" y1="215"/>
+            <text x="995" xml:space="preserve" y="509" clip-path="url(#clipPath77)" stroke="none">[0..1] guard</text>
+            <polygon points=" 932 515 938 512 944 515 938 518" clip-path="url(#clipPath78)" stroke="none"/>
+            <polygon fill="none" points=" 932 515 938 512 944 515 938 518" clip-path="url(#clipPath78)"/>
+            <line y2="233" fill="none" x1="806" clip-path="url(#clipPath79)" x2="809" y1="226"/>
+            <line y2="226" fill="none" x1="809" clip-path="url(#clipPath79)" x2="812" y1="233"/>
+            <line y2="485" fill="none" x1="932" clip-path="url(#clipPath57)" x2="1091" y1="485"/>
+            <line y2="283" fill="none" x1="1091" clip-path="url(#clipPath57)" x2="1091" y1="485"/>
+            <line y2="283" fill="none" x1="1091" clip-path="url(#clipPath57)" x2="1011" y1="283"/>
+            <text x="995" xml:space="preserve" y="475" clip-path="url(#clipPath80)" stroke="none">[0..1] action</text>
+            <polygon points=" 932 485 938 482 944 485 938 488" clip-path="url(#clipPath81)" stroke="none"/>
+            <polygon fill="none" points=" 932 485 938 482 944 485 938 488" clip-path="url(#clipPath81)"/>
+            <line y2="283" fill="none" x1="1018" clip-path="url(#clipPath82)" x2="1011" y1="280"/>
+            <line y2="286" fill="none" x1="1011" clip-path="url(#clipPath82)" x2="1018" y1="283"/>
+            <line y2="365" fill="none" x1="420" clip-path="url(#clipPath57)" x2="935" y1="365"/>
+            <line y2="331" fill="none" x1="935" clip-path="url(#clipPath57)" x2="935" y1="365"/>
+            <text x="656" xml:space="preserve" y="361" clip-path="url(#clipPath83)" stroke="none">[0..1] do_</text>
+            <polygon points=" 420 365 426 362 432 365 426 368" clip-path="url(#clipPath84)" stroke="none"/>
+            <polygon fill="none" points=" 420 365 426 362 432 365 426 368" clip-path="url(#clipPath84)"/>
+            <line y2="331" fill="none" x1="938" clip-path="url(#clipPath85)" x2="935" y1="338"/>
+            <line y2="338" fill="none" x1="935" clip-path="url(#clipPath85)" x2="932" y1="331"/>
+            <line y2="383" fill="none" x1="420" clip-path="url(#clipPath57)" x2="947" y1="383"/>
+            <line y2="331" fill="none" x1="947" clip-path="url(#clipPath57)" x2="947" y1="383"/>
+            <text x="652" xml:space="preserve" y="379" clip-path="url(#clipPath86)" stroke="none">[0..1] exit_</text>
+            <polygon points=" 420 383 426 380 432 383 426 386" clip-path="url(#clipPath87)" stroke="none"/>
+            <polygon fill="none" points=" 420 383 426 380 432 383 426 386" clip-path="url(#clipPath87)"/>
+            <line y2="331" fill="none" x1="950" clip-path="url(#clipPath88)" x2="947" y1="338"/>
+            <line y2="338" fill="none" x1="947" clip-path="url(#clipPath88)" x2="944" y1="331"/>
+            <line y2="401" fill="none" x1="420" clip-path="url(#clipPath57)" x2="959" y1="401"/>
+            <line y2="331" fill="none" x1="959" clip-path="url(#clipPath57)" x2="959" y1="401"/>
+            <text x="647" xml:space="preserve" y="397" clip-path="url(#clipPath89)" stroke="none">[0..1] entry_</text>
+            <polygon points=" 420 401 426 398 432 401 426 404" clip-path="url(#clipPath90)" stroke="none"/>
+            <polygon fill="none" points=" 420 401 426 398 432 401 426 404" clip-path="url(#clipPath90)"/>
+            <line y2="331" fill="none" x1="962" clip-path="url(#clipPath91)" x2="959" y1="338"/>
+            <line y2="338" fill="none" x1="959" clip-path="url(#clipPath91)" x2="956" y1="331"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="599" x2="599" y1="239" y2="181" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="599" x2="486" y1="181" y2="181" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="486" x2="486" y1="181" y2="163" stroke="rgb(136,136,136)"/>
+            <polygon fill="white" clip-path="url(#clipPath92)" points=" 486 163 490 171 482 171" stroke="none"/>
+            <polygon fill="none" clip-path="url(#clipPath92)" points=" 486 163 490 171 482 171" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="779" x2="779" y1="233" y2="181" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="779" x2="486" y1="181" y2="181" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="486" x2="486" y1="181" y2="163" stroke="rgb(136,136,136)"/>
+            <polygon fill="white" clip-path="url(#clipPath92)" points=" 486 163 490 171 482 171" stroke="none"/>
+            <polygon fill="none" clip-path="url(#clipPath92)" points=" 486 163 490 171 482 171" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="953" x2="953" y1="233" y2="181" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="953" x2="486" y1="181" y2="181" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="486" x2="486" y1="181" y2="163" stroke="rgb(136,136,136)"/>
+            <polygon fill="white" clip-path="url(#clipPath92)" points=" 486 163 490 171 482 171" stroke="none"/>
+            <polygon fill="none" clip-path="url(#clipPath92)" points=" 486 163 490 171 482 171" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="95" x2="95" y1="409" y2="451" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="95" x2="527" y1="451" y2="451" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="527" x2="527" y1="451" y2="467" stroke="rgb(136,136,136)"/>
+            <polygon fill="white" clip-path="url(#clipPath93)" points=" 527 467 523 459 531 459" stroke="none"/>
+            <polygon fill="none" clip-path="url(#clipPath93)" points=" 527 467 523 459 531 459" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="227" x2="227" y1="409" y2="451" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="227" x2="527" y1="451" y2="451" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="527" x2="527" y1="451" y2="467" stroke="rgb(136,136,136)"/>
+            <polygon fill="white" clip-path="url(#clipPath93)" points=" 527 467 523 459 531 459" stroke="none"/>
+            <polygon fill="none" clip-path="url(#clipPath93)" points=" 527 467 523 459 531 459" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="362" x2="362" y1="409" y2="451" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="362" x2="527" y1="451" y2="451" stroke="rgb(136,136,136)"/>
+            <line clip-path="url(#clipPath57)" fill="none" x1="527" x2="527" y1="451" y2="467" stroke="rgb(136,136,136)"/>
+            <polygon fill="white" clip-path="url(#clipPath93)" points=" 527 467 523 459 531 459" stroke="none"/>
+            <polygon fill="none" clip-path="url(#clipPath93)" points=" 527 467 523 459 531 459" stroke="rgb(136,136,136)"/>
+        </g>
+    </g>
+</svg>
diff --git a/metamodel/swt.most.statemachine/plugin.properties b/metamodel/swt.most.statemachine/plugin.properties
new file mode 100644
index 0000000000000000000000000000000000000000..d7a33a421c5314bc9f173538c94153cdbdb1bc12
--- /dev/null
+++ b/metamodel/swt.most.statemachine/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = swt.most.statemachine
+providerName = www.example.org
diff --git a/metamodel/swt.most.statemachine/plugin.xml b/metamodel/swt.most.statemachine/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..487605c81d3679922df19ec121218262b86d3ba4
--- /dev/null
+++ b/metamodel/swt.most.statemachine/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated statemachine -->
+      <package
+            uri="http://www.swt.org/most/statemachine"
+            class="swt.most.statemachine.StatemachinePackage"
+            genModel="model/statemachine.genmodel"/>
+   </extension>
+
+</plugin>
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Action.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Action.java
new file mode 100644
index 0000000000000000000000000000000000000000..409cd8b453526ee15075b20a96bfb0f7bda04476
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Action.java
@@ -0,0 +1,16 @@
+/**
+ */
+package swt.most.statemachine;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Action</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see swt.most.statemachine.StatemachinePackage#getAction()
+ * @model
+ * @generated
+ */
+public interface Action extends Expression {
+} // Action
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Expression.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Expression.java
new file mode 100644
index 0000000000000000000000000000000000000000..271b7a38756aefcd6eee08051599d49910169945
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Expression.java
@@ -0,0 +1,46 @@
+/**
+ */
+package swt.most.statemachine;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.statemachine.Expression#getContent <em>Content</em>}</li>
+ * </ul>
+ *
+ * @see swt.most.statemachine.StatemachinePackage#getExpression()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Expression extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Content</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Content</em>' attribute.
+	 * @see #setContent(String)
+	 * @see swt.most.statemachine.StatemachinePackage#getExpression_Content()
+	 * @model required="true"
+	 * @generated
+	 */
+	String getContent();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.Expression#getContent <em>Content</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Content</em>' attribute.
+	 * @see #getContent()
+	 * @generated
+	 */
+	void setContent(String value);
+
+} // Expression
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/FinalState.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/FinalState.java
new file mode 100644
index 0000000000000000000000000000000000000000..a716cd4f5a1b8ec45322f521b73bd352416db4d5
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/FinalState.java
@@ -0,0 +1,16 @@
+/**
+ */
+package swt.most.statemachine;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Final State</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see swt.most.statemachine.StatemachinePackage#getFinalState()
+ * @model
+ * @generated
+ */
+public interface FinalState extends State {
+} // FinalState
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Guard.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Guard.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e518c2ebb6ab85068e38d52ca7fa2fd735ee427
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Guard.java
@@ -0,0 +1,16 @@
+/**
+ */
+package swt.most.statemachine;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Guard</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see swt.most.statemachine.StatemachinePackage#getGuard()
+ * @model
+ * @generated
+ */
+public interface Guard extends Expression {
+} // Guard
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/InitialState.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/InitialState.java
new file mode 100644
index 0000000000000000000000000000000000000000..876098d782c8935d9ddd422fed69e8b8fba51b9a
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/InitialState.java
@@ -0,0 +1,16 @@
+/**
+ */
+package swt.most.statemachine;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Initial State</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see swt.most.statemachine.StatemachinePackage#getInitialState()
+ * @model
+ * @generated
+ */
+public interface InitialState extends State {
+} // InitialState
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/NormalState.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/NormalState.java
new file mode 100644
index 0000000000000000000000000000000000000000..f7b47cfcf14e6d2f3399b7d2e8d5850edc764751
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/NormalState.java
@@ -0,0 +1,90 @@
+/**
+ */
+package swt.most.statemachine;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Normal State</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.statemachine.NormalState#getDo_ <em>Do </em>}</li>
+ *   <li>{@link swt.most.statemachine.NormalState#getExit_ <em>Exit </em>}</li>
+ *   <li>{@link swt.most.statemachine.NormalState#getEntry_ <em>Entry </em>}</li>
+ * </ul>
+ *
+ * @see swt.most.statemachine.StatemachinePackage#getNormalState()
+ * @model
+ * @generated
+ */
+public interface NormalState extends State {
+	/**
+	 * Returns the value of the '<em><b>Do </b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Do </em>' containment reference.
+	 * @see #setDo_(Action)
+	 * @see swt.most.statemachine.StatemachinePackage#getNormalState_Do_()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Action getDo_();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.NormalState#getDo_ <em>Do </em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Do </em>' containment reference.
+	 * @see #getDo_()
+	 * @generated
+	 */
+	void setDo_(Action value);
+
+	/**
+	 * Returns the value of the '<em><b>Exit </b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Exit </em>' containment reference.
+	 * @see #setExit_(Action)
+	 * @see swt.most.statemachine.StatemachinePackage#getNormalState_Exit_()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Action getExit_();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.NormalState#getExit_ <em>Exit </em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Exit </em>' containment reference.
+	 * @see #getExit_()
+	 * @generated
+	 */
+	void setExit_(Action value);
+
+	/**
+	 * Returns the value of the '<em><b>Entry </b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Entry </em>' containment reference.
+	 * @see #setEntry_(Action)
+	 * @see swt.most.statemachine.StatemachinePackage#getNormalState_Entry_()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Action getEntry_();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.NormalState#getEntry_ <em>Entry </em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Entry </em>' containment reference.
+	 * @see #getEntry_()
+	 * @generated
+	 */
+	void setEntry_(Action value);
+
+} // NormalState
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/State.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/State.java
new file mode 100644
index 0000000000000000000000000000000000000000..7a9e141a9773cdba38b5987c7a265b2c8edb3e5c
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/State.java
@@ -0,0 +1,46 @@
+/**
+ */
+package swt.most.statemachine;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>State</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.statemachine.State#getName <em>Name</em>}</li>
+ * </ul>
+ *
+ * @see swt.most.statemachine.StatemachinePackage#getState()
+ * @model abstract="true"
+ * @generated
+ */
+public interface State extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see swt.most.statemachine.StatemachinePackage#getState_Name()
+	 * @model id="true" required="true"
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.State#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+} // State
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/StateMachine.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/StateMachine.java
new file mode 100644
index 0000000000000000000000000000000000000000..13f1daac9c0e2a457ac623474190918abf8593e2
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/StateMachine.java
@@ -0,0 +1,110 @@
+/**
+ */
+package swt.most.statemachine;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>State Machine</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.statemachine.StateMachine#getName <em>Name</em>}</li>
+ *   <li>{@link swt.most.statemachine.StateMachine#getStates <em>States</em>}</li>
+ *   <li>{@link swt.most.statemachine.StateMachine#getFinalstates <em>Finalstates</em>}</li>
+ *   <li>{@link swt.most.statemachine.StateMachine#getInitialstate <em>Initialstate</em>}</li>
+ *   <li>{@link swt.most.statemachine.StateMachine#getTransitions <em>Transitions</em>}</li>
+ * </ul>
+ *
+ * @see swt.most.statemachine.StatemachinePackage#getStateMachine()
+ * @model
+ * @generated
+ */
+public interface StateMachine extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see swt.most.statemachine.StatemachinePackage#getStateMachine_Name()
+	 * @model id="true" required="true"
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.StateMachine#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>States</b></em>' containment reference list.
+	 * The list contents are of type {@link swt.most.statemachine.NormalState}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>States</em>' containment reference list.
+	 * @see swt.most.statemachine.StatemachinePackage#getStateMachine_States()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<NormalState> getStates();
+
+	/**
+	 * Returns the value of the '<em><b>Finalstates</b></em>' containment reference list.
+	 * The list contents are of type {@link swt.most.statemachine.FinalState}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Finalstates</em>' containment reference list.
+	 * @see swt.most.statemachine.StatemachinePackage#getStateMachine_Finalstates()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<FinalState> getFinalstates();
+
+	/**
+	 * Returns the value of the '<em><b>Initialstate</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Initialstate</em>' containment reference.
+	 * @see #setInitialstate(InitialState)
+	 * @see swt.most.statemachine.StatemachinePackage#getStateMachine_Initialstate()
+	 * @model containment="true" required="true"
+	 * @generated
+	 */
+	InitialState getInitialstate();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.StateMachine#getInitialstate <em>Initialstate</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Initialstate</em>' containment reference.
+	 * @see #getInitialstate()
+	 * @generated
+	 */
+	void setInitialstate(InitialState value);
+
+	/**
+	 * Returns the value of the '<em><b>Transitions</b></em>' containment reference list.
+	 * The list contents are of type {@link swt.most.statemachine.Transition}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Transitions</em>' containment reference list.
+	 * @see swt.most.statemachine.StatemachinePackage#getStateMachine_Transitions()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<Transition> getTransitions();
+
+} // StateMachine
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/StatemachineFactory.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/StatemachineFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..39d9f81adc5a15a91c23a91ac1762186fe0d0715
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/StatemachineFactory.java
@@ -0,0 +1,105 @@
+/**
+ */
+package swt.most.statemachine;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see swt.most.statemachine.StatemachinePackage
+ * @generated
+ */
+public interface StatemachineFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	StatemachineFactory eINSTANCE = swt.most.statemachine.impl.StatemachineFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>State Machine</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>State Machine</em>'.
+	 * @generated
+	 */
+	StateMachine createStateMachine();
+
+	/**
+	 * Returns a new object of class '<em>Transition</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Transition</em>'.
+	 * @generated
+	 */
+	Transition createTransition();
+
+	/**
+	 * Returns a new object of class '<em>Trigger</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Trigger</em>'.
+	 * @generated
+	 */
+	Trigger createTrigger();
+
+	/**
+	 * Returns a new object of class '<em>Guard</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Guard</em>'.
+	 * @generated
+	 */
+	Guard createGuard();
+
+	/**
+	 * Returns a new object of class '<em>Action</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Action</em>'.
+	 * @generated
+	 */
+	Action createAction();
+
+	/**
+	 * Returns a new object of class '<em>Initial State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Initial State</em>'.
+	 * @generated
+	 */
+	InitialState createInitialState();
+
+	/**
+	 * Returns a new object of class '<em>Final State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Final State</em>'.
+	 * @generated
+	 */
+	FinalState createFinalState();
+
+	/**
+	 * Returns a new object of class '<em>Normal State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Normal State</em>'.
+	 * @generated
+	 */
+	NormalState createNormalState();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	StatemachinePackage getStatemachinePackage();
+
+} //StatemachineFactory
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/StatemachinePackage.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/StatemachinePackage.java
new file mode 100644
index 0000000000000000000000000000000000000000..2741a66e384888621e78c5847f6835fbfe998397
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/StatemachinePackage.java
@@ -0,0 +1,1038 @@
+/**
+ */
+package swt.most.statemachine;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each operation of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see swt.most.statemachine.StatemachineFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface StatemachinePackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "statemachine";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http://www.swt.org/most/statemachine";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "statemachine";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	StatemachinePackage eINSTANCE = swt.most.statemachine.impl.StatemachinePackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link swt.most.statemachine.impl.StateMachineImpl <em>State Machine</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.statemachine.impl.StateMachineImpl
+	 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getStateMachine()
+	 * @generated
+	 */
+	int STATE_MACHINE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_MACHINE__NAME = 0;
+
+	/**
+	 * The feature id for the '<em><b>States</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_MACHINE__STATES = 1;
+
+	/**
+	 * The feature id for the '<em><b>Finalstates</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_MACHINE__FINALSTATES = 2;
+
+	/**
+	 * The feature id for the '<em><b>Initialstate</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_MACHINE__INITIALSTATE = 3;
+
+	/**
+	 * The feature id for the '<em><b>Transitions</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_MACHINE__TRANSITIONS = 4;
+
+	/**
+	 * The number of structural features of the '<em>State Machine</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_MACHINE_FEATURE_COUNT = 5;
+
+	/**
+	 * The number of operations of the '<em>State Machine</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_MACHINE_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.statemachine.impl.StateImpl <em>State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.statemachine.impl.StateImpl
+	 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getState()
+	 * @generated
+	 */
+	int STATE = 1;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE__NAME = 0;
+
+	/**
+	 * The number of structural features of the '<em>State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATE_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.statemachine.impl.TransitionImpl <em>Transition</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.statemachine.impl.TransitionImpl
+	 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getTransition()
+	 * @generated
+	 */
+	int TRANSITION = 2;
+
+	/**
+	 * The feature id for the '<em><b>From</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION__FROM = 0;
+
+	/**
+	 * The feature id for the '<em><b>To</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION__TO = 1;
+
+	/**
+	 * The feature id for the '<em><b>Trigger</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION__TRIGGER = 2;
+
+	/**
+	 * The feature id for the '<em><b>Guard</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION__GUARD = 3;
+
+	/**
+	 * The feature id for the '<em><b>Action</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION__ACTION = 4;
+
+	/**
+	 * The number of structural features of the '<em>Transition</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION_FEATURE_COUNT = 5;
+
+	/**
+	 * The number of operations of the '<em>Transition</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSITION_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.statemachine.impl.ExpressionImpl <em>Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.statemachine.impl.ExpressionImpl
+	 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getExpression()
+	 * @generated
+	 */
+	int EXPRESSION = 6;
+
+	/**
+	 * The feature id for the '<em><b>Content</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXPRESSION__CONTENT = 0;
+
+	/**
+	 * The number of structural features of the '<em>Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXPRESSION_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXPRESSION_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.statemachine.impl.TriggerImpl <em>Trigger</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.statemachine.impl.TriggerImpl
+	 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getTrigger()
+	 * @generated
+	 */
+	int TRIGGER = 3;
+
+	/**
+	 * The feature id for the '<em><b>Content</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER__CONTENT = EXPRESSION__CONTENT;
+
+	/**
+	 * The number of structural features of the '<em>Trigger</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of operations of the '<em>Trigger</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER_OPERATION_COUNT = EXPRESSION_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.statemachine.impl.GuardImpl <em>Guard</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.statemachine.impl.GuardImpl
+	 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getGuard()
+	 * @generated
+	 */
+	int GUARD = 4;
+
+	/**
+	 * The feature id for the '<em><b>Content</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GUARD__CONTENT = EXPRESSION__CONTENT;
+
+	/**
+	 * The number of structural features of the '<em>Guard</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GUARD_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of operations of the '<em>Guard</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GUARD_OPERATION_COUNT = EXPRESSION_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.statemachine.impl.ActionImpl <em>Action</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.statemachine.impl.ActionImpl
+	 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getAction()
+	 * @generated
+	 */
+	int ACTION = 5;
+
+	/**
+	 * The feature id for the '<em><b>Content</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ACTION__CONTENT = EXPRESSION__CONTENT;
+
+	/**
+	 * The number of structural features of the '<em>Action</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ACTION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of operations of the '<em>Action</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ACTION_OPERATION_COUNT = EXPRESSION_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.statemachine.impl.InitialStateImpl <em>Initial State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.statemachine.impl.InitialStateImpl
+	 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getInitialState()
+	 * @generated
+	 */
+	int INITIAL_STATE = 7;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INITIAL_STATE__NAME = STATE__NAME;
+
+	/**
+	 * The number of structural features of the '<em>Initial State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INITIAL_STATE_FEATURE_COUNT = STATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of operations of the '<em>Initial State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INITIAL_STATE_OPERATION_COUNT = STATE_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.statemachine.impl.FinalStateImpl <em>Final State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.statemachine.impl.FinalStateImpl
+	 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getFinalState()
+	 * @generated
+	 */
+	int FINAL_STATE = 8;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FINAL_STATE__NAME = STATE__NAME;
+
+	/**
+	 * The number of structural features of the '<em>Final State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FINAL_STATE_FEATURE_COUNT = STATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of operations of the '<em>Final State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FINAL_STATE_OPERATION_COUNT = STATE_OPERATION_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link swt.most.statemachine.impl.NormalStateImpl <em>Normal State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see swt.most.statemachine.impl.NormalStateImpl
+	 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getNormalState()
+	 * @generated
+	 */
+	int NORMAL_STATE = 9;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NORMAL_STATE__NAME = STATE__NAME;
+
+	/**
+	 * The feature id for the '<em><b>Do </b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NORMAL_STATE__DO_ = STATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Exit </b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NORMAL_STATE__EXIT_ = STATE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Entry </b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NORMAL_STATE__ENTRY_ = STATE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Normal State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NORMAL_STATE_FEATURE_COUNT = STATE_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of operations of the '<em>Normal State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NORMAL_STATE_OPERATION_COUNT = STATE_OPERATION_COUNT + 0;
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.statemachine.StateMachine <em>State Machine</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>State Machine</em>'.
+	 * @see swt.most.statemachine.StateMachine
+	 * @generated
+	 */
+	EClass getStateMachine();
+
+	/**
+	 * Returns the meta object for the attribute '{@link swt.most.statemachine.StateMachine#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see swt.most.statemachine.StateMachine#getName()
+	 * @see #getStateMachine()
+	 * @generated
+	 */
+	EAttribute getStateMachine_Name();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link swt.most.statemachine.StateMachine#getStates <em>States</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>States</em>'.
+	 * @see swt.most.statemachine.StateMachine#getStates()
+	 * @see #getStateMachine()
+	 * @generated
+	 */
+	EReference getStateMachine_States();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link swt.most.statemachine.StateMachine#getFinalstates <em>Finalstates</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Finalstates</em>'.
+	 * @see swt.most.statemachine.StateMachine#getFinalstates()
+	 * @see #getStateMachine()
+	 * @generated
+	 */
+	EReference getStateMachine_Finalstates();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link swt.most.statemachine.StateMachine#getInitialstate <em>Initialstate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Initialstate</em>'.
+	 * @see swt.most.statemachine.StateMachine#getInitialstate()
+	 * @see #getStateMachine()
+	 * @generated
+	 */
+	EReference getStateMachine_Initialstate();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link swt.most.statemachine.StateMachine#getTransitions <em>Transitions</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Transitions</em>'.
+	 * @see swt.most.statemachine.StateMachine#getTransitions()
+	 * @see #getStateMachine()
+	 * @generated
+	 */
+	EReference getStateMachine_Transitions();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.statemachine.State <em>State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>State</em>'.
+	 * @see swt.most.statemachine.State
+	 * @generated
+	 */
+	EClass getState();
+
+	/**
+	 * Returns the meta object for the attribute '{@link swt.most.statemachine.State#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see swt.most.statemachine.State#getName()
+	 * @see #getState()
+	 * @generated
+	 */
+	EAttribute getState_Name();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.statemachine.Transition <em>Transition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Transition</em>'.
+	 * @see swt.most.statemachine.Transition
+	 * @generated
+	 */
+	EClass getTransition();
+
+	/**
+	 * Returns the meta object for the reference '{@link swt.most.statemachine.Transition#getFrom <em>From</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>From</em>'.
+	 * @see swt.most.statemachine.Transition#getFrom()
+	 * @see #getTransition()
+	 * @generated
+	 */
+	EReference getTransition_From();
+
+	/**
+	 * Returns the meta object for the reference '{@link swt.most.statemachine.Transition#getTo <em>To</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>To</em>'.
+	 * @see swt.most.statemachine.Transition#getTo()
+	 * @see #getTransition()
+	 * @generated
+	 */
+	EReference getTransition_To();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link swt.most.statemachine.Transition#getTrigger <em>Trigger</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Trigger</em>'.
+	 * @see swt.most.statemachine.Transition#getTrigger()
+	 * @see #getTransition()
+	 * @generated
+	 */
+	EReference getTransition_Trigger();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link swt.most.statemachine.Transition#getGuard <em>Guard</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Guard</em>'.
+	 * @see swt.most.statemachine.Transition#getGuard()
+	 * @see #getTransition()
+	 * @generated
+	 */
+	EReference getTransition_Guard();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link swt.most.statemachine.Transition#getAction <em>Action</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Action</em>'.
+	 * @see swt.most.statemachine.Transition#getAction()
+	 * @see #getTransition()
+	 * @generated
+	 */
+	EReference getTransition_Action();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.statemachine.Trigger <em>Trigger</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Trigger</em>'.
+	 * @see swt.most.statemachine.Trigger
+	 * @generated
+	 */
+	EClass getTrigger();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.statemachine.Guard <em>Guard</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Guard</em>'.
+	 * @see swt.most.statemachine.Guard
+	 * @generated
+	 */
+	EClass getGuard();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.statemachine.Action <em>Action</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Action</em>'.
+	 * @see swt.most.statemachine.Action
+	 * @generated
+	 */
+	EClass getAction();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.statemachine.Expression <em>Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Expression</em>'.
+	 * @see swt.most.statemachine.Expression
+	 * @generated
+	 */
+	EClass getExpression();
+
+	/**
+	 * Returns the meta object for the attribute '{@link swt.most.statemachine.Expression#getContent <em>Content</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Content</em>'.
+	 * @see swt.most.statemachine.Expression#getContent()
+	 * @see #getExpression()
+	 * @generated
+	 */
+	EAttribute getExpression_Content();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.statemachine.InitialState <em>Initial State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Initial State</em>'.
+	 * @see swt.most.statemachine.InitialState
+	 * @generated
+	 */
+	EClass getInitialState();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.statemachine.FinalState <em>Final State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Final State</em>'.
+	 * @see swt.most.statemachine.FinalState
+	 * @generated
+	 */
+	EClass getFinalState();
+
+	/**
+	 * Returns the meta object for class '{@link swt.most.statemachine.NormalState <em>Normal State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Normal State</em>'.
+	 * @see swt.most.statemachine.NormalState
+	 * @generated
+	 */
+	EClass getNormalState();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link swt.most.statemachine.NormalState#getDo_ <em>Do </em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Do </em>'.
+	 * @see swt.most.statemachine.NormalState#getDo_()
+	 * @see #getNormalState()
+	 * @generated
+	 */
+	EReference getNormalState_Do_();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link swt.most.statemachine.NormalState#getExit_ <em>Exit </em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Exit </em>'.
+	 * @see swt.most.statemachine.NormalState#getExit_()
+	 * @see #getNormalState()
+	 * @generated
+	 */
+	EReference getNormalState_Exit_();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link swt.most.statemachine.NormalState#getEntry_ <em>Entry </em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Entry </em>'.
+	 * @see swt.most.statemachine.NormalState#getEntry_()
+	 * @see #getNormalState()
+	 * @generated
+	 */
+	EReference getNormalState_Entry_();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	StatemachineFactory getStatemachineFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each operation of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link swt.most.statemachine.impl.StateMachineImpl <em>State Machine</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.statemachine.impl.StateMachineImpl
+		 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getStateMachine()
+		 * @generated
+		 */
+		EClass STATE_MACHINE = eINSTANCE.getStateMachine();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STATE_MACHINE__NAME = eINSTANCE.getStateMachine_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>States</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STATE_MACHINE__STATES = eINSTANCE.getStateMachine_States();
+
+		/**
+		 * The meta object literal for the '<em><b>Finalstates</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STATE_MACHINE__FINALSTATES = eINSTANCE.getStateMachine_Finalstates();
+
+		/**
+		 * The meta object literal for the '<em><b>Initialstate</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STATE_MACHINE__INITIALSTATE = eINSTANCE.getStateMachine_Initialstate();
+
+		/**
+		 * The meta object literal for the '<em><b>Transitions</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STATE_MACHINE__TRANSITIONS = eINSTANCE.getStateMachine_Transitions();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.statemachine.impl.StateImpl <em>State</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.statemachine.impl.StateImpl
+		 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getState()
+		 * @generated
+		 */
+		EClass STATE = eINSTANCE.getState();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STATE__NAME = eINSTANCE.getState_Name();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.statemachine.impl.TransitionImpl <em>Transition</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.statemachine.impl.TransitionImpl
+		 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getTransition()
+		 * @generated
+		 */
+		EClass TRANSITION = eINSTANCE.getTransition();
+
+		/**
+		 * The meta object literal for the '<em><b>From</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TRANSITION__FROM = eINSTANCE.getTransition_From();
+
+		/**
+		 * The meta object literal for the '<em><b>To</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TRANSITION__TO = eINSTANCE.getTransition_To();
+
+		/**
+		 * The meta object literal for the '<em><b>Trigger</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TRANSITION__TRIGGER = eINSTANCE.getTransition_Trigger();
+
+		/**
+		 * The meta object literal for the '<em><b>Guard</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TRANSITION__GUARD = eINSTANCE.getTransition_Guard();
+
+		/**
+		 * The meta object literal for the '<em><b>Action</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TRANSITION__ACTION = eINSTANCE.getTransition_Action();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.statemachine.impl.TriggerImpl <em>Trigger</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.statemachine.impl.TriggerImpl
+		 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getTrigger()
+		 * @generated
+		 */
+		EClass TRIGGER = eINSTANCE.getTrigger();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.statemachine.impl.GuardImpl <em>Guard</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.statemachine.impl.GuardImpl
+		 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getGuard()
+		 * @generated
+		 */
+		EClass GUARD = eINSTANCE.getGuard();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.statemachine.impl.ActionImpl <em>Action</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.statemachine.impl.ActionImpl
+		 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getAction()
+		 * @generated
+		 */
+		EClass ACTION = eINSTANCE.getAction();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.statemachine.impl.ExpressionImpl <em>Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.statemachine.impl.ExpressionImpl
+		 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getExpression()
+		 * @generated
+		 */
+		EClass EXPRESSION = eINSTANCE.getExpression();
+
+		/**
+		 * The meta object literal for the '<em><b>Content</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EXPRESSION__CONTENT = eINSTANCE.getExpression_Content();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.statemachine.impl.InitialStateImpl <em>Initial State</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.statemachine.impl.InitialStateImpl
+		 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getInitialState()
+		 * @generated
+		 */
+		EClass INITIAL_STATE = eINSTANCE.getInitialState();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.statemachine.impl.FinalStateImpl <em>Final State</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.statemachine.impl.FinalStateImpl
+		 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getFinalState()
+		 * @generated
+		 */
+		EClass FINAL_STATE = eINSTANCE.getFinalState();
+
+		/**
+		 * The meta object literal for the '{@link swt.most.statemachine.impl.NormalStateImpl <em>Normal State</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see swt.most.statemachine.impl.NormalStateImpl
+		 * @see swt.most.statemachine.impl.StatemachinePackageImpl#getNormalState()
+		 * @generated
+		 */
+		EClass NORMAL_STATE = eINSTANCE.getNormalState();
+
+		/**
+		 * The meta object literal for the '<em><b>Do </b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference NORMAL_STATE__DO_ = eINSTANCE.getNormalState_Do_();
+
+		/**
+		 * The meta object literal for the '<em><b>Exit </b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference NORMAL_STATE__EXIT_ = eINSTANCE.getNormalState_Exit_();
+
+		/**
+		 * The meta object literal for the '<em><b>Entry </b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference NORMAL_STATE__ENTRY_ = eINSTANCE.getNormalState_Entry_();
+
+	}
+
+} //StatemachinePackage
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Transition.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Transition.java
new file mode 100644
index 0000000000000000000000000000000000000000..d749bf51b4cb697af645d7faf680a04a3fb69f83
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Transition.java
@@ -0,0 +1,138 @@
+/**
+ */
+package swt.most.statemachine;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Transition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.statemachine.Transition#getFrom <em>From</em>}</li>
+ *   <li>{@link swt.most.statemachine.Transition#getTo <em>To</em>}</li>
+ *   <li>{@link swt.most.statemachine.Transition#getTrigger <em>Trigger</em>}</li>
+ *   <li>{@link swt.most.statemachine.Transition#getGuard <em>Guard</em>}</li>
+ *   <li>{@link swt.most.statemachine.Transition#getAction <em>Action</em>}</li>
+ * </ul>
+ *
+ * @see swt.most.statemachine.StatemachinePackage#getTransition()
+ * @model
+ * @generated
+ */
+public interface Transition extends EObject {
+	/**
+	 * Returns the value of the '<em><b>From</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>From</em>' reference.
+	 * @see #setFrom(State)
+	 * @see swt.most.statemachine.StatemachinePackage#getTransition_From()
+	 * @model required="true"
+	 * @generated
+	 */
+	State getFrom();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.Transition#getFrom <em>From</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>From</em>' reference.
+	 * @see #getFrom()
+	 * @generated
+	 */
+	void setFrom(State value);
+
+	/**
+	 * Returns the value of the '<em><b>To</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>To</em>' reference.
+	 * @see #setTo(State)
+	 * @see swt.most.statemachine.StatemachinePackage#getTransition_To()
+	 * @model required="true"
+	 * @generated
+	 */
+	State getTo();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.Transition#getTo <em>To</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>To</em>' reference.
+	 * @see #getTo()
+	 * @generated
+	 */
+	void setTo(State value);
+
+	/**
+	 * Returns the value of the '<em><b>Trigger</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Trigger</em>' containment reference.
+	 * @see #setTrigger(Trigger)
+	 * @see swt.most.statemachine.StatemachinePackage#getTransition_Trigger()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Trigger getTrigger();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.Transition#getTrigger <em>Trigger</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Trigger</em>' containment reference.
+	 * @see #getTrigger()
+	 * @generated
+	 */
+	void setTrigger(Trigger value);
+
+	/**
+	 * Returns the value of the '<em><b>Guard</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Guard</em>' containment reference.
+	 * @see #setGuard(Guard)
+	 * @see swt.most.statemachine.StatemachinePackage#getTransition_Guard()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Guard getGuard();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.Transition#getGuard <em>Guard</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Guard</em>' containment reference.
+	 * @see #getGuard()
+	 * @generated
+	 */
+	void setGuard(Guard value);
+
+	/**
+	 * Returns the value of the '<em><b>Action</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Action</em>' containment reference.
+	 * @see #setAction(Action)
+	 * @see swt.most.statemachine.StatemachinePackage#getTransition_Action()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Action getAction();
+
+	/**
+	 * Sets the value of the '{@link swt.most.statemachine.Transition#getAction <em>Action</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Action</em>' containment reference.
+	 * @see #getAction()
+	 * @generated
+	 */
+	void setAction(Action value);
+
+} // Transition
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Trigger.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Trigger.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ef1eaa97d349bd163f17a34c6d961cf8356bd35
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/Trigger.java
@@ -0,0 +1,16 @@
+/**
+ */
+package swt.most.statemachine;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Trigger</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see swt.most.statemachine.StatemachinePackage#getTrigger()
+ * @model
+ * @generated
+ */
+public interface Trigger extends Expression {
+} // Trigger
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/ActionImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/ActionImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..33a72fce796462459f2b1d74361cd2b8a74715c8
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/ActionImpl.java
@@ -0,0 +1,37 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import swt.most.statemachine.Action;
+import swt.most.statemachine.StatemachinePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Action</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ActionImpl extends ExpressionImpl implements Action {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ActionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StatemachinePackage.Literals.ACTION;
+	}
+
+} //ActionImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/ExpressionImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/ExpressionImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..57e6bda8aab0883c1649e7164fa1fc74cbb72b99
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/ExpressionImpl.java
@@ -0,0 +1,165 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import swt.most.statemachine.Expression;
+import swt.most.statemachine.StatemachinePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.statemachine.impl.ExpressionImpl#getContent <em>Content</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ExpressionImpl extends MinimalEObjectImpl.Container implements Expression {
+	/**
+	 * The default value of the '{@link #getContent() <em>Content</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getContent()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CONTENT_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getContent() <em>Content</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getContent()
+	 * @generated
+	 * @ordered
+	 */
+	protected String content = CONTENT_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StatemachinePackage.Literals.EXPRESSION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getContent() {
+		return content;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setContent(String newContent) {
+		String oldContent = content;
+		content = newContent;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.EXPRESSION__CONTENT, oldContent,
+					content));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StatemachinePackage.EXPRESSION__CONTENT:
+			return getContent();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StatemachinePackage.EXPRESSION__CONTENT:
+			setContent((String) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StatemachinePackage.EXPRESSION__CONTENT:
+			setContent(CONTENT_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StatemachinePackage.EXPRESSION__CONTENT:
+			return CONTENT_EDEFAULT == null ? content != null : !CONTENT_EDEFAULT.equals(content);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (content: ");
+		result.append(content);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ExpressionImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/FinalStateImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/FinalStateImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c06cf37e3515f2501cf854f420d00d35a3e4db7
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/FinalStateImpl.java
@@ -0,0 +1,37 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import swt.most.statemachine.FinalState;
+import swt.most.statemachine.StatemachinePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Final State</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class FinalStateImpl extends StateImpl implements FinalState {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FinalStateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StatemachinePackage.Literals.FINAL_STATE;
+	}
+
+} //FinalStateImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/GuardImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/GuardImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..08665fdcfbfb144ea7c26a89faaae69ee705df36
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/GuardImpl.java
@@ -0,0 +1,37 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import swt.most.statemachine.Guard;
+import swt.most.statemachine.StatemachinePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Guard</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class GuardImpl extends ExpressionImpl implements Guard {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GuardImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StatemachinePackage.Literals.GUARD;
+	}
+
+} //GuardImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/InitialStateImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/InitialStateImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..6cab99e70291abf6480b7acd9e3b42718b904488
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/InitialStateImpl.java
@@ -0,0 +1,37 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import swt.most.statemachine.InitialState;
+import swt.most.statemachine.StatemachinePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Initial State</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class InitialStateImpl extends StateImpl implements InitialState {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected InitialStateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StatemachinePackage.Literals.INITIAL_STATE;
+	}
+
+} //InitialStateImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/NormalStateImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/NormalStateImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..d8f676aa6893825e36a5177562eb0d1b097d8959
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/NormalStateImpl.java
@@ -0,0 +1,328 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import swt.most.statemachine.Action;
+import swt.most.statemachine.NormalState;
+import swt.most.statemachine.StatemachinePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Normal State</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.statemachine.impl.NormalStateImpl#getDo_ <em>Do </em>}</li>
+ *   <li>{@link swt.most.statemachine.impl.NormalStateImpl#getExit_ <em>Exit </em>}</li>
+ *   <li>{@link swt.most.statemachine.impl.NormalStateImpl#getEntry_ <em>Entry </em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class NormalStateImpl extends StateImpl implements NormalState {
+	/**
+	 * The cached value of the '{@link #getDo_() <em>Do </em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDo_()
+	 * @generated
+	 * @ordered
+	 */
+	protected Action do_;
+
+	/**
+	 * The cached value of the '{@link #getExit_() <em>Exit </em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getExit_()
+	 * @generated
+	 * @ordered
+	 */
+	protected Action exit_;
+
+	/**
+	 * The cached value of the '{@link #getEntry_() <em>Entry </em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEntry_()
+	 * @generated
+	 * @ordered
+	 */
+	protected Action entry_;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NormalStateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StatemachinePackage.Literals.NORMAL_STATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Action getDo_() {
+		return do_;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDo_(Action newDo_, NotificationChain msgs) {
+		Action oldDo_ = do_;
+		do_ = newDo_;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+					StatemachinePackage.NORMAL_STATE__DO_, oldDo_, newDo_);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDo_(Action newDo_) {
+		if (newDo_ != do_) {
+			NotificationChain msgs = null;
+			if (do_ != null)
+				msgs = ((InternalEObject) do_).eInverseRemove(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.NORMAL_STATE__DO_, null, msgs);
+			if (newDo_ != null)
+				msgs = ((InternalEObject) newDo_).eInverseAdd(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.NORMAL_STATE__DO_, null, msgs);
+			msgs = basicSetDo_(newDo_, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.NORMAL_STATE__DO_, newDo_,
+					newDo_));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Action getExit_() {
+		return exit_;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetExit_(Action newExit_, NotificationChain msgs) {
+		Action oldExit_ = exit_;
+		exit_ = newExit_;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+					StatemachinePackage.NORMAL_STATE__EXIT_, oldExit_, newExit_);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setExit_(Action newExit_) {
+		if (newExit_ != exit_) {
+			NotificationChain msgs = null;
+			if (exit_ != null)
+				msgs = ((InternalEObject) exit_).eInverseRemove(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.NORMAL_STATE__EXIT_, null, msgs);
+			if (newExit_ != null)
+				msgs = ((InternalEObject) newExit_).eInverseAdd(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.NORMAL_STATE__EXIT_, null, msgs);
+			msgs = basicSetExit_(newExit_, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.NORMAL_STATE__EXIT_, newExit_,
+					newExit_));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Action getEntry_() {
+		return entry_;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetEntry_(Action newEntry_, NotificationChain msgs) {
+		Action oldEntry_ = entry_;
+		entry_ = newEntry_;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+					StatemachinePackage.NORMAL_STATE__ENTRY_, oldEntry_, newEntry_);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEntry_(Action newEntry_) {
+		if (newEntry_ != entry_) {
+			NotificationChain msgs = null;
+			if (entry_ != null)
+				msgs = ((InternalEObject) entry_).eInverseRemove(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.NORMAL_STATE__ENTRY_, null, msgs);
+			if (newEntry_ != null)
+				msgs = ((InternalEObject) newEntry_).eInverseAdd(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.NORMAL_STATE__ENTRY_, null, msgs);
+			msgs = basicSetEntry_(newEntry_, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.NORMAL_STATE__ENTRY_, newEntry_,
+					newEntry_));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case StatemachinePackage.NORMAL_STATE__DO_:
+			return basicSetDo_(null, msgs);
+		case StatemachinePackage.NORMAL_STATE__EXIT_:
+			return basicSetExit_(null, msgs);
+		case StatemachinePackage.NORMAL_STATE__ENTRY_:
+			return basicSetEntry_(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StatemachinePackage.NORMAL_STATE__DO_:
+			return getDo_();
+		case StatemachinePackage.NORMAL_STATE__EXIT_:
+			return getExit_();
+		case StatemachinePackage.NORMAL_STATE__ENTRY_:
+			return getEntry_();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StatemachinePackage.NORMAL_STATE__DO_:
+			setDo_((Action) newValue);
+			return;
+		case StatemachinePackage.NORMAL_STATE__EXIT_:
+			setExit_((Action) newValue);
+			return;
+		case StatemachinePackage.NORMAL_STATE__ENTRY_:
+			setEntry_((Action) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StatemachinePackage.NORMAL_STATE__DO_:
+			setDo_((Action) null);
+			return;
+		case StatemachinePackage.NORMAL_STATE__EXIT_:
+			setExit_((Action) null);
+			return;
+		case StatemachinePackage.NORMAL_STATE__ENTRY_:
+			setEntry_((Action) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StatemachinePackage.NORMAL_STATE__DO_:
+			return do_ != null;
+		case StatemachinePackage.NORMAL_STATE__EXIT_:
+			return exit_ != null;
+		case StatemachinePackage.NORMAL_STATE__ENTRY_:
+			return entry_ != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //NormalStateImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StateImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StateImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..360d1b9979863d26a80eb0b9569491c50640c1ea
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StateImpl.java
@@ -0,0 +1,164 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import swt.most.statemachine.State;
+import swt.most.statemachine.StatemachinePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>State</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.statemachine.impl.StateImpl#getName <em>Name</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class StateImpl extends MinimalEObjectImpl.Container implements State {
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StatemachinePackage.Literals.STATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.STATE__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StatemachinePackage.STATE__NAME:
+			return getName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StatemachinePackage.STATE__NAME:
+			setName((String) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StatemachinePackage.STATE__NAME:
+			setName(NAME_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StatemachinePackage.STATE__NAME:
+			return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //StateImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StateMachineImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StateMachineImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..be0b08ad5fd026dab68e3cca54318194d78c1982
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StateMachineImpl.java
@@ -0,0 +1,375 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import swt.most.statemachine.FinalState;
+import swt.most.statemachine.InitialState;
+import swt.most.statemachine.NormalState;
+import swt.most.statemachine.StateMachine;
+import swt.most.statemachine.StatemachinePackage;
+import swt.most.statemachine.Transition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>State Machine</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.statemachine.impl.StateMachineImpl#getName <em>Name</em>}</li>
+ *   <li>{@link swt.most.statemachine.impl.StateMachineImpl#getStates <em>States</em>}</li>
+ *   <li>{@link swt.most.statemachine.impl.StateMachineImpl#getFinalstates <em>Finalstates</em>}</li>
+ *   <li>{@link swt.most.statemachine.impl.StateMachineImpl#getInitialstate <em>Initialstate</em>}</li>
+ *   <li>{@link swt.most.statemachine.impl.StateMachineImpl#getTransitions <em>Transitions</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class StateMachineImpl extends MinimalEObjectImpl.Container implements StateMachine {
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getStates() <em>States</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStates()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<NormalState> states;
+
+	/**
+	 * The cached value of the '{@link #getFinalstates() <em>Finalstates</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFinalstates()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<FinalState> finalstates;
+
+	/**
+	 * The cached value of the '{@link #getInitialstate() <em>Initialstate</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInitialstate()
+	 * @generated
+	 * @ordered
+	 */
+	protected InitialState initialstate;
+
+	/**
+	 * The cached value of the '{@link #getTransitions() <em>Transitions</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTransitions()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Transition> transitions;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StateMachineImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StatemachinePackage.Literals.STATE_MACHINE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.STATE_MACHINE__NAME, oldName,
+					name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<NormalState> getStates() {
+		if (states == null) {
+			states = new EObjectContainmentEList<NormalState>(NormalState.class, this,
+					StatemachinePackage.STATE_MACHINE__STATES);
+		}
+		return states;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<FinalState> getFinalstates() {
+		if (finalstates == null) {
+			finalstates = new EObjectContainmentEList<FinalState>(FinalState.class, this,
+					StatemachinePackage.STATE_MACHINE__FINALSTATES);
+		}
+		return finalstates;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public InitialState getInitialstate() {
+		return initialstate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetInitialstate(InitialState newInitialstate, NotificationChain msgs) {
+		InitialState oldInitialstate = initialstate;
+		initialstate = newInitialstate;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+					StatemachinePackage.STATE_MACHINE__INITIALSTATE, oldInitialstate, newInitialstate);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInitialstate(InitialState newInitialstate) {
+		if (newInitialstate != initialstate) {
+			NotificationChain msgs = null;
+			if (initialstate != null)
+				msgs = ((InternalEObject) initialstate).eInverseRemove(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.STATE_MACHINE__INITIALSTATE, null, msgs);
+			if (newInitialstate != null)
+				msgs = ((InternalEObject) newInitialstate).eInverseAdd(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.STATE_MACHINE__INITIALSTATE, null, msgs);
+			msgs = basicSetInitialstate(newInitialstate, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.STATE_MACHINE__INITIALSTATE,
+					newInitialstate, newInitialstate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Transition> getTransitions() {
+		if (transitions == null) {
+			transitions = new EObjectContainmentEList<Transition>(Transition.class, this,
+					StatemachinePackage.STATE_MACHINE__TRANSITIONS);
+		}
+		return transitions;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case StatemachinePackage.STATE_MACHINE__STATES:
+			return ((InternalEList<?>) getStates()).basicRemove(otherEnd, msgs);
+		case StatemachinePackage.STATE_MACHINE__FINALSTATES:
+			return ((InternalEList<?>) getFinalstates()).basicRemove(otherEnd, msgs);
+		case StatemachinePackage.STATE_MACHINE__INITIALSTATE:
+			return basicSetInitialstate(null, msgs);
+		case StatemachinePackage.STATE_MACHINE__TRANSITIONS:
+			return ((InternalEList<?>) getTransitions()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StatemachinePackage.STATE_MACHINE__NAME:
+			return getName();
+		case StatemachinePackage.STATE_MACHINE__STATES:
+			return getStates();
+		case StatemachinePackage.STATE_MACHINE__FINALSTATES:
+			return getFinalstates();
+		case StatemachinePackage.STATE_MACHINE__INITIALSTATE:
+			return getInitialstate();
+		case StatemachinePackage.STATE_MACHINE__TRANSITIONS:
+			return getTransitions();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StatemachinePackage.STATE_MACHINE__NAME:
+			setName((String) newValue);
+			return;
+		case StatemachinePackage.STATE_MACHINE__STATES:
+			getStates().clear();
+			getStates().addAll((Collection<? extends NormalState>) newValue);
+			return;
+		case StatemachinePackage.STATE_MACHINE__FINALSTATES:
+			getFinalstates().clear();
+			getFinalstates().addAll((Collection<? extends FinalState>) newValue);
+			return;
+		case StatemachinePackage.STATE_MACHINE__INITIALSTATE:
+			setInitialstate((InitialState) newValue);
+			return;
+		case StatemachinePackage.STATE_MACHINE__TRANSITIONS:
+			getTransitions().clear();
+			getTransitions().addAll((Collection<? extends Transition>) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StatemachinePackage.STATE_MACHINE__NAME:
+			setName(NAME_EDEFAULT);
+			return;
+		case StatemachinePackage.STATE_MACHINE__STATES:
+			getStates().clear();
+			return;
+		case StatemachinePackage.STATE_MACHINE__FINALSTATES:
+			getFinalstates().clear();
+			return;
+		case StatemachinePackage.STATE_MACHINE__INITIALSTATE:
+			setInitialstate((InitialState) null);
+			return;
+		case StatemachinePackage.STATE_MACHINE__TRANSITIONS:
+			getTransitions().clear();
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StatemachinePackage.STATE_MACHINE__NAME:
+			return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+		case StatemachinePackage.STATE_MACHINE__STATES:
+			return states != null && !states.isEmpty();
+		case StatemachinePackage.STATE_MACHINE__FINALSTATES:
+			return finalstates != null && !finalstates.isEmpty();
+		case StatemachinePackage.STATE_MACHINE__INITIALSTATE:
+			return initialstate != null;
+		case StatemachinePackage.STATE_MACHINE__TRANSITIONS:
+			return transitions != null && !transitions.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //StateMachineImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StatemachineFactoryImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StatemachineFactoryImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..881f4ddf9d7f9a156e8c84bc9715f96dea4cc015
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StatemachineFactoryImpl.java
@@ -0,0 +1,180 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import swt.most.statemachine.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StatemachineFactoryImpl extends EFactoryImpl implements StatemachineFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static StatemachineFactory init() {
+		try {
+			StatemachineFactory theStatemachineFactory = (StatemachineFactory) EPackage.Registry.INSTANCE
+					.getEFactory(StatemachinePackage.eNS_URI);
+			if (theStatemachineFactory != null) {
+				return theStatemachineFactory;
+			}
+		} catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new StatemachineFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StatemachineFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+		case StatemachinePackage.STATE_MACHINE:
+			return createStateMachine();
+		case StatemachinePackage.TRANSITION:
+			return createTransition();
+		case StatemachinePackage.TRIGGER:
+			return createTrigger();
+		case StatemachinePackage.GUARD:
+			return createGuard();
+		case StatemachinePackage.ACTION:
+			return createAction();
+		case StatemachinePackage.INITIAL_STATE:
+			return createInitialState();
+		case StatemachinePackage.FINAL_STATE:
+			return createFinalState();
+		case StatemachinePackage.NORMAL_STATE:
+			return createNormalState();
+		default:
+			throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StateMachine createStateMachine() {
+		StateMachineImpl stateMachine = new StateMachineImpl();
+		return stateMachine;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Transition createTransition() {
+		TransitionImpl transition = new TransitionImpl();
+		return transition;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Trigger createTrigger() {
+		TriggerImpl trigger = new TriggerImpl();
+		return trigger;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Guard createGuard() {
+		GuardImpl guard = new GuardImpl();
+		return guard;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Action createAction() {
+		ActionImpl action = new ActionImpl();
+		return action;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public InitialState createInitialState() {
+		InitialStateImpl initialState = new InitialStateImpl();
+		return initialState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FinalState createFinalState() {
+		FinalStateImpl finalState = new FinalStateImpl();
+		return finalState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NormalState createNormalState() {
+		NormalStateImpl normalState = new NormalStateImpl();
+		return normalState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StatemachinePackage getStatemachinePackage() {
+		return (StatemachinePackage) getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static StatemachinePackage getPackage() {
+		return StatemachinePackage.eINSTANCE;
+	}
+
+} //StatemachineFactoryImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StatemachinePackageImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StatemachinePackageImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..d39798863836a824db6440bd46324af8fd8a3144
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/StatemachinePackageImpl.java
@@ -0,0 +1,565 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import swt.most.statemachine.Action;
+import swt.most.statemachine.Expression;
+import swt.most.statemachine.FinalState;
+import swt.most.statemachine.Guard;
+import swt.most.statemachine.InitialState;
+import swt.most.statemachine.NormalState;
+import swt.most.statemachine.State;
+import swt.most.statemachine.StateMachine;
+import swt.most.statemachine.StatemachineFactory;
+import swt.most.statemachine.StatemachinePackage;
+import swt.most.statemachine.Transition;
+import swt.most.statemachine.Trigger;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StatemachinePackageImpl extends EPackageImpl implements StatemachinePackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stateMachineEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass transitionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass triggerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass guardEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass actionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass expressionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass initialStateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass finalStateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass normalStateEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see swt.most.statemachine.StatemachinePackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private StatemachinePackageImpl() {
+		super(eNS_URI, StatemachineFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 *
+	 * <p>This method is used to initialize {@link StatemachinePackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static StatemachinePackage init() {
+		if (isInited)
+			return (StatemachinePackage) EPackage.Registry.INSTANCE.getEPackage(StatemachinePackage.eNS_URI);
+
+		// Obtain or create and register package
+		Object registeredStatemachinePackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+		StatemachinePackageImpl theStatemachinePackage = registeredStatemachinePackage instanceof StatemachinePackageImpl
+				? (StatemachinePackageImpl) registeredStatemachinePackage
+				: new StatemachinePackageImpl();
+
+		isInited = true;
+
+		// Create package meta-data objects
+		theStatemachinePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theStatemachinePackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theStatemachinePackage.freeze();
+
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(StatemachinePackage.eNS_URI, theStatemachinePackage);
+		return theStatemachinePackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStateMachine() {
+		return stateMachineEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStateMachine_Name() {
+		return (EAttribute) stateMachineEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getStateMachine_States() {
+		return (EReference) stateMachineEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getStateMachine_Finalstates() {
+		return (EReference) stateMachineEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getStateMachine_Initialstate() {
+		return (EReference) stateMachineEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getStateMachine_Transitions() {
+		return (EReference) stateMachineEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getState() {
+		return stateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getState_Name() {
+		return (EAttribute) stateEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTransition() {
+		return transitionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTransition_From() {
+		return (EReference) transitionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTransition_To() {
+		return (EReference) transitionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTransition_Trigger() {
+		return (EReference) transitionEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTransition_Guard() {
+		return (EReference) transitionEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTransition_Action() {
+		return (EReference) transitionEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTrigger() {
+		return triggerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getGuard() {
+		return guardEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAction() {
+		return actionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getExpression() {
+		return expressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getExpression_Content() {
+		return (EAttribute) expressionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getInitialState() {
+		return initialStateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getFinalState() {
+		return finalStateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNormalState() {
+		return normalStateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getNormalState_Do_() {
+		return (EReference) normalStateEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getNormalState_Exit_() {
+		return (EReference) normalStateEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getNormalState_Entry_() {
+		return (EReference) normalStateEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StatemachineFactory getStatemachineFactory() {
+		return (StatemachineFactory) getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated)
+			return;
+		isCreated = true;
+
+		// Create classes and their features
+		stateMachineEClass = createEClass(STATE_MACHINE);
+		createEAttribute(stateMachineEClass, STATE_MACHINE__NAME);
+		createEReference(stateMachineEClass, STATE_MACHINE__STATES);
+		createEReference(stateMachineEClass, STATE_MACHINE__FINALSTATES);
+		createEReference(stateMachineEClass, STATE_MACHINE__INITIALSTATE);
+		createEReference(stateMachineEClass, STATE_MACHINE__TRANSITIONS);
+
+		stateEClass = createEClass(STATE);
+		createEAttribute(stateEClass, STATE__NAME);
+
+		transitionEClass = createEClass(TRANSITION);
+		createEReference(transitionEClass, TRANSITION__FROM);
+		createEReference(transitionEClass, TRANSITION__TO);
+		createEReference(transitionEClass, TRANSITION__TRIGGER);
+		createEReference(transitionEClass, TRANSITION__GUARD);
+		createEReference(transitionEClass, TRANSITION__ACTION);
+
+		triggerEClass = createEClass(TRIGGER);
+
+		guardEClass = createEClass(GUARD);
+
+		actionEClass = createEClass(ACTION);
+
+		expressionEClass = createEClass(EXPRESSION);
+		createEAttribute(expressionEClass, EXPRESSION__CONTENT);
+
+		initialStateEClass = createEClass(INITIAL_STATE);
+
+		finalStateEClass = createEClass(FINAL_STATE);
+
+		normalStateEClass = createEClass(NORMAL_STATE);
+		createEReference(normalStateEClass, NORMAL_STATE__DO_);
+		createEReference(normalStateEClass, NORMAL_STATE__EXIT_);
+		createEReference(normalStateEClass, NORMAL_STATE__ENTRY_);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized)
+			return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		triggerEClass.getESuperTypes().add(this.getExpression());
+		guardEClass.getESuperTypes().add(this.getExpression());
+		actionEClass.getESuperTypes().add(this.getExpression());
+		initialStateEClass.getESuperTypes().add(this.getState());
+		finalStateEClass.getESuperTypes().add(this.getState());
+		normalStateEClass.getESuperTypes().add(this.getState());
+
+		// Initialize classes, features, and operations; add parameters
+		initEClass(stateMachineEClass, StateMachine.class, "StateMachine", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getStateMachine_Name(), ecorePackage.getEString(), "name", null, 1, 1, StateMachine.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getStateMachine_States(), this.getNormalState(), null, "states", null, 0, -1, StateMachine.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getStateMachine_Finalstates(), this.getFinalState(), null, "finalstates", null, 0, -1,
+				StateMachine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+				!IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getStateMachine_Initialstate(), this.getInitialState(), null, "initialstate", null, 1, 1,
+				StateMachine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+				!IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getStateMachine_Transitions(), this.getTransition(), null, "transitions", null, 0, -1,
+				StateMachine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+				!IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(stateEClass, State.class, "State", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getState_Name(), ecorePackage.getEString(), "name", null, 1, 1, State.class, !IS_TRANSIENT,
+				!IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(transitionEClass, Transition.class, "Transition", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getTransition_From(), this.getState(), null, "from", null, 1, 1, Transition.class, !IS_TRANSIENT,
+				!IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
+				IS_ORDERED);
+		initEReference(getTransition_To(), this.getState(), null, "to", null, 1, 1, Transition.class, !IS_TRANSIENT,
+				!IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
+				IS_ORDERED);
+		initEReference(getTransition_Trigger(), this.getTrigger(), null, "trigger", null, 0, 1, Transition.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getTransition_Guard(), this.getGuard(), null, "guard", null, 0, 1, Transition.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getTransition_Action(), this.getAction(), null, "action", null, 0, 1, Transition.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(triggerEClass, Trigger.class, "Trigger", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(guardEClass, Guard.class, "Guard", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(actionEClass, Action.class, "Action", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(expressionEClass, Expression.class, "Expression", IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getExpression_Content(), ecorePackage.getEString(), "content", null, 1, 1, Expression.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(initialStateEClass, InitialState.class, "InitialState", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(finalStateEClass, FinalState.class, "FinalState", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(normalStateEClass, NormalState.class, "NormalState", !IS_ABSTRACT, !IS_INTERFACE,
+				IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getNormalState_Do_(), this.getAction(), null, "do_", null, 0, 1, NormalState.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getNormalState_Exit_(), this.getAction(), null, "exit_", null, 0, 1, NormalState.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getNormalState_Entry_(), this.getAction(), null, "entry_", null, 0, 1, NormalState.class,
+				!IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+				IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //StatemachinePackageImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/TransitionImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/TransitionImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c7c30d0d09f628cf5547389f2cfd017ae7f528d
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/TransitionImpl.java
@@ -0,0 +1,456 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import swt.most.statemachine.Action;
+import swt.most.statemachine.Guard;
+import swt.most.statemachine.State;
+import swt.most.statemachine.StatemachinePackage;
+import swt.most.statemachine.Transition;
+import swt.most.statemachine.Trigger;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Transition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link swt.most.statemachine.impl.TransitionImpl#getFrom <em>From</em>}</li>
+ *   <li>{@link swt.most.statemachine.impl.TransitionImpl#getTo <em>To</em>}</li>
+ *   <li>{@link swt.most.statemachine.impl.TransitionImpl#getTrigger <em>Trigger</em>}</li>
+ *   <li>{@link swt.most.statemachine.impl.TransitionImpl#getGuard <em>Guard</em>}</li>
+ *   <li>{@link swt.most.statemachine.impl.TransitionImpl#getAction <em>Action</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class TransitionImpl extends MinimalEObjectImpl.Container implements Transition {
+	/**
+	 * The cached value of the '{@link #getFrom() <em>From</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFrom()
+	 * @generated
+	 * @ordered
+	 */
+	protected State from;
+
+	/**
+	 * The cached value of the '{@link #getTo() <em>To</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTo()
+	 * @generated
+	 * @ordered
+	 */
+	protected State to;
+
+	/**
+	 * The cached value of the '{@link #getTrigger() <em>Trigger</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTrigger()
+	 * @generated
+	 * @ordered
+	 */
+	protected Trigger trigger;
+
+	/**
+	 * The cached value of the '{@link #getGuard() <em>Guard</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGuard()
+	 * @generated
+	 * @ordered
+	 */
+	protected Guard guard;
+
+	/**
+	 * The cached value of the '{@link #getAction() <em>Action</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAction()
+	 * @generated
+	 * @ordered
+	 */
+	protected Action action;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransitionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StatemachinePackage.Literals.TRANSITION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public State getFrom() {
+		if (from != null && from.eIsProxy()) {
+			InternalEObject oldFrom = (InternalEObject) from;
+			from = (State) eResolveProxy(oldFrom);
+			if (from != oldFrom) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StatemachinePackage.TRANSITION__FROM,
+							oldFrom, from));
+			}
+		}
+		return from;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public State basicGetFrom() {
+		return from;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFrom(State newFrom) {
+		State oldFrom = from;
+		from = newFrom;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.TRANSITION__FROM, oldFrom, from));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public State getTo() {
+		if (to != null && to.eIsProxy()) {
+			InternalEObject oldTo = (InternalEObject) to;
+			to = (State) eResolveProxy(oldTo);
+			if (to != oldTo) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StatemachinePackage.TRANSITION__TO, oldTo,
+							to));
+			}
+		}
+		return to;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public State basicGetTo() {
+		return to;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTo(State newTo) {
+		State oldTo = to;
+		to = newTo;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.TRANSITION__TO, oldTo, to));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Trigger getTrigger() {
+		return trigger;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTrigger(Trigger newTrigger, NotificationChain msgs) {
+		Trigger oldTrigger = trigger;
+		trigger = newTrigger;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+					StatemachinePackage.TRANSITION__TRIGGER, oldTrigger, newTrigger);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTrigger(Trigger newTrigger) {
+		if (newTrigger != trigger) {
+			NotificationChain msgs = null;
+			if (trigger != null)
+				msgs = ((InternalEObject) trigger).eInverseRemove(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.TRANSITION__TRIGGER, null, msgs);
+			if (newTrigger != null)
+				msgs = ((InternalEObject) newTrigger).eInverseAdd(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.TRANSITION__TRIGGER, null, msgs);
+			msgs = basicSetTrigger(newTrigger, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.TRANSITION__TRIGGER, newTrigger,
+					newTrigger));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Guard getGuard() {
+		return guard;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetGuard(Guard newGuard, NotificationChain msgs) {
+		Guard oldGuard = guard;
+		guard = newGuard;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+					StatemachinePackage.TRANSITION__GUARD, oldGuard, newGuard);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setGuard(Guard newGuard) {
+		if (newGuard != guard) {
+			NotificationChain msgs = null;
+			if (guard != null)
+				msgs = ((InternalEObject) guard).eInverseRemove(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.TRANSITION__GUARD, null, msgs);
+			if (newGuard != null)
+				msgs = ((InternalEObject) newGuard).eInverseAdd(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.TRANSITION__GUARD, null, msgs);
+			msgs = basicSetGuard(newGuard, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.TRANSITION__GUARD, newGuard,
+					newGuard));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Action getAction() {
+		return action;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetAction(Action newAction, NotificationChain msgs) {
+		Action oldAction = action;
+		action = newAction;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET,
+					StatemachinePackage.TRANSITION__ACTION, oldAction, newAction);
+			if (msgs == null)
+				msgs = notification;
+			else
+				msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAction(Action newAction) {
+		if (newAction != action) {
+			NotificationChain msgs = null;
+			if (action != null)
+				msgs = ((InternalEObject) action).eInverseRemove(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.TRANSITION__ACTION, null, msgs);
+			if (newAction != null)
+				msgs = ((InternalEObject) newAction).eInverseAdd(this,
+						EOPPOSITE_FEATURE_BASE - StatemachinePackage.TRANSITION__ACTION, null, msgs);
+			msgs = basicSetAction(newAction, msgs);
+			if (msgs != null)
+				msgs.dispatch();
+		} else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StatemachinePackage.TRANSITION__ACTION, newAction,
+					newAction));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+		case StatemachinePackage.TRANSITION__TRIGGER:
+			return basicSetTrigger(null, msgs);
+		case StatemachinePackage.TRANSITION__GUARD:
+			return basicSetGuard(null, msgs);
+		case StatemachinePackage.TRANSITION__ACTION:
+			return basicSetAction(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case StatemachinePackage.TRANSITION__FROM:
+			if (resolve)
+				return getFrom();
+			return basicGetFrom();
+		case StatemachinePackage.TRANSITION__TO:
+			if (resolve)
+				return getTo();
+			return basicGetTo();
+		case StatemachinePackage.TRANSITION__TRIGGER:
+			return getTrigger();
+		case StatemachinePackage.TRANSITION__GUARD:
+			return getGuard();
+		case StatemachinePackage.TRANSITION__ACTION:
+			return getAction();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case StatemachinePackage.TRANSITION__FROM:
+			setFrom((State) newValue);
+			return;
+		case StatemachinePackage.TRANSITION__TO:
+			setTo((State) newValue);
+			return;
+		case StatemachinePackage.TRANSITION__TRIGGER:
+			setTrigger((Trigger) newValue);
+			return;
+		case StatemachinePackage.TRANSITION__GUARD:
+			setGuard((Guard) newValue);
+			return;
+		case StatemachinePackage.TRANSITION__ACTION:
+			setAction((Action) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case StatemachinePackage.TRANSITION__FROM:
+			setFrom((State) null);
+			return;
+		case StatemachinePackage.TRANSITION__TO:
+			setTo((State) null);
+			return;
+		case StatemachinePackage.TRANSITION__TRIGGER:
+			setTrigger((Trigger) null);
+			return;
+		case StatemachinePackage.TRANSITION__GUARD:
+			setGuard((Guard) null);
+			return;
+		case StatemachinePackage.TRANSITION__ACTION:
+			setAction((Action) null);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case StatemachinePackage.TRANSITION__FROM:
+			return from != null;
+		case StatemachinePackage.TRANSITION__TO:
+			return to != null;
+		case StatemachinePackage.TRANSITION__TRIGGER:
+			return trigger != null;
+		case StatemachinePackage.TRANSITION__GUARD:
+			return guard != null;
+		case StatemachinePackage.TRANSITION__ACTION:
+			return action != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //TransitionImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/TriggerImpl.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/TriggerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..f10d4ea5032a34a890c231a88855b065ed0cf4ec
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/impl/TriggerImpl.java
@@ -0,0 +1,37 @@
+/**
+ */
+package swt.most.statemachine.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import swt.most.statemachine.StatemachinePackage;
+import swt.most.statemachine.Trigger;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Trigger</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class TriggerImpl extends ExpressionImpl implements Trigger {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TriggerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StatemachinePackage.Literals.TRIGGER;
+	}
+
+} //TriggerImpl
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/util/StatemachineAdapterFactory.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/util/StatemachineAdapterFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..5594669452be9663c0a5f0392bf90bfc0c454d8c
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/util/StatemachineAdapterFactory.java
@@ -0,0 +1,290 @@
+/**
+ */
+package swt.most.statemachine.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import swt.most.statemachine.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see swt.most.statemachine.StatemachinePackage
+ * @generated
+ */
+public class StatemachineAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static StatemachinePackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StatemachineAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = StatemachinePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject) object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StatemachineSwitch<Adapter> modelSwitch = new StatemachineSwitch<Adapter>() {
+		@Override
+		public Adapter caseStateMachine(StateMachine object) {
+			return createStateMachineAdapter();
+		}
+
+		@Override
+		public Adapter caseState(State object) {
+			return createStateAdapter();
+		}
+
+		@Override
+		public Adapter caseTransition(Transition object) {
+			return createTransitionAdapter();
+		}
+
+		@Override
+		public Adapter caseTrigger(Trigger object) {
+			return createTriggerAdapter();
+		}
+
+		@Override
+		public Adapter caseGuard(Guard object) {
+			return createGuardAdapter();
+		}
+
+		@Override
+		public Adapter caseAction(Action object) {
+			return createActionAdapter();
+		}
+
+		@Override
+		public Adapter caseExpression(Expression object) {
+			return createExpressionAdapter();
+		}
+
+		@Override
+		public Adapter caseInitialState(InitialState object) {
+			return createInitialStateAdapter();
+		}
+
+		@Override
+		public Adapter caseFinalState(FinalState object) {
+			return createFinalStateAdapter();
+		}
+
+		@Override
+		public Adapter caseNormalState(NormalState object) {
+			return createNormalStateAdapter();
+		}
+
+		@Override
+		public Adapter defaultCase(EObject object) {
+			return createEObjectAdapter();
+		}
+	};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject) target);
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.statemachine.StateMachine <em>State Machine</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.statemachine.StateMachine
+	 * @generated
+	 */
+	public Adapter createStateMachineAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.statemachine.State <em>State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.statemachine.State
+	 * @generated
+	 */
+	public Adapter createStateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.statemachine.Transition <em>Transition</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.statemachine.Transition
+	 * @generated
+	 */
+	public Adapter createTransitionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.statemachine.Trigger <em>Trigger</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.statemachine.Trigger
+	 * @generated
+	 */
+	public Adapter createTriggerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.statemachine.Guard <em>Guard</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.statemachine.Guard
+	 * @generated
+	 */
+	public Adapter createGuardAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.statemachine.Action <em>Action</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.statemachine.Action
+	 * @generated
+	 */
+	public Adapter createActionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.statemachine.Expression <em>Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.statemachine.Expression
+	 * @generated
+	 */
+	public Adapter createExpressionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.statemachine.InitialState <em>Initial State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.statemachine.InitialState
+	 * @generated
+	 */
+	public Adapter createInitialStateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.statemachine.FinalState <em>Final State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.statemachine.FinalState
+	 * @generated
+	 */
+	public Adapter createFinalStateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link swt.most.statemachine.NormalState <em>Normal State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see swt.most.statemachine.NormalState
+	 * @generated
+	 */
+	public Adapter createNormalStateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //StatemachineAdapterFactory
diff --git a/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/util/StatemachineSwitch.java b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/util/StatemachineSwitch.java
new file mode 100644
index 0000000000000000000000000000000000000000..0371d11a913f3fb93ffefb6ccbd45ee3b1ccacc3
--- /dev/null
+++ b/metamodel/swt.most.statemachine/src-gen/swt/most/statemachine/util/StatemachineSwitch.java
@@ -0,0 +1,322 @@
+/**
+ */
+package swt.most.statemachine.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import swt.most.statemachine.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see swt.most.statemachine.StatemachinePackage
+ * @generated
+ */
+public class StatemachineSwitch<T> extends Switch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static StatemachinePackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StatemachineSwitch() {
+		if (modelPackage == null) {
+			modelPackage = StatemachinePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Checks whether this is a switch for the given package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param ePackage the package in question.
+	 * @return whether this is a switch for the given package.
+	 * @generated
+	 */
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	@Override
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+		case StatemachinePackage.STATE_MACHINE: {
+			StateMachine stateMachine = (StateMachine) theEObject;
+			T result = caseStateMachine(stateMachine);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case StatemachinePackage.STATE: {
+			State state = (State) theEObject;
+			T result = caseState(state);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case StatemachinePackage.TRANSITION: {
+			Transition transition = (Transition) theEObject;
+			T result = caseTransition(transition);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case StatemachinePackage.TRIGGER: {
+			Trigger trigger = (Trigger) theEObject;
+			T result = caseTrigger(trigger);
+			if (result == null)
+				result = caseExpression(trigger);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case StatemachinePackage.GUARD: {
+			Guard guard = (Guard) theEObject;
+			T result = caseGuard(guard);
+			if (result == null)
+				result = caseExpression(guard);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case StatemachinePackage.ACTION: {
+			Action action = (Action) theEObject;
+			T result = caseAction(action);
+			if (result == null)
+				result = caseExpression(action);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case StatemachinePackage.EXPRESSION: {
+			Expression expression = (Expression) theEObject;
+			T result = caseExpression(expression);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case StatemachinePackage.INITIAL_STATE: {
+			InitialState initialState = (InitialState) theEObject;
+			T result = caseInitialState(initialState);
+			if (result == null)
+				result = caseState(initialState);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case StatemachinePackage.FINAL_STATE: {
+			FinalState finalState = (FinalState) theEObject;
+			T result = caseFinalState(finalState);
+			if (result == null)
+				result = caseState(finalState);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		case StatemachinePackage.NORMAL_STATE: {
+			NormalState normalState = (NormalState) theEObject;
+			T result = caseNormalState(normalState);
+			if (result == null)
+				result = caseState(normalState);
+			if (result == null)
+				result = defaultCase(theEObject);
+			return result;
+		}
+		default:
+			return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>State Machine</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>State Machine</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStateMachine(StateMachine object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>State</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>State</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseState(State object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Transition</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Transition</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTransition(Transition object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Trigger</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Trigger</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTrigger(Trigger object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Guard</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Guard</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseGuard(Guard object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Action</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Action</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseAction(Action object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseExpression(Expression object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Initial State</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Initial State</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseInitialState(InitialState object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Final State</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Final State</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseFinalState(FinalState object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Normal State</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Normal State</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseNormalState(NormalState object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	@Override
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //StatemachineSwitch
diff --git a/metamodel/swt.most.statemachine/src/.gitkeep b/metamodel/swt.most.statemachine/src/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..49cc8ef0e116cef009fe0bd72473a964bbd07f9b
Binary files /dev/null and b/metamodel/swt.most.statemachine/src/.gitkeep differ
diff --git a/model2model/examples-etl/.project b/model2model/examples-etl/.project
new file mode 100644
index 0000000000000000000000000000000000000000..c330d4178d8c3792ddb37d83310c23f8fd821ccb
--- /dev/null
+++ b/model2model/examples-etl/.project
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>examples-etl</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.sirius.nature.modelingproject</nature>
+	</natures>
+</projectDescription>
diff --git a/model2model/examples-etl/.settings/org.eclipse.core.resources.prefs b/model2model/examples-etl/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c
--- /dev/null
+++ b/model2model/examples-etl/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/model2model/examples-etl/petrinets/garagedoor.petrinet b/model2model/examples-etl/petrinets/garagedoor.petrinet
new file mode 100644
index 0000000000000000000000000000000000000000..7164feb9caddcc43a8437be6a11023ef23c470e9
--- /dev/null
+++ b/model2model/examples-etl/petrinets/garagedoor.petrinet
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="ASCII"?>
+<petrinet:PetriNet xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:petrinet="http://www.example.org/petrinet" name="Garage Door">
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.6" source="//@elements.0"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.6" target="//@elements.1"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.7" source="//@elements.1"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.7" target="//@elements.3"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.7" source="//@elements.8"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.7" target="//@elements.9"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.10" source="//@elements.3"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.10" target="//@elements.2"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.10" source="//@elements.11"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.10" target="//@elements.12"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.13" source="//@elements.2"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.13" target="//@elements.4"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.13" source="//@elements.14"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.13" target="//@elements.15"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.16" source="//@elements.4"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.16" target="//@elements.1"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.16" source="//@elements.17"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.16" target="//@elements.18"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.19" source="//@elements.4"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.19" target="//@elements.3"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.19" source="//@elements.20"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.19" target="//@elements.21"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.22" source="//@elements.3"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.22" target="//@elements.4"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.22" source="//@elements.23"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.22" target="//@elements.24"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.25" source="//@elements.1"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.25" target="//@elements.5"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.25" source="//@elements.26"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.27" source="//@elements.1"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.27" target="//@elements.1"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.27" source="//@elements.28"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.29" source="//@elements.4"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.29" target="//@elements.4"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.29" source="//@elements.30"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.31" source="//@elements.2"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.31" target="//@elements.2"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.31" source="//@elements.32"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.33" source="//@elements.3"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.33" target="//@elements.3"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.33" source="//@elements.34"/>
+  <elements xsi:type="petrinet:Place" identifier="initial">
+    <token/>
+  </elements>
+  <elements xsi:type="petrinet:Place" identifier="Closed"/>
+  <elements xsi:type="petrinet:Place" identifier="Open"/>
+  <elements xsi:type="petrinet:Place" identifier="Opening"/>
+  <elements xsi:type="petrinet:Place" identifier="Closing"/>
+  <elements xsi:type="petrinet:Place" identifier="final"/>
+  <elements xsi:type="petrinet:Transition" identifier="default"/>
+  <elements xsi:type="petrinet:Transition" identifier="openDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="openDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="motor.upwards"/>
+  <elements xsi:type="petrinet:Transition" identifier="default"/>
+  <elements xsi:type="petrinet:Place" identifier="stopper"/>
+  <elements xsi:type="petrinet:Place" identifier="motor.stop"/>
+  <elements xsi:type="petrinet:Transition" identifier="closeDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="closeDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="motor.downwards"/>
+  <elements xsi:type="petrinet:Transition" identifier="default"/>
+  <elements xsi:type="petrinet:Place" identifier="stopper"/>
+  <elements xsi:type="petrinet:Place" identifier="motor.stop"/>
+  <elements xsi:type="petrinet:Transition" identifier="openDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="openDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="motor.upwards"/>
+  <elements xsi:type="petrinet:Transition" identifier="closeDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="closeDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="motor.downwards"/>
+  <elements xsi:type="petrinet:Transition" identifier="default"/>
+  <elements xsi:type="petrinet:Place" identifier="shutdown"/>
+  <elements xsi:type="petrinet:Transition" identifier="closeDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="closeDoor"/>
+  <elements xsi:type="petrinet:Transition" identifier="closeDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="closeDoor"/>
+  <elements xsi:type="petrinet:Transition" identifier="openDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="openDoor"/>
+  <elements xsi:type="petrinet:Transition" identifier="openDoor"/>
+  <elements xsi:type="petrinet:Place" identifier="openDoor"/>
+</petrinet:PetriNet>
diff --git a/model2model/examples-etl/petrinets/garagedoor.svg b/model2model/examples-etl/petrinets/garagedoor.svg
new file mode 100644
index 0000000000000000000000000000000000000000..37e83b86fcddabd568aa87e24019d774c829c344
--- /dev/null
+++ b/model2model/examples-etl/petrinets/garagedoor.svg
@@ -0,0 +1,625 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-dasharray="none" shape-rendering="auto" font-family="'Dialog'" width="965" text-rendering="auto" fill-opacity="1" contentScriptType="text/ecmascript" color-interpolation="auto" color-rendering="auto" preserveAspectRatio="xMidYMid meet" font-size="12px" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" diagram:semanticRoot="platform:/resource/example/petrinets/garagedoor.petrinet#/" viewBox="0 0 965 748" fill="black" stroke="black" image-rendering="auto" stroke-miterlimit="10" zoomAndPan="magnify" version="1.0" stroke-linecap="square" stroke-linejoin="miter" contentStyleType="text/css" font-style="normal" height="748" stroke-width="1" stroke-dashoffset="0" font-weight="normal" stroke-opacity="1">
+    <!--Generated by the Batik Graphics2D SVG Generator-->
+    <defs id="genericDefs"/>
+    <g>
+        <defs id="defs1">
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
+                <path d="M18 456 L50 456 L50 488 L18 488 L18 456 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
+                <path d="M9 427 L62 427 L62 457 L9 457 L9 427 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath3">
+                <path d="M40 466 L62 466 L62 488 L40 488 L40 466 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4">
+                <path d="M198 456 L230 456 L230 488 L198 488 L198 456 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath5">
+                <path d="M229 457 L294 457 L294 487 L229 487 L229 457 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath6">
+                <path d="M875 456 L907 456 L907 488 L875 488 L875 456 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath7">
+                <path d="M906 457 L962 457 L962 487 L906 487 L906 457 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath8">
+                <path d="M539 167 L571 167 L571 199 L539 199 L539 167 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath9">
+                <path d="M516 138 L599 138 L599 168 L516 168 L516 138 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath10">
+                <path d="M539 558 L571 558 L571 590 L539 590 L539 558 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath11">
+                <path d="M522 589 L593 589 L593 619 L522 619 L522 589 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath12">
+                <path d="M18 345 L50 345 L50 377 L18 377 L18 345 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath13">
+                <path d="M15 316 L57 316 L57 346 L15 346 L15 316 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath14">
+                <path d="M246 102 L278 102 L278 134 L246 134 L246 102 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath15">
+                <path d="M216 73 L313 73 L313 103 L216 103 L216 73 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath16">
+                <path d="M371 102 L403 102 L403 134 L371 134 L371 102 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath17">
+                <path d="M320 73 L460 73 L460 103 L320 103 L320 73 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath18">
+                <path d="M683 102 L715 102 L715 134 L683 134 L683 102 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath19">
+                <path d="M664 73 L738 73 L738 103 L664 103 L664 73 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath20">
+                <path d="M785 102 L817 102 L817 134 L785 134 L785 102 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath21">
+                <path d="M751 73 L855 73 L855 103 L751 103 L751 73 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath22">
+                <path d="M808 627 L840 627 L840 659 L808 659 L808 627 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath23">
+                <path d="M779 658 L874 658 L874 688 L779 688 L779 658 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath24">
+                <path d="M671 627 L703 627 L703 659 L671 659 L671 627 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath25">
+                <path d="M607 658 L773 658 L773 688 L607 688 L607 658 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath26">
+                <path d="M389 627 L421 627 L421 659 L389 659 L389 627 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath27">
+                <path d="M370 658 L444 658 L444 688 L370 688 L370 658 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath28">
+                <path d="M257 627 L289 627 L289 659 L257 659 L257 627 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath29">
+                <path d="M223 658 L327 658 L327 688 L223 688 L223 658 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath30">
+                <path d="M503 389 L535 389 L535 421 L503 421 L503 389 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath31">
+                <path d="M412 390 L509 390 L509 420 L412 420 L412 390 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath32">
+                <path d="M400 316 L432 316 L432 348 L400 348 L400 316 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath33">
+                <path d="M349 347 L489 347 L489 377 L349 377 L349 347 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath34">
+                <path d="M575 204 L607 204 L607 236 L575 236 L575 204 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath35">
+                <path d="M606 205 L701 205 L701 235 L606 235 L606 205 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath36">
+                <path d="M719 274 L751 274 L751 306 L719 306 L719 274 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath37">
+                <path d="M655 245 L821 245 L821 275 L655 275 L655 245 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath38">
+                <path d="M169 274 L201 274 L201 306 L169 306 L169 274 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath39">
+                <path d="M82 274 L175 274 L175 304 L82 304 L82 274 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath40">
+                <path d="M269 360 L301 360 L301 392 L269 392 L269 360 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath41">
+                <path d="M240 331 L335 331 L335 361 L240 361 L240 331 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath42">
+                <path d="M671 702 L703 702 L703 734 L671 734 L671 702 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath43">
+                <path d="M702 704 L797 704 L797 734 L702 734 L702 704 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath44">
+                <path d="M808 360 L840 360 L840 392 L808 392 L808 360 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath45">
+                <path d="M778 331 L875 331 L875 361 L778 361 L778 331 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath46">
+                <path d="M437 38 L469 38 L469 70 L437 70 L437 38 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath47">
+                <path d="M407 9 L504 9 L504 39 L407 39 L407 9 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath48">
+                <path d="M113 441 L135 441 L135 503 L113 503 L113 441 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath49">
+                <path d="M93 502 L160 502 L160 532 L93 532 L93 502 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath50">
+                <path d="M322 152 L344 152 L344 214 L322 214 L322 152 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath51">
+                <path d="M287 213 L384 213 L384 243 L287 243 L287 213 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath52">
+                <path d="M737 152 L759 152 L759 214 L737 214 L737 152 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath53">
+                <path d="M717 213 L784 213 L784 243 L717 243 L717 213 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath54">
+                <path d="M737 543 L759 543 L759 605 L737 605 L737 543 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath55">
+                <path d="M703 604 L798 604 L798 634 L703 634 L703 604 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath56">
+                <path d="M322 543 L344 543 L344 605 L322 605 L322 543 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath57">
+                <path d="M302 604 L369 604 L369 634 L302 634 L302 604 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath58">
+                <path d="M484 274 L506 274 L506 336 L484 336 L484 274 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath59">
+                <path d="M449 245 L546 245 L546 275 L449 275 L449 245 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath60">
+                <path d="M611 274 L633 274 L633 336 L611 336 L611 274 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath61">
+                <path d="M577 335 L672 335 L672 365 L577 365 L577 335 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath62">
+                <path d="M137 330 L159 330 L159 392 L137 392 L137 330 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath63">
+                <path d="M117 391 L184 391 L184 421 L117 421 L117 391 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath64">
+                <path d="M352 403 L374 403 L374 465 L352 465 L352 403 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath65">
+                <path d="M318 464 L413 464 L413 494 L318 494 L318 464 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath66">
+                <path d="M539 648 L561 648 L561 710 L539 710 L539 648 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath67">
+                <path d="M505 709 L600 709 L600 739 L505 739 L505 709 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath68">
+                <path d="M748 403 L770 403 L770 465 L748 465 L748 403 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath69">
+                <path d="M713 464 L810 464 L810 494 L713 494 L713 464 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath70">
+                <path d="M544 38 L566 38 L566 100 L544 100 L544 38 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath71">
+                <path d="M509 9 L606 9 L606 39 L509 39 L509 9 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath72">
+                <path d="M-1 -1 L966 -1 L966 749 L-1 749 L-1 -1 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath73">
+                <path d="M105 470 L117 470 L117 481 L105 481 L105 470 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath74">
+                <path d="M314 177 L326 177 L326 188 L314 188 L314 177 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath75">
+                <path d="M314 160 L326 160 L326 171 L314 171 L314 160 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath76">
+                <path d="M729 178 L741 178 L741 189 L729 189 L729 178 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath77">
+                <path d="M729 160 L741 160 L741 171 L729 171 L729 160 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath78">
+                <path d="M756 566 L768 566 L768 577 L756 577 L756 566 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath79">
+                <path d="M756 584 L768 584 L768 595 L756 595 L756 584 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath80">
+                <path d="M341 565 L353 565 L353 576 L341 576 L341 565 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath81">
+                <path d="M341 584 L353 584 L353 595 L341 595 L341 584 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath82">
+                <path d="M503 302 L515 302 L515 313 L503 313 L503 302 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath83">
+                <path d="M503 320 L515 320 L515 331 L503 331 L503 320 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath84">
+                <path d="M603 300 L615 300 L615 311 L603 311 L603 300 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath85">
+                <path d="M603 284 L615 284 L615 295 L603 295 L603 284 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath86">
+                <path d="M156 356 L168 356 L168 367 L156 367 L156 356 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath87">
+                <path d="M156 338 L168 338 L168 349 L156 349 L156 338 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath88">
+                <path d="M344 434 L356 434 L356 445 L344 445 L344 434 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath89">
+                <path d="M344 415 L356 415 L356 426 L344 426 L344 415 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath90">
+                <path d="M531 674 L543 674 L543 685 L531 685 L531 674 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath91">
+                <path d="M558 692 L570 692 L570 703 L558 703 L558 692 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath92">
+                <path d="M767 428 L779 428 L779 439 L767 439 L767 428 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath93">
+                <path d="M767 410 L779 410 L779 421 L767 421 L767 410 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath94">
+                <path d="M536 64 L548 64 L548 75 L536 75 L536 64 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath95">
+                <path d="M536 48 L548 48 L548 59 L536 59 L536 48 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath96">
+                <path d="M190 470 L202 470 L202 481 L190 481 L190 470 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath97">
+                <path d="M531 178 L543 178 L543 189 L531 189 L531 178 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath98">
+                <path d="M382 131 L393 131 L393 143 L382 143 L382 131 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath99">
+                <path d="M886 448 L897 448 L897 460 L886 460 L886 448 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath100">
+                <path d="M793 131 L804 131 L804 143 L793 143 L793 131 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath101">
+                <path d="M568 566 L580 566 L580 577 L568 577 L568 566 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath102">
+                <path d="M682 619 L693 619 L693 631 L682 631 L682 619 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath103">
+                <path d="M211 485 L222 485 L222 497 L211 497 L211 485 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath104">
+                <path d="M268 619 L279 619 L279 631 L268 631 L268 619 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath105">
+                <path d="M541 196 L552 196 L552 208 L541 208 L541 196 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath106">
+                <path d="M429 321 L441 321 L441 332 L429 332 L429 321 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath107">
+                <path d="M559 550 L570 550 L570 562 L559 562 L559 550 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath108">
+                <path d="M711 284 L723 284 L723 295 L711 295 L711 284 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath109">
+                <path d="M47 356 L59 356 L59 367 L47 367 L47 356 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath110">
+                <path d="M223 485 L234 485 L234 497 L223 497 L223 485 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath111">
+                <path d="M568 578 L580 578 L580 589 L568 589 L568 578 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath112">
+                <path d="M877 485 L888 485 L888 497 L877 497 L877 485 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath113">
+                <path d="M568 166 L580 166 L580 177 L568 177 L568 166 Z"/>
+            </clipPath>
+        </defs>
+        <g font-size="15px" fill="rgb(255,245,181)" font-family="'Segoe UI'" stroke-linejoin="round" stroke="rgb(255,245,181)" stroke-width="0" stroke-miterlimit="0">
+            <circle r="14" clip-path="url(#clipPath1)" cx="33" cy="471" stroke="none"/>
+        </g>
+        <g font-size="15px" stroke-width="1.1" font-family="'Segoe UI'" stroke-linecap="butt">
+            <circle fill="none" r="14.5" clip-path="url(#clipPath1)" cx="33.5" cy="471.5"/>
+            <text x="10" xml:space="preserve" font-size="20px" y="450" clip-path="url(#clipPath2)" stroke="none">initial</text>
+            <circle r="9" clip-path="url(#clipPath3)" cx="50" cy="476" stroke="none"/>
+            <circle fill="none" stroke-width="0.1" r="9.5" clip-path="url(#clipPath3)" cx="50.5" cy="476.5"/>
+            <circle clip-path="url(#clipPath4)" fill="rgb(255,245,181)" r="14" cx="213" cy="471" stroke="none" stroke-width="0.1"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath4)" cx="213.5" cy="471.5"/>
+            <text x="230" xml:space="preserve" font-size="20px" y="480" clip-path="url(#clipPath5)" stroke="none">Closed</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath6)" cx="890" cy="471" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath6)" cx="890.5" cy="471.5"/>
+            <text x="907" xml:space="preserve" font-size="20px" y="480" clip-path="url(#clipPath7)" stroke="none">Open</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath8)" cx="554" cy="182" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath8)" cx="554.5" cy="182.5"/>
+            <text x="517" xml:space="preserve" font-size="20px" y="161" clip-path="url(#clipPath9)" stroke="none">Opening</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath10)" cx="554" cy="573" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath10)" cx="554.5" cy="573.5"/>
+            <text x="523" xml:space="preserve" font-size="20px" y="612" clip-path="url(#clipPath11)" stroke="none">Closing</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath12)" cx="33" cy="360" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath12)" cx="33.5" cy="360.5"/>
+            <text x="16" xml:space="preserve" font-size="20px" y="339" clip-path="url(#clipPath13)" stroke="none">final</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath14)" cx="261" cy="117" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath14)" cx="261.5" cy="117.5"/>
+            <text x="217" xml:space="preserve" font-size="20px" y="96" clip-path="url(#clipPath15)" stroke="none">openDoor</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath16)" cx="386" cy="117" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath16)" cx="386.5" cy="117.5"/>
+            <text x="321" xml:space="preserve" font-size="20px" y="96" clip-path="url(#clipPath17)" stroke="none">motor.upwards</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath18)" cx="698" cy="117" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath18)" cx="698.5" cy="117.5"/>
+            <text x="665" xml:space="preserve" font-size="20px" y="96" clip-path="url(#clipPath19)" stroke="none">stopper</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath20)" cx="800" cy="117" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath20)" cx="800.5" cy="117.5"/>
+            <text x="752" xml:space="preserve" font-size="20px" y="96" clip-path="url(#clipPath21)" stroke="none">motor.stop</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath22)" cx="823" cy="642" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath22)" cx="823.5" cy="642.5"/>
+            <text x="780" xml:space="preserve" font-size="20px" y="681" clip-path="url(#clipPath23)" stroke="none">closeDoor</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath24)" cx="686" cy="642" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath24)" cx="686.5" cy="642.5"/>
+            <text x="608" xml:space="preserve" font-size="20px" y="681" clip-path="url(#clipPath25)" stroke="none">motor.downwards</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath26)" cx="404" cy="642" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath26)" cx="404.5" cy="642.5"/>
+            <text x="371" xml:space="preserve" font-size="20px" y="681" clip-path="url(#clipPath27)" stroke="none">stopper</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath28)" cx="272" cy="642" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath28)" cx="272.5" cy="642.5"/>
+            <text x="224" xml:space="preserve" font-size="20px" y="681" clip-path="url(#clipPath29)" stroke="none">motor.stop</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath30)" cx="518" cy="404" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath30)" cx="518.5" cy="404.5"/>
+            <text x="413" xml:space="preserve" font-size="20px" y="413" clip-path="url(#clipPath31)" stroke="none">openDoor</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath32)" cx="415" cy="331" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath32)" cx="415.5" cy="331.5"/>
+            <text x="350" xml:space="preserve" font-size="20px" y="370" clip-path="url(#clipPath33)" stroke="none">motor.upwards</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath34)" cx="590" cy="219" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath34)" cx="590.5" cy="219.5"/>
+            <text x="607" xml:space="preserve" font-size="20px" y="228" clip-path="url(#clipPath35)" stroke="none">closeDoor</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath36)" cx="734" cy="289" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath36)" cx="734.5" cy="289.5"/>
+            <text x="656" xml:space="preserve" font-size="20px" y="268" clip-path="url(#clipPath37)" stroke="none">motor.downwards</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath38)" cx="184" cy="289" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath38)" cx="184.5" cy="289.5"/>
+            <text x="83" xml:space="preserve" font-size="20px" y="297" clip-path="url(#clipPath39)" stroke="none">shutdown</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath40)" cx="284" cy="375" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath40)" cx="284.5" cy="375.5"/>
+            <text x="241" xml:space="preserve" font-size="20px" y="354" clip-path="url(#clipPath41)" stroke="none">closeDoor</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath42)" cx="686" cy="717" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath42)" cx="686.5" cy="717.5"/>
+            <text x="703" xml:space="preserve" font-size="20px" y="727" clip-path="url(#clipPath43)" stroke="none">closeDoor</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath44)" cx="823" cy="375" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath44)" cx="823.5" cy="375.5"/>
+            <text x="779" xml:space="preserve" font-size="20px" y="354" clip-path="url(#clipPath45)" stroke="none">openDoor</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath46)" cx="452" cy="53" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath46)" cx="452.5" cy="53.5"/>
+            <text x="408" xml:space="preserve" font-size="20px" y="32" clip-path="url(#clipPath47)" stroke="none">openDoor</text>
+            <rect x="114" y="442" clip-path="url(#clipPath48)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="114" width="19" height="59" y="442" clip-path="url(#clipPath48)"/>
+            <text x="94" xml:space="preserve" font-size="20px" y="525" clip-path="url(#clipPath49)" stroke="none">default</text>
+            <rect x="323" y="153" clip-path="url(#clipPath50)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="323" width="19" height="59" y="153" clip-path="url(#clipPath50)"/>
+            <text x="288" xml:space="preserve" font-size="20px" y="236" clip-path="url(#clipPath51)" stroke="none">openDoor</text>
+            <rect x="738" y="153" clip-path="url(#clipPath52)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="738" width="19" height="59" y="153" clip-path="url(#clipPath52)"/>
+            <text x="718" xml:space="preserve" font-size="20px" y="236" clip-path="url(#clipPath53)" stroke="none">default</text>
+            <rect x="738" y="544" clip-path="url(#clipPath54)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="738" width="19" height="59" y="544" clip-path="url(#clipPath54)"/>
+            <text x="704" xml:space="preserve" font-size="20px" y="627" clip-path="url(#clipPath55)" stroke="none">closeDoor</text>
+            <rect x="323" y="544" clip-path="url(#clipPath56)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="323" width="19" height="59" y="544" clip-path="url(#clipPath56)"/>
+            <text x="303" xml:space="preserve" font-size="20px" y="627" clip-path="url(#clipPath57)" stroke="none">default</text>
+            <rect x="485" y="275" clip-path="url(#clipPath58)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="485" width="19" height="59" y="275" clip-path="url(#clipPath58)"/>
+            <text x="450" xml:space="preserve" font-size="20px" y="268" clip-path="url(#clipPath59)" stroke="none">openDoor</text>
+            <rect x="612" y="275" clip-path="url(#clipPath60)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="612" width="19" height="59" y="275" clip-path="url(#clipPath60)"/>
+            <text x="578" xml:space="preserve" font-size="20px" y="358" clip-path="url(#clipPath61)" stroke="none">closeDoor</text>
+            <rect x="138" y="331" clip-path="url(#clipPath62)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="138" width="19" height="59" y="331" clip-path="url(#clipPath62)"/>
+            <text x="118" xml:space="preserve" font-size="20px" y="414" clip-path="url(#clipPath63)" stroke="none">default</text>
+            <rect x="353" y="404" clip-path="url(#clipPath64)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="353" width="19" height="59" y="404" clip-path="url(#clipPath64)"/>
+            <text x="319" xml:space="preserve" font-size="20px" y="487" clip-path="url(#clipPath65)" stroke="none">closeDoor</text>
+            <rect x="540" y="649" clip-path="url(#clipPath66)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="540" width="19" height="59" y="649" clip-path="url(#clipPath66)"/>
+            <text x="506" xml:space="preserve" font-size="20px" y="732" clip-path="url(#clipPath67)" stroke="none">closeDoor</text>
+            <rect x="749" y="404" clip-path="url(#clipPath68)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="749" width="19" height="59" y="404" clip-path="url(#clipPath68)"/>
+            <text x="714" xml:space="preserve" font-size="20px" y="487" clip-path="url(#clipPath69)" stroke="none">openDoor</text>
+            <rect x="545" y="39" clip-path="url(#clipPath70)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="545" width="19" height="59" y="39" clip-path="url(#clipPath70)"/>
+            <text x="510" xml:space="preserve" font-size="20px" y="32" clip-path="url(#clipPath71)" stroke="none">openDoor</text>
+            <line clip-path="url(#clipPath72)" fill="none" x1="49" x2="114" y1="475" y2="475" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath73)" fill="none" x1="107" x2="114" y1="478" y2="475" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath73)" fill="none" x1="114" x2="107" y1="475" y2="472" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="216" x2="216" y1="457" y2="182" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="216" x2="323" y1="182" y2="182" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath74)" fill="none" x1="316" x2="323" y1="185" y2="182" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath74)" fill="none" x1="323" x2="316" y1="182" y2="179" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="262" x2="262" y1="133" y2="165" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="262" x2="323" y1="165" y2="165" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath75)" fill="none" x1="316" x2="323" y1="168" y2="165" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath75)" fill="none" x1="323" x2="316" y1="165" y2="162" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="570" x2="738" y1="183" y2="183" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath76)" fill="none" x1="731" x2="738" y1="186" y2="183" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath76)" fill="none" x1="738" x2="731" y1="183" y2="180" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="699" x2="699" y1="133" y2="165" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="699" x2="738" y1="165" y2="165" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath77)" fill="none" x1="731" x2="738" y1="168" y2="165" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath77)" fill="none" x1="738" x2="731" y1="165" y2="162" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="894" x2="894" y1="487" y2="571" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="894" x2="758" y1="571" y2="571" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath78)" fill="none" x1="765" x2="758" y1="568" y2="571" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath78)" fill="none" x1="758" x2="765" y1="571" y2="574" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="824" x2="824" y1="628" y2="589" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="824" x2="758" y1="589" y2="589" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath79)" fill="none" x1="765" x2="758" y1="586" y2="589" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath79)" fill="none" x1="758" x2="765" y1="589" y2="592" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="540" x2="343" y1="570" y2="570" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath80)" fill="none" x1="350" x2="343" y1="567" y2="570" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath80)" fill="none" x1="343" x2="350" y1="570" y2="573" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="405" x2="405" y1="628" y2="589" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="405" x2="343" y1="589" y2="589" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath81)" fill="none" x1="350" x2="343" y1="586" y2="589" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath81)" fill="none" x1="343" x2="350" y1="589" y2="592" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="546" x2="546" y1="559" y2="307" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="546" x2="505" y1="307" y2="307" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath82)" fill="none" x1="512" x2="505" y1="304" y2="307" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath82)" fill="none" x1="505" x2="512" y1="307" y2="310" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="522" x2="522" y1="390" y2="325" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="522" x2="505" y1="325" y2="325" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath83)" fill="none" x1="512" x2="505" y1="322" y2="325" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath83)" fill="none" x1="505" x2="512" y1="325" y2="328" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="564" x2="564" y1="198" y2="305" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="564" x2="612" y1="305" y2="305" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath84)" fill="none" x1="605" x2="612" y1="308" y2="305" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath84)" fill="none" x1="612" x2="605" y1="305" y2="302" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="588" x2="588" y1="235" y2="289" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="588" x2="612" y1="289" y2="289" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath85)" fill="none" x1="605" x2="612" y1="292" y2="289" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath85)" fill="none" x1="612" x2="605" y1="289" y2="286" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="204" x2="204" y1="457" y2="361" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="204" x2="158" y1="361" y2="361" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath86)" fill="none" x1="165" x2="158" y1="358" y2="361" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath86)" fill="none" x1="158" x2="165" y1="361" y2="364" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="185" x2="185" y1="305" y2="343" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="185" x2="158" y1="343" y2="343" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath87)" fill="none" x1="165" x2="158" y1="340" y2="343" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath87)" fill="none" x1="158" x2="165" y1="343" y2="346" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="229" x2="229" y1="457" y2="439" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="229" x2="353" y1="439" y2="439" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath88)" fill="none" x1="346" x2="353" y1="442" y2="439" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath88)" fill="none" x1="353" x2="346" y1="439" y2="436" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="285" x2="285" y1="391" y2="420" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="285" x2="353" y1="420" y2="420" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath89)" fill="none" x1="346" x2="353" y1="423" y2="420" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath89)" fill="none" x1="353" x2="346" y1="420" y2="417" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="540" x2="516" y1="583" y2="583" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="516" x2="516" y1="583" y2="679" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="516" x2="540" y1="679" y2="679" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath90)" fill="none" x1="533" x2="540" y1="682" y2="679" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath90)" fill="none" x1="540" x2="533" y1="679" y2="676" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="672" x2="612" y1="714" y2="714" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="612" x2="612" y1="714" y2="697" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="612" x2="560" y1="697" y2="697" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath91)" fill="none" x1="567" x2="560" y1="694" y2="697" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath91)" fill="none" x1="560" x2="567" y1="697" y2="700" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="882" x2="882" y1="457" y2="433" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="882" x2="769" y1="433" y2="433" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath92)" fill="none" x1="776" x2="769" y1="430" y2="433" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath92)" fill="none" x1="769" x2="776" y1="433" y2="436" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="823" x2="823" y1="391" y2="415" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="823" x2="769" y1="415" y2="415" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath93)" fill="none" x1="776" x2="769" y1="412" y2="415" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath93)" fill="none" x1="769" x2="776" y1="415" y2="418" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="540" x2="504" y1="171" y2="171" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="504" x2="504" y1="171" y2="69" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="504" x2="545" y1="69" y2="69" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath94)" fill="none" x1="538" x2="545" y1="72" y2="69" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath94)" fill="none" x1="545" x2="538" y1="69" y2="66" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="468" x2="545" y1="53" y2="53" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath95)" fill="none" x1="538" x2="545" y1="56" y2="53" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath95)" fill="none" x1="545" x2="538" y1="53" y2="50" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="134" x2="199" y1="475" y2="475" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath96)" fill="none" x1="192" x2="199" y1="478" y2="475" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath96)" fill="none" x1="199" x2="192" y1="475" y2="472" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="343" x2="540" y1="183" y2="183" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath97)" fill="none" x1="533" x2="540" y1="186" y2="183" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath97)" fill="none" x1="540" x2="533" y1="183" y2="180" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="343" x2="387" y1="165" y2="165" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="387" x2="387" y1="165" y2="133" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath98)" fill="none" x1="390" x2="387" y1="140" y2="133" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath98)" fill="none" x1="387" x2="384" y1="133" y2="140" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="758" x2="891" y1="183" y2="183" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="891" x2="891" y1="183" y2="457" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath99)" fill="none" x1="888" x2="891" y1="450" y2="457" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath99)" fill="none" x1="891" x2="894" y1="457" y2="450" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="758" x2="798" y1="165" y2="165" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="798" x2="798" y1="165" y2="133" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath100)" fill="none" x1="801" x2="798" y1="140" y2="133" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath100)" fill="none" x1="798" x2="795" y1="133" y2="140" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="738" x2="570" y1="571" y2="571" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath101)" fill="none" x1="577" x2="570" y1="568" y2="571" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath101)" fill="none" x1="570" x2="577" y1="571" y2="574" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="738" x2="687" y1="589" y2="589" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="687" x2="687" y1="589" y2="628" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath102)" fill="none" x1="684" x2="687" y1="621" y2="628" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath102)" fill="none" x1="687" x2="690" y1="628" y2="621" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="323" x2="216" y1="570" y2="570" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="216" x2="216" y1="570" y2="487" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath103)" fill="none" x1="219" x2="216" y1="494" y2="487" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath103)" fill="none" x1="216" x2="213" y1="487" y2="494" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="323" x2="273" y1="589" y2="589" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="273" x2="273" y1="589" y2="628" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath104)" fill="none" x1="270" x2="273" y1="621" y2="628" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath104)" fill="none" x1="273" x2="276" y1="628" y2="621" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="485" x2="432" y1="307" y2="307" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="432" x2="432" y1="307" y2="246" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="432" x2="546" y1="246" y2="246" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="546" x2="546" y1="246" y2="198" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath105)" fill="none" x1="549" x2="546" y1="205" y2="198" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath105)" fill="none" x1="546" x2="543" y1="198" y2="205" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="485" x2="431" y1="326" y2="326" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath106)" fill="none" x1="438" x2="431" y1="323" y2="326" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath106)" fill="none" x1="431" x2="438" y1="326" y2="329" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="632" x2="678" y1="305" y2="305" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="678" x2="678" y1="305" y2="367" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="678" x2="564" y1="367" y2="367" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="564" x2="564" y1="367" y2="559" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath107)" fill="none" x1="561" x2="564" y1="552" y2="559" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath107)" fill="none" x1="564" x2="567" y1="559" y2="552" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="632" x2="720" y1="289" y2="289" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath108)" fill="none" x1="713" x2="720" y1="292" y2="289" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath108)" fill="none" x1="720" x2="713" y1="289" y2="286" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="138" x2="49" y1="361" y2="361" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath109)" fill="none" x1="56" x2="49" y1="358" y2="361" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath109)" fill="none" x1="49" x2="56" y1="361" y2="364" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="373" x2="425" y1="439" y2="439" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="425" x2="425" y1="439" y2="511" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="425" x2="228" y1="511" y2="511" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="228" x2="228" y1="511" y2="487" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath110)" fill="none" x1="231" x2="228" y1="494" y2="487" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath110)" fill="none" x1="228" x2="225" y1="487" y2="494" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="560" x2="594" y1="678" y2="678" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="594" x2="594" y1="678" y2="583" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="594" x2="570" y1="583" y2="583" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath111)" fill="none" x1="577" x2="570" y1="580" y2="583" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath111)" fill="none" x1="570" x2="577" y1="583" y2="586" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="749" x2="702" y1="434" y2="434" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="702" x2="702" y1="434" y2="511" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="702" x2="882" y1="511" y2="511" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="882" x2="882" y1="511" y2="487" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath112)" fill="none" x1="885" x2="882" y1="494" y2="487" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath112)" fill="none" x1="882" x2="879" y1="487" y2="494" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="565" x2="606" y1="69" y2="69" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="606" x2="606" y1="69" y2="171" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath72)" fill="none" x1="606" x2="570" y1="171" y2="171" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath113)" fill="none" x1="577" x2="570" y1="168" y2="171" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath113)" fill="none" x1="570" x2="577" y1="171" y2="174" stroke-width="2.1"/>
+        </g>
+    </g>
+</svg>
diff --git a/model2model/examples-etl/petrinets/switch.petrinet b/model2model/examples-etl/petrinets/switch.petrinet
new file mode 100644
index 0000000000000000000000000000000000000000..6c06fccecc453e2dc99d18ebef1a75743ba2daf2
--- /dev/null
+++ b/model2model/examples-etl/petrinets/switch.petrinet
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ASCII"?>
+<petrinet:PetriNet xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:petrinet="http://www.example.org/petrinet" name="Switch">
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.3" source="//@elements.0"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.3" target="//@elements.2"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.4" source="//@elements.2"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.4" target="//@elements.1"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.4" source="//@elements.5"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.6" source="//@elements.1"/>
+  <arcs xsi:type="petrinet:OutgoingArc" source="//@elements.6" target="//@elements.2"/>
+  <arcs xsi:type="petrinet:IncomingArc" target="//@elements.6" source="//@elements.7"/>
+  <elements xsi:type="petrinet:Place" identifier="initial">
+    <token/>
+  </elements>
+  <elements xsi:type="petrinet:Place" identifier="on"/>
+  <elements xsi:type="petrinet:Place" identifier="off"/>
+  <elements xsi:type="petrinet:Transition" identifier="default"/>
+  <elements xsi:type="petrinet:Transition" identifier="flip"/>
+  <elements xsi:type="petrinet:Place" identifier="flip"/>
+  <elements xsi:type="petrinet:Transition" identifier="flip"/>
+  <elements xsi:type="petrinet:Place" identifier="flip"/>
+</petrinet:PetriNet>
diff --git a/model2model/examples-etl/petrinets/switch.svg b/model2model/examples-etl/petrinets/switch.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9a34ece1e2968d8d3c31457b933e9cafa16321f9
--- /dev/null
+++ b/model2model/examples-etl/petrinets/switch.svg
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-dasharray="none" shape-rendering="auto" font-family="'Dialog'" width="410" text-rendering="auto" fill-opacity="1" contentScriptType="text/ecmascript" color-interpolation="auto" color-rendering="auto" preserveAspectRatio="xMidYMid meet" font-size="12px" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" diagram:semanticRoot="platform:/resource/example/petrinets/switch.petrinet#/" viewBox="0 0 410 234" fill="black" stroke="black" image-rendering="auto" stroke-miterlimit="10" zoomAndPan="magnify" version="1.0" stroke-linecap="square" stroke-linejoin="miter" contentStyleType="text/css" font-style="normal" height="234" stroke-width="1" stroke-dashoffset="0" font-weight="normal" stroke-opacity="1">
+    <!--Generated by the Batik Graphics2D SVG Generator-->
+    <defs id="genericDefs"/>
+    <g>
+        <defs id="defs1">
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
+                <path d="M18 105 L50 105 L50 137 L18 137 L18 105 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
+                <path d="M9 76 L62 76 L62 106 L9 106 L9 76 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath3">
+                <path d="M40 115 L62 115 L62 137 L40 137 L40 115 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4">
+                <path d="M340 106 L372 106 L372 138 L340 138 L340 106 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath5">
+                <path d="M371 107 L401 107 L401 137 L371 137 L371 107 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath6">
+                <path d="M160 105 L192 105 L192 137 L160 137 L160 105 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath7">
+                <path d="M191 106 L221 106 L221 136 L191 136 L191 106 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath8">
+                <path d="M160 28 L192 28 L192 60 L160 60 L160 28 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath9">
+                <path d="M131 28 L164 28 L164 58 L131 58 L131 28 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath10">
+                <path d="M340 193 L372 193 L372 225 L340 225 L340 193 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath11">
+                <path d="M371 193 L404 193 L404 223 L371 223 L371 193 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath12">
+                <path d="M100 90 L122 90 L122 152 L100 152 L100 90 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath13">
+                <path d="M80 151 L147 151 L147 181 L80 181 L80 151 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath14">
+                <path d="M250 46 L272 46 L272 108 L250 108 L250 46 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath15">
+                <path d="M246 17 L279 17 L279 47 L246 47 L246 17 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath16">
+                <path d="M250 134 L272 134 L272 196 L250 196 L250 134 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath17">
+                <path d="M246 195 L279 195 L279 225 L246 225 L246 195 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath18">
+                <path d="M-1 -1 L411 -1 L411 235 L-1 235 L-1 -1 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath19">
+                <path d="M92 114 L104 114 L104 125 L92 125 L92 114 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath20">
+                <path d="M242 72 L254 72 L254 83 L242 83 L242 72 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath21">
+                <path d="M242 60 L254 60 L254 71 L242 71 L242 60 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath22">
+                <path d="M269 160 L281 160 L281 171 L269 171 L269 160 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath23">
+                <path d="M269 174 L281 174 L281 185 L269 185 L269 174 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath24">
+                <path d="M152 114 L164 114 L164 125 L152 125 L152 114 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath25">
+                <path d="M351 98 L362 98 L362 110 L351 110 L351 98 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath26">
+                <path d="M171 134 L182 134 L182 146 L171 146 L171 134 Z"/>
+            </clipPath>
+        </defs>
+        <g font-size="15px" fill="rgb(255,245,181)" font-family="'Segoe UI'" stroke-linejoin="round" stroke="rgb(255,245,181)" stroke-width="0" stroke-miterlimit="0">
+            <circle r="14" clip-path="url(#clipPath1)" cx="33" cy="120" stroke="none"/>
+        </g>
+        <g font-size="15px" stroke-width="1.1" font-family="'Segoe UI'" stroke-linecap="butt">
+            <circle fill="none" r="14.5" clip-path="url(#clipPath1)" cx="33.5" cy="120.5"/>
+            <text x="10" xml:space="preserve" font-size="20px" y="99" clip-path="url(#clipPath2)" stroke="none">initial</text>
+            <circle r="9" clip-path="url(#clipPath3)" cx="50" cy="125" stroke="none"/>
+            <circle fill="none" stroke-width="0.1" r="9.5" clip-path="url(#clipPath3)" cx="50.5" cy="125.5"/>
+            <circle clip-path="url(#clipPath4)" fill="rgb(255,245,181)" r="14" cx="355" cy="121" stroke="none" stroke-width="0.1"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath4)" cx="355.5" cy="121.5"/>
+            <text x="372" xml:space="preserve" font-size="20px" y="130" clip-path="url(#clipPath5)" stroke="none">on</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath6)" cx="175" cy="120" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath6)" cx="175.5" cy="120.5"/>
+            <text x="192" xml:space="preserve" font-size="20px" y="129" clip-path="url(#clipPath7)" stroke="none">off</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath8)" cx="175" cy="43" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath8)" cx="175.5" cy="43.5"/>
+            <text x="132" xml:space="preserve" font-size="20px" y="51" clip-path="url(#clipPath9)" stroke="none">flip</text>
+            <circle fill="rgb(255,245,181)" r="14" clip-path="url(#clipPath10)" cx="355" cy="208" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath10)" cx="355.5" cy="208.5"/>
+            <text x="372" xml:space="preserve" font-size="20px" y="216" clip-path="url(#clipPath11)" stroke="none">flip</text>
+            <rect x="101" y="91" clip-path="url(#clipPath12)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="101" width="19" height="59" y="91" clip-path="url(#clipPath12)"/>
+            <text x="81" xml:space="preserve" font-size="20px" y="174" clip-path="url(#clipPath13)" stroke="none">default</text>
+            <rect x="251" y="47" clip-path="url(#clipPath14)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="251" width="19" height="59" y="47" clip-path="url(#clipPath14)"/>
+            <text x="247" xml:space="preserve" font-size="20px" y="40" clip-path="url(#clipPath15)" stroke="none">flip</text>
+            <rect x="251" y="135" clip-path="url(#clipPath16)" fill="rgb(253,206,137)" width="20" height="60" stroke="none"/>
+            <rect fill="none" x="251" width="19" height="59" y="135" clip-path="url(#clipPath16)"/>
+            <text x="247" xml:space="preserve" font-size="20px" y="218" clip-path="url(#clipPath17)" stroke="none">flip</text>
+            <line clip-path="url(#clipPath18)" fill="none" x1="49" x2="101" y1="119" y2="119" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath19)" fill="none" x1="94" x2="101" y1="122" y2="119" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath19)" fill="none" x1="101" x2="94" y1="119" y2="116" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="176" x2="176" y1="106" y2="77" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="176" x2="251" y1="77" y2="77" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath20)" fill="none" x1="244" x2="251" y1="80" y2="77" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath20)" fill="none" x1="251" x2="244" y1="77" y2="74" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="191" x2="221" y1="42" y2="42" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="221" x2="221" y1="42" y2="65" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="221" x2="251" y1="65" y2="65" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath21)" fill="none" x1="244" x2="251" y1="68" y2="65" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath21)" fill="none" x1="251" x2="244" y1="65" y2="62" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="357" x2="357" y1="137" y2="165" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="357" x2="271" y1="165" y2="165" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath22)" fill="none" x1="278" x2="271" y1="162" y2="165" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath22)" fill="none" x1="271" x2="278" y1="165" y2="168" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="341" x2="311" y1="207" y2="207" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="311" x2="311" y1="207" y2="179" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="311" x2="271" y1="179" y2="179" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath23)" fill="none" x1="278" x2="271" y1="176" y2="179" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath23)" fill="none" x1="271" x2="278" y1="179" y2="182" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="121" x2="161" y1="119" y2="119" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath24)" fill="none" x1="154" x2="161" y1="122" y2="119" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath24)" fill="none" x1="161" x2="154" y1="119" y2="116" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="271" x2="356" y1="77" y2="77" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="356" x2="356" y1="77" y2="107" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath25)" fill="none" x1="353" x2="356" y1="100" y2="107" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath25)" fill="none" x1="356" x2="359" y1="107" y2="100" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="251" x2="176" y1="164" y2="164" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath18)" fill="none" x1="176" x2="176" y1="164" y2="136" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath26)" fill="none" x1="179" x2="176" y1="143" y2="136" stroke-width="2.1"/>
+            <line clip-path="url(#clipPath26)" fill="none" x1="176" x2="173" y1="136" y2="143" stroke-width="2.1"/>
+        </g>
+    </g>
+</svg>
diff --git a/model2model/examples-etl/representations.aird b/model2model/examples-etl/representations.aird
new file mode 100644
index 0000000000000000000000000000000000000000..081f6b9ee893623c58279bb795d8789660e6283f
--- /dev/null
+++ b/model2model/examples-etl/representations.aird
@@ -0,0 +1,2932 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.3/notation" xmlns:petrinet="http://www.example.org/petrinet" xmlns:statemachine="http://www.swt.org/most/statemachine" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style">
+  <viewpoint:DAnalysis uid="_JzAvsHIhEe2-Np0Hy5W05A" selectedViews="_faHbAHIhEe2-Np0Hy5W05A _5LE60HIlEe271L-91z2s1A" version="15.2.0.202303281325">
+    <semanticResources>statemachines/garagedoor.statemachine</semanticResources>
+    <semanticResources>statemachines/switch.statemachine</semanticResources>
+    <semanticResources>petrinets/garagedoor.petrinet</semanticResources>
+    <semanticResources>petrinets/switch.petrinet</semanticResources>
+    <ownedViews xmi:type="viewpoint:DView" uid="_faHbAHIhEe2-Np0Hy5W05A">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']"/>
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_gwRVoHIhEe2-Np0Hy5W05A" name="Editor Switch" repPath="#_gwQHgHIhEe2-Np0Hy5W05A" changeId="1718631835427">
+        <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']"/>
+        <target xmi:type="statemachine:StateMachine" href="statemachines/switch.statemachine#Switch"/>
+      </ownedRepresentationDescriptors>
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_s4P0EXIhEe2-Np0Hy5W05A" name="Editor GarageDoor" repPath="#_s4PNAHIhEe2-Np0Hy5W05A" changeId="1718631816049">
+        <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']"/>
+        <target xmi:type="statemachine:StateMachine" href="statemachines/garagedoor.statemachine#Garage Door"/>
+      </ownedRepresentationDescriptors>
+    </ownedViews>
+    <ownedViews xmi:type="viewpoint:DView" uid="_5LE60HIlEe271L-91z2s1A">
+      <viewpoint xmi:type="description:Viewpoint" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']"/>
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_7ZmGMXI4Ee2-kruQw0QW4w" name="Viewer GarageDoor" repPath="#_7ZlfIHI4Ee2-kruQw0QW4w" changeId="1718631816049">
+        <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']"/>
+        <target xmi:type="petrinet:PetriNet" href="petrinets/garagedoor.petrinet#/"/>
+      </ownedRepresentationDescriptors>
+      <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_v4aYMCywEe-4er9RFtOKtQ" name="Viewer Switch" repPath="#_v4ZxICywEe-4er9RFtOKtQ" changeId="1718632424390">
+        <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']"/>
+        <target xmi:type="petrinet:PetriNet" href="petrinets/switch.petrinet#/"/>
+      </ownedRepresentationDescriptors>
+    </ownedViews>
+  </viewpoint:DAnalysis>
+  <diagram:DSemanticDiagram uid="_gwQHgHIhEe2-Np0Hy5W05A">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_gwR8sXIhEe2-Np0Hy5W05A" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_gwR8snIhEe2-Np0Hy5W05A" type="Sirius" element="_gwQHgHIhEe2-Np0Hy5W05A" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_gw19YHIhEe2-Np0Hy5W05A" type="2001" element="_gwYqYHIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_gw2kcHIhEe2-Np0Hy5W05A" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_gw2kcXIhEe2-Np0Hy5W05A" x="-9" y="31"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_gw8EB3IhEe2-Np0Hy5W05A" type="3002" element="_gwZ4gHIhEe2-Np0Hy5W05A">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_gw8ECHIhEe2-Np0Hy5W05A" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gw8ECXIhEe2-Np0Hy5W05A"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_gw19YXIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gw19YnIhEe2-Np0Hy5W05A" x="162" y="176" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_gw4ZoHIhEe2-Np0Hy5W05A" type="2003" element="_gwn68HIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_gw5AsHIhEe2-Np0Hy5W05A" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_gw614HIhEe2-Np0Hy5W05A" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_gw8rEHIhEe2-Np0Hy5W05A" type="3010" element="_gwszcHIhEe2-Np0Hy5W05A">
+              <styles xmi:type="notation:FontStyle" xmi:id="_gw8rEXIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="12"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_gw8rEnIhEe2-Np0Hy5W05A"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_gw614XIhEe2-Np0Hy5W05A"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_gw614nIhEe2-Np0Hy5W05A"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_gw4ZoXIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gw4ZonIhEe2-Np0Hy5W05A" x="276" y="354"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_gw7c8HIhEe2-Np0Hy5W05A" type="2003" element="_gwrlUXIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_gw7c83IhEe2-Np0Hy5W05A" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_gw7c9HIhEe2-Np0Hy5W05A" type="7004">
+            <children xmi:type="notation:Node" xmi:id="_gw9SIHIhEe2-Np0Hy5W05A" type="3010" element="_gwuooHIhEe2-Np0Hy5W05A">
+              <styles xmi:type="notation:FontStyle" xmi:id="_gw9SIXIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="12"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_gw9SInIhEe2-Np0Hy5W05A"/>
+            </children>
+            <styles xmi:type="notation:SortingStyle" xmi:id="_gw7c9XIhEe2-Np0Hy5W05A"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_gw7c9nIhEe2-Np0Hy5W05A"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_gw7c8XIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gw7c8nIhEe2-Np0Hy5W05A" x="292" y="112" width="194"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_gw8EAHIhEe2-Np0Hy5W05A" type="2003" element="_gwuoonIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_gw8EA3IhEe2-Np0Hy5W05A" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_gw8EBHIhEe2-Np0Hy5W05A" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_gw8EBXIhEe2-Np0Hy5W05A"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_gw8EBnIhEe2-Np0Hy5W05A"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_gw8EAXIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="10" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gw8EAnIhEe2-Np0Hy5W05A" x="283" y="48" height="40"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_gwR8s3IhEe2-Np0Hy5W05A"/>
+        <edges xmi:type="notation:Edge" xmi:id="_gw9SI3IhEe2-Np0Hy5W05A" type="4001" element="_gwv2wHIhEe2-Np0Hy5W05A" source="_gw19YHIhEe2-Np0Hy5W05A" target="_gw7c8HIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_gw9SJ3IhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gw9SKHIhEe2-Np0Hy5W05A" x="61" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_gw9SKXIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gw9SKnIhEe2-Np0Hy5W05A" x="-3" y="-26"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_gw9SK3IhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gw9SLHIhEe2-Np0Hy5W05A" x="-26" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_gw9SJHIhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_gw9SJXIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gw9SJnIhEe2-Np0Hy5W05A" points="[0, 0, -206, -45]$[0, -14, -206, -59]$[115, -14, -91, -59]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gw_HUHIhEe2-Np0Hy5W05A" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gw_uYHIhEe2-Np0Hy5W05A" id="(0.4739583333333333,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_gw_ubXIhEe2-Np0Hy5W05A" type="4001" element="_gw0vRXIhEe2-Np0Hy5W05A" source="_gw4ZoHIhEe2-Np0Hy5W05A" target="_gw7c8HIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_gxAVcHIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gxAVcXIhEe2-Np0Hy5W05A" x="-9" y="23"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_gxAVcnIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gxAVc3IhEe2-Np0Hy5W05A" x="192" y="8"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_gxAVdHIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gxAVdXIhEe2-Np0Hy5W05A" x="-7"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_gw_ubnIhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_gw_ub3IhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gw_ucHIhEe2-Np0Hy5W05A" points="[36, -38, 47, 188]$[36, -171, 47, 55]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gxAVdnIhEe2-Np0Hy5W05A" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gxAVd3IhEe2-Np0Hy5W05A" id="(0.46875,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_gw_uYXIhEe2-Np0Hy5W05A" type="4001" element="_gw0vQHIhEe2-Np0Hy5W05A" source="_gw7c8HIhEe2-Np0Hy5W05A" target="_gw4ZoHIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_gw_uZXIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gw_uZnIhEe2-Np0Hy5W05A" x="10" y="19"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_gw_uZ3IhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gw_uaHIhEe2-Np0Hy5W05A" x="-4"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_gw_uaXIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gw_uanIhEe2-Np0Hy5W05A" x="9"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_gw_uYnIhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_gw_uY3IhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gw_uZHIhEe2-Np0Hy5W05A" points="[-30, 55, -41, -171]$[-30, 188, -41, -38]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gw_ua3IhEe2-Np0Hy5W05A" id="(0.46875,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gw_ubHIhEe2-Np0Hy5W05A" id="(0.5,0.5)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_gw1WUnIhEe2-Np0Hy5W05A" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_gw1WU3IhEe2-Np0Hy5W05A"/>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_gwYqYHIhEe2-Np0Hy5W05A" name="initial" outgoingEdges="_gwv2wHIhEe2-Np0Hy5W05A" width="3" height="3">
+      <target xmi:type="statemachine:InitialState" href="statemachines/switch.statemachine#initial"/>
+      <semanticElements xmi:type="statemachine:InitialState" href="statemachines/switch.statemachine#initial"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_gwZ4gHIhEe2-Np0Hy5W05A" labelSize="12" showIcon="false" backgroundColor="0,0,0">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_gwn68HIhEe2-Np0Hy5W05A" name="on" outgoingEdges="_gw0vRXIhEe2-Np0Hy5W05A" incomingEdges="_gw0vQHIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:NormalState" href="statemachines/switch.statemachine#on"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="statemachines/switch.statemachine#on"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_gwq-QHIhEe2-Np0Hy5W05A" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_gwszcHIhEe2-Np0Hy5W05A" name="do/     do_something">
+        <target xmi:type="statemachine:Action" href="statemachines/switch.statemachine#//@states.0/@do_"/>
+        <semanticElements xmi:type="statemachine:Action" href="statemachines/switch.statemachine#//@states.0/@do_"/>
+        <ownedStyle xmi:type="diagram:Square" uid="_gwtagHIhEe2-Np0Hy5W05A" labelSize="12" showIcon="false" labelAlignment="LEFT" labelPosition="node" color="255,245,181">
+          <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_gwrlUXIhEe2-Np0Hy5W05A" name="off" outgoingEdges="_gw0vQHIhEe2-Np0Hy5W05A" incomingEdges="_gwv2wHIhEe2-Np0Hy5W05A _gw0vRXIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:NormalState" href="statemachines/switch.statemachine#off"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="statemachines/switch.statemachine#off"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_gwrlUnIhEe2-Np0Hy5W05A" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_gwuooHIhEe2-Np0Hy5W05A" name="do/     do_nothing">
+        <target xmi:type="statemachine:Action" href="statemachines/switch.statemachine#//@states.1/@do_"/>
+        <semanticElements xmi:type="statemachine:Action" href="statemachines/switch.statemachine#//@states.1/@do_"/>
+        <ownedStyle xmi:type="diagram:Square" uid="_gwuooXIhEe2-Np0Hy5W05A" labelSize="12" showIcon="false" labelAlignment="LEFT" labelPosition="node" color="255,245,181">
+          <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@subNodeMappings[name='Do%20Activity']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_gwuoonIhEe2-Np0Hy5W05A" name="State Machine: Switch" height="4">
+      <target xmi:type="statemachine:StateMachine" href="statemachines/switch.statemachine#Switch"/>
+      <semanticElements xmi:type="statemachine:StateMachine" href="statemachines/switch.statemachine#Switch"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_gwvPsHIhEe2-Np0Hy5W05A" labelSize="10" showIcon="false" borderColor="209,209,209" backgroundStyle="Liquid" backgroundColor="209,209,209">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_gwv2wHIhEe2-Np0Hy5W05A" sourceNode="_gwYqYHIhEe2-Np0Hy5W05A" targetNode="_gwrlUXIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/switch.statemachine#//@transitions.0"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/switch.statemachine#//@transitions.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_gwv2wXIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_gwv2wnIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_gw0vQHIhEe2-Np0Hy5W05A" name="flip" sourceNode="_gwrlUXIhEe2-Np0Hy5W05A" targetNode="_gwn68HIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/switch.statemachine#//@transitions.1"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/switch.statemachine#//@transitions.1"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_gw0vQXIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_gw0vQnIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_gw0vRXIhEe2-Np0Hy5W05A" name="flip" sourceNode="_gwn68HIhEe2-Np0Hy5W05A" targetNode="_gwrlUXIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/switch.statemachine#//@transitions.2"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/switch.statemachine#//@transitions.2"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_gw0vRnIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_gw0vR3IhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']"/>
+    <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_gwQHgXIhEe2-Np0Hy5W05A"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer"/>
+    <target xmi:type="statemachine:StateMachine" href="statemachines/switch.statemachine#Switch"/>
+  </diagram:DSemanticDiagram>
+  <diagram:DSemanticDiagram uid="_s4PNAHIhEe2-Np0Hy5W05A">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_s4QbIHIhEe2-Np0Hy5W05A" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_s4QbIXIhEe2-Np0Hy5W05A" type="Sirius" element="_s4PNAHIhEe2-Np0Hy5W05A" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_s4ZlEHIhEe2-Np0Hy5W05A" type="2001" element="_s4RCMHIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4ZlE3IhEe2-Np0Hy5W05A" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_s4ZlFHIhEe2-Np0Hy5W05A" x="31" y="1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4baUXIhEe2-Np0Hy5W05A" type="3002" element="_s4RCMXIhEe2-Np0Hy5W05A">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_s4baUnIhEe2-Np0Hy5W05A" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4baU3IhEe2-Np0Hy5W05A"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_s4ZlEXIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4ZlEnIhEe2-Np0Hy5W05A" x="858" y="108" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_s4aMIHIhEe2-Np0Hy5W05A" type="2001" element="_s4RpQXIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4aMI3IhEe2-Np0Hy5W05A" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_s4aMJHIhEe2-Np0Hy5W05A" x="31" y="1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4cBUHIhEe2-Np0Hy5W05A" type="3002" element="_s4RpQnIhEe2-Np0Hy5W05A">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_s4cBUXIhEe2-Np0Hy5W05A" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4cBUnIhEe2-Np0Hy5W05A"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_s4aMIXIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4aMInIhEe2-Np0Hy5W05A" x="858" y="156" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_s4azMHIhEe2-Np0Hy5W05A" type="2003" element="_s4RpRHIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4azM3IhEe2-Np0Hy5W05A" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_s4azNHIhEe2-Np0Hy5W05A" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_s4azNXIhEe2-Np0Hy5W05A"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_s4azNnIhEe2-Np0Hy5W05A"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_s4azMXIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4azMnIhEe2-Np0Hy5W05A" x="690" y="217" width="99"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_s4azN3IhEe2-Np0Hy5W05A" type="2003" element="_s4SQUXIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4azOnIhEe2-Np0Hy5W05A" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_s4azO3IhEe2-Np0Hy5W05A" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_s4azPHIhEe2-Np0Hy5W05A"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_s4azPXIhEe2-Np0Hy5W05A"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_s4azOHIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4azOXIhEe2-Np0Hy5W05A" x="180" y="213" width="78"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_s4azPnIhEe2-Np0Hy5W05A" type="2003" element="_s4SQVHIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4azQXIhEe2-Np0Hy5W05A" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_s4baQHIhEe2-Np0Hy5W05A" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_s4baQXIhEe2-Np0Hy5W05A"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_s4baQnIhEe2-Np0Hy5W05A"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_s4azP3IhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4azQHIhEe2-Np0Hy5W05A" x="424" y="78" width="105"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_s4baQ3IhEe2-Np0Hy5W05A" type="2003" element="_s4SQV3IhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4baRnIhEe2-Np0Hy5W05A" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_s4baR3IhEe2-Np0Hy5W05A" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_s4baSHIhEe2-Np0Hy5W05A"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_s4baSXIhEe2-Np0Hy5W05A"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_s4baRHIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="12" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4baRXIhEe2-Np0Hy5W05A" x="428" y="300" width="97"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_s4baSnIhEe2-Np0Hy5W05A" type="2003" element="_s4S3YHIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4baTXIhEe2-Np0Hy5W05A" type="5007"/>
+          <children xmi:type="notation:Node" xmi:id="_s4baTnIhEe2-Np0Hy5W05A" type="7004">
+            <styles xmi:type="notation:SortingStyle" xmi:id="_s4baT3IhEe2-Np0Hy5W05A"/>
+            <styles xmi:type="notation:FilteringStyle" xmi:id="_s4baUHIhEe2-Np0Hy5W05A"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_s4baS3IhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="10" bold="true"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4baTHIhEe2-Np0Hy5W05A" x="186" y="6" height="40"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_s4QbInIhEe2-Np0Hy5W05A"/>
+        <edges xmi:type="notation:Edge" xmi:id="_s4cBU3IhEe2-Np0Hy5W05A" type="4001" element="_s4TecHIhEe2-Np0Hy5W05A" source="_s4ZlEHIhEe2-Np0Hy5W05A" target="_s4azMHIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4coYHIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4coYXIhEe2-Np0Hy5W05A" x="-20" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4coYnIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4coY3IhEe2-Np0Hy5W05A" x="-5" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4coZHIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4coZXIhEe2-Np0Hy5W05A" x="2" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4cBVHIhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4cBVXIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4cBVnIhEe2-Np0Hy5W05A" points="[-15, -1, 136, -120]$[-119, -1, 32, -120]$[-119, 94, 32, -25]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4coZnIhEe2-Np0Hy5W05A" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4coZ3IhEe2-Np0Hy5W05A" id="(0.32989690721649484,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_s4fErnIhEe2-Np0Hy5W05A" type="4001" element="_s4WhwHIhEe2-Np0Hy5W05A" source="_s4azMHIhEe2-Np0Hy5W05A" target="_s4aMIHIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4frsHIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4frsXIhEe2-Np0Hy5W05A" x="22" y="-12"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4frsnIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4frs3IhEe2-Np0Hy5W05A" x="20" y="6"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4frtHIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4frtXIhEe2-Np0Hy5W05A" x="-7" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4fEr3IhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4fEsHIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4fEsXIhEe2-Np0Hy5W05A" points="[52, -25, -99, 46]$[52, -72, -99, -1]$[136, -72, -15, -1]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4frtnIhEe2-Np0Hy5W05A" id="(0.32989690721649484,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4frt3IhEe2-Np0Hy5W05A" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_s4coaHIhEe2-Np0Hy5W05A" type="4001" element="_s4UFgHIhEe2-Np0Hy5W05A" source="_s4azMHIhEe2-Np0Hy5W05A" target="_s4azPnIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4cobHIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4cobXIhEe2-Np0Hy5W05A" x="45" y="17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4dPcHIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4dPcXIhEe2-Np0Hy5W05A" x="-5"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4dPcnIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4dPc3IhEe2-Np0Hy5W05A" x="-5" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4coaXIhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4coanIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4coa3IhEe2-Np0Hy5W05A" points="[17, -25, 274, 114]$[17, -139, 274, 0]$[-195, -139, 62, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4dPdHIhEe2-Np0Hy5W05A" id="(0.32989690721649484,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4dPdXIhEe2-Np0Hy5W05A" id="(0.39805825242718446,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_s4fruHIhEe2-Np0Hy5W05A" type="4001" element="_s4XI03IhEe2-Np0Hy5W05A" source="_s4azMHIhEe2-Np0Hy5W05A" target="_s4azMHIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4gSwHIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4gSwXIhEe2-Np0Hy5W05A" x="14" y="-24"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4gSwnIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4gSw3IhEe2-Np0Hy5W05A" x="9" y="6"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4gSxHIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4gSxXIhEe2-Np0Hy5W05A" x="-5" y="8"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4fruXIhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4frunIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4fru3IhEe2-Np0Hy5W05A" points="[65, -4, 65, -4]$[82, -4, 82, -4]$[82, 40, 82, 40]$[34, 40, 34, 40]$[34, 26, 34, 26]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4g50HIhEe2-Np0Hy5W05A" id="(0.32989690721649484,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4g50XIhEe2-Np0Hy5W05A" id="(0.32989690721649484,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_s4d2jnIhEe2-Np0Hy5W05A" type="4001" element="_s4Usl3IhEe2-Np0Hy5W05A" source="_s4baQ3IhEe2-Np0Hy5W05A" target="_s4azMHIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4edkHIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4edkXIhEe2-Np0Hy5W05A" x="-36" y="-17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4edknIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4edk3IhEe2-Np0Hy5W05A" x="14" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4edlHIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4edlXIhEe2-Np0Hy5W05A" x="-6" y="-131"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4d2j3IhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4d2kHIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4d2kXIhEe2-Np0Hy5W05A" points="[36, 0, -199, 83]$[252, 0, 17, 83]$[252, -57, 17, 26]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4edlnIhEe2-Np0Hy5W05A" id="(0.6263157894736842,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4edl3IhEe2-Np0Hy5W05A" id="(0.32989690721649484,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_s4d2gnIhEe2-Np0Hy5W05A" type="4001" element="_s4UsknIhEe2-Np0Hy5W05A" source="_s4azN3IhEe2-Np0Hy5W05A" target="_s4baQ3IhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4d2hnIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4d2h3IhEe2-Np0Hy5W05A" x="27" y="-14"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4d2iHIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4d2iXIhEe2-Np0Hy5W05A" x="19"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4d2inIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4d2i3IhEe2-Np0Hy5W05A" x="-100" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4d2g3IhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4d2hHIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4d2hXIhEe2-Np0Hy5W05A" points="[-5, 26, -262, -61]$[-5, 87, -262, 0]$[198, 87, -59, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4d2jHIhEe2-Np0Hy5W05A" id="(0.6578947368421053,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4d2jXIhEe2-Np0Hy5W05A" id="(0.6263157894736842,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_s4jWEnIhEe2-Np0Hy5W05A" type="4001" element="_s4Xv6XIhEe2-Np0Hy5W05A" source="_s4azN3IhEe2-Np0Hy5W05A" target="_s4azN3IhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4jWFnIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4jWF3IhEe2-Np0Hy5W05A" x="15" y="6"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4jWGHIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4jWGXIhEe2-Np0Hy5W05A" x="-9" y="-22"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4jWGnIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4jWG3IhEe2-Np0Hy5W05A" x="11" y="-6"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4jWE3IhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4jWFHIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4jWFXIhEe2-Np0Hy5W05A" points="[-50, 0, -50, 0]$[-68, 0, -68, 0]$[-68, 44, -68, 44]$[-26, 44, -26, 44]$[-26, 26, -26, 26]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4jWHHIhEe2-Np0Hy5W05A" id="(0.6578947368421053,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4jWHXIhEe2-Np0Hy5W05A" id="(0.6578947368421053,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_s4dPdnIhEe2-Np0Hy5W05A" type="4001" element="_s4UFhXIhEe2-Np0Hy5W05A" source="_s4azPnIhEe2-Np0Hy5W05A" target="_s4azN3IhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4dPenIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4dPe3IhEe2-Np0Hy5W05A" x="-52" y="17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4dPfHIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4dPfXIhEe2-Np0Hy5W05A" x="42" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4dPfnIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4dPf3IhEe2-Np0Hy5W05A" x="-27" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4dPd3IhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4dPeHIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4dPeXIhEe2-Np0Hy5W05A" points="[-41, 0, 194, -135]$[-237, 0, -2, -135]$[-237, 110, -2, -25]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4d2gHIhEe2-Np0Hy5W05A" id="(0.39805825242718446,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4d2gXIhEe2-Np0Hy5W05A" id="(0.6578947368421053,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_s4fEonIhEe2-Np0Hy5W05A" type="4001" element="_s4VTp3IhEe2-Np0Hy5W05A" source="_s4azPnIhEe2-Np0Hy5W05A" target="_s4baQ3IhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4fEpnIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4fEp3IhEe2-Np0Hy5W05A" x="-50" y="-102" width="193" height="17"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4fEqHIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4fEqXIhEe2-Np0Hy5W05A" x="-19" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4fEqnIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4fEq3IhEe2-Np0Hy5W05A" x="-82" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4fEo3IhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4fEpHIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4fEpXIhEe2-Np0Hy5W05A" points="[15, 26, -7, -196]$[15, 197, -7, -25]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4fErHIhEe2-Np0Hy5W05A" id="(0.39805825242718446,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4fErXIhEe2-Np0Hy5W05A" id="(0.6263157894736842,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_s4jWHnIhEe2-Np0Hy5W05A" type="4001" element="_s4YW9HIhEe2-Np0Hy5W05A" source="_s4azPnIhEe2-Np0Hy5W05A" target="_s4azPnIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4j9IHIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4j9IXIhEe2-Np0Hy5W05A" x="2" y="-18"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4j9InIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4j9I3IhEe2-Np0Hy5W05A" x="-15"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4j9JHIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4j9JXIhEe2-Np0Hy5W05A" x="15"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4jWH3IhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4jWIHIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4jWIXIhEe2-Np0Hy5W05A" points="[-21, -25, -21, -25]$[-21, -42, -21, -42]$[39, -42, 39, -42]$[39, -25, 39, -25]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4j9JnIhEe2-Np0Hy5W05A" id="(0.39805825242718446,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4j9J3IhEe2-Np0Hy5W05A" id="(0.39805825242718446,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_s4edmHIhEe2-Np0Hy5W05A" type="4001" element="_s4VTonIhEe2-Np0Hy5W05A" source="_s4baQ3IhEe2-Np0Hy5W05A" target="_s4azPnIhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4ednHIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4ednXIhEe2-Np0Hy5W05A" x="51" y="-88"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4ednnIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4edn3IhEe2-Np0Hy5W05A" x="105" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4edoHIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4edoXIhEe2-Np0Hy5W05A" x="9"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4edmXIhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4edmnIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4edm3IhEe2-Np0Hy5W05A" points="[-24, -25, -2, 197]$[-24, -196, -2, 26]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4fEoHIhEe2-Np0Hy5W05A" id="(0.6263157894736842,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4fEoXIhEe2-Np0Hy5W05A" id="(0.39805825242718446,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_s4hg4HIhEe2-Np0Hy5W05A" type="4001" element="_s4Xv5HIhEe2-Np0Hy5W05A" source="_s4baQ3IhEe2-Np0Hy5W05A" target="_s4baQ3IhEe2-Np0Hy5W05A">
+          <children xmi:type="notation:Node" xmi:id="_s4iH8HIhEe2-Np0Hy5W05A" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4iH8XIhEe2-Np0Hy5W05A" x="-2" y="-14"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4ivAHIhEe2-Np0Hy5W05A" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4ivAXIhEe2-Np0Hy5W05A" x="-5"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_s4ivAnIhEe2-Np0Hy5W05A" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s4ivA3IhEe2-Np0Hy5W05A" x="4" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_s4hg4XIhEe2-Np0Hy5W05A" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_s4hg4nIhEe2-Np0Hy5W05A" fontName="Segoe UI" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s4hg43IhEe2-Np0Hy5W05A" points="[17, 26, 17, 26]$[17, 41, 17, 41]$[-43, 41, -43, 41]$[-43, 26, -43, 26]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4jWEHIhEe2-Np0Hy5W05A" id="(0.6263157894736842,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s4jWEXIhEe2-Np0Hy5W05A" id="(0.6263157894736842,0.5)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_s4YW-XIhEe2-Np0Hy5W05A" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_s4YW-nIhEe2-Np0Hy5W05A"/>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_s4RCMHIhEe2-Np0Hy5W05A" name="initial" outgoingEdges="_s4TecHIhEe2-Np0Hy5W05A" width="3" height="3">
+      <target xmi:type="statemachine:InitialState" href="statemachines/garagedoor.statemachine#initial"/>
+      <semanticElements xmi:type="statemachine:InitialState" href="statemachines/garagedoor.statemachine#initial"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_s4RCMXIhEe2-Np0Hy5W05A" labelSize="12" showIcon="false" backgroundColor="0,0,0">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Initial%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_s4RpQXIhEe2-Np0Hy5W05A" name="final" incomingEdges="_s4WhwHIhEe2-Np0Hy5W05A" width="3" height="3">
+      <target xmi:type="statemachine:FinalState" href="statemachines/garagedoor.statemachine#final"/>
+      <semanticElements xmi:type="statemachine:FinalState" href="statemachines/garagedoor.statemachine#final"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_s4RpQnIhEe2-Np0Hy5W05A" labelSize="12" showIcon="false" backgroundColor="209,209,209">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Final%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@nodeMappings[name='Final%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_s4RpRHIhEe2-Np0Hy5W05A" name="Closed" outgoingEdges="_s4UFgHIhEe2-Np0Hy5W05A _s4WhwHIhEe2-Np0Hy5W05A _s4XI03IhEe2-Np0Hy5W05A" incomingEdges="_s4TecHIhEe2-Np0Hy5W05A _s4Usl3IhEe2-Np0Hy5W05A _s4XI03IhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:NormalState" href="statemachines/garagedoor.statemachine#Closed"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="statemachines/garagedoor.statemachine#Closed"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_s4RpRXIhEe2-Np0Hy5W05A" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_s4SQUXIhEe2-Np0Hy5W05A" name="Open" outgoingEdges="_s4UsknIhEe2-Np0Hy5W05A _s4Xv6XIhEe2-Np0Hy5W05A" incomingEdges="_s4UFhXIhEe2-Np0Hy5W05A _s4Xv6XIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:NormalState" href="statemachines/garagedoor.statemachine#Open"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="statemachines/garagedoor.statemachine#Open"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_s4SQUnIhEe2-Np0Hy5W05A" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_s4SQVHIhEe2-Np0Hy5W05A" name="Opening" outgoingEdges="_s4UFhXIhEe2-Np0Hy5W05A _s4VTp3IhEe2-Np0Hy5W05A _s4YW9HIhEe2-Np0Hy5W05A" incomingEdges="_s4UFgHIhEe2-Np0Hy5W05A _s4VTonIhEe2-Np0Hy5W05A _s4YW9HIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:NormalState" href="statemachines/garagedoor.statemachine#Opening"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="statemachines/garagedoor.statemachine#Opening"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_s4SQVXIhEe2-Np0Hy5W05A" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_s4SQV3IhEe2-Np0Hy5W05A" name="Closing" outgoingEdges="_s4Usl3IhEe2-Np0Hy5W05A _s4VTonIhEe2-Np0Hy5W05A _s4Xv5HIhEe2-Np0Hy5W05A" incomingEdges="_s4UsknIhEe2-Np0Hy5W05A _s4VTp3IhEe2-Np0Hy5W05A _s4Xv5HIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:NormalState" href="statemachines/garagedoor.statemachine#Closing"/>
+      <semanticElements xmi:type="statemachine:NormalState" href="statemachines/garagedoor.statemachine#Closing"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_s4SQWHIhEe2-Np0Hy5W05A" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" backgroundColor="255,245,181" foregroundColor="255,245,181">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='Normal%20State']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_s4S3YHIhEe2-Np0Hy5W05A" name="State Machine: Garage Door" height="4">
+      <target xmi:type="statemachine:StateMachine" href="statemachines/garagedoor.statemachine#Garage Door"/>
+      <semanticElements xmi:type="statemachine:StateMachine" href="statemachines/garagedoor.statemachine#Garage Door"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_s4S3YXIhEe2-Np0Hy5W05A" labelSize="10" showIcon="false" borderColor="209,209,209" backgroundStyle="Liquid" backgroundColor="209,209,209">
+        <labelFormat>bold</labelFormat>
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@containerMappings[name='State%20Machine%20Label']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4TecHIhEe2-Np0Hy5W05A" sourceNode="_s4RCMHIhEe2-Np0Hy5W05A" targetNode="_s4RpRHIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.0"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4TecXIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4TecnIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4UFgHIhEe2-Np0Hy5W05A" name="openDoor / motor.upwards" sourceNode="_s4RpRHIhEe2-Np0Hy5W05A" targetNode="_s4SQVHIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.1"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.1"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4UFgXIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4UFgnIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4UFhXIhEe2-Np0Hy5W05A" name=" [stopper] / motor.stop" sourceNode="_s4SQVHIhEe2-Np0Hy5W05A" targetNode="_s4SQUXIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.2"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.2"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4UFhnIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4UFh3IhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4UsknIhEe2-Np0Hy5W05A" name="closeDoor / motor.downwards" sourceNode="_s4SQUXIhEe2-Np0Hy5W05A" targetNode="_s4SQV3IhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.3"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.3"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4Usk3IhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4UslHIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4Usl3IhEe2-Np0Hy5W05A" name=" [stopper] / motor.stop" sourceNode="_s4SQV3IhEe2-Np0Hy5W05A" targetNode="_s4RpRHIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.4"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.4"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4UsmHIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4UsmXIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4VTonIhEe2-Np0Hy5W05A" name="openDoor / motor.upwards" sourceNode="_s4SQV3IhEe2-Np0Hy5W05A" targetNode="_s4SQVHIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.5"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.5"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4VTo3IhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4VTpHIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4VTp3IhEe2-Np0Hy5W05A" name="closeDoor / motor.downwards" sourceNode="_s4SQVHIhEe2-Np0Hy5W05A" targetNode="_s4SQV3IhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.6"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.6"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4V6sHIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4V6sXIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4WhwHIhEe2-Np0Hy5W05A" name=" [shutdown]" sourceNode="_s4RpRHIhEe2-Np0Hy5W05A" targetNode="_s4RpQXIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.7"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.7"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4WhwXIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4XI0HIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4XI03IhEe2-Np0Hy5W05A" name="closeDoor" sourceNode="_s4RpRHIhEe2-Np0Hy5W05A" targetNode="_s4RpRHIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.8"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.8"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4Xv4HIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4Xv4XIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4Xv5HIhEe2-Np0Hy5W05A" name="closeDoor" sourceNode="_s4SQV3IhEe2-Np0Hy5W05A" targetNode="_s4SQV3IhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.9"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.9"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4Xv5XIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4Xv5nIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4Xv6XIhEe2-Np0Hy5W05A" name="openDoor" sourceNode="_s4SQUXIhEe2-Np0Hy5W05A" targetNode="_s4SQUXIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.10"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.10"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4YW8HIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4YW8XIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s4YW9HIhEe2-Np0Hy5W05A" name="openDoor" sourceNode="_s4SQVHIhEe2-Np0Hy5W05A" targetNode="_s4SQVHIhEe2-Np0Hy5W05A">
+      <target xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.11"/>
+      <semanticElements xmi:type="statemachine:Transition" href="statemachines/garagedoor.statemachine#//@transitions.11"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s4YW9XIhEe2-Np0Hy5W05A" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s4YW9nIhEe2-Np0Hy5W05A" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer/@edgeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']"/>
+    <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_s4P0EHIhEe2-Np0Hy5W05A"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/resource/swt.most.sirius.statemachine/description/statemachine.odesign#//@ownedViewpoints[name='gDSL']/@ownedRepresentations[name='StateMachine']/@defaultLayer"/>
+    <target xmi:type="statemachine:StateMachine" href="statemachines/garagedoor.statemachine#Garage Door"/>
+  </diagram:DSemanticDiagram>
+  <diagram:DSemanticDiagram uid="_7ZlfIHI4Ee2-kruQw0QW4w">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_7ZmtQHI4Ee2-kruQw0QW4w" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_7ZmtQXI4Ee2-kruQw0QW4w" type="Sirius" element="_7ZlfIHI4Ee2-kruQw0QW4w" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_7aFOYHI4Ee2-kruQw0QW4w" type="2001" element="_7Zn7YHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aF1cHI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aF1cXI4Ee2-kruQw0QW4w" x="31" y="1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aUe8HI4Ee2-kruQw0QW4w" type="3001" element="_7ZvQJnI4Ee2-kruQw0QW4w">
+            <children xmi:type="notation:Node" xmi:id="_7aUe83I4Ee2-kruQw0QW4w" type="5001">
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_7aUe9HI4Ee2-kruQw0QW4w" y="5"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_7aUe-HI4Ee2-kruQw0QW4w" type="3002" element="_7ZvQJ3I4Ee2-kruQw0QW4w">
+              <styles xmi:type="notation:ShapeStyle" xmi:id="_7aUe-XI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+              <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aUe-nI4Ee2-kruQw0QW4w"/>
+            </children>
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aUe8XI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aUe8nI4Ee2-kruQw0QW4w" x="22" y="10" width="20" height="20"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aUe9XI4Ee2-kruQw0QW4w" type="3002" element="_7Zn7YXI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aUe9nI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aUe93I4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aFOYXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aFOYnI4Ee2-kruQw0QW4w" x="31" y="678" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aF1cnI4Ee2-kruQw0QW4w" type="2001" element="_7ZoicXI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aGcgHI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aGcgXI4Ee2-kruQw0QW4w" x="31" y="1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aVGAHI4Ee2-kruQw0QW4w" type="3002" element="_7ZoicnI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aVGAXI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aVGAnI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aF1c3I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aF1dHI4Ee2-kruQw0QW4w" x="211" y="678" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aGcgnI4Ee2-kruQw0QW4w" type="2001" element="_7ZoidHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aGchXI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aGchnI4Ee2-kruQw0QW4w" x="31" y="1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aVGA3I4Ee2-kruQw0QW4w" type="3002" element="_7ZoidXI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aVGBHI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aVGBXI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aGcg3I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aGchHI4Ee2-kruQw0QW4w" x="888" y="678" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aHDkHI4Ee2-kruQw0QW4w" type="2001" element="_7Zoid3I4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aHDk3I4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aHDlHI4Ee2-kruQw0QW4w" x="-23" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aVGBnI4Ee2-kruQw0QW4w" type="3002" element="_7ZpJgHI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aVGB3I4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aVGCHI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aHDkXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aHDknI4Ee2-kruQw0QW4w" x="552" y="389" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aHqoHI4Ee2-kruQw0QW4w" type="2001" element="_7ZpJgnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aHqo3I4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aHqpHI4Ee2-kruQw0QW4w" x="-17" y="31"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aVtEHI4Ee2-kruQw0QW4w" type="3002" element="_7ZpJg3I4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aVtEXI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aVtEnI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aHqoXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aHqonI4Ee2-kruQw0QW4w" x="552" y="780" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aHqpXI4Ee2-kruQw0QW4w" type="2001" element="_7ZpwkHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aHqqHI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aHqqXI4Ee2-kruQw0QW4w" x="-3" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aVtE3I4Ee2-kruQw0QW4w" type="3002" element="_7ZpwkXI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aVtFHI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aVtFXI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aHqpnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aHqp3I4Ee2-kruQw0QW4w" x="31" y="567" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aIRsHI4Ee2-kruQw0QW4w" type="2001" element="_7Zpwk3I4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aJf0HI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aJf0XI4Ee2-kruQw0QW4w" x="-30" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aVtFnI4Ee2-kruQw0QW4w" type="3002" element="_7ZpwlHI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aVtF3I4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aVtGHI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aIRsXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aIRsnI4Ee2-kruQw0QW4w" x="259" y="324" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aJf0nI4Ee2-kruQw0QW4w" type="2001" element="_7ZqXoHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aKG4HI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aKG4XI4Ee2-kruQw0QW4w" x="-51" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aVtGXI4Ee2-kruQw0QW4w" type="3002" element="_7ZqXoXI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aVtGnI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aVtG3I4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aJf03I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aJf1HI4Ee2-kruQw0QW4w" x="384" y="324" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aKG4nI4Ee2-kruQw0QW4w" type="2001" element="_7ZqXo3I4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aKG5XI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aKG5nI4Ee2-kruQw0QW4w" x="-19" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aWUIHI4Ee2-kruQw0QW4w" type="3002" element="_7ZqXpHI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aWUIXI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aWUInI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aKG43I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aKG5HI4Ee2-kruQw0QW4w" x="696" y="324" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aKG53I4Ee2-kruQw0QW4w" type="2001" element="_7Zq-sHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aKG6nI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aKG63I4Ee2-kruQw0QW4w" x="-34" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aWUI3I4Ee2-kruQw0QW4w" type="3002" element="_7Zq-sXI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aWUJHI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aWUJXI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aKG6HI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aKG6XI4Ee2-kruQw0QW4w" x="798" y="324" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aKt8HI4Ee2-kruQw0QW4w" type="2001" element="_7Zq-s3I4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aKt83I4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aKt9HI4Ee2-kruQw0QW4w" x="-29" y="31"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aW7MHI4Ee2-kruQw0QW4w" type="3002" element="_7Zq-tHI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aW7MXI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aW7MnI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aKt8XI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aKt8nI4Ee2-kruQw0QW4w" x="821" y="849" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aKt9XI4Ee2-kruQw0QW4w" type="2001" element="_7Zq-tnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aKt-HI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aKt-XI4Ee2-kruQw0QW4w" x="-64" y="31"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aW7M3I4Ee2-kruQw0QW4w" type="3002" element="_7ZrlwHI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aW7NHI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aW7NXI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aKt9nI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aKt93I4Ee2-kruQw0QW4w" x="684" y="849" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aKt-nI4Ee2-kruQw0QW4w" type="2001" element="_7ZrlwnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aLVAHI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aLVAXI4Ee2-kruQw0QW4w" x="-19" y="31"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aW7NnI4Ee2-kruQw0QW4w" type="3002" element="_7Zrlw3I4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aW7N3I4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aW7OHI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aKt-3I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aKt_HI4Ee2-kruQw0QW4w" x="402" y="849" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aLVAnI4Ee2-kruQw0QW4w" type="2001" element="_7ZrlxXI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aLVBXI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aLVBnI4Ee2-kruQw0QW4w" x="-34" y="31"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aW7OXI4Ee2-kruQw0QW4w" type="3002" element="_7ZrlxnI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aW7OnI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aW7O3I4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aLVA3I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aLVBHI4Ee2-kruQw0QW4w" x="270" y="849" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aLVB3I4Ee2-kruQw0QW4w" type="2001" element="_7ZsM0XI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aLVCnI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aLVC3I4Ee2-kruQw0QW4w" x="-91" y="1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aW7PHI4Ee2-kruQw0QW4w" type="3002" element="_7ZsM0nI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aW7PXI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aW7PnI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aLVCHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aLVCXI4Ee2-kruQw0QW4w" x="516" y="611" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aL8EHI4Ee2-kruQw0QW4w" type="2001" element="_7ZsM1HI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aL8E3I4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aL8FHI4Ee2-kruQw0QW4w" x="-51" y="31"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aW7P3I4Ee2-kruQw0QW4w" type="3002" element="_7ZsM1XI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aW7QHI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aW7QXI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aL8EXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aL8EnI4Ee2-kruQw0QW4w" x="413" y="538" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aL8FXI4Ee2-kruQw0QW4w" type="2001" element="_7Zsz4XI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aL8GHI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aL8GXI4Ee2-kruQw0QW4w" x="31" y="1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aXiQHI4Ee2-kruQw0QW4w" type="3002" element="_7Zsz4nI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aXiQXI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aXiQnI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aL8FnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aL8F3I4Ee2-kruQw0QW4w" x="588" y="426" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aL8GnI4Ee2-kruQw0QW4w" type="2001" element="_7Zsz5HI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aMjIHI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aMjIXI4Ee2-kruQw0QW4w" x="-64" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aXiQ3I4Ee2-kruQw0QW4w" type="3002" element="_7Zta8HI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aXiRHI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aXiRXI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aL8G3I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aL8HHI4Ee2-kruQw0QW4w" x="732" y="496" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aMjInI4Ee2-kruQw0QW4w" type="2001" element="_7Zta8nI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aMjJXI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aMjJnI4Ee2-kruQw0QW4w" x="-87"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aXiRnI4Ee2-kruQw0QW4w" type="3002" element="_7Zta83I4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aXiR3I4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aXiSHI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aMjI3I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aMjJHI4Ee2-kruQw0QW4w" x="182" y="496" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aMjJ3I4Ee2-kruQw0QW4w" type="2001" element="_7ZuCAXI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aNKMHI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aNKMXI4Ee2-kruQw0QW4w" x="-29" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aXiSXI4Ee2-kruQw0QW4w" type="3002" element="_7ZupEHI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aXiSnI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aXiS3I4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aMjKHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aMjKXI4Ee2-kruQw0QW4w" x="282" y="582" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aNKMnI4Ee2-kruQw0QW4w" type="2001" element="_7ZupEnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aNKNXI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aNKNnI4Ee2-kruQw0QW4w" x="31" y="2"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aXiTHI4Ee2-kruQw0QW4w" type="3002" element="_7ZupE3I4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aXiTXI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aXiTnI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aNKM3I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aNKNHI4Ee2-kruQw0QW4w" x="684" y="924" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aNKN3I4Ee2-kruQw0QW4w" type="2001" element="_7ZvQIHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aNxQHI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aNxQXI4Ee2-kruQw0QW4w" x="-30" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aXiT3I4Ee2-kruQw0QW4w" type="3002" element="_7ZvQIXI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aXiUHI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aXiUXI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aNKOHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aNKOXI4Ee2-kruQw0QW4w" x="821" y="582" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aNxQnI4Ee2-kruQw0QW4w" type="2001" element="_7ZvQI3I4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aNxRXI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aNxRnI4Ee2-kruQw0QW4w" x="-30" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aYJUHI4Ee2-kruQw0QW4w" type="3002" element="_7ZvQJHI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aYJUXI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aYJUnI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aNxQ3I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aNxRHI4Ee2-kruQw0QW4w" x="450" y="260" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aOYUHI4Ee2-kruQw0QW4w" type="2001" element="_7Zv3MHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aOYU3I4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aOYVHI4Ee2-kruQw0QW4w" x="-20" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aYJU3I4Ee2-kruQw0QW4w" type="3003" element="_7ZweQHI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aYJVHI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aYJVXI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aOYUXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aOYUnI4Ee2-kruQw0QW4w" x="126" y="663" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aO_YHI4Ee2-kruQw0QW4w" type="2001" element="_7ZweQnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aO_Y3I4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aO_ZHI4Ee2-kruQw0QW4w" x="-35" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aYJVnI4Ee2-kruQw0QW4w" type="3003" element="_7ZweQ3I4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aYJV3I4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aYJWHI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aO_YXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aO_YnI4Ee2-kruQw0QW4w" x="335" y="374" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aPmcHI4Ee2-kruQw0QW4w" type="2001" element="_7ZweRXI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aPmc3I4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aPmdHI4Ee2-kruQw0QW4w" x="-20" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aYJWXI4Ee2-kruQw0QW4w" type="3003" element="_7ZweRnI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aYJWnI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aYJW3I4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aPmcXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aPmcnI4Ee2-kruQw0QW4w" x="750" y="374" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aPmdXI4Ee2-kruQw0QW4w" type="2001" element="_7ZweSHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aQNgHI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aQNgXI4Ee2-kruQw0QW4w" x="-34" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aYJXHI4Ee2-kruQw0QW4w" type="3003" element="_7ZweSXI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aYJXXI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aYJXnI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aPmdnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aPmd3I4Ee2-kruQw0QW4w" x="750" y="765" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aQNgnI4Ee2-kruQw0QW4w" type="2001" element="_7ZxFUXI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aQNhXI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aQNhnI4Ee2-kruQw0QW4w" x="-20" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aYwYHI4Ee2-kruQw0QW4w" type="3003" element="_7ZxFUnI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aYwYXI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aYwYnI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aQNg3I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aQNhHI4Ee2-kruQw0QW4w" x="335" y="765" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aQNh3I4Ee2-kruQw0QW4w" type="2001" element="_7ZxFVHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aQ0kHI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aQ0kXI4Ee2-kruQw0QW4w" x="-35" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aYwY3I4Ee2-kruQw0QW4w" type="3003" element="_7ZxFVXI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aYwZHI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aYwZXI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aQNiHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aQNiXI4Ee2-kruQw0QW4w" x="497" y="496" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aQ0knI4Ee2-kruQw0QW4w" type="2001" element="_7ZxFV3I4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aRboHI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aRboXI4Ee2-kruQw0QW4w" x="-34" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aYwZnI4Ee2-kruQw0QW4w" type="3003" element="_7ZxFWHI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aYwZ3I4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aYwaHI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aQ0k3I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aQ0lHI4Ee2-kruQw0QW4w" x="624" y="496" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aRbonI4Ee2-kruQw0QW4w" type="2001" element="_7ZxFWnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aRbpXI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aRbpnI4Ee2-kruQw0QW4w" x="-20" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aYwaXI4Ee2-kruQw0QW4w" type="3003" element="_7ZxsYHI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aYwanI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aYwa3I4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aRbo3I4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aRbpHI4Ee2-kruQw0QW4w" x="150" y="552" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aSCsHI4Ee2-kruQw0QW4w" type="2001" element="_7ZxsYnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aSCs3I4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aSCtHI4Ee2-kruQw0QW4w" x="-34" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aZXcHI4Ee2-kruQw0QW4w" type="3003" element="_7ZxsY3I4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aZXcXI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aZXcnI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aSCsXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aSCsnI4Ee2-kruQw0QW4w" x="365" y="625" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aSpwHI4Ee2-kruQw0QW4w" type="2001" element="_7ZxsZXI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aTQ0HI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aTQ0XI4Ee2-kruQw0QW4w" x="-34" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aZXc3I4Ee2-kruQw0QW4w" type="3003" element="_7ZxsZnI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aZXdHI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aZXdXI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aSpwXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aSpwnI4Ee2-kruQw0QW4w" x="552" y="870" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aT34HI4Ee2-kruQw0QW4w" type="2001" element="_7ZxsaHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aT343I4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aT35HI4Ee2-kruQw0QW4w" x="-35" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aZXdnI4Ee2-kruQw0QW4w" type="3003" element="_7ZxsaXI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aZXd3I4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aZXeHI4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aT34XI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aT34nI4Ee2-kruQw0QW4w" x="761" y="625" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_7aT35XI4Ee2-kruQw0QW4w" type="2001" element="_7Zxsa3I4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aT36HI4Ee2-kruQw0QW4w" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_7aT36XI4Ee2-kruQw0QW4w" x="-35" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aZXeXI4Ee2-kruQw0QW4w" type="3003" element="_7ZxsbHI4Ee2-kruQw0QW4w">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_7aZXenI4Ee2-kruQw0QW4w" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aZXe3I4Ee2-kruQw0QW4w"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_7aT35nI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aT353I4Ee2-kruQw0QW4w" x="557" y="260" width="20" height="60"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_7ZmtQnI4Ee2-kruQw0QW4w"/>
+        <edges xmi:type="notation:Edge" xmi:id="_7aZ-gHI4Ee2-kruQw0QW4w" type="4001" element="_7Zy6gHI4Ee2-kruQw0QW4w" source="_7aFOYHI4Ee2-kruQw0QW4w" target="_7aOYUHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aalkHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aalkXI4Ee2-kruQw0QW4w" x="21" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aalknI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aalk3I4Ee2-kruQw0QW4w" x="12" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aallHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aallXI4Ee2-kruQw0QW4w" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7aZ-gXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7aZ-gnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7aZ-g3I4Ee2-kruQw0QW4w" points="[15, 18, -75, -27]$[80, 18, -10, -27]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aallnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aall3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7aalmHI4Ee2-kruQw0QW4w" type="4001" element="_7ZzhknI4Ee2-kruQw0QW4w" source="_7aF1cnI4Ee2-kruQw0QW4w" target="_7aO_YHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7abMoHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7abMoXI4Ee2-kruQw0QW4w" x="94" y="66"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7abMonI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7abMo3I4Ee2-kruQw0QW4w" x="11" y="8"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7abMpHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7abMpXI4Ee2-kruQw0QW4w" x="1" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7aalmXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7aalmnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7aalm3I4Ee2-kruQw0QW4w" points="[2, 0, -117, 244]$[2, -275, -117, -31]$[109, -275, -10, -31]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7abMpnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7abMp3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7akWkHI4Ee2-kruQw0QW4w" type="4001" element="_7Z5oOnI4Ee2-kruQw0QW4w" source="_7aF1cnI4Ee2-kruQw0QW4w" target="_7aRbonI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7akWlHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7akWlXI4Ee2-kruQw0QW4w" x="15" y="-14"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7akWlnI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7akWl3I4Ee2-kruQw0QW4w" x="49" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7akWmHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7akWmXI4Ee2-kruQw0QW4w" x="1" y="7"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7akWkXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7akWknI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7akWk3I4Ee2-kruQw0QW4w" points="[-10, 0, 56, 66]$[-10, -96, 56, -30]$[-56, -96, 10, -30]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7akWmnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7akWm3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7akWqHI4Ee2-kruQw0QW4w" type="4001" element="_7Z6PSXI4Ee2-kruQw0QW4w" source="_7aF1cnI4Ee2-kruQw0QW4w" target="_7aSCsHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7ak9oHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ak9oXI4Ee2-kruQw0QW4w" x="9" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ak9onI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ak9o3I4Ee2-kruQw0QW4w" x="54" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ak9pHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ak9pXI4Ee2-kruQw0QW4w" x="-1" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7akWqXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7akWqnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7akWq3I4Ee2-kruQw0QW4w" points="[15, 0, -134, -7]$[15, -18, -134, -25]$[139, -18, -10, -25]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ak9pnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ak9p3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7aoA_nI4Ee2-kruQw0QW4w" type="4001" element="_7Z8rgHI4Ee2-kruQw0QW4w" source="_7aOYUHI4Ee2-kruQw0QW4w" target="_7aF1cnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aooAHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aooAXI4Ee2-kruQw0QW4w" x="4" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aooAnI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aooA3I4Ee2-kruQw0QW4w" x="-4" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aooBHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aooBXI4Ee2-kruQw0QW4w" x="-11" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7aoA_3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7aoBAHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7aoBAXI4Ee2-kruQw0QW4w" points="[10, 33, -80, -12]$[75, 33, -15, -12]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aooBnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aooB3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7arESHI4Ee2-kruQw0QW4w" type="4001" element="_7Z_u1XI4Ee2-kruQw0QW4w" source="_7aQNgnI4Ee2-kruQw0QW4w" target="_7aF1cnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7arETHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7arETXI4Ee2-kruQw0QW4w" x="12" y="41"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7arrUHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7arrUXI4Ee2-kruQw0QW4w" x="-21" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7arrUnI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7arrU3I4Ee2-kruQw0QW4w" x="14"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7arESXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7arESnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7arES3I4Ee2-kruQw0QW4w" points="[-10, 26, 109, 83]$[-117, 26, 2, 83]$[-117, -57, 2, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7arrVHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7arrVXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7atgjnI4Ee2-kruQw0QW4w" type="4001" element="_7aBkAHI4Ee2-kruQw0QW4w" source="_7aSCsHI4Ee2-kruQw0QW4w" target="_7aF1cnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7atgknI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7atgk3I4Ee2-kruQw0QW4w" x="84" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7atglHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7atglXI4Ee2-kruQw0QW4w" x="-89" y="82"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7atglnI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7atgl3I4Ee2-kruQw0QW4w" x="-17" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7atgj3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7atgkHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7atgkXI4Ee2-kruQw0QW4w" points="[10, -25, 159, -18]$[62, -25, 211, -18]$[62, 47, 211, 54]$[-135, 47, 14, 54]$[-135, 23, 14, 30]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7atgmHI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7atgmXI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7aeP8nI4Ee2-kruQw0QW4w" type="4001" element="_7Z1Wx3I4Ee2-kruQw0QW4w" source="_7aGcgnI4Ee2-kruQw0QW4w" target="_7aPmdXI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aeP9nI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aeP93I4Ee2-kruQw0QW4w" x="-26" y="54"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aeP-HI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aeP-XI4Ee2-kruQw0QW4w" x="24"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aeP-nI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aeP-3I4Ee2-kruQw0QW4w" x="25" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7aeP83I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7aeP9HI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7aeP9XI4Ee2-kruQw0QW4w" points="[3, 30, 146, -117]$[3, 114, 146, -33]$[-133, 114, 10, -33]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ae3AHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ae3AXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7amLwnI4Ee2-kruQw0QW4w" type="4001" element="_7Z7dYnI4Ee2-kruQw0QW4w" source="_7aGcgnI4Ee2-kruQw0QW4w" target="_7aT34HI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7amLxnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7amLx3I4Ee2-kruQw0QW4w" x="-24" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7amLyHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7amLyXI4Ee2-kruQw0QW4w" x="-12"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7amLynI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7amLy3I4Ee2-kruQw0QW4w" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7amLw3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7amLxHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7amLxXI4Ee2-kruQw0QW4w" points="[-9, -30, 123, 53]$[-9, -54, 123, 29]$[-122, -54, 10, 29]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7amLzHI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7amLzXI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7apPGHI4Ee2-kruQw0QW4w" type="4001" element="_7Z-gsHI4Ee2-kruQw0QW4w" source="_7aPmcHI4Ee2-kruQw0QW4w" target="_7aGcgnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7ap2IHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ap2IXI4Ee2-kruQw0QW4w" x="-60" y="71"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ap2InI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ap2I3I4Ee2-kruQw0QW4w" x="2" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ap2JHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ap2JXI4Ee2-kruQw0QW4w" x="-221" y="50"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7apPGXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7apPGnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7apPG3I4Ee2-kruQw0QW4w" points="[10, 30, -133, -304]$[143, 30, 0, -304]$[143, 304, 0, -30]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ap2JnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ap2J3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7auHmHI4Ee2-kruQw0QW4w" type="4001" element="_7aBkCnI4Ee2-kruQw0QW4w" source="_7aT34HI4Ee2-kruQw0QW4w" target="_7aGcgnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7auHnHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7auHnXI4Ee2-kruQw0QW4w" x="93" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7auHnnI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7auHn3I4Ee2-kruQw0QW4w" x="65" y="-146"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7auHoHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7auHoXI4Ee2-kruQw0QW4w" x="26" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7auHmXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7auHmnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7auHm3I4Ee2-kruQw0QW4w" points="[-10, 30, -142, -53]$[-57, 30, -189, -53]$[-57, 107, -189, 24]$[123, 107, -9, 24]$[123, 83, -9, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7auuoHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7auuoXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7acawnI4Ee2-kruQw0QW4w" type="4001" element="_7Z0vsnI4Ee2-kruQw0QW4w" source="_7aHDkHI4Ee2-kruQw0QW4w" target="_7aPmcHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7acaxnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7acax3I4Ee2-kruQw0QW4w" x="-38" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7acayHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7acayXI4Ee2-kruQw0QW4w" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7acaynI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7acay3I4Ee2-kruQw0QW4w" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7acaw3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7acaxHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7acaxXI4Ee2-kruQw0QW4w" points="[15, 15, -178, -30]$[183, 15, -10, -30]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7adB0HI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7adB0XI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7ajvgnI4Ee2-kruQw0QW4w" type="4001" element="_7Z5oMHI4Ee2-kruQw0QW4w" source="_7aHDkHI4Ee2-kruQw0QW4w" target="_7aQ0knI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7ajvhnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajvh3I4Ee2-kruQw0QW4w" x="29" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ajviHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajviXI4Ee2-kruQw0QW4w" x="30"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ajvinI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajvi3I4Ee2-kruQw0QW4w" x="2" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7ajvg3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7ajvhHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ajvhXI4Ee2-kruQw0QW4w" points="[9, 0, -58, -77]$[9, 107, -58, 30]$[57, 107, -10, 30]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ajvjHI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ajvjXI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7amy3HI4Ee2-kruQw0QW4w" type="4001" element="_7Z7dbHI4Ee2-kruQw0QW4w" source="_7aHDkHI4Ee2-kruQw0QW4w" target="_7aT35XI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7anZ4XI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7anZ4nI4Ee2-kruQw0QW4w" x="20"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7anZ43I4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7anZ5HI4Ee2-kruQw0QW4w" x="-1" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7anZ5XI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7anZ5nI4Ee2-kruQw0QW4w" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7amy3XI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7amy3nI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7anZ4HI4Ee2-kruQw0QW4w" points="[-15, -27, -15, 132]$[-51, -27, -51, 132]$[-51, -129, -51, 30]$[-10, -129, -10, 30]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aoA8HI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aoA8XI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7aooCHI4Ee2-kruQw0QW4w" type="4001" element="_7Z9SlHI4Ee2-kruQw0QW4w" source="_7aO_YHI4Ee2-kruQw0QW4w" target="_7aHDkHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aooDHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aooDXI4Ee2-kruQw0QW4w" x="36" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aooDnI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aooD3I4Ee2-kruQw0QW4w" x="13" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aooEHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aooEXI4Ee2-kruQw0QW4w" x="19" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7aooCXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7aooCnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7aooC3I4Ee2-kruQw0QW4w" points="[10, 30, -212, -15]$[207, 30, -15, -15]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aooEnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aooE3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7asSYnI4Ee2-kruQw0QW4w" type="4001" element="_7aAV5HI4Ee2-kruQw0QW4w" source="_7aQNh3I4Ee2-kruQw0QW4w" target="_7aHDkHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7asSZnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7asSZ3I4Ee2-kruQw0QW4w" x="3" y="51"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7asSaHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7asSaXI4Ee2-kruQw0QW4w" x="18" y="40"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7asSanI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7asSa3I4Ee2-kruQw0QW4w" x="-60" y="-92"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7asSY3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7asSZHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7asSZXI4Ee2-kruQw0QW4w" points="[-10, 32, -70, 109]$[-63, 32, -123, 109]$[-63, -29, -123, 48]$[51, -29, -9, 48]$[51, -77, -9, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7asSbHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7asSbXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7auuonI4Ee2-kruQw0QW4w" type="4001" element="_7aBkD3I4Ee2-kruQw0QW4w" source="_7aT35XI4Ee2-kruQw0QW4w" target="_7aHDkHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7auupnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7auup3I4Ee2-kruQw0QW4w" x="-48" y="-3"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7auuqHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7auuqXI4Ee2-kruQw0QW4w" x="25" y="31"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7auuqnI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7auuq3I4Ee2-kruQw0QW4w" x="-9"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7auuo3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7auupHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7auupXI4Ee2-kruQw0QW4w" points="[10, 30, 10, -129]$[51, 30, 51, -129]$[51, 132, 51, -27]$[15, 132, 15, -27]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7auurHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7auurXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7agFIHI4Ee2-kruQw0QW4w" type="4001" element="_7Z2k4HI4Ee2-kruQw0QW4w" source="_7aHqoHI4Ee2-kruQw0QW4w" target="_7aQNgnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7agsMHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7agsMXI4Ee2-kruQw0QW4w" x="45" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ahTQHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ahTQXI4Ee2-kruQw0QW4w" x="1" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ah6UHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ah6UXI4Ee2-kruQw0QW4w" x="-16" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7agFIXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7agFInI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7agFI3I4Ee2-kruQw0QW4w" points="[-15, 11, 207, -34]$[-212, 11, 10, -34]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ah6UnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ah6U3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7aiha3I4Ee2-kruQw0QW4w" type="4001" element="_7Z3L9HI4Ee2-kruQw0QW4w" source="_7aHqoHI4Ee2-kruQw0QW4w" target="_7aQNh3I4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7ajIc3I4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajIdHI4Ee2-kruQw0QW4w" x="-16" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ajIdXI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajIdnI4Ee2-kruQw0QW4w" x="36" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ajId3I4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajIeHI4Ee2-kruQw0QW4w" x="-89" y="5"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7ajIcHI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7ajIcXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ajIcnI4Ee2-kruQw0QW4w" points="[-9, 0, 51, 224]$[-9, -252, 51, -28]$[-50, -252, 10, -28]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ajIeXI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ajIenI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7alksnI4Ee2-kruQw0QW4w" type="4001" element="_7Z62VHI4Ee2-kruQw0QW4w" source="_7aHqoHI4Ee2-kruQw0QW4w" target="_7aSpwHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7alktnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7alkt3I4Ee2-kruQw0QW4w" x="-22"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7alkuHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7alkuXI4Ee2-kruQw0QW4w" x="-5" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7alkunI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7alku3I4Ee2-kruQw0QW4w" x="6" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7alks3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7alktHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7alktXI4Ee2-kruQw0QW4w" points="[-15, 24, -10, -126]$[-39, 24, -34, -126]$[-39, 120, -34, -30]$[-15, 120, -10, -30]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7alkvHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7alkvXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7aqdNnI4Ee2-kruQw0QW4w" type="4001" element="_7Z_Hx3I4Ee2-kruQw0QW4w" source="_7aPmdXI4Ee2-kruQw0QW4w" target="_7aHqoHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aqdOnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aqdO3I4Ee2-kruQw0QW4w" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aqdPHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aqdPXI4Ee2-kruQw0QW4w" x="36" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aqdPnI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aqdP3I4Ee2-kruQw0QW4w" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7aqdN3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7aqdOHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7aqdOXI4Ee2-kruQw0QW4w" points="[-10, -33, 183, 12]$[-178, -33, 15, 12]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aqdQHI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aqdQXI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7as5cHI4Ee2-kruQw0QW4w" type="4001" element="_7aA88HI4Ee2-kruQw0QW4w" source="_7aQ0knI4Ee2-kruQw0QW4w" target="_7aHqoHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7as5dHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7as5dXI4Ee2-kruQw0QW4w" x="-12" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7as5dnI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7as5d3I4Ee2-kruQw0QW4w" x="43" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7as5eHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7as5eXI4Ee2-kruQw0QW4w" x="28" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7as5cXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7as5cnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7as5c3I4Ee2-kruQw0QW4w" points="[10, 30, 77, -284]$[56, 30, 123, -284]$[56, 92, 123, -222]$[-58, 92, 9, -222]$[-58, 284, 9, -30]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7as5enI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7as5e3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7atgmnI4Ee2-kruQw0QW4w" type="4001" element="_7aBkBXI4Ee2-kruQw0QW4w" source="_7aSpwHI4Ee2-kruQw0QW4w" target="_7aHqoHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7auHkHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7auHkXI4Ee2-kruQw0QW4w" x="27" y="-1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7auHknI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7auHk3I4Ee2-kruQw0QW4w" x="13" y="-28"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7auHlHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7auHlXI4Ee2-kruQw0QW4w" x="-2" y="-25"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7atgm3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7atgnHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7atgnXI4Ee2-kruQw0QW4w" points="[10, -31, 5, 119]$[44, -31, 39, 119]$[44, -126, 39, 24]$[20, -126, 15, 24]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7auHlnI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7auHl3I4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7atggnI4Ee2-kruQw0QW4w" type="4001" element="_7aA8-nI4Ee2-kruQw0QW4w" source="_7aRbonI4Ee2-kruQw0QW4w" target="_7aHqpXI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7atghnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7atgh3I4Ee2-kruQw0QW4w" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7atgiHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7atgiXI4Ee2-kruQw0QW4w" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7atginI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7atgi3I4Ee2-kruQw0QW4w" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7atgg3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7atghHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7atghXI4Ee2-kruQw0QW4w" points="[-10, 30, 104, -15]$[-99, 30, 15, -15]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7atgjHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7atgjXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7abMqHI4Ee2-kruQw0QW4w" type="4001" element="_7Z0IonI4Ee2-kruQw0QW4w" source="_7aIRsHI4Ee2-kruQw0QW4w" target="_7aO_YHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7abzsHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7abzsXI4Ee2-kruQw0QW4w" x="21" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7abzsnI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7abzs3I4Ee2-kruQw0QW4w" x="-4" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7abztHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7abztXI4Ee2-kruQw0QW4w" x="-6" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7abMqXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7abMqnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7abMq3I4Ee2-kruQw0QW4w" points="[0, 30, -71, -80]$[0, 62, -71, -48]$[61, 62, -10, -48]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7acawHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7acawXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7aooFHI4Ee2-kruQw0QW4w" type="4001" element="_7Z95onI4Ee2-kruQw0QW4w" source="_7aO_YHI4Ee2-kruQw0QW4w" target="_7aJf0nI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7apPEHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7apPEXI4Ee2-kruQw0QW4w" x="3" y="-5"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7apPEnI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7apPE3I4Ee2-kruQw0QW4w" x="4" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7apPFHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7apPFXI4Ee2-kruQw0QW4w" x="-12"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7aooFXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7aooFnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7aooF3I4Ee2-kruQw0QW4w" points="[10, 12, -44, 32]$[54, 12, 0, 32]$[54, -20, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7apPFnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7apPF3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7ado4HI4Ee2-kruQw0QW4w" type="4001" element="_7Z1WwnI4Ee2-kruQw0QW4w" source="_7aKG4nI4Ee2-kruQw0QW4w" target="_7aPmcHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7ado5HI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ado5XI4Ee2-kruQw0QW4w" x="3" y="-4"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ado5nI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ado53I4Ee2-kruQw0QW4w" x="14" y="-8"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ado6HI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ado6XI4Ee2-kruQw0QW4w" x="-2" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7ado4XI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7ado4nI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ado43I4Ee2-kruQw0QW4w" points="[0, 30, -49, -80]$[0, 62, -49, -48]$[39, 62, -10, -48]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aeP8HI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aeP8XI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7ap2KHI4Ee2-kruQw0QW4w" type="4001" element="_7Z_HwnI4Ee2-kruQw0QW4w" source="_7aPmcHI4Ee2-kruQw0QW4w" target="_7aKG53I4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7ap2LHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ap2LXI4Ee2-kruQw0QW4w" x="-2" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aqdMHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aqdMXI4Ee2-kruQw0QW4w" x="9" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aqdMnI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aqdM3I4Ee2-kruQw0QW4w" x="-15"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7ap2KXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7ap2KnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ap2K3I4Ee2-kruQw0QW4w" points="[10, 12, -43, 32]$[50, 12, -3, 32]$[50, -20, -3, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aqdNHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aqdNXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7ae3AnI4Ee2-kruQw0QW4w" type="4001" element="_7Z191HI4Ee2-kruQw0QW4w" source="_7aKt8HI4Ee2-kruQw0QW4w" target="_7aPmdXI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7ae3BnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ae3B3I4Ee2-kruQw0QW4w" x="-13" y="-13"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ae3CHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ae3CXI4Ee2-kruQw0QW4w" x="3"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7afeEHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7afeEXI4Ee2-kruQw0QW4w" x="-60" y="-19"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7ae3A3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7ae3BHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ae3BXI4Ee2-kruQw0QW4w" points="[0, 0, 76, 24]$[0, -39, 76, -15]$[-66, -39, 10, -15]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7afeEnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7afeE3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7aqdQnI4Ee2-kruQw0QW4w" type="4001" element="_7Z_u0HI4Ee2-kruQw0QW4w" source="_7aPmdXI4Ee2-kruQw0QW4w" target="_7aKt9XI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7arEQHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7arEQXI4Ee2-kruQw0QW4w" x="4"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7arEQnI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7arEQ3I4Ee2-kruQw0QW4w" x="6" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7arERHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7arERXI4Ee2-kruQw0QW4w" x="-35" y="-5"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7aqdQ3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7aqdRHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7aqdRXI4Ee2-kruQw0QW4w" points="[-10, 45, 51, -69]$[-61, 45, 0, -69]$[-61, 84, 0, -30]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7arERnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7arER3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7ah6VHI4Ee2-kruQw0QW4w" type="4001" element="_7Z2k5XI4Ee2-kruQw0QW4w" source="_7aKt-nI4Ee2-kruQw0QW4w" target="_7aQNgnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aihY3I4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aihZHI4Ee2-kruQw0QW4w" x="-3" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aihZXI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aihZnI4Ee2-kruQw0QW4w" x="24" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aihZ3I4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aihaHI4Ee2-kruQw0QW4w" x="-1" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7aihYHI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7aihYXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7aihYnI4Ee2-kruQw0QW4w" points="[0, 0, 72, 24]$[0, -39, 72, -15]$[-62, -39, 10, -15]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aihaXI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aihanI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7arrVnI4Ee2-kruQw0QW4w" type="4001" element="_7Z_u2nI4Ee2-kruQw0QW4w" source="_7aQNgnI4Ee2-kruQw0QW4w" target="_7aLVAnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7arrWnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7arrW3I4Ee2-kruQw0QW4w" x="6"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7arrXHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7arrXXI4Ee2-kruQw0QW4w" x="-13" y="-7"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7arrXnI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7arrX3I4Ee2-kruQw0QW4w" x="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7arrV3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7arrWHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7arrWXI4Ee2-kruQw0QW4w" points="[-10, 45, 50, -69]$[-60, 45, 0, -69]$[-60, 84, 0, -30]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7asSYHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7asSYXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7ajIe3I4Ee2-kruQw0QW4w" type="4001" element="_7Z4aEHI4Ee2-kruQw0QW4w" source="_7aLVB3I4Ee2-kruQw0QW4w" target="_7aQNh3I4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7ajIf3I4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajIgHI4Ee2-kruQw0QW4w" x="-3" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ajIgXI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajIgnI4Ee2-kruQw0QW4w" x="16" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ajIg3I4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajIhHI4Ee2-kruQw0QW4w" x="-14" y="-27"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7ajIfHI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7ajIfXI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ajIfnI4Ee2-kruQw0QW4w" points="[3, 0, 27, 55]$[3, -65, 27, -10]$[-14, -65, 10, -10]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ajvgHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ajvgXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7asSbnI4Ee2-kruQw0QW4w" type="4001" element="_7aAV6XI4Ee2-kruQw0QW4w" source="_7aQNh3I4Ee2-kruQw0QW4w" target="_7aL8EHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7asScnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7asSc3I4Ee2-kruQw0QW4w" x="-11" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7asSdHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7asSdXI4Ee2-kruQw0QW4w" x="21" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7asSdnI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7asSd3I4Ee2-kruQw0QW4w" x="-4" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7asSb3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7asScHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7asScXI4Ee2-kruQw0QW4w" points="[-68, 0, 11, -72]$[-68, 72, 11, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7asSeHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7asSeXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7ajvjnI4Ee2-kruQw0QW4w" type="4001" element="_7Z5oNXI4Ee2-kruQw0QW4w" source="_7aL8FXI4Ee2-kruQw0QW4w" target="_7aQ0knI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7ajvknI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajvk3I4Ee2-kruQw0QW4w" x="14" y="-16"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ajvlHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajvlXI4Ee2-kruQw0QW4w" x="8"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ajvlnI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ajvl3I4Ee2-kruQw0QW4w" x="2" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7ajvj3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7ajvkHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ajvkXI4Ee2-kruQw0QW4w" points="[-3, 30, -34, -100]$[-3, 84, -34, -46]$[21, 84, -10, -46]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ajvmHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7ajvmXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7as5fHI4Ee2-kruQw0QW4w" type="4001" element="_7aA89XI4Ee2-kruQw0QW4w" source="_7aQ0knI4Ee2-kruQw0QW4w" target="_7aL8GnI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7as5gHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7as5gXI4Ee2-kruQw0QW4w" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7as5gnI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7as5g3I4Ee2-kruQw0QW4w" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7as5hHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7as5hXI4Ee2-kruQw0QW4w" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7as5fXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7as5fnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7as5f3I4Ee2-kruQw0QW4w" points="[10, 14, -103, -16]$[98, 14, -15, -16]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7atggHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7atggXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7akWnHI4Ee2-kruQw0QW4w" type="4001" element="_7Z6PRHI4Ee2-kruQw0QW4w" source="_7aMjInI4Ee2-kruQw0QW4w" target="_7aRbonI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7akWoHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7akWoXI4Ee2-kruQw0QW4w" x="-16" y="9"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7akWonI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7akWo3I4Ee2-kruQw0QW4w" x="37" y="3"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7akWpHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7akWpXI4Ee2-kruQw0QW4w" x="8" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7akWnXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7akWnnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7akWn3I4Ee2-kruQw0QW4w" points="[0, 30, 37, -86]$[0, 68, 37, -48]$[-27, 68, 10, -48]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7akWpnI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7akWp3I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7ak9qHI4Ee2-kruQw0QW4w" type="4001" element="_7Z6PTnI4Ee2-kruQw0QW4w" source="_7aMjJ3I4Ee2-kruQw0QW4w" target="_7aSCsHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7ak9rHI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ak9rXI4Ee2-kruQw0QW4w" x="28" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ak9rnI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ak9r3I4Ee2-kruQw0QW4w" x="23" y="-11"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7ak9sHI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ak9sXI4Ee2-kruQw0QW4w" x="-3" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7ak9qXI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7ak9qnI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ak9q3I4Ee2-kruQw0QW4w" points="[0, 30, -78, -73]$[0, 59, -78, -44]$[68, 59, -10, -44]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7alksHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7alksXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7alkvnI4Ee2-kruQw0QW4w" type="4001" element="_7Z62WXI4Ee2-kruQw0QW4w" source="_7aNKMnI4Ee2-kruQw0QW4w" target="_7aSpwHI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7alkwnI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7alkw3I4Ee2-kruQw0QW4w" x="6" y="34"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7alkxHI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7alkxXI4Ee2-kruQw0QW4w" x="1" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7alkxnI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7alkx3I4Ee2-kruQw0QW4w" x="-40" y="-27"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7alkv3I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7alkwHI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7alkwXI4Ee2-kruQw0QW4w" points="[-15, 11, 122, 5]$[-75, 11, 62, 5]$[-75, -6, 62, -12]$[-127, -6, 10, -12]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7amLwHI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7amLwXI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7amy0HI4Ee2-kruQw0QW4w" type="4001" element="_7Z7dZ3I4Ee2-kruQw0QW4w" source="_7aNKN3I4Ee2-kruQw0QW4w" target="_7aT34HI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7amy1HI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7amy1XI4Ee2-kruQw0QW4w" x="-5" y="5"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7amy1nI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7amy13I4Ee2-kruQw0QW4w" x="-5" y="3"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7amy2HI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7amy2XI4Ee2-kruQw0QW4w" x="-2" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7amy0XI4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7amy0nI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7amy03I4Ee2-kruQw0QW4w" points="[-1, 30, 64, -73]$[-1, 54, 64, -49]$[-55, 54, 10, -49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7amy2nI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7amy23I4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_7aoA8nI4Ee2-kruQw0QW4w" type="4001" element="_7Z8EdHI4Ee2-kruQw0QW4w" source="_7aNxQnI4Ee2-kruQw0QW4w" target="_7aT35XI4Ee2-kruQw0QW4w">
+          <children xmi:type="notation:Node" xmi:id="_7aoA9nI4Ee2-kruQw0QW4w" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aoA93I4Ee2-kruQw0QW4w" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aoA-HI4Ee2-kruQw0QW4w" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aoA-XI4Ee2-kruQw0QW4w" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_7aoA-nI4Ee2-kruQw0QW4w" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7aoA-3I4Ee2-kruQw0QW4w" x="-14" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_7aoA83I4Ee2-kruQw0QW4w" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_7aoA9HI4Ee2-kruQw0QW4w" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7aoA9XI4Ee2-kruQw0QW4w" points="[15, 14, -87, -46]$[92, 14, -10, -46]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aoA_HI4Ee2-kruQw0QW4w" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7aoA_XI4Ee2-kruQw0QW4w" id="(0.5,1.0)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_7aCLEnI4Ee2-kruQw0QW4w" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_7aCLE3I4Ee2-kruQw0QW4w"/>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7Zn7YHI4Ee2-kruQw0QW4w" name="initial" outgoingEdges="_7Zy6gHI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.0"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.0"/>
+      <ownedBorderedNodes xmi:type="diagram:DNode" uid="_7ZvQJnI4Ee2-kruQw0QW4w" name="''" width="2" height="2">
+        <target xmi:type="petrinet:Token" href="petrinets/garagedoor.petrinet#//@elements.0/@token"/>
+        <semanticElements xmi:type="petrinet:Token" href="petrinets/garagedoor.petrinet#//@elements.0/@token"/>
+        <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+        <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+        <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+        <ownedStyle xmi:type="diagram:Dot" uid="_7ZvQJ3I4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" labelAlignment="LEFT" labelPosition="node" backgroundColor="0,0,0">
+          <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@borderedNodeMappings[name='Token']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@borderedNodeMappings[name='Token']"/>
+      </ownedBorderedNodes>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7Zn7YXI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZoicXI4Ee2-kruQw0QW4w" name="Closed" outgoingEdges="_7ZzhknI4Ee2-kruQw0QW4w _7Z5oOnI4Ee2-kruQw0QW4w _7Z6PSXI4Ee2-kruQw0QW4w" incomingEdges="_7Z8rgHI4Ee2-kruQw0QW4w _7Z_u1XI4Ee2-kruQw0QW4w _7aBkAHI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.1"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.1"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZoicnI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZoidHI4Ee2-kruQw0QW4w" name="Open" outgoingEdges="_7Z1Wx3I4Ee2-kruQw0QW4w _7Z7dYnI4Ee2-kruQw0QW4w" incomingEdges="_7Z-gsHI4Ee2-kruQw0QW4w _7aBkCnI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.2"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.2"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZoidXI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7Zoid3I4Ee2-kruQw0QW4w" name="Opening" outgoingEdges="_7Z0vsnI4Ee2-kruQw0QW4w _7Z5oMHI4Ee2-kruQw0QW4w _7Z7dbHI4Ee2-kruQw0QW4w" incomingEdges="_7Z9SlHI4Ee2-kruQw0QW4w _7aAV5HI4Ee2-kruQw0QW4w _7aBkD3I4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.3"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.3"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZpJgHI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZpJgnI4Ee2-kruQw0QW4w" name="Closing" outgoingEdges="_7Z2k4HI4Ee2-kruQw0QW4w _7Z3L9HI4Ee2-kruQw0QW4w _7Z62VHI4Ee2-kruQw0QW4w" incomingEdges="_7Z_Hx3I4Ee2-kruQw0QW4w _7aA88HI4Ee2-kruQw0QW4w _7aBkBXI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.4"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.4"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZpJg3I4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZpwkHI4Ee2-kruQw0QW4w" name="final" incomingEdges="_7aA8-nI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.5"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.5"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZpwkXI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7Zpwk3I4Ee2-kruQw0QW4w" name="openDoor" outgoingEdges="_7Z0IonI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.8"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.8"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZpwlHI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZqXoHI4Ee2-kruQw0QW4w" name="motor.upwards" incomingEdges="_7Z95onI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.9"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.9"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZqXoXI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZqXo3I4Ee2-kruQw0QW4w" name="stopper" outgoingEdges="_7Z1WwnI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.11"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.11"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZqXpHI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7Zq-sHI4Ee2-kruQw0QW4w" name="motor.stop" incomingEdges="_7Z_HwnI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.12"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.12"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7Zq-sXI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7Zq-s3I4Ee2-kruQw0QW4w" name="closeDoor" outgoingEdges="_7Z191HI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.14"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.14"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7Zq-tHI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7Zq-tnI4Ee2-kruQw0QW4w" name="motor.downwards" incomingEdges="_7Z_u0HI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.15"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.15"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZrlwHI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZrlwnI4Ee2-kruQw0QW4w" name="stopper" outgoingEdges="_7Z2k5XI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.17"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.17"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7Zrlw3I4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZrlxXI4Ee2-kruQw0QW4w" name="motor.stop" incomingEdges="_7Z_u2nI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.18"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.18"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZrlxnI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZsM0XI4Ee2-kruQw0QW4w" name="openDoor" outgoingEdges="_7Z4aEHI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.20"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.20"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZsM0nI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZsM1HI4Ee2-kruQw0QW4w" name="motor.upwards" incomingEdges="_7aAV6XI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.21"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.21"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZsM1XI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7Zsz4XI4Ee2-kruQw0QW4w" name="closeDoor" outgoingEdges="_7Z5oNXI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.23"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.23"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7Zsz4nI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7Zsz5HI4Ee2-kruQw0QW4w" name="motor.downwards" incomingEdges="_7aA89XI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.24"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.24"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7Zta8HI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7Zta8nI4Ee2-kruQw0QW4w" name="shutdown" outgoingEdges="_7Z6PRHI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.26"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.26"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7Zta83I4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZuCAXI4Ee2-kruQw0QW4w" name="closeDoor" outgoingEdges="_7Z6PTnI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.28"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.28"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZupEHI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZupEnI4Ee2-kruQw0QW4w" name="closeDoor" outgoingEdges="_7Z62WXI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.30"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.30"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZupE3I4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZvQIHI4Ee2-kruQw0QW4w" name="openDoor" outgoingEdges="_7Z7dZ3I4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.32"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.32"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZvQIXI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZvQI3I4Ee2-kruQw0QW4w" name="openDoor" outgoingEdges="_7Z8EdHI4Ee2-kruQw0QW4w" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.34"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/garagedoor.petrinet#//@elements.34"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_7ZvQJHI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7Zv3MHI4Ee2-kruQw0QW4w" name="default" outgoingEdges="_7Z8rgHI4Ee2-kruQw0QW4w" incomingEdges="_7Zy6gHI4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.6"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.6"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZweQHI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZweQnI4Ee2-kruQw0QW4w" name="openDoor" outgoingEdges="_7Z9SlHI4Ee2-kruQw0QW4w _7Z95onI4Ee2-kruQw0QW4w" incomingEdges="_7ZzhknI4Ee2-kruQw0QW4w _7Z0IonI4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.7"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.7"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZweQ3I4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZweRXI4Ee2-kruQw0QW4w" name="default" outgoingEdges="_7Z-gsHI4Ee2-kruQw0QW4w _7Z_HwnI4Ee2-kruQw0QW4w" incomingEdges="_7Z0vsnI4Ee2-kruQw0QW4w _7Z1WwnI4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.10"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.10"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZweRnI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZweSHI4Ee2-kruQw0QW4w" name="closeDoor" outgoingEdges="_7Z_Hx3I4Ee2-kruQw0QW4w _7Z_u0HI4Ee2-kruQw0QW4w" incomingEdges="_7Z1Wx3I4Ee2-kruQw0QW4w _7Z191HI4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.13"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.13"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZweSXI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZxFUXI4Ee2-kruQw0QW4w" name="default" outgoingEdges="_7Z_u1XI4Ee2-kruQw0QW4w _7Z_u2nI4Ee2-kruQw0QW4w" incomingEdges="_7Z2k4HI4Ee2-kruQw0QW4w _7Z2k5XI4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.16"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.16"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZxFUnI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZxFVHI4Ee2-kruQw0QW4w" name="openDoor" outgoingEdges="_7aAV5HI4Ee2-kruQw0QW4w _7aAV6XI4Ee2-kruQw0QW4w" incomingEdges="_7Z3L9HI4Ee2-kruQw0QW4w _7Z4aEHI4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.19"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.19"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZxFVXI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZxFV3I4Ee2-kruQw0QW4w" name="closeDoor" outgoingEdges="_7aA88HI4Ee2-kruQw0QW4w _7aA89XI4Ee2-kruQw0QW4w" incomingEdges="_7Z5oMHI4Ee2-kruQw0QW4w _7Z5oNXI4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.22"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.22"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZxFWHI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZxFWnI4Ee2-kruQw0QW4w" name="default" outgoingEdges="_7aA8-nI4Ee2-kruQw0QW4w" incomingEdges="_7Z5oOnI4Ee2-kruQw0QW4w _7Z6PRHI4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.25"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.25"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZxsYHI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZxsYnI4Ee2-kruQw0QW4w" name="closeDoor" outgoingEdges="_7aBkAHI4Ee2-kruQw0QW4w" incomingEdges="_7Z6PSXI4Ee2-kruQw0QW4w _7Z6PTnI4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.27"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.27"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZxsY3I4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZxsZXI4Ee2-kruQw0QW4w" name="closeDoor" outgoingEdges="_7aBkBXI4Ee2-kruQw0QW4w" incomingEdges="_7Z62VHI4Ee2-kruQw0QW4w _7Z62WXI4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.29"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.29"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZxsZnI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7ZxsaHI4Ee2-kruQw0QW4w" name="openDoor" outgoingEdges="_7aBkCnI4Ee2-kruQw0QW4w" incomingEdges="_7Z7dYnI4Ee2-kruQw0QW4w _7Z7dZ3I4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.31"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.31"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZxsaXI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_7Zxsa3I4Ee2-kruQw0QW4w" name="openDoor" outgoingEdges="_7aBkD3I4Ee2-kruQw0QW4w" incomingEdges="_7Z7dbHI4Ee2-kruQw0QW4w _7Z8EdHI4Ee2-kruQw0QW4w" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.33"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/garagedoor.petrinet#//@elements.33"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_7ZxsbHI4Ee2-kruQw0QW4w" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Zy6gHI4Ee2-kruQw0QW4w" sourceNode="_7Zn7YHI4Ee2-kruQw0QW4w" targetNode="_7Zv3MHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.0"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Zy6gXI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Zy6gnI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7ZzhknI4Ee2-kruQw0QW4w" sourceNode="_7ZoicXI4Ee2-kruQw0QW4w" targetNode="_7ZweQnI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.2"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.2"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Zzhk3I4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7ZzhlHI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z0IonI4Ee2-kruQw0QW4w" sourceNode="_7Zpwk3I4Ee2-kruQw0QW4w" targetNode="_7ZweQnI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.4"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.4"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z0Io3I4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z0IpHI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z0vsnI4Ee2-kruQw0QW4w" sourceNode="_7Zoid3I4Ee2-kruQw0QW4w" targetNode="_7ZweRXI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.6"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.6"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z0vs3I4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z0vtHI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z1WwnI4Ee2-kruQw0QW4w" sourceNode="_7ZqXo3I4Ee2-kruQw0QW4w" targetNode="_7ZweRXI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.8"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.8"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z1Ww3I4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z1WxHI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z1Wx3I4Ee2-kruQw0QW4w" sourceNode="_7ZoidHI4Ee2-kruQw0QW4w" targetNode="_7ZweSHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.10"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.10"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z190HI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z190XI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z191HI4Ee2-kruQw0QW4w" sourceNode="_7Zq-s3I4Ee2-kruQw0QW4w" targetNode="_7ZweSHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.12"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.12"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z191XI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z191nI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z2k4HI4Ee2-kruQw0QW4w" sourceNode="_7ZpJgnI4Ee2-kruQw0QW4w" targetNode="_7ZxFUXI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.14"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.14"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z2k4XI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z2k4nI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z2k5XI4Ee2-kruQw0QW4w" sourceNode="_7ZrlwnI4Ee2-kruQw0QW4w" targetNode="_7ZxFUXI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.16"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.16"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z3L8HI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z3L8XI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z3L9HI4Ee2-kruQw0QW4w" sourceNode="_7ZpJgnI4Ee2-kruQw0QW4w" targetNode="_7ZxFVHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.18"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.18"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z3zAHI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z3zAXI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z4aEHI4Ee2-kruQw0QW4w" sourceNode="_7ZsM0XI4Ee2-kruQw0QW4w" targetNode="_7ZxFVHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.20"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.20"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z5BIHI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z5BIXI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z5oMHI4Ee2-kruQw0QW4w" sourceNode="_7Zoid3I4Ee2-kruQw0QW4w" targetNode="_7ZxFV3I4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.22"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.22"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z5oMXI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z5oMnI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z5oNXI4Ee2-kruQw0QW4w" sourceNode="_7Zsz4XI4Ee2-kruQw0QW4w" targetNode="_7ZxFV3I4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.24"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.24"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z5oNnI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z5oN3I4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z5oOnI4Ee2-kruQw0QW4w" sourceNode="_7ZoicXI4Ee2-kruQw0QW4w" targetNode="_7ZxFWnI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.26"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.26"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z6PQHI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z6PQXI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z6PRHI4Ee2-kruQw0QW4w" sourceNode="_7Zta8nI4Ee2-kruQw0QW4w" targetNode="_7ZxFWnI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.28"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.28"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z6PRXI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z6PRnI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z6PSXI4Ee2-kruQw0QW4w" sourceNode="_7ZoicXI4Ee2-kruQw0QW4w" targetNode="_7ZxsYnI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.29"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.29"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z6PSnI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z6PS3I4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z6PTnI4Ee2-kruQw0QW4w" sourceNode="_7ZuCAXI4Ee2-kruQw0QW4w" targetNode="_7ZxsYnI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.31"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.31"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z62UHI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z62UXI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z62VHI4Ee2-kruQw0QW4w" sourceNode="_7ZpJgnI4Ee2-kruQw0QW4w" targetNode="_7ZxsZXI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.32"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.32"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z62VXI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z62VnI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z62WXI4Ee2-kruQw0QW4w" sourceNode="_7ZupEnI4Ee2-kruQw0QW4w" targetNode="_7ZxsZXI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.34"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.34"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z62WnI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z62W3I4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z7dYnI4Ee2-kruQw0QW4w" sourceNode="_7ZoidHI4Ee2-kruQw0QW4w" targetNode="_7ZxsaHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.35"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.35"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z7dY3I4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z7dZHI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z7dZ3I4Ee2-kruQw0QW4w" sourceNode="_7ZvQIHI4Ee2-kruQw0QW4w" targetNode="_7ZxsaHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.37"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.37"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z7daHI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z7daXI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z7dbHI4Ee2-kruQw0QW4w" sourceNode="_7Zoid3I4Ee2-kruQw0QW4w" targetNode="_7Zxsa3I4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.38"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.38"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z8EcHI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z8EcXI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z8EdHI4Ee2-kruQw0QW4w" sourceNode="_7ZvQI3I4Ee2-kruQw0QW4w" targetNode="_7Zxsa3I4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.40"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/garagedoor.petrinet#//@arcs.40"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z8EdXI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z8EdnI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z8rgHI4Ee2-kruQw0QW4w" sourceNode="_7Zv3MHI4Ee2-kruQw0QW4w" targetNode="_7ZoicXI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.1"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.1"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z9SkHI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z9SkXI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z9SlHI4Ee2-kruQw0QW4w" sourceNode="_7ZweQnI4Ee2-kruQw0QW4w" targetNode="_7Zoid3I4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.3"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.3"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z9SlXI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z9SlnI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z95onI4Ee2-kruQw0QW4w" sourceNode="_7ZweQnI4Ee2-kruQw0QW4w" targetNode="_7ZqXoHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.5"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.5"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z95o3I4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z95pHI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z-gsHI4Ee2-kruQw0QW4w" sourceNode="_7ZweRXI4Ee2-kruQw0QW4w" targetNode="_7ZoidHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.7"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.7"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z-gsXI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z-gsnI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z_HwnI4Ee2-kruQw0QW4w" sourceNode="_7ZweRXI4Ee2-kruQw0QW4w" targetNode="_7Zq-sHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.9"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.9"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z_Hw3I4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z_HxHI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z_Hx3I4Ee2-kruQw0QW4w" sourceNode="_7ZweSHI4Ee2-kruQw0QW4w" targetNode="_7ZpJgnI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.11"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.11"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z_HyHI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z_HyXI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z_u0HI4Ee2-kruQw0QW4w" sourceNode="_7ZweSHI4Ee2-kruQw0QW4w" targetNode="_7Zq-tnI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.13"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.13"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z_u0XI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z_u0nI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z_u1XI4Ee2-kruQw0QW4w" sourceNode="_7ZxFUXI4Ee2-kruQw0QW4w" targetNode="_7ZoicXI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.15"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.15"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7Z_u1nI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7Z_u13I4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7Z_u2nI4Ee2-kruQw0QW4w" sourceNode="_7ZxFUXI4Ee2-kruQw0QW4w" targetNode="_7ZrlxXI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.17"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.17"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7aAV4HI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7aAV4XI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7aAV5HI4Ee2-kruQw0QW4w" sourceNode="_7ZxFVHI4Ee2-kruQw0QW4w" targetNode="_7Zoid3I4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.19"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.19"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7aAV5XI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7aAV5nI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7aAV6XI4Ee2-kruQw0QW4w" sourceNode="_7ZxFVHI4Ee2-kruQw0QW4w" targetNode="_7ZsM1HI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.21"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.21"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7aAV6nI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7aAV63I4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7aA88HI4Ee2-kruQw0QW4w" sourceNode="_7ZxFV3I4Ee2-kruQw0QW4w" targetNode="_7ZpJgnI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.23"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.23"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7aA88XI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7aA88nI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7aA89XI4Ee2-kruQw0QW4w" sourceNode="_7ZxFV3I4Ee2-kruQw0QW4w" targetNode="_7Zsz5HI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.25"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.25"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7aA89nI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7aA893I4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7aA8-nI4Ee2-kruQw0QW4w" sourceNode="_7ZxFWnI4Ee2-kruQw0QW4w" targetNode="_7ZpwkHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.27"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.27"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7aA8-3I4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7aA8_HI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7aBkAHI4Ee2-kruQw0QW4w" sourceNode="_7ZxsYnI4Ee2-kruQw0QW4w" targetNode="_7ZoicXI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.30"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.30"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7aBkAXI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7aBkAnI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7aBkBXI4Ee2-kruQw0QW4w" sourceNode="_7ZxsZXI4Ee2-kruQw0QW4w" targetNode="_7ZpJgnI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.33"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.33"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7aBkBnI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7aBkB3I4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7aBkCnI4Ee2-kruQw0QW4w" sourceNode="_7ZxsaHI4Ee2-kruQw0QW4w" targetNode="_7ZoidHI4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.36"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.36"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7aBkC3I4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7aBkDHI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_7aBkD3I4Ee2-kruQw0QW4w" sourceNode="_7Zxsa3I4Ee2-kruQw0QW4w" targetNode="_7Zoid3I4Ee2-kruQw0QW4w">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.39"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/garagedoor.petrinet#//@arcs.39"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_7aBkEHI4Ee2-kruQw0QW4w" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_7aBkEXI4Ee2-kruQw0QW4w" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']"/>
+    <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_7ZmGMHI4Ee2-kruQw0QW4w"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer"/>
+    <target xmi:type="petrinet:PetriNet" href="petrinets/garagedoor.petrinet#/"/>
+  </diagram:DSemanticDiagram>
+  <diagram:DSemanticDiagram uid="_v4ZxICywEe-4er9RFtOKtQ">
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_v4aYMiywEe-4er9RFtOKtQ" source="GMF_DIAGRAMS">
+      <data xmi:type="notation:Diagram" xmi:id="_v4aYMyywEe-4er9RFtOKtQ" type="Sirius" element="_v4ZxICywEe-4er9RFtOKtQ" measurementUnit="Pixel">
+        <children xmi:type="notation:Node" xmi:id="_v4iUACywEe-4er9RFtOKtQ" type="2001" element="_v4a_QCywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4iUAyywEe-4er9RFtOKtQ" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_v4iUBCywEe-4er9RFtOKtQ" x="31" y="-1"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4oaoCywEe-4er9RFtOKtQ" type="3001" element="_v4c0diywEe-4er9RFtOKtQ">
+            <children xmi:type="notation:Node" xmi:id="_v4oaoyywEe-4er9RFtOKtQ" type="5001">
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_v4oapCywEe-4er9RFtOKtQ" y="5"/>
+            </children>
+            <children xmi:type="notation:Node" xmi:id="_v4pBsyywEe-4er9RFtOKtQ" type="3002" element="_v4dbgCywEe-4er9RFtOKtQ">
+              <styles xmi:type="notation:ShapeStyle" xmi:id="_v4pBtCywEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+              <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4pBtSywEe-4er9RFtOKtQ"/>
+            </children>
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_v4oaoSywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4oaoiywEe-4er9RFtOKtQ" x="22" width="20" height="20"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4pBsCywEe-4er9RFtOKtQ" type="3002" element="_v4bmUCywEe-4er9RFtOKtQ">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_v4pBsSywEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4pBsiywEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_v4iUASywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4iUAiywEe-4er9RFtOKtQ" x="217" y="210" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_v4i7ECywEe-4er9RFtOKtQ" type="2001" element="_v4cNYSywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4i7EyywEe-4er9RFtOKtQ" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_v4i7FCywEe-4er9RFtOKtQ" x="-29" y="-2"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4pBtiywEe-4er9RFtOKtQ" type="3002" element="_v4cNYiywEe-4er9RFtOKtQ">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_v4pBtyywEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4pBuCywEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_v4i7ESywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4i7EiywEe-4er9RFtOKtQ" x="651" y="210" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_v4jiICywEe-4er9RFtOKtQ" type="2001" element="_v4cNZCywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4jiIyywEe-4er9RFtOKtQ" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_v4jiJCywEe-4er9RFtOKtQ" x="31" y="-2"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4pBuSywEe-4er9RFtOKtQ" type="3002" element="_v4cNZSywEe-4er9RFtOKtQ">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_v4pBuiywEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4pBuyywEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_v4jiISywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4jiIiywEe-4er9RFtOKtQ" x="392" y="210" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_v4jiJSywEe-4er9RFtOKtQ" type="2001" element="_v4c0cCywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4kJMCywEe-4er9RFtOKtQ" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_v4kJMSywEe-4er9RFtOKtQ" x="-2" y="31"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4powCywEe-4er9RFtOKtQ" type="3002" element="_v4c0cSywEe-4er9RFtOKtQ">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_v4powSywEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4powiywEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_v4jiJiywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4jiJyywEe-4er9RFtOKtQ" x="421" y="357" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_v4kJMiywEe-4er9RFtOKtQ" type="2001" element="_v4c0cyywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4kJNSywEe-4er9RFtOKtQ" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_v4kJNiywEe-4er9RFtOKtQ" x="-2" y="-33"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4powyywEe-4er9RFtOKtQ" type="3002" element="_v4c0dCywEe-4er9RFtOKtQ">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_v4poxCywEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4poxSywEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_v4kJMyywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4kJNCywEe-4er9RFtOKtQ" x="427" y="91" width="30" height="30"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_v4kwQCywEe-4er9RFtOKtQ" type="2001" element="_v4dbgiywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4kwQyywEe-4er9RFtOKtQ" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_v4kwRCywEe-4er9RFtOKtQ" x="-27" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4poxiywEe-4er9RFtOKtQ" type="3003" element="_v4dbgyywEe-4er9RFtOKtQ">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_v4poxyywEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4poyCywEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_v4kwQSywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4kwQiywEe-4er9RFtOKtQ" x="308" y="203" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_v4lXUCywEe-4er9RFtOKtQ" type="2001" element="_v4dbhSywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4lXUyywEe-4er9RFtOKtQ" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_v4lXVCywEe-4er9RFtOKtQ" x="-7" y="-33"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4qP0CywEe-4er9RFtOKtQ" type="3003" element="_v4eCkCywEe-4er9RFtOKtQ">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_v4qP0SywEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4qP0iywEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_v4lXUSywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4lXUiywEe-4er9RFtOKtQ" x="518" y="287" width="20" height="60"/>
+        </children>
+        <children xmi:type="notation:Node" xmi:id="_v4lXVSywEe-4er9RFtOKtQ" type="2001" element="_v4eCkiywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4l-YCywEe-4er9RFtOKtQ" type="5002">
+            <layoutConstraint xmi:type="notation:Location" xmi:id="_v4l-YSywEe-4er9RFtOKtQ" x="-7" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4qP0yywEe-4er9RFtOKtQ" type="3003" element="_v4eCkyywEe-4er9RFtOKtQ">
+            <styles xmi:type="notation:ShapeStyle" xmi:id="_v4qP1CywEe-4er9RFtOKtQ" fontName="Segoe UI"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4qP1SywEe-4er9RFtOKtQ"/>
+          </children>
+          <styles xmi:type="notation:ShapeStyle" xmi:id="_v4lXViywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4lXVyywEe-4er9RFtOKtQ" x="525" y="144" width="20" height="60"/>
+        </children>
+        <styles xmi:type="notation:DiagramStyle" xmi:id="_v4aYNCywEe-4er9RFtOKtQ"/>
+        <edges xmi:type="notation:Edge" xmi:id="_v4qP1iywEe-4er9RFtOKtQ" type="4001" element="_v4epoCywEe-4er9RFtOKtQ" source="_v4iUACywEe-4er9RFtOKtQ" target="_v4kwQCywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4q24CywEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4q24SywEe-4er9RFtOKtQ" x="-3" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4q24iywEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4q24yywEe-4er9RFtOKtQ" x="-3" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4q25CywEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4q25SywEe-4er9RFtOKtQ" x="-1" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_v4qP1yywEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_v4qP2CywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v4qP2SywEe-4er9RFtOKtQ" points="[15, 21, -71, -32]$[76, 21, -10, -32]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4q25iywEe-4er9RFtOKtQ" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4q25yywEe-4er9RFtOKtQ" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_v4q26CywEe-4er9RFtOKtQ" type="4001" element="_v4fQsiywEe-4er9RFtOKtQ" source="_v4jiICywEe-4er9RFtOKtQ" target="_v4lXUCywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4rd8CywEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4rd8SywEe-4er9RFtOKtQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4rd8iywEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4rd8yywEe-4er9RFtOKtQ" x="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4rd9CywEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4rd9SywEe-4er9RFtOKtQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_v4q26SywEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_v4q26iywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v4q26yywEe-4er9RFtOKtQ" points="[2, 0, -119, -47]$[2, 82, -119, 35]$[111, 82, -10, 35]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4rd9iywEe-4er9RFtOKtQ" id="(0.5,1.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4rd9yywEe-4er9RFtOKtQ" id="(0.5,0.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_v4rd-CywEe-4er9RFtOKtQ" type="4001" element="_v4fQtyywEe-4er9RFtOKtQ" source="_v4jiJSywEe-4er9RFtOKtQ" target="_v4lXUCywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4rd_CywEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4rd_SywEe-4er9RFtOKtQ" x="-11" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4rd_iywEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4rd_yywEe-4er9RFtOKtQ" x="-10" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4reACywEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4reASywEe-4er9RFtOKtQ" x="-18" y="-22"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_v4rd-SywEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_v4rd-iywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v4rd-yywEe-4er9RFtOKtQ" points="[15, 14, -77, 24]$[92, 14, 0, 24]$[92, -10, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4sFACywEe-4er9RFtOKtQ" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4sFASywEe-4er9RFtOKtQ" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_v4sFAiywEe-4er9RFtOKtQ" type="4001" element="_v4f3wCywEe-4er9RFtOKtQ" source="_v4i7ECywEe-4er9RFtOKtQ" target="_v4lXVSywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4sFBiywEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4sFByywEe-4er9RFtOKtQ" x="-39" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4sFCCywEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4sFCSywEe-4er9RFtOKtQ" x="21" y="-69"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4sFCiywEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4sFCyywEe-4er9RFtOKtQ" x="-5" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_v4sFAyywEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_v4sFBCywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v4sFBSywEe-4er9RFtOKtQ" points="[6, 0, 137, 6]$[6, -35, 137, -29]$[-121, -35, 10, -29]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4sFDCywEe-4er9RFtOKtQ" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4sFDSywEe-4er9RFtOKtQ" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_v4sFDiywEe-4er9RFtOKtQ" type="4001" element="_v4f3xSywEe-4er9RFtOKtQ" source="_v4kJMiywEe-4er9RFtOKtQ" target="_v4lXVSywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4sFEiywEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4sFEyywEe-4er9RFtOKtQ" x="-52" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4sFFCywEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4sFFSywEe-4er9RFtOKtQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4sFFiywEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4sFFyywEe-4er9RFtOKtQ" x="-10" y="61"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_v4sFDyywEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_v4sFECywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v4sFESywEe-4er9RFtOKtQ" points="[15, 15, -78, -98]$[93, 15, 0, -98]$[93, 53, 0, -60]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4sFGCywEe-4er9RFtOKtQ" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4sFGSywEe-4er9RFtOKtQ" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_v4sFGiywEe-4er9RFtOKtQ" type="4001" element="_v4ge0CywEe-4er9RFtOKtQ" source="_v4kwQCywEe-4er9RFtOKtQ" target="_v4jiICywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4ssECywEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4ssESywEe-4er9RFtOKtQ" x="25" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4ssEiywEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4ssEyywEe-4er9RFtOKtQ" x="16" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4ssFCywEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4ssFSywEe-4er9RFtOKtQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_v4sFGyywEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_v4sFHCywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v4sFHSywEe-4er9RFtOKtQ" points="[10, 28, -79, -9]$[74, 28, -15, -9]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4ssFiywEe-4er9RFtOKtQ" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4ssFyywEe-4er9RFtOKtQ" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_v4ssGCywEe-4er9RFtOKtQ" type="4001" element="_v4ge1SywEe-4er9RFtOKtQ" source="_v4lXUCywEe-4er9RFtOKtQ" target="_v4i7ECywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4ssHCywEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4ssHSywEe-4er9RFtOKtQ" x="-43" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4ssHiywEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4ssHyywEe-4er9RFtOKtQ" x="-4" y="4"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4ssICywEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4ssISywEe-4er9RFtOKtQ" x="15" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_v4ssGSywEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_v4ssGiywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v4ssGyywEe-4er9RFtOKtQ" points="[10, 35, -128, 82]$[144, 35, 6, 82]$[144, -47, 6, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4tTICywEe-4er9RFtOKtQ" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4tTISywEe-4er9RFtOKtQ" id="(0.5,1.0)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_v4tTIiywEe-4er9RFtOKtQ" type="4001" element="_v4hF4iywEe-4er9RFtOKtQ" source="_v4lXVSywEe-4er9RFtOKtQ" target="_v4jiICywEe-4er9RFtOKtQ">
+          <children xmi:type="notation:Node" xmi:id="_v4tTJiywEe-4er9RFtOKtQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4tTJyywEe-4er9RFtOKtQ" x="-74" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4tTKCywEe-4er9RFtOKtQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4tTKSywEe-4er9RFtOKtQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_v4tTKiywEe-4er9RFtOKtQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4tTKyywEe-4er9RFtOKtQ" x="6" y="-10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_v4tTIyywEe-4er9RFtOKtQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_v4tTJCywEe-4er9RFtOKtQ" fontName="Segoe UI" fontHeight="12"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v4tTJSywEe-4er9RFtOKtQ" points="[-10, 31, 118, -65]$[-128, 31, 0, -65]$[-128, 66, 0, -30]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4tTLCywEe-4er9RFtOKtQ" id="(0.5,0.0)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4tTLSywEe-4er9RFtOKtQ" id="(0.5,1.0)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_v4hF5yywEe-4er9RFtOKtQ" source="DANNOTATION_CUSTOMIZATION_KEY">
+      <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_v4hF6CywEe-4er9RFtOKtQ"/>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_v4a_QCywEe-4er9RFtOKtQ" name="initial" outgoingEdges="_v4epoCywEe-4er9RFtOKtQ" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/switch.petrinet#//@elements.0"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/switch.petrinet#//@elements.0"/>
+      <ownedBorderedNodes xmi:type="diagram:DNode" uid="_v4c0diywEe-4er9RFtOKtQ" name="''" width="2" height="2">
+        <target xmi:type="petrinet:Token" href="petrinets/switch.petrinet#//@elements.0/@token"/>
+        <semanticElements xmi:type="petrinet:Token" href="petrinets/switch.petrinet#//@elements.0/@token"/>
+        <ownedStyle xmi:type="diagram:Dot" uid="_v4dbgCywEe-4er9RFtOKtQ" labelSize="12" showIcon="false" labelAlignment="LEFT" labelPosition="node" backgroundColor="0,0,0">
+          <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@borderedNodeMappings[name='Token']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@borderedNodeMappings[name='Token']"/>
+      </ownedBorderedNodes>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_v4bmUCywEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_v4cNYSywEe-4er9RFtOKtQ" name="on" outgoingEdges="_v4f3wCywEe-4er9RFtOKtQ" incomingEdges="_v4ge1SywEe-4er9RFtOKtQ" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/switch.petrinet#//@elements.1"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/switch.petrinet#//@elements.1"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_v4cNYiywEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_v4cNZCywEe-4er9RFtOKtQ" name="off" outgoingEdges="_v4fQsiywEe-4er9RFtOKtQ" incomingEdges="_v4ge0CywEe-4er9RFtOKtQ _v4hF4iywEe-4er9RFtOKtQ" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/switch.petrinet#//@elements.2"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/switch.petrinet#//@elements.2"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_v4cNZSywEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_v4c0cCywEe-4er9RFtOKtQ" name="flip" outgoingEdges="_v4fQtyywEe-4er9RFtOKtQ" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/switch.petrinet#//@elements.5"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/switch.petrinet#//@elements.5"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_v4c0cSywEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_v4c0cyywEe-4er9RFtOKtQ" name="flip" outgoingEdges="_v4f3xSywEe-4er9RFtOKtQ" width="3" height="3">
+      <target xmi:type="petrinet:Place" href="petrinets/switch.petrinet#//@elements.7"/>
+      <semanticElements xmi:type="petrinet:Place" href="petrinets/switch.petrinet#//@elements.7"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Dot" uid="_v4c0dCywEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" strokeSizeComputationExpression="3" backgroundColor="255,245,181">
+        <description xmi:type="style:DotDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Place']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_v4dbgiywEe-4er9RFtOKtQ" name="default" outgoingEdges="_v4ge0CywEe-4er9RFtOKtQ" incomingEdges="_v4epoCywEe-4er9RFtOKtQ" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/switch.petrinet#//@elements.3"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/switch.petrinet#//@elements.3"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_v4dbgyywEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_v4dbhSywEe-4er9RFtOKtQ" name="flip" outgoingEdges="_v4ge1SywEe-4er9RFtOKtQ" incomingEdges="_v4fQsiywEe-4er9RFtOKtQ _v4fQtyywEe-4er9RFtOKtQ" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/switch.petrinet#//@elements.4"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/switch.petrinet#//@elements.4"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_v4eCkCywEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNode" uid="_v4eCkiywEe-4er9RFtOKtQ" name="flip" outgoingEdges="_v4hF4iywEe-4er9RFtOKtQ" incomingEdges="_v4f3wCywEe-4er9RFtOKtQ _v4f3xSywEe-4er9RFtOKtQ" width="2" height="6">
+      <target xmi:type="petrinet:Transition" href="petrinets/switch.petrinet#//@elements.6"/>
+      <semanticElements xmi:type="petrinet:Transition" href="petrinets/switch.petrinet#//@elements.6"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:Square" uid="_v4eCkyywEe-4er9RFtOKtQ" labelSize="12" showIcon="false" borderSize="1" borderSizeComputationExpression="1" width="2" height="6" color="253,206,137">
+        <description xmi:type="style:SquareDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:NodeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@nodeMappings[name='Transition']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_v4epoCywEe-4er9RFtOKtQ" sourceNode="_v4a_QCywEe-4er9RFtOKtQ" targetNode="_v4dbgiywEe-4er9RFtOKtQ">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/switch.petrinet#//@arcs.0"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/switch.petrinet#//@arcs.0"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_v4epoSywEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_v4epoiywEe-4er9RFtOKtQ" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_v4fQsiywEe-4er9RFtOKtQ" sourceNode="_v4cNZCywEe-4er9RFtOKtQ" targetNode="_v4dbhSywEe-4er9RFtOKtQ">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/switch.petrinet#//@arcs.2"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/switch.petrinet#//@arcs.2"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_v4fQsyywEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_v4fQtCywEe-4er9RFtOKtQ" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_v4fQtyywEe-4er9RFtOKtQ" sourceNode="_v4c0cCywEe-4er9RFtOKtQ" targetNode="_v4dbhSywEe-4er9RFtOKtQ">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/switch.petrinet#//@arcs.4"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/switch.petrinet#//@arcs.4"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_v4fQuCywEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_v4fQuSywEe-4er9RFtOKtQ" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_v4f3wCywEe-4er9RFtOKtQ" sourceNode="_v4cNYSywEe-4er9RFtOKtQ" targetNode="_v4eCkiywEe-4er9RFtOKtQ">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/switch.petrinet#//@arcs.5"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/switch.petrinet#//@arcs.5"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_v4f3wSywEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_v4f3wiywEe-4er9RFtOKtQ" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_v4f3xSywEe-4er9RFtOKtQ" sourceNode="_v4c0cyywEe-4er9RFtOKtQ" targetNode="_v4eCkiywEe-4er9RFtOKtQ">
+      <target xmi:type="petrinet:IncomingArc" href="petrinets/switch.petrinet#//@arcs.7"/>
+      <semanticElements xmi:type="petrinet:IncomingArc" href="petrinets/switch.petrinet#//@arcs.7"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_v4f3xiywEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_v4f3xyywEe-4er9RFtOKtQ" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='IncomingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_v4ge0CywEe-4er9RFtOKtQ" sourceNode="_v4dbgiywEe-4er9RFtOKtQ" targetNode="_v4cNZCywEe-4er9RFtOKtQ">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/switch.petrinet#//@arcs.1"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/switch.petrinet#//@arcs.1"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_v4ge0SywEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_v4ge0iywEe-4er9RFtOKtQ" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_v4ge1SywEe-4er9RFtOKtQ" sourceNode="_v4dbhSywEe-4er9RFtOKtQ" targetNode="_v4cNYSywEe-4er9RFtOKtQ">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/switch.petrinet#//@arcs.3"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/switch.petrinet#//@arcs.3"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_v4ge1iywEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_v4ge1yywEe-4er9RFtOKtQ" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_v4hF4iywEe-4er9RFtOKtQ" sourceNode="_v4eCkiywEe-4er9RFtOKtQ" targetNode="_v4cNZCywEe-4er9RFtOKtQ">
+      <target xmi:type="petrinet:OutgoingArc" href="petrinets/switch.petrinet#//@arcs.6"/>
+      <semanticElements xmi:type="petrinet:OutgoingArc" href="petrinets/switch.petrinet#//@arcs.6"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_v4hF4yywEe-4er9RFtOKtQ" size="2" routingStyle="manhattan" strokeColor="0,0,0">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']/@style"/>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_v4hF5CywEe-4er9RFtOKtQ" labelSize="12"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer/@edgeMappings[name='OutgoingArc']"/>
+    </ownedDiagramElements>
+    <description xmi:type="description_1:DiagramDescription" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']"/>
+    <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_v4ZxISywEe-4er9RFtOKtQ"/>
+    <activatedLayers xmi:type="description_1:Layer" href="platform:/resource/swt.most.sirius.petrinet/description/petrinet.odesign#//@ownedViewpoints[name='Viewer']/@ownedRepresentations[name='Petrinet%20Viewer']/@defaultLayer"/>
+    <target xmi:type="petrinet:PetriNet" href="petrinets/switch.petrinet#/"/>
+  </diagram:DSemanticDiagram>
+</xmi:XMI>
diff --git a/model2model/examples-etl/statemachines/garagedoor.statemachine b/model2model/examples-etl/statemachines/garagedoor.statemachine
new file mode 100644
index 0000000000000000000000000000000000000000..7e44c6fd1941ac4b5bb590516b2ae01299c04221
--- /dev/null
+++ b/model2model/examples-etl/statemachines/garagedoor.statemachine
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<statemachine:StateMachine xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:statemachine="http://www.swt.org/most/statemachine" name="Garage Door">
+  <states name="Closed"/>
+  <states name="Open"/>
+  <states name="Opening"/>
+  <states name="Closing"/>
+  <finalstates name="final"/>
+  <initialstate name="initial"/>
+  <transitions from="//@initialstate" to="//@states.0"/>
+  <transitions from="//@states.0" to="//@states.2">
+    <trigger content="openDoor"/>
+    <action content="motor.upwards"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.1">
+    <guard content="stopper"/>
+    <action content="motor.stop"/>
+  </transitions>
+  <transitions from="//@states.1" to="//@states.3">
+    <trigger content="closeDoor"/>
+    <action content="motor.downwards"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.0">
+    <guard content="stopper"/>
+    <action content="motor.stop"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.2">
+    <trigger content="openDoor"/>
+    <action content="motor.upwards"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.3">
+    <trigger content="closeDoor"/>
+    <action content="motor.downwards"/>
+  </transitions>
+  <transitions from="//@states.0" to="//@finalstates.0">
+    <guard content="shutdown"/>
+  </transitions>
+  <transitions from="//@states.0" to="//@states.0">
+    <trigger content="closeDoor"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.3">
+    <trigger content="closeDoor"/>
+  </transitions>
+  <transitions from="//@states.1" to="//@states.1">
+    <trigger content="openDoor"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.2">
+    <trigger content="openDoor"/>
+  </transitions>
+</statemachine:StateMachine>
diff --git a/model2model/examples-etl/statemachines/garagedoor.svg b/model2model/examples-etl/statemachines/garagedoor.svg
new file mode 100644
index 0000000000000000000000000000000000000000..26c9a75a9419846b0f9b8c31f159e9cfb257d411
--- /dev/null
+++ b/model2model/examples-etl/statemachines/garagedoor.svg
@@ -0,0 +1,280 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-dasharray="none" shape-rendering="auto" font-family="'Dialog'" width="845" text-rendering="auto" fill-opacity="1" contentScriptType="text/ecmascript" color-interpolation="auto" color-rendering="auto" preserveAspectRatio="xMidYMid meet" font-size="12px" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" diagram:semanticRoot="platform:/resource/example/statemachines/garagedoor.statemachine#Garage Door" viewBox="0 0 845 417" fill="black" stroke="black" image-rendering="auto" stroke-miterlimit="10" zoomAndPan="magnify" version="1.0" stroke-linecap="square" stroke-linejoin="miter" contentStyleType="text/css" font-style="normal" height="417" stroke-width="1" stroke-dashoffset="0" font-weight="normal" stroke-opacity="1">
+    <!--Generated by the Batik Graphics2D SVG Generator-->
+    <defs id="genericDefs"/>
+    <g>
+        <defs id="defs1">
+            <linearGradient x1="588" x2="685" y1="210" gradientUnits="userSpaceOnUse" y2="284" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient1" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="78" x2="154" y1="211" gradientUnits="userSpaceOnUse" y2="274" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient2" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="322" x2="425" y1="69" gradientUnits="userSpaceOnUse" y2="146" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient3" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="326" x2="421" y1="293" gradientUnits="userSpaceOnUse" y2="366" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient4" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="84" x2="310" y1="-35" gradientUnits="userSpaceOnUse" y2="100" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient5" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="rgb(209,209,209)" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(209,209,209)" offset="100%"/>
+            </linearGradient>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
+                <path d="M755 111 L787 111 L787 143 L755 143 L755 111 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
+                <path d="M786 112 L839 112 L839 142 L786 142 L786 112 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath3">
+                <path d="M755 159 L787 159 L787 191 L755 191 L755 159 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4">
+                <path d="M786 160 L828 160 L828 190 L786 190 L786 160 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath5">
+                <path d="M587 220 L688 220 L688 275 L587 275 L587 220 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath6">
+                <path d="M587 220 L686 220 L686 273 L587 273 L587 220 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath7">
+                <path d="M604 225 L673 225 L673 255 L604 255 L604 225 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath8">
+                <path d="M588 258 L685 258 L685 272 L588 272 L588 258 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath9">
+                <path d="M77 216 L157 216 L157 271 L77 271 L77 216 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath10">
+                <path d="M77 216 L155 216 L155 269 L77 269 L77 216 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath11">
+                <path d="M90 221 L148 221 L148 251 L90 251 L90 221 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath12">
+                <path d="M78 254 L154 254 L154 268 L78 268 L78 254 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath13">
+                <path d="M321 81 L428 81 L428 136 L321 136 L321 81 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath14">
+                <path d="M321 81 L426 81 L426 134 L321 134 L321 81 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath15">
+                <path d="M332 86 L419 86 L419 116 L332 116 L332 86 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath16">
+                <path d="M322 119 L425 119 L425 133 L322 133 L322 119 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath17">
+                <path d="M325 303 L424 303 L424 358 L325 358 L325 303 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath18">
+                <path d="M325 303 L422 303 L422 356 L325 356 L325 303 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath19">
+                <path d="M338 308 L413 308 L413 338 L338 338 L338 308 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath20">
+                <path d="M326 341 L421 341 L421 355 L326 355 L326 341 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath21">
+                <path d="M83 9 L313 9 L313 57 L83 57 L83 9 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath22">
+                <path d="M83 9 L311 9 L311 55 L83 55 L83 9 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath23">
+                <path d="M83 13 L315 13 L315 38 L83 38 L83 13 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath24">
+                <path d="M83 41 L311 41 L311 55 L83 55 L83 41 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath25">
+                <path d="M-1 -1 L846 -1 L846 418 L-1 418 L-1 -1 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath26">
+                <path d="M647 212 L658 212 L658 224 L647 224 L647 212 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath27">
+                <path d="M461 81 L628 81 L628 100 L461 100 L461 81 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath28">
+                <path d="M423 102 L435 102 L435 113 L423 113 L423 102 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath29">
+                <path d="M152 81 L292 81 L292 100 L152 100 L152 81 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath30">
+                <path d="M121 208 L132 208 L132 220 L121 220 L121 208 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath31">
+                <path d="M131 306 L315 306 L315 325 L131 325 L131 306 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath32">
+                <path d="M317 324 L329 324 L329 335 L317 335 L317 324 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath33">
+                <path d="M452 303 L592 303 L592 322 L452 322 L452 303 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath34">
+                <path d="M632 270 L643 270 L643 282 L632 282 L632 270 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath35">
+                <path d="M191 159 L358 159 L358 178 L191 178 L191 159 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath36">
+                <path d="M356 131 L367 131 L367 143 L356 143 L356 131 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath37">
+                <path d="M383 159 L581 159 L581 178 L383 178 L383 159 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath38">
+                <path d="M373 295 L384 295 L384 307 L373 307 L373 295 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath39">
+                <path d="M677 153 L750 153 L750 172 L677 172 L677 153 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath40">
+                <path d="M747 169 L759 169 L759 180 L747 180 L747 169 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath41">
+                <path d="M695 291 L760 291 L760 310 L695 310 L695 291 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath42">
+                <path d="M649 270 L660 270 L660 282 L649 282 L649 270 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath43">
+                <path d="M343 375 L408 375 L408 394 L343 394 L343 375 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath44">
+                <path d="M337 353 L348 353 L348 365 L337 365 L337 353 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath45">
+                <path d="M23 291 L88 291 L88 310 L23 310 L23 291 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath46">
+                <path d="M97 266 L108 266 L108 278 L97 278 L97 266 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath47">
+                <path d="M343 38 L408 38 L408 57 L343 57 L343 38 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath48">
+                <path d="M397 73 L408 73 L408 85 L397 85 L397 73 Z"/>
+            </clipPath>
+        </defs>
+        <g stroke-miterlimit="0" stroke-width="0" font-size="15px" font-family="'Segoe UI'" stroke-linejoin="round">
+            <circle r="14" clip-path="url(#clipPath1)" cx="770" cy="126" stroke="none"/>
+        </g>
+        <g font-size="15px" stroke-width="0.1" font-family="'Segoe UI'" stroke-linecap="butt">
+            <circle fill="none" r="14.5" clip-path="url(#clipPath1)" cx="770.5" cy="126.5"/>
+            <text x="787" xml:space="preserve" font-size="20px" y="135" clip-path="url(#clipPath2)" stroke="none">initial</text>
+            <circle fill="rgb(209,209,209)" r="14" clip-path="url(#clipPath3)" cx="770" cy="174" stroke="none"/>
+            <circle fill="none" r="14.5" clip-path="url(#clipPath3)" cx="770.5" cy="174.5"/>
+            <text x="787" xml:space="preserve" font-size="20px" y="183" clip-path="url(#clipPath4)" stroke="none">final</text>
+        </g>
+        <g stroke-linecap="butt" font-size="20px" fill="rgb(131,122,133)" font-family="'Segoe UI'" stroke="rgb(131,122,133)" font-weight="bold" stroke-width="0.1">
+            <rect x="589" y="222" clip-path="url(#clipPath5)" width="97" rx="5" opacity="0.255" ry="5" height="51" stroke="none"/>
+            <rect x="590" y="223" clip-path="url(#clipPath5)" width="97" rx="5" opacity="0.255" ry="5" height="51" stroke="none"/>
+            <rect x="588" y="221" clip-path="url(#clipPath6)" fill="url(#linearGradient1)" width="97" rx="5" ry="5" height="51" stroke="none"/>
+            <rect x="588" y="221" clip-path="url(#clipPath6)" fill="none" width="96" rx="5" ry="5" height="50" stroke="black" stroke-width="1.1"/>
+            <text x="605" y="248" clip-path="url(#clipPath7)" fill="black" stroke="none" stroke-width="1.1" xml:space="preserve">Closed</text>
+            <line clip-path="url(#clipPath8)" fill="none" x1="589" x2="684" y1="259" y2="259" stroke="black" stroke-width="1.1"/>
+            <rect x="79" y="218" clip-path="url(#clipPath9)" width="76" rx="5" opacity="0.255" ry="5" height="51" stroke="none" stroke-width="1.1"/>
+            <rect x="80" y="219" clip-path="url(#clipPath9)" width="76" rx="5" opacity="0.255" ry="5" height="51" stroke="none" stroke-width="1.1"/>
+            <rect x="78" y="217" clip-path="url(#clipPath10)" fill="url(#linearGradient2)" width="76" rx="5" ry="5" height="51" stroke="none" stroke-width="1.1"/>
+            <rect x="78" y="217" clip-path="url(#clipPath10)" fill="none" width="75" rx="5" ry="5" height="50" stroke="black" stroke-width="1.1"/>
+            <text x="91" y="244" clip-path="url(#clipPath11)" fill="black" stroke="none" stroke-width="1.1" xml:space="preserve">Open</text>
+            <line clip-path="url(#clipPath12)" fill="none" x1="79" x2="153" y1="255" y2="255" stroke="black" stroke-width="1.1"/>
+            <rect x="323" y="83" clip-path="url(#clipPath13)" width="103" rx="5" opacity="0.255" ry="5" height="51" stroke="none" stroke-width="1.1"/>
+            <rect x="324" y="84" clip-path="url(#clipPath13)" width="103" rx="5" opacity="0.255" ry="5" height="51" stroke="none" stroke-width="1.1"/>
+            <rect x="322" y="82" clip-path="url(#clipPath14)" fill="url(#linearGradient3)" width="103" rx="5" ry="5" height="51" stroke="none" stroke-width="1.1"/>
+            <rect x="322" y="82" clip-path="url(#clipPath14)" fill="none" width="102" rx="5" ry="5" height="50" stroke="black" stroke-width="1.1"/>
+            <text x="333" y="109" clip-path="url(#clipPath15)" fill="black" stroke="none" stroke-width="1.1" xml:space="preserve">Opening</text>
+            <line clip-path="url(#clipPath16)" fill="none" x1="323" x2="424" y1="120" y2="120" stroke="black" stroke-width="1.1"/>
+            <rect x="327" y="305" clip-path="url(#clipPath17)" width="95" rx="5" opacity="0.255" ry="5" height="51" stroke="none" stroke-width="1.1"/>
+            <rect x="328" y="306" clip-path="url(#clipPath17)" width="95" rx="5" opacity="0.255" ry="5" height="51" stroke="none" stroke-width="1.1"/>
+            <rect x="326" y="304" clip-path="url(#clipPath18)" fill="url(#linearGradient4)" width="95" rx="5" ry="5" height="51" stroke="none" stroke-width="1.1"/>
+            <rect x="326" y="304" clip-path="url(#clipPath18)" fill="none" width="94" rx="5" ry="5" height="50" stroke="black" stroke-width="1.1"/>
+            <text x="339" y="331" clip-path="url(#clipPath19)" fill="black" stroke="none" stroke-width="1.1" xml:space="preserve">Closing</text>
+            <line clip-path="url(#clipPath20)" fill="none" x1="327" x2="420" y1="342" y2="342" stroke="black" stroke-width="1.1"/>
+            <rect x="85" y="11" clip-path="url(#clipPath21)" width="226" rx="5" opacity="0.255" ry="5" height="44" stroke="none" stroke-width="1.1"/>
+            <rect x="86" y="12" clip-path="url(#clipPath21)" width="226" rx="5" opacity="0.255" ry="5" height="44" stroke="none" stroke-width="1.1"/>
+        </g>
+        <g stroke-linecap="butt" font-size="16px" fill="url(#linearGradient5)" font-family="'Segoe UI'" stroke="url(#linearGradient5)" font-weight="bold" stroke-width="1.1">
+            <rect x="84" y="10" clip-path="url(#clipPath22)" width="226" rx="5" ry="5" height="44" stroke="none"/>
+            <text fill="black" x="84" xml:space="preserve" y="32" clip-path="url(#clipPath23)" stroke="none">State Machine: Garage Door</text>
+            <line clip-path="url(#clipPath24)" fill="none" x1="84" x2="310" y1="42" y2="42" stroke="rgb(209,209,209)"/>
+        </g>
+        <g font-size="13px" stroke-width="2.1" font-family="'Segoe UI'" stroke-linecap="butt">
+            <line y2="126" fill="none" x1="756" clip-path="url(#clipPath25)" x2="652" y1="126"/>
+            <line y2="221" fill="none" x1="652" clip-path="url(#clipPath25)" x2="652" y1="126"/>
+            <line y2="221" fill="none" x1="649" clip-path="url(#clipPath26)" x2="652" y1="214"/>
+            <line y2="214" fill="none" x1="652" clip-path="url(#clipPath26)" x2="655" y1="221"/>
+            <line y2="107" fill="none" x1="637" clip-path="url(#clipPath25)" x2="637" y1="221"/>
+            <line y2="107" fill="none" x1="637" clip-path="url(#clipPath25)" x2="425" y1="107"/>
+            <text x="462" xml:space="preserve" y="96" clip-path="url(#clipPath27)" stroke="none">openDoor / motor.upwards</text>
+            <line y2="107" fill="none" x1="432" clip-path="url(#clipPath28)" x2="425" y1="104"/>
+            <line y2="110" fill="none" x1="425" clip-path="url(#clipPath28)" x2="432" y1="107"/>
+            <line y2="107" fill="none" x1="322" clip-path="url(#clipPath25)" x2="126" y1="107"/>
+            <line y2="217" fill="none" x1="126" clip-path="url(#clipPath25)" x2="126" y1="107"/>
+            <text x="153" xml:space="preserve" y="96" clip-path="url(#clipPath29)" stroke="none"> [stopper] / motor.stop</text>
+            <line y2="217" fill="none" x1="123" clip-path="url(#clipPath30)" x2="126" y1="210"/>
+            <line y2="210" fill="none" x1="126" clip-path="url(#clipPath30)" x2="129" y1="217"/>
+            <line y2="329" fill="none" x1="123" clip-path="url(#clipPath25)" x2="123" y1="268"/>
+            <line y2="329" fill="none" x1="123" clip-path="url(#clipPath25)" x2="326" y1="329"/>
+            <text x="132" xml:space="preserve" y="321" clip-path="url(#clipPath31)" stroke="none">closeDoor / motor.downwards</text>
+            <line y2="329" fill="none" x1="319" clip-path="url(#clipPath32)" x2="326" y1="332"/>
+            <line y2="326" fill="none" x1="326" clip-path="url(#clipPath32)" x2="319" y1="329"/>
+            <line y2="329" fill="none" x1="421" clip-path="url(#clipPath25)" x2="637" y1="329"/>
+            <line y2="272" fill="none" x1="637" clip-path="url(#clipPath25)" x2="637" y1="329"/>
+            <text x="453" xml:space="preserve" y="318" clip-path="url(#clipPath33)" stroke="none"> [stopper] / motor.stop</text>
+            <line y2="272" fill="none" x1="640" clip-path="url(#clipPath34)" x2="637" y1="279"/>
+            <line y2="279" fill="none" x1="637" clip-path="url(#clipPath34)" x2="634" y1="272"/>
+            <line y2="133" fill="none" x1="361" clip-path="url(#clipPath25)" x2="361" y1="304"/>
+            <text x="192" xml:space="preserve" y="174" clip-path="url(#clipPath35)" stroke="none">openDoor / motor.upwards</text>
+            <line y2="133" fill="none" x1="364" clip-path="url(#clipPath36)" x2="361" y1="140"/>
+            <line y2="140" fill="none" x1="361" clip-path="url(#clipPath36)" x2="358" y1="133"/>
+            <line y2="304" fill="none" x1="378" clip-path="url(#clipPath25)" x2="378" y1="133"/>
+            <text x="391" xml:space="preserve" y="174" clip-path="url(#clipPath37)" stroke="none">closeDoor / motor.downwards</text>
+            <line y2="304" fill="none" x1="375" clip-path="url(#clipPath38)" x2="378" y1="297"/>
+            <line y2="297" fill="none" x1="378" clip-path="url(#clipPath38)" x2="381" y1="304"/>
+            <line y2="174" fill="none" x1="672" clip-path="url(#clipPath25)" x2="672" y1="221"/>
+            <line y2="174" fill="none" x1="672" clip-path="url(#clipPath25)" x2="756" y1="174"/>
+            <text x="678" xml:space="preserve" y="168" clip-path="url(#clipPath39)" stroke="none"> [shutdown]</text>
+            <line y2="174" fill="none" x1="749" clip-path="url(#clipPath40)" x2="756" y1="177"/>
+            <line y2="171" fill="none" x1="756" clip-path="url(#clipPath40)" x2="749" y1="174"/>
+            <line y2="242" fill="none" x1="685" clip-path="url(#clipPath25)" x2="702" y1="242"/>
+            <line y2="286" fill="none" x1="702" clip-path="url(#clipPath25)" x2="702" y1="242"/>
+            <line y2="286" fill="none" x1="702" clip-path="url(#clipPath25)" x2="654" y1="286"/>
+            <line y2="272" fill="none" x1="654" clip-path="url(#clipPath25)" x2="654" y1="286"/>
+            <text x="696" xml:space="preserve" y="306" clip-path="url(#clipPath41)" stroke="none">closeDoor</text>
+            <line y2="272" fill="none" x1="657" clip-path="url(#clipPath42)" x2="654" y1="279"/>
+            <line y2="279" fill="none" x1="654" clip-path="url(#clipPath42)" x2="651" y1="272"/>
+            <line y2="370" fill="none" x1="402" clip-path="url(#clipPath25)" x2="402" y1="355"/>
+            <line y2="370" fill="none" x1="402" clip-path="url(#clipPath25)" x2="342" y1="370"/>
+            <line y2="355" fill="none" x1="342" clip-path="url(#clipPath25)" x2="342" y1="370"/>
+            <text x="344" xml:space="preserve" y="390" clip-path="url(#clipPath43)" stroke="none">closeDoor</text>
+            <line y2="355" fill="none" x1="345" clip-path="url(#clipPath44)" x2="342" y1="362"/>
+            <line y2="362" fill="none" x1="342" clip-path="url(#clipPath44)" x2="339" y1="355"/>
+            <line y2="242" fill="none" x1="78" clip-path="url(#clipPath25)" x2="60" y1="242"/>
+            <line y2="286" fill="none" x1="60" clip-path="url(#clipPath25)" x2="60" y1="242"/>
+            <line y2="286" fill="none" x1="60" clip-path="url(#clipPath25)" x2="102" y1="286"/>
+            <line y2="268" fill="none" x1="102" clip-path="url(#clipPath25)" x2="102" y1="286"/>
+            <text x="24" xml:space="preserve" y="306" clip-path="url(#clipPath45)" stroke="none">openDoor</text>
+            <line y2="268" fill="none" x1="105" clip-path="url(#clipPath46)" x2="102" y1="275"/>
+            <line y2="275" fill="none" x1="102" clip-path="url(#clipPath46)" x2="99" y1="268"/>
+            <line y2="65" fill="none" x1="342" clip-path="url(#clipPath25)" x2="342" y1="82"/>
+            <line y2="65" fill="none" x1="342" clip-path="url(#clipPath25)" x2="402" y1="65"/>
+            <line y2="82" fill="none" x1="402" clip-path="url(#clipPath25)" x2="402" y1="65"/>
+            <text x="344" xml:space="preserve" y="53" clip-path="url(#clipPath47)" stroke="none">openDoor</text>
+            <line y2="82" fill="none" x1="399" clip-path="url(#clipPath48)" x2="402" y1="75"/>
+            <line y2="75" fill="none" x1="402" clip-path="url(#clipPath48)" x2="405" y1="82"/>
+        </g>
+    </g>
+</svg>
diff --git a/model2model/examples-etl/statemachines/switch.statemachine b/model2model/examples-etl/statemachines/switch.statemachine
new file mode 100644
index 0000000000000000000000000000000000000000..e69b2686f6ad45dbc26fcbe03cde993863643c97
--- /dev/null
+++ b/model2model/examples-etl/statemachines/switch.statemachine
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<statemachine:StateMachine xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:statemachine="http://www.swt.org/most/statemachine" name="Switch">
+  <states name="on">
+    <do_ content="do_something"/>
+  </states>
+  <states name="off">
+    <do_ content="do_nothing"/>
+  </states>
+  <initialstate name="initial"/>
+  <transitions from="//@initialstate" to="//@states.1"/>
+  <transitions from="//@states.1" to="//@states.0">
+    <trigger content="flip"/>
+  </transitions>
+  <transitions from="//@states.0" to="//@states.1">
+    <trigger content="flip"/>
+  </transitions>
+</statemachine:StateMachine>
diff --git a/model2model/examples-etl/statemachines/switch.svg b/model2model/examples-etl/statemachines/switch.svg
new file mode 100644
index 0000000000000000000000000000000000000000..31ee45986067e22fc3c8999f35f5659ac858f5bd
--- /dev/null
+++ b/model2model/examples-etl/statemachines/switch.svg
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-dasharray="none" shape-rendering="auto" font-family="'Dialog'" width="337" text-rendering="auto" fill-opacity="1" contentScriptType="text/ecmascript" color-interpolation="auto" color-rendering="auto" preserveAspectRatio="xMidYMid meet" font-size="12px" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" diagram:semanticRoot="platform:/resource/example/statemachines/switch.statemachine#Switch" viewBox="0 0 337 397" fill="black" stroke="black" image-rendering="auto" stroke-miterlimit="10" zoomAndPan="magnify" version="1.0" stroke-linecap="square" stroke-linejoin="miter" contentStyleType="text/css" font-style="normal" height="397" stroke-width="1" stroke-dashoffset="0" font-weight="normal" stroke-opacity="1">
+    <!--Generated by the Batik Graphics2D SVG Generator-->
+    <defs id="genericDefs"/>
+    <g>
+        <defs id="defs1">
+            <linearGradient x1="133" x2="325" y1="286" gradientUnits="userSpaceOnUse" y2="416" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient1" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="133" x2="325" y1="40" gradientUnits="userSpaceOnUse" y2="170" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient2" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(255,245,181)" offset="100%"/>
+            </linearGradient>
+            <linearGradient x1="140" x2="318" y1="-23" gradientUnits="userSpaceOnUse" y2="88" xlink:type="simple" xlink:actuate="onLoad" id="linearGradient3" xlink:show="other" spreadMethod="pad">
+                <stop stop-opacity="1" stop-color="rgb(209,209,209)" offset="0%"/>
+                <stop stop-opacity="1" stop-color="rgb(209,209,209)" offset="100%"/>
+            </linearGradient>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
+                <path d="M18 137 L50 137 L50 169 L18 169 L18 137 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
+                <path d="M9 168 L62 168 L62 198 L9 198 L9 168 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath3">
+                <path d="M132 315 L328 315 L328 388 L132 388 L132 315 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath4">
+                <path d="M132 315 L326 315 L326 386 L132 386 L132 315 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath5">
+                <path d="M216 320 L248 320 L248 350 L216 350 L216 320 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath6">
+                <path d="M137 355 L325 355 L325 385 L137 385 L137 355 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath7">
+                <path d="M133 353 L325 353 L325 385 L133 385 L133 353 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath8">
+                <path d="M132 69 L328 69 L328 142 L132 142 L132 69 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath9">
+                <path d="M132 69 L326 69 L326 140 L132 140 L132 69 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath10">
+                <path d="M214 74 L248 74 L248 104 L214 104 L214 74 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath11">
+                <path d="M137 109 L301 109 L301 139 L137 139 L137 109 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath12">
+                <path d="M133 107 L325 107 L325 139 L133 139 L133 107 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath13">
+                <path d="M139 9 L321 9 L321 57 L139 57 L139 9 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath14">
+                <path d="M139 9 L319 9 L319 55 L139 55 L139 9 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath15">
+                <path d="M139 13 L323 13 L323 38 L139 38 L139 13 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath16">
+                <path d="M139 41 L319 41 L319 55 L139 55 L139 41 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath17">
+                <path d="M-1 -1 L338 -1 L338 398 L-1 398 L-1 -1 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath18">
+                <path d="M124 95 L136 95 L136 106 L124 106 L124 95 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath19">
+                <path d="M270 207 L292 207 L292 226 L270 226 L270 207 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath20">
+                <path d="M248 307 L259 307 L259 319 L248 319 L248 307 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath21">
+                <path d="M168 207 L190 207 L190 226 L168 226 L168 207 Z"/>
+            </clipPath>
+            <clipPath clipPathUnits="userSpaceOnUse" id="clipPath22">
+                <path d="M194 137 L205 137 L205 149 L194 149 L194 137 Z"/>
+            </clipPath>
+        </defs>
+        <g stroke-miterlimit="0" stroke-width="0" font-size="15px" font-family="'Segoe UI'" stroke-linejoin="round">
+            <circle r="14" clip-path="url(#clipPath1)" cx="33" cy="152" stroke="none"/>
+        </g>
+        <g font-size="15px" stroke-width="0.1" font-family="'Segoe UI'" stroke-linecap="butt">
+            <circle fill="none" r="14.5" clip-path="url(#clipPath1)" cx="33.5" cy="152.5"/>
+            <text x="10" xml:space="preserve" font-size="20px" y="191" clip-path="url(#clipPath2)" stroke="none">initial</text>
+        </g>
+        <g stroke-linecap="butt" font-size="20px" fill="rgb(131,122,133)" font-family="'Segoe UI'" stroke="rgb(131,122,133)" font-weight="bold" stroke-width="0.1">
+            <rect x="134" y="317" clip-path="url(#clipPath3)" width="192" rx="5" opacity="0.255" ry="5" height="69" stroke="none"/>
+            <rect x="135" y="318" clip-path="url(#clipPath3)" width="192" rx="5" opacity="0.255" ry="5" height="69" stroke="none"/>
+            <rect x="133" y="316" clip-path="url(#clipPath4)" fill="url(#linearGradient1)" width="192" rx="5" ry="5" height="69" stroke="none"/>
+            <rect x="133" y="316" clip-path="url(#clipPath4)" fill="none" width="191" rx="5" ry="5" height="68" stroke="black" stroke-width="1.1"/>
+            <text x="217" y="343" clip-path="url(#clipPath5)" fill="black" stroke="none" stroke-width="1.1" xml:space="preserve">on</text>
+        </g>
+        <g font-size="20px" stroke-width="1.1" font-family="'Segoe UI'" stroke-linecap="butt">
+            <text x="138" xml:space="preserve" y="378" clip-path="url(#clipPath6)" stroke="none">do/     do_something</text>
+            <line y2="354" fill="none" x1="134" clip-path="url(#clipPath7)" x2="324" y1="354"/>
+            <rect x="134" y="71" clip-path="url(#clipPath8)" fill="rgb(131,122,133)" width="192" rx="5" opacity="0.255" ry="5" height="69" stroke="none"/>
+            <rect x="135" y="72" clip-path="url(#clipPath8)" fill="rgb(131,122,133)" width="192" rx="5" opacity="0.255" ry="5" height="69" stroke="none"/>
+            <rect x="133" y="70" clip-path="url(#clipPath9)" fill="url(#linearGradient2)" width="192" rx="5" ry="5" height="69" stroke="none"/>
+            <rect x="133" y="70" clip-path="url(#clipPath9)" fill="none" width="191" rx="5" ry="5" height="68"/>
+            <text x="215" xml:space="preserve" y="97" clip-path="url(#clipPath10)" font-weight="bold" stroke="none">off</text>
+            <text x="138" xml:space="preserve" y="132" clip-path="url(#clipPath11)" stroke="none">do/     do_nothing</text>
+            <line y2="108" fill="none" x1="134" clip-path="url(#clipPath12)" x2="324" y1="108"/>
+        </g>
+        <g stroke-linecap="butt" font-size="16px" fill="rgb(131,122,133)" font-family="'Segoe UI'" stroke="rgb(131,122,133)" font-weight="bold" stroke-width="1.1">
+            <rect x="141" y="11" clip-path="url(#clipPath13)" width="178" rx="5" opacity="0.255" ry="5" height="44" stroke="none"/>
+            <rect x="142" y="12" clip-path="url(#clipPath13)" width="178" rx="5" opacity="0.255" ry="5" height="44" stroke="none"/>
+            <rect x="140" y="10" clip-path="url(#clipPath14)" fill="url(#linearGradient3)" width="178" rx="5" ry="5" height="44" stroke="none"/>
+            <text fill="black" x="140" xml:space="preserve" y="32" clip-path="url(#clipPath15)" stroke="none">State Machine: Switch</text>
+            <line clip-path="url(#clipPath16)" fill="none" x1="140" x2="318" y1="42" y2="42" stroke="rgb(209,209,209)"/>
+        </g>
+        <g font-size="13px" stroke-width="2.1" font-family="'Segoe UI'" stroke-linecap="butt">
+            <line y2="100" fill="none" x1="34" clip-path="url(#clipPath17)" x2="34" y1="138"/>
+            <line y2="100" fill="none" x1="34" clip-path="url(#clipPath17)" x2="133" y1="100"/>
+            <line y2="100" fill="none" x1="126" clip-path="url(#clipPath18)" x2="133" y1="103"/>
+            <line y2="97" fill="none" x1="133" clip-path="url(#clipPath18)" x2="126" y1="100"/>
+            <line y2="316" fill="none" x1="253" clip-path="url(#clipPath17)" x2="253" y1="139"/>
+            <text x="271" xml:space="preserve" y="222" clip-path="url(#clipPath19)" stroke="none">flip</text>
+            <line y2="316" fill="none" x1="250" clip-path="url(#clipPath20)" x2="253" y1="309"/>
+            <line y2="309" fill="none" x1="253" clip-path="url(#clipPath20)" x2="256" y1="316"/>
+            <line y2="139" fill="none" x1="199" clip-path="url(#clipPath17)" x2="199" y1="316"/>
+            <text x="169" xml:space="preserve" y="222" clip-path="url(#clipPath21)" stroke="none">flip</text>
+            <line y2="139" fill="none" x1="202" clip-path="url(#clipPath22)" x2="199" y1="146"/>
+            <line y2="146" fill="none" x1="199" clip-path="url(#clipPath22)" x2="196" y1="139"/>
+        </g>
+    </g>
+</svg>
diff --git a/model2model/swt.most.statemachine.to.petrinet.etl/.project b/model2model/swt.most.statemachine.to.petrinet.etl/.project
new file mode 100644
index 0000000000000000000000000000000000000000..b6c3018499b6e820cc029d8d6ffd8e7d952992e4
--- /dev/null
+++ b/model2model/swt.most.statemachine.to.petrinet.etl/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.etl.statemachine</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/model2model/swt.most.statemachine.to.petrinet.etl/StatechartToPetrinets-GarageDoor.launch b/model2model/swt.most.statemachine.to.petrinet.etl/StatechartToPetrinets-GarageDoor.launch
new file mode 100644
index 0000000000000000000000000000000000000000..e1b0e5cc086a32ba77b19d8fc46dec08e8c88dd5
--- /dev/null
+++ b/model2model/swt.most.statemachine.to.petrinet.etl/StatechartToPetrinets-GarageDoor.launch
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.epsilon.etl.eclipse.dt.launching.EtlLaunchConfigurationDelegate">
+    <booleanAttribute key="fine_grained_profiling" value="false"/>
+    <stringAttribute key="implementation_name" value="Parallel (Declarative operations)"/>
+    <listAttribute key="models">
+        <listEntry value="#Mon Jun 17 15:47:19 CEST 2024&#13;&#10;aliases=&#13;&#10;cached=true&#13;&#10;concurrent=false&#13;&#10;expand=true&#13;&#10;fileBasedMetamodelUri=&#13;&#10;isMetamodelFileBased=false&#13;&#10;metamodelFile=&#13;&#10;metamodelUri=http\://www.swt.org/most/statemachine&#13;&#10;modelFile=/examples-etl/statemachines/garagedoor.statemachine&#13;&#10;modelUri=platform\:/resource/examples-etl/statemachines/garagedoor.statemachine&#13;&#10;name=source&#13;&#10;readOnLoad=true&#13;&#10;reuseUnmodifiedFileBasedMetamodels=true&#13;&#10;storeOnDisposal=false&#13;&#10;type=EMF&#13;&#10;validate=false"/>
+        <listEntry value="#Mon Jun 17 15:47:39 CEST 2024&#13;&#10;aliases=&#13;&#10;cached=true&#13;&#10;concurrent=false&#13;&#10;expand=true&#13;&#10;fileBasedMetamodelUri=&#13;&#10;isMetamodelFileBased=false&#13;&#10;metamodelFile=&#13;&#10;metamodelUri=http\://www.example.org/petrinet&#13;&#10;modelFile=/examples-etl/petrinets/garagedoor.petrinet&#13;&#10;modelUri=platform\:/resource/examples-etl/petrinets/garagedoor.petrinet&#13;&#10;name=target&#13;&#10;readOnLoad=false&#13;&#10;reuseUnmodifiedFileBasedMetamodels=true&#13;&#10;storeOnDisposal=true&#13;&#10;type=EMF&#13;&#10;validate=false"/>
+    </listAttribute>
+    <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
+    <intAttribute key="parallelism" value="7"/>
+    <listAttribute key="parameters"/>
+    <booleanAttribute key="profile_model_loading" value="false"/>
+    <booleanAttribute key="profiling_enabled" value="false"/>
+    <booleanAttribute key="reset_profiler" value="false"/>
+    <stringAttribute key="source" value="/swt.most.etl.statemachine/StatechartToPetrinets.etl"/>
+</launchConfiguration>
diff --git a/model2model/swt.most.statemachine.to.petrinet.etl/StatechartToPetrinets-Switch.launch b/model2model/swt.most.statemachine.to.petrinet.etl/StatechartToPetrinets-Switch.launch
new file mode 100644
index 0000000000000000000000000000000000000000..2488b8f3ae578da236ba6e047426e2669573e009
--- /dev/null
+++ b/model2model/swt.most.statemachine.to.petrinet.etl/StatechartToPetrinets-Switch.launch
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.epsilon.etl.eclipse.dt.launching.EtlLaunchConfigurationDelegate">
+    <booleanAttribute key="fine_grained_profiling" value="false"/>
+    <stringAttribute key="implementation_name" value="Parallel (Declarative operations)"/>
+    <listAttribute key="models">
+        <listEntry value="#Mon Jun 17 15:50:00 CEST 2024&#13;&#10;aliases=&#13;&#10;cached=true&#13;&#10;concurrent=false&#13;&#10;expand=true&#13;&#10;fileBasedMetamodelUri=&#13;&#10;isMetamodelFileBased=false&#13;&#10;metamodelFile=&#13;&#10;metamodelUri=http\://www.swt.org/most/statemachine&#13;&#10;modelFile=/examples-etl/statemachines/switch.statemachine&#13;&#10;modelUri=platform\:/resource/examples-etl/statemachines/switch.statemachine&#13;&#10;name=source&#13;&#10;readOnLoad=true&#13;&#10;reuseUnmodifiedFileBasedMetamodels=true&#13;&#10;storeOnDisposal=false&#13;&#10;type=EMF&#13;&#10;validate=false"/>
+        <listEntry value="#Mon Jun 17 15:50:51 CEST 2024&#13;&#10;aliases=&#13;&#10;cached=true&#13;&#10;concurrent=false&#13;&#10;expand=true&#13;&#10;fileBasedMetamodelUri=&#13;&#10;isMetamodelFileBased=false&#13;&#10;metamodelFile=&#13;&#10;metamodelUri=http\://www.example.org/petrinet&#13;&#10;modelFile=/examples-etl/petrinets/switch.petrinet&#13;&#10;modelUri=platform\:/resource/examples-etl/petrinets/switch.petrinet&#13;&#10;name=target&#13;&#10;readOnLoad=false&#13;&#10;reuseUnmodifiedFileBasedMetamodels=true&#13;&#10;storeOnDisposal=true&#13;&#10;type=EMF&#13;&#10;validate=false"/>
+    </listAttribute>
+    <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
+    <intAttribute key="parallelism" value="7"/>
+    <listAttribute key="parameters"/>
+    <booleanAttribute key="profile_model_loading" value="false"/>
+    <booleanAttribute key="profiling_enabled" value="false"/>
+    <booleanAttribute key="reset_profiler" value="false"/>
+    <stringAttribute key="source" value="/swt.most.etl.statemachine/StatechartToPetrinets.etl"/>
+</launchConfiguration>
diff --git a/model2model/swt.most.statemachine.to.petrinet.etl/StatechartToPetrinets.etl b/model2model/swt.most.statemachine.to.petrinet.etl/StatechartToPetrinets.etl
new file mode 100644
index 0000000000000000000000000000000000000000..65614675227dde22d1774364ae9c91fe9bab1b4d
--- /dev/null
+++ b/model2model/swt.most.statemachine.to.petrinet.etl/StatechartToPetrinets.etl
@@ -0,0 +1,129 @@
+
+// A normal Transformation Rule triggers ones per element in the source model.
+// this rule will create a Petri Net out of a State Machine and will fill it with transformed sub-elements from the source model.
+rule StateMachineToPerinet
+	transform s : source!StateMachine
+	to t : target!PetriNet {
+		
+		("Start transforming State Machine '"+ s.name +"' into a Petri Net!").println();
+		
+		t.name = s.name;
+		
+		t.elements.add(s.initialstate.equivalent());
+		
+		for (state in s.states) { 
+			t.elements.add(state.equivalent());
+		}
+		
+		for (state in s.finalstates) { 
+			t.elements.add(state.equivalent());
+		}
+		
+		for (transition in s.transitions) {
+			t.processTransition(transition);
+		}
+		
+		"Transformation finished!".println();
+		
+}
+
+
+// Lazy Transformation Rules will not automatically trigger a transformation per source model element.
+// They can be triggered by calling x.equivalent(). x must be an element of the source model datatype. (source!Datatype)
+// Note x.equivalent() will only trigger the transformation once and will after the first call only return a reference to the created element.
+// They are used for simple transformations.
+@lazy
+rule NormalStateToPlace 
+	transform s : source!NormalState
+	to t : target!Place {
+	    t.identifier = s.name;
+}
+
+@lazy
+rule InitialStateToPlace 
+	transform s : source!InitialState
+	to t : target!Place {
+	    t.identifier = s.name;
+	    t.token = new target!Token;
+}
+
+@lazy
+rule FinalStateToPlace 
+	transform s : source!FinalState
+	to t : target!Place {
+	    t.identifier = s.name;
+}
+
+@lazy
+rule TransitionToTransition 
+	transform s : source!Transition
+	to t : target!Transition {
+	if(s.trigger <> null){
+		t.identifier = s.trigger.content;
+	}else{
+		t.identifier = "default";
+	}
+}
+
+// If you need a complex transformation, you can define our own functions.
+// Please note that functions are not automatically called per source model element. You need to call them from a rule.
+// In this case, a State Machine Transition is transformed into multiple Petri Net elements (Transition and Arcs).
+function target!PetriNet processTransition(transition : source!Transition){
+	
+	// Process a State Machine Transition in a Petri Net Transition and two Arcs.
+	// Call the lazy rule to create the Transition
+	var pTransition = transition.equivalent();
+	self.elements.add(pTransition);
+	
+	// Add the arcs as completly new elements
+	var pIncomingArc = new target!IncomingArc;
+	pIncomingArc.Target = pTransition;
+	pIncomingArc.Source = transition.from.equivalent();
+	self.arcs.add(pIncomingArc);
+	
+	var pOutgoingArc = new target!OutgoingArc;
+	pOutgoingArc.Target = transition.To.equivalent();
+	pOutgoingArc.Source = pTransition;
+	self.arcs.add(pOutgoingArc);
+	
+	// Process the trigger statement to a Place and an Arc to the current Petri Net Transition.
+	// By later placing a Token in the Place the "guard" is active and the Transition can fire.
+	if(transition.trigger <> null){
+		var triggerPlace = new target!Place;
+		triggerPlace.identifier = transition.trigger.content;
+		self.elements.add(triggerPlace);
+		
+		var triggerIncomingArc = new target!IncomingArc;
+		triggerIncomingArc.Target = pTransition;
+		triggerIncomingArc.Source = triggerPlace;
+		self.arcs.add(triggerIncomingArc);	
+	}
+	
+	// Process a guard statement to a Place and an Arc to the current Petri Net Transition.
+	// By later placing a Token in the Place the "guard" is active and the Transition can fire.
+	if(transition.Guard <> null){
+		var guardPlace = new target!Place;
+		guardPlace.identifier = transition.Guard.content;
+		self.elements.add(guardPlace);
+		
+		var guardIncomingArc = new target!IncomingArc;
+		guardIncomingArc.Target = pTransition;
+		guardIncomingArc.Source = guardPlace;
+		self.arcs.add(guardIncomingArc);	
+	}
+	
+	// Process an action statement to a Place and an Arc from the current petri net Transition.
+	// If the Transition is fired a token is placed in the Place, symbolizing a done or pending action.
+	if(transition.action <> null){
+		var actionPlace = new target!Place;
+		actionPlace.identifier = transition.action.content;
+		self.elements.add(actionPlace);
+		
+		var actionOutgoingArc = new target!OutgoingArc;
+		actionOutgoingArc.Target = actionPlace;
+		actionOutgoingArc.Source = pTransition;
+		self.arcs.add(actionOutgoingArc);	
+	}
+	
+	
+}
diff --git a/model2model/swt.most.statemachine.validation.evl/.project b/model2model/swt.most.statemachine.validation.evl/.project
new file mode 100644
index 0000000000000000000000000000000000000000..8cebe1d150db19c4e7974c37d8f3b9c347c2a382
--- /dev/null
+++ b/model2model/swt.most.statemachine.validation.evl/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.statemachine.validation.evl</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/model2model/swt.most.statemachine.validation.evl/model/garagedoor.statemachine b/model2model/swt.most.statemachine.validation.evl/model/garagedoor.statemachine
new file mode 100644
index 0000000000000000000000000000000000000000..358692a49a51bb03409f2120a99b2a075680ff95
--- /dev/null
+++ b/model2model/swt.most.statemachine.validation.evl/model/garagedoor.statemachine
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<statemachine:StateMachine xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:statemachine="http://www.swt.org/most/statemachine" name="Garage Door">
+  <states name="Closed"/>
+  <states name="Open"/>
+  <states name="Opening"/>
+  <states name="Closing"/>
+  <finalstates name="final"/>
+  <initialstate name="initial"/>
+  <transitions from="initial" to="Closed"/>
+  <transitions from="Closed" to="Opening">
+    <trigger content="openDoor"/>
+    <action content="motor.upwards"/>
+  </transitions>
+  <transitions from="Opening" to="Open">
+    <action content="motor.stop"/>
+  </transitions>
+  <transitions from="Open" to="Closing">
+    <trigger content="closeDoor"/>
+    <action content="motor.downwards"/>
+  </transitions>
+  <transitions from="Closing" to="Closed">
+    <guard content="stopper"/>
+    <action content="motor.stop"/>
+  </transitions>
+  <transitions from="Closing" to="Opening">
+    <trigger content="openDoor"/>
+    <action content="motor.upwards"/>
+  </transitions>
+  <transitions from="Opening" to="Closing">
+    <trigger content="closeDoor"/>
+    <action content="motor.downwards"/>
+  </transitions>
+  <transitions from="Closed" to="final">
+    <guard content="shutdown"/>
+  </transitions>
+  <transitions from="Closed" to="Closed">
+    <trigger content="closeDoor"/>
+  </transitions>
+  <transitions from="Closing" to="Closing">
+    <trigger content="closeDoor"/>
+  </transitions>
+  <transitions from="Open" to="Open">
+    <trigger content="openDoor"/>
+  </transitions>
+  <transitions from="Opening" to="Opening">
+    <trigger content="openDoor"/>
+  </transitions>
+  <transitions from="final" to="initial">
+    <guard content="end"/>
+  </transitions>
+</statemachine:StateMachine>
diff --git a/model2model/swt.most.statemachine.validation.evl/statemachine-validation.evl b/model2model/swt.most.statemachine.validation.evl/statemachine-validation.evl
new file mode 100644
index 0000000000000000000000000000000000000000..c732864ee53bfa5d0532a3c72ba5c4ab081eb70e
--- /dev/null
+++ b/model2model/swt.most.statemachine.validation.evl/statemachine-validation.evl
@@ -0,0 +1,55 @@
+pre{
+	var maxStates = 3;
+}
+
+context Transition {
+	
+	guard:  not self.from.instanceOf(InitialState)
+	
+	critique emptyTransition {
+		check : (self.Trigger <> null) or (self.Guard <> null)
+		message : "Transition [" + self.from.name + "-" + self.to.name + "] has no guard or event"
+	}
+}
+	
+	
+context Transition {
+
+	constraint TransitionToInitialState {
+		check : not self.to.instanceOf(InitialState)
+		message : "Transition [" + self.from.name + "-" + self.to.name + "] ends in an Initial State"
+	}
+	
+	constraint TransitionFromFinalState {
+		check : not self.from.instanceOf(FinalState)
+		message : "Transition [" + self.from.name + "-" + self.to.name + "] starts in a Final State"
+		fix {	
+				title: "Delete Transition"
+				do	{
+						delete self;
+					}
+			}
+		
+	}
+	
+}
+
+
+context StateMachine {
+
+	critique CheckNumberOfStates{
+		check 	{
+					var numberS = 0;
+					numberS = self.states.size();
+					return numberS > 1 and numberS < maxStates;
+			  	}
+		message {
+					if(numberS == 0){
+						return "No States are present in the State Machine. Check if the model was saved correctly!";
+					}else if(numberS > maxStates){
+						return numberS + " States are found. The statemachine is quite big. Please check if the behaivior can be split up!";
+					}
+				}
+	}
+	 
+}
diff --git a/model2model/swt.most.statemachine.validation.evl/validation GarageDoor.launch b/model2model/swt.most.statemachine.validation.evl/validation GarageDoor.launch
new file mode 100644
index 0000000000000000000000000000000000000000..2e03350d75a0e09ccd54f442edc38eb1ea0e83fc
--- /dev/null
+++ b/model2model/swt.most.statemachine.validation.evl/validation GarageDoor.launch	
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.epsilon.evl.eclipse.dt.launching.EvlLaunchConfigurationDelegate">
+    <booleanAttribute key="fine_grained_profiling" value="false"/>
+    <stringAttribute key="implementation_name" value="Parallel (Annotations)"/>
+    <listAttribute key="models">
+        <listEntry value="#Mon Jun 17 17:13:45 CEST 2024&#13;&#10;aliases=&#13;&#10;cached=true&#13;&#10;concurrent=false&#13;&#10;expand=true&#13;&#10;fileBasedMetamodelUri=&#13;&#10;isMetamodelFileBased=false&#13;&#10;metamodelFile=&#13;&#10;metamodelUri=http\://www.swt.org/most/statemachine&#13;&#10;modelFile=/swt.most.statemachine.validation.evl/model/garagedoor.statemachine&#13;&#10;modelUri=platform\:/resource/swt.most.statemachine.validation.evl/model/garagedoor.statemachine&#13;&#10;name=source&#13;&#10;readOnLoad=true&#13;&#10;reuseUnmodifiedFileBasedMetamodels=true&#13;&#10;storeOnDisposal=false&#13;&#10;type=EMF&#13;&#10;validate=false"/>
+    </listAttribute>
+    <booleanAttribute key="optimizeConstraintTrace" value="true"/>
+    <booleanAttribute key="optimizeConstraints" value="false"/>
+    <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
+    <intAttribute key="parallelism" value="7"/>
+    <listAttribute key="parameters"/>
+    <booleanAttribute key="profile_model_loading" value="false"/>
+    <booleanAttribute key="profiling_enabled" value="false"/>
+    <booleanAttribute key="reset_profiler" value="false"/>
+    <booleanAttribute key="shortCircuit" value="false"/>
+    <stringAttribute key="source" value="/swt.most.statemachine.validation.evl/statemachine-validation.evl"/>
+</launchConfiguration>
diff --git a/model2text/swt.most.statemachine.to.java.egl/.project b/model2text/swt.most.statemachine.to.java.egl/.project
new file mode 100644
index 0000000000000000000000000000000000000000..7ecab28b3aa135dab13e9d8ed1975c6766f1232e
--- /dev/null
+++ b/model2text/swt.most.statemachine.to.java.egl/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>swt.most.statemachine.to.java.egl</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/model2text/swt.most.statemachine.to.java.egl/generateJava-GarageDoor.launch b/model2text/swt.most.statemachine.to.java.egl/generateJava-GarageDoor.launch
new file mode 100644
index 0000000000000000000000000000000000000000..06bbf48c8ce953f47b943091d8e4ecdddf2aef47
--- /dev/null
+++ b/model2text/swt.most.statemachine.to.java.egl/generateJava-GarageDoor.launch
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.epsilon.egl.eclipse.dt.launching.EglLaunchConfigurationDelegate">
+    <booleanAttribute key="appendToFile" value="false"/>
+    <listAttribute key="defaultFormatters"/>
+    <intAttribute key="egxGenerateTo" value="1"/>
+    <booleanAttribute key="fine_grained_profiling" value="false"/>
+    <intAttribute key="generateTo" value="1"/>
+    <stringAttribute key="implementation_name" value="Sequential EGX"/>
+    <listAttribute key="models">
+        <listEntry value="#Mon Jun 17 16:56:01 CEST 2024&#13;&#10;aliases=&#13;&#10;cached=true&#13;&#10;concurrent=false&#13;&#10;expand=true&#13;&#10;fileBasedMetamodelUri=&#13;&#10;isMetamodelFileBased=false&#13;&#10;metamodelFile=&#13;&#10;metamodelUri=http\://www.swt.org/most/statemachine&#13;&#10;modelFile=/swt.most.statemachine.to.java.egl/model/garagedoor.statemachine&#13;&#10;modelUri=platform\:/resource/swt.most.statemachine.to.java.egl/model/garagedoor.statemachine&#13;&#10;name=source&#13;&#10;readOnLoad=true&#13;&#10;reuseUnmodifiedFileBasedMetamodels=true&#13;&#10;storeOnDisposal=false&#13;&#10;type=EMF&#13;&#10;validate=false"/>
+    </listAttribute>
+    <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
+    <stringAttribute key="outputDirPath" value=""/>
+    <stringAttribute key="outputFilePath" value=""/>
+    <listAttribute key="parameters"/>
+    <booleanAttribute key="produceTrace" value="false"/>
+    <booleanAttribute key="profile_model_loading" value="false"/>
+    <booleanAttribute key="profiling_enabled" value="false"/>
+    <booleanAttribute key="reset_profiler" value="false"/>
+    <stringAttribute key="source" value="/swt.most.statemachine.to.java.egl/generator-code/generate.egx"/>
+    <stringAttribute key="templateFactoryType" value="org.eclipse.epsilon.egl.EglFileGeneratingTemplateFactory"/>
+    <stringAttribute key="traceDestination" value=""/>
+</launchConfiguration>
diff --git a/model2text/swt.most.statemachine.to.java.egl/generateJava-Switch.launch b/model2text/swt.most.statemachine.to.java.egl/generateJava-Switch.launch
new file mode 100644
index 0000000000000000000000000000000000000000..900f6a8ee55aca25b4fabd528a0cbd7fc9bc4c2d
--- /dev/null
+++ b/model2text/swt.most.statemachine.to.java.egl/generateJava-Switch.launch
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.epsilon.egl.eclipse.dt.launching.EglLaunchConfigurationDelegate">
+    <booleanAttribute key="appendToFile" value="false"/>
+    <listAttribute key="defaultFormatters"/>
+    <intAttribute key="egxGenerateTo" value="1"/>
+    <booleanAttribute key="fine_grained_profiling" value="false"/>
+    <intAttribute key="generateTo" value="1"/>
+    <stringAttribute key="implementation_name" value="Sequential EGX"/>
+    <listAttribute key="models">
+        <listEntry value="#Mon Jun 17 16:45:56 CEST 2024&#13;&#10;aliases=&#13;&#10;cached=true&#13;&#10;concurrent=false&#13;&#10;expand=true&#13;&#10;fileBasedMetamodelUri=&#13;&#10;isMetamodelFileBased=false&#13;&#10;metamodelFile=&#13;&#10;metamodelUri=http\://www.swt.org/most/statemachine&#13;&#10;modelFile=/swt.most.statemachine.to.java.egl/model/switch.statemachine&#13;&#10;modelUri=platform\:/resource/swt.most.statemachine.to.java.egl/model/switch.statemachine&#13;&#10;name=source&#13;&#10;readOnLoad=true&#13;&#10;reuseUnmodifiedFileBasedMetamodels=true&#13;&#10;storeOnDisposal=false&#13;&#10;type=EMF&#13;&#10;validate=false"/>
+    </listAttribute>
+    <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
+    <stringAttribute key="outputDirPath" value=""/>
+    <stringAttribute key="outputFilePath" value=""/>
+    <listAttribute key="parameters"/>
+    <booleanAttribute key="produceTrace" value="false"/>
+    <booleanAttribute key="profile_model_loading" value="false"/>
+    <booleanAttribute key="profiling_enabled" value="false"/>
+    <booleanAttribute key="reset_profiler" value="false"/>
+    <stringAttribute key="source" value="/swt.most.statemachine.to.java.egl/generator-code/generate.egx"/>
+    <stringAttribute key="templateFactoryType" value="org.eclipse.epsilon.egl.EglFileGeneratingTemplateFactory"/>
+    <stringAttribute key="traceDestination" value=""/>
+</launchConfiguration>
diff --git a/model2text/swt.most.statemachine.to.java.egl/generator-code/functions.eol b/model2text/swt.most.statemachine.to.java.egl/generator-code/functions.eol
new file mode 100644
index 0000000000000000000000000000000000000000..bb4e0a982983c4020dbc22c15f68b882b7403d12
--- /dev/null
+++ b/model2text/swt.most.statemachine.to.java.egl/generator-code/functions.eol
@@ -0,0 +1,15 @@
+function String normalize(upperCase:Boolean) : String {
+	
+	var result = self.replaceAll(' ', '').trim();
+	
+	if(upperCase){
+		return result.firstToUpperCase(); 
+	}else{
+		return result;
+	}
+	
+}
+
+function StateMachine uniqueTrigger() : Set {
+	return self.transitions.select(t | t.trigger <> null).asSet();
+}
\ No newline at end of file
diff --git a/model2text/swt.most.statemachine.to.java.egl/generator-code/generate.egx b/model2text/swt.most.statemachine.to.java.egl/generator-code/generate.egx
new file mode 100644
index 0000000000000000000000000000000000000000..f907e3dbb59cb2da42faf6a65df7840f1a1cf513
--- /dev/null
+++ b/model2text/swt.most.statemachine.to.java.egl/generator-code/generate.egx
@@ -0,0 +1,9 @@
+import "functions.eol";
+
+rule StateMachineToJava
+	transform aStateMachine : source!StateMachine {
+
+	template : "template-statemachine.egl"
+
+	target : "../src-gen/" + aStateMachine.name.normalize(true) + ".java"
+}
\ No newline at end of file
diff --git a/model2text/swt.most.statemachine.to.java.egl/generator-code/template-statemachine.egl b/model2text/swt.most.statemachine.to.java.egl/generator-code/template-statemachine.egl
new file mode 100644
index 0000000000000000000000000000000000000000..c2cbfe6f79fa5127d2eb0630ffbc4ea4789e08db
--- /dev/null
+++ b/model2text/swt.most.statemachine.to.java.egl/generator-code/template-statemachine.egl
@@ -0,0 +1,104 @@
+[%import "functions.eol";%]
+public class [%= aStateMachine.name.normalize(true)%]{
+
+    // Some parts of the implementation are simplified, 
+	// because implementing them would require more information then the state machine model provides.
+	
+    // Attributes of the state machine
+	// Current active state
+	private State currentState = new [%=aStateMachine.name.normalize(true)%]();
+	
+	// Constructor of the state machine
+	// Also triggers the default (not named) Transition
+	public [%=aStateMachine.name.normalize(true)%](){
+		this._default();
+	}
+
+	// Triggers used in the state machine
+	// Default trigger for transitions without trigger
+	// This method is always automatically activated as soon as the state is entered or a time interval has passed
+	public void _default(){ currentState._default(); } 
+	// Triggers that were extracted from the state machine transitions
+	[%for (trigger : String in aStateMachine.uniqueTrigger()){%]
+			[%if (trigger <> null and trigger.content.size() > 0){%]
+	public void [%=trigger.content.normalize(false)%][%if (not trigger.content.normalize(false).endsWith('()')){%]()[%}%]{ currentState.[%=trigger.content.normalize(false)%][%if (not trigger.endsWith('()')){%]()[%}%]; }
+			[%}%]
+	[%}%]
+
+
+	// States as inner classes
+	// Abstract state for  the usage of polymorphism in the pattern
+	private abstract class State{
+		public void _default(){ /* by default, do nothing */ }
+	[%for (trigger : String in aStateMachine.uniqueTrigger()){%]
+			[%if (trigger <> null and trigger.size() > 0){%]
+	public void [%=trigger.content.normalize(false)%][%if (not trigger.content.normalize(false).endsWith('()')){%]()[%}%]{ /* by default, do nothing */ }
+			[%}%]
+	[%}%]
+	}
+
+	// Initial state
+	private class [%=aStateMachine.initialstate.name.normalize(true)%]{
+		[%for (t : Transition in aStateMachine.transitions){%]
+			[%if (t.from.name.matches(aStateMachine.initialstate.name)){%]
+		// Initial states should only have one default transition without guards and actions
+		public void _default(){
+				currentState = new [%=t.to.name.normalize(true)%]();
+				currentState._default();
+			}
+			[%}%]
+		[%}%]
+	}
+
+	// Normal states
+	[%for (s : NormalState in aStateMachine.states){%]
+	private class [%=s.name.normalize(true)%] extends State{
+		[%for (t : Transition in aStateMachine.transitions){%]
+			[%if (t.from.name.matches(s.name)){%]
+				[%if (t.trigger = null or t.trigger.content.size() = 0){%]
+		public void _default(){
+					[%if (t.guard <> null and t.guard.content.size() > 0){%]
+			if([%=t.guard.content.normalize(false)%]){ // Special guard, notation simplified in this example
+					[%}else{%]
+			if(true){ // No guard
+					[%}%]
+					[%if (t.action <> null and t.action.content.size() > 0){%]
+				[%=t.action.content.normalize(false)%][%if (not t.action.content.normalize(false).endsWith('()')){%]()[%}%]; // Action
+					[%}%]
+				currentState = new [%=t.to.name.normalize(true)%]();
+				currentState._default();
+			}	
+		}
+
+				[%}%]
+				[%if (t.trigger <> null and t.trigger.content.size() > 0){%]
+		public void [%=t.trigger.content.normalize(false)%][%if (not t.trigger.content.endsWith('()')){%]()[%}%]{
+					[%if (t.guard <> null and t.guard.content.size() > 0){%]
+			if([%=t.guard.content.normalize(false)%]){ // Special guard, notation simplified in this example
+					[%}else{%]
+			if(true){ // No guard
+					[%}%]
+					[%if (t.action <> null and t.action.content.size() > 0){%]
+				[%=t.action.content.normalize(false)%][%if (not t.action.content.normalize(false).endsWith('()')){%]()[%}%]; // Action
+					[%}%]
+				currentState = new [%=t.to.name.normalize(true)%]();
+				currentState._default();
+			}	
+		}
+					
+				[%}%]
+			[%}%]
+		[%}%]
+	}
+	
+	[%}%] 
+	
+	// Final states
+	[%for (s : FinalState in aStateMachine.finalstates){%]
+	private class [%=s.name.normalize(true)%] extends State{
+		// A final state is only a flow sink without functionality
+	}
+
+	[%}%]
+ 
+}
\ No newline at end of file
diff --git a/model2text/swt.most.statemachine.to.java.egl/model/garagedoor.statemachine b/model2text/swt.most.statemachine.to.java.egl/model/garagedoor.statemachine
new file mode 100644
index 0000000000000000000000000000000000000000..7e44c6fd1941ac4b5bb590516b2ae01299c04221
--- /dev/null
+++ b/model2text/swt.most.statemachine.to.java.egl/model/garagedoor.statemachine
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<statemachine:StateMachine xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:statemachine="http://www.swt.org/most/statemachine" name="Garage Door">
+  <states name="Closed"/>
+  <states name="Open"/>
+  <states name="Opening"/>
+  <states name="Closing"/>
+  <finalstates name="final"/>
+  <initialstate name="initial"/>
+  <transitions from="//@initialstate" to="//@states.0"/>
+  <transitions from="//@states.0" to="//@states.2">
+    <trigger content="openDoor"/>
+    <action content="motor.upwards"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.1">
+    <guard content="stopper"/>
+    <action content="motor.stop"/>
+  </transitions>
+  <transitions from="//@states.1" to="//@states.3">
+    <trigger content="closeDoor"/>
+    <action content="motor.downwards"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.0">
+    <guard content="stopper"/>
+    <action content="motor.stop"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.2">
+    <trigger content="openDoor"/>
+    <action content="motor.upwards"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.3">
+    <trigger content="closeDoor"/>
+    <action content="motor.downwards"/>
+  </transitions>
+  <transitions from="//@states.0" to="//@finalstates.0">
+    <guard content="shutdown"/>
+  </transitions>
+  <transitions from="//@states.0" to="//@states.0">
+    <trigger content="closeDoor"/>
+  </transitions>
+  <transitions from="//@states.3" to="//@states.3">
+    <trigger content="closeDoor"/>
+  </transitions>
+  <transitions from="//@states.1" to="//@states.1">
+    <trigger content="openDoor"/>
+  </transitions>
+  <transitions from="//@states.2" to="//@states.2">
+    <trigger content="openDoor"/>
+  </transitions>
+</statemachine:StateMachine>
diff --git a/model2text/swt.most.statemachine.to.java.egl/model/switch.statemachine b/model2text/swt.most.statemachine.to.java.egl/model/switch.statemachine
new file mode 100644
index 0000000000000000000000000000000000000000..e69b2686f6ad45dbc26fcbe03cde993863643c97
--- /dev/null
+++ b/model2text/swt.most.statemachine.to.java.egl/model/switch.statemachine
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<statemachine:StateMachine xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:statemachine="http://www.swt.org/most/statemachine" name="Switch">
+  <states name="on">
+    <do_ content="do_something"/>
+  </states>
+  <states name="off">
+    <do_ content="do_nothing"/>
+  </states>
+  <initialstate name="initial"/>
+  <transitions from="//@initialstate" to="//@states.1"/>
+  <transitions from="//@states.1" to="//@states.0">
+    <trigger content="flip"/>
+  </transitions>
+  <transitions from="//@states.0" to="//@states.1">
+    <trigger content="flip"/>
+  </transitions>
+</statemachine:StateMachine>
diff --git a/model2text/swt.most.statemachine.to.java.egl/src-gen/GarageDoor.java b/model2text/swt.most.statemachine.to.java.egl/src-gen/GarageDoor.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c4cf6ce241ec029d558109dd4f7d0b355030fb0
--- /dev/null
+++ b/model2text/swt.most.statemachine.to.java.egl/src-gen/GarageDoor.java
@@ -0,0 +1,142 @@
+public class GarageDoor{
+
+    // Some parts of the implementation are simplified, 
+	// because implementing them would require more information then the state machine model provides.
+	
+    // Attributes of the state machine
+	// Current active state
+	private State currentState = new GarageDoor();
+	
+	// Constructor of the state machine
+	// Also triggers the default (not named) Transition
+	public GarageDoor(){
+		this._default();
+	}
+
+	// Triggers used in the state machine
+	// Default trigger for transitions without trigger
+	// This method is always automatically activated as soon as the state is entered or a time interval has passed
+	public void _default(){ currentState._default(); } 
+	// Triggers that were extracted from the state machine transitions
+
+
+	// States as inner classes
+	// Abstract state for  the usage of polymorphism in the pattern
+	private abstract class State{
+		public void _default(){ /* by default, do nothing */ }
+	}
+
+	// Initial state
+	private class Initial{
+		// Initial states should only have one default transition without guards and actions
+		public void _default(){
+				currentState = new Closed();
+				currentState._default();
+			}
+	}
+
+	// Normal states
+	private class Closed extends State{
+		public void openDoor(){
+			if(true){ // No guard
+				motor.upwards(); // Action
+				currentState = new Opening();
+				currentState._default();
+			}	
+		}
+					
+		public void _default(){
+			if(shutdown){ // Special guard, notation simplified in this example
+				currentState = new Final();
+				currentState._default();
+			}	
+		}
+
+		public void closeDoor(){
+			if(true){ // No guard
+				currentState = new Closed();
+				currentState._default();
+			}	
+		}
+					
+	}
+	
+	private class Open extends State{
+		public void closeDoor(){
+			if(true){ // No guard
+				motor.downwards(); // Action
+				currentState = new Closing();
+				currentState._default();
+			}	
+		}
+					
+		public void openDoor(){
+			if(true){ // No guard
+				currentState = new Open();
+				currentState._default();
+			}	
+		}
+					
+	}
+	
+	private class Opening extends State{
+		public void _default(){
+			if(stopper){ // Special guard, notation simplified in this example
+				motor.stop(); // Action
+				currentState = new Open();
+				currentState._default();
+			}	
+		}
+
+		public void closeDoor(){
+			if(true){ // No guard
+				motor.downwards(); // Action
+				currentState = new Closing();
+				currentState._default();
+			}	
+		}
+					
+		public void openDoor(){
+			if(true){ // No guard
+				currentState = new Opening();
+				currentState._default();
+			}	
+		}
+					
+	}
+	
+	private class Closing extends State{
+		public void _default(){
+			if(stopper){ // Special guard, notation simplified in this example
+				motor.stop(); // Action
+				currentState = new Closed();
+				currentState._default();
+			}	
+		}
+
+		public void openDoor(){
+			if(true){ // No guard
+				motor.upwards(); // Action
+				currentState = new Opening();
+				currentState._default();
+			}	
+		}
+					
+		public void closeDoor(){
+			if(true){ // No guard
+				currentState = new Closing();
+				currentState._default();
+			}	
+		}
+					
+	}
+	
+ 
+	
+	// Final states
+	private class Final extends State{
+		// A final state is only a flow sink without functionality
+	}
+
+ 
+}
\ No newline at end of file
diff --git a/model2text/swt.most.statemachine.to.java.egl/src-gen/Switch.java b/model2text/swt.most.statemachine.to.java.egl/src-gen/Switch.java
new file mode 100644
index 0000000000000000000000000000000000000000..5483d1d0be69bdf6eaf92c670e094532ac9b01f8
--- /dev/null
+++ b/model2text/swt.most.statemachine.to.java.egl/src-gen/Switch.java
@@ -0,0 +1,63 @@
+public class Switch{
+
+    // Some parts of the implementation are simplified, 
+	// because implementing them would require more information then the state machine model provides.
+	
+    // Attributes of the state machine
+	// Current active state
+	private State currentState = new Switch();
+	
+	// Constructor of the state machine
+	// Also triggers the default (not named) Transition
+	public Switch(){
+		this._default();
+	}
+
+	// Triggers used in the state machine
+	// Default trigger for transitions without trigger
+	// This method is always automatically activated as soon as the state is entered or a time interval has passed
+	public void _default(){ currentState._default(); } 
+	// Triggers that were extracted from the state machine transitions
+
+
+	// States as inner classes
+	// Abstract state for  the usage of polymorphism in the pattern
+	private abstract class State{
+		public void _default(){ /* by default, do nothing */ }
+	}
+
+	// Initial state
+	private class Initial{
+		// Initial states should only have one default transition without guards and actions
+		public void _default(){
+				currentState = new Off();
+				currentState._default();
+			}
+	}
+
+	// Normal states
+	private class On extends State{
+		public void flip(){
+			if(true){ // No guard
+				currentState = new Off();
+				currentState._default();
+			}	
+		}
+					
+	}
+	
+	private class Off extends State{
+		public void flip(){
+			if(true){ // No guard
+				currentState = new On();
+				currentState._default();
+			}	
+		}
+					
+	}
+	
+ 
+	
+	// Final states
+ 
+}
\ No newline at end of file