Browse Source

Add initial glossary and submission guide.

scossu 2 weeks ago
parent
commit
fc75be477b

+ 25 - 29
README.md

@@ -82,6 +82,9 @@ repo yet, so the rocks must be installed manually for the time being.
 Installing locally or in a dedicated container is strongly recommended at this
 stage.
 
+When Pocket Archive will get into beta status and be published on Luarocks,
+the commands below will be replaced by a one-line command. Until then...
+
 ```
 # Note: tested on Archlinux. Other distros (especially Alpine) may need tweaks.
 eval $(luarocks path)
@@ -114,11 +117,11 @@ Initialize the archive first:
 pkar init
 ```
 
-This will create the required folders and database file in the archive root
-(a temporary folder by default). Then:
+This, after user confirmation, will create the required folders and database
+file in the archive root (a temporary folder by default). Then:
 
 ```
-pkar submission test/sample_submission/demo01/pkar_submission.csv
+pkar submission test/sample_submission/pkar_submission.csv
 ```
 
 ### Generate static site from archive
@@ -238,20 +241,18 @@ the downside of static website: they are static.
 
 ### CLI
 
-#### Management interface
-
 Pocket Archive can be managed via a command line interface (CLI) when
 installed locally (e.g. via Luarocks).
 
 The `pkar` script contains several useful commands, e.g.
 
 ```
-pkar init [--wipe]
+pkar init
 ```
 
 Initialize the Pocket Archive store and database at the location indicated by
-the `$PKAR_DRES` and `$PKAR_ORES` environment variables. The `--wipe` option
-deletes all preexisting data found in those directories.
+the `$PKAR_DRES` and `$PKAR_ORES` environment variables. This operation deletes
+all preexisting data found in those directories.
 
 ```
 pkar deposit <path>
@@ -262,18 +263,18 @@ laundry list named `pkar_submission.csv` with file paths relative to that
 folder.
 
 ```
-pkar gen_site
+pkar gen-site
 ```
 
-Generate static site at `out/html`. This includes all HTML pages, derivative
-media, thumbnails, ancillary assets, and RDF representations of all resources.
-The `html` folder can be pointed to by a static HTTP server for local testing,
-or copied to a remote HTTP server. For local testing, I have been using
-`darkhttpd` which does the job in only 55Kb. *TODO serverless deployment
-option*
+Generate static site at `$PKAR_ROOT/out/html`. This includes all HTML pages,
+derivative media, thumbnails, ancillary assets, and RDF representations of all
+resources.  The `html` folder can be pointed to by a static HTTP server for
+local testing, or copied to a remote HTTP server. For local testing, I have
+been using `darkhttpd` which does the job in only 55Kb. *TODO serverless
+deployment option*
 
 ```
-pkar gen_rdf <id> [-f, --format <format>]
+pkar gen-rdf <id> [-f, --format <format>]
 ```
 
 Generate the RDF representation of one resource. Useful for debugging and
@@ -281,7 +282,7 @@ inspecting.
 
 More detailed information can be obtain with `pkar --help`.
 
-#### Submission watchdog
+### Remote submissions
 
 Obviously, the CLI only works if one has command line access (e.g. via SSH) to
 the machine hosting Pocket Archive. It is often the case that a contributor has
@@ -289,18 +290,7 @@ neither shell access nor expertise to run the Pocket Archive CLI. Remote
 submissions provide a more user-friendly way to submit contents to any Pocket
 Archive instance on the WWW.
 
-Instead of a web application, Pocket Archive uses a "hot folder" method to
-support remote submissions. The `pkar_watch` utility is run on the machine that
-hosts Pocket Archive to watch a particular system folder for laundry lists.
-Any time a file named `pkar_submission*.csv` is added to that folder, it is
-processed for submission.
-
-In order for this approach to work, the laundry list **must** be uploaded after
-all the other submission files have been successfully uploaded.
-
-The watched folder is local to the Pocket Archive operating system. However, it
-is possible to run an FTP server on the same folder, thus providing remote
-access and permission management.
+Read the [remote submission guide](doc/remote_submission.md) for more details.
 
 ### Environment variables
 
@@ -317,6 +307,12 @@ behavior:
   `app.lua` with general application configuration. It defaults to the `config`
   directory installed by Luarocks.
 
+## Other documentation
+
+See the [doc](doc) folder for complete documentation (currently under
+construction) in different sections aimed at archivists, system administrators,
+and/or developers.
+
 ## Compatibility
 
 Linux only. The submission watchdog relies on `inotify` which is not portable.

+ 11 - 2
doc/content_model.md

@@ -1,7 +1,8 @@
 # Content model configuration
 
-**Note:** The scope of this functional area is currently under review. Things
-may change.
+*Audience: system administrators, developers*
+
+**WORK IN PROGRESS**
 
 Pocket Archive ships with some predefined content types. For some very simple
 archives, this may be enough to get started with little or no customization.
@@ -29,6 +30,8 @@ can put it under Anything. Of course, if one starts dealing with many
 unclassifiable resources that look similar, it's probably best to define a
 model for them; but that is not mandatory.
 
+**Insert root types info here**
+
 Each metadata field can be specified by constraints. These constraints can be
 on:
 
@@ -48,3 +51,9 @@ to decide how specific or how free-form their archive should be.
 Note that fields that are not defined at least by a label, may be hard to
 understand by users browsing the discovery interface.
 
+There are subtle
+  but important differences between the two, and keeping a separation between
+  an artifact and its related file(s) is key to a sustainable long-term
+  archival strategy. A file (also called **opaque resource** in Pocket Archive)
+  is simply stored and cataloged by Pocket Archive, which knows nothing about
+  its contents. 

+ 154 - 0
doc/glossary.md

@@ -0,0 +1,154 @@
+# Pocket Archive glossary
+
+*Audience: all users*
+
+**WORK IN PROGRESS**
+
+This document is a glossary of terms specific to Pocket Archive and to
+mainstream archival, cataloging, and IT practices. The former are prefixed by
+an asterisk: \*. Terms used in descriptions that also have a definition in this
+document are written in **bold**.
+
+## Archival master file
+A file fit for conservation purposes. This is usually the version of a digital
+capture that contains the most information, and which can be used to generate
+other **derivatives**, most notably, a **production master file**.
+
+This is a [standard
+definition](https://www.digitizationguidelines.gov/term.php?term=archivalmasterfile)
+of the US Federal Agency Digital Guidelines Inititative (FADGI).
+
+## \*Artifact
+
+## Atomic, atomicity
+An atomic operation is an operation on data that either succeeds or fails
+completely. Complex data structures can be handled via atomic operations, if
+the system handles them, to ensure that at each step of a transfer process, all
+parts of the data structure are intact.
+
+## Checksum
+
+## \*Brick
+
+## \*Collection
+In Pocket Archive, a Collection is a group of artifacts that are logically
+related in a way or another. There is no well-defined rule to how collections
+should be arranged, and that is a curatorial decision based on the materials
+at hand and the target audience.
+
+Collections can contain other collections, other structural **Bricks**, or
+artifacts. They are presented in a special way, in that they can have a long
+description stored in a separate file, that can provide a rich presentation for
+the collection's landing page.
+
+Any resource can belong to multiple collections. Laundry lists have means to
+indicate implicit memberships (e.g. a file inside a folder), which are added
+automatically by the submission process, and explicit ones, which are defined
+via the `has_member` **property**.
+
+## \*Content model
+
+## \*Content type
+
+## CSV
+
+Stands for Comma-Separated Values. It is a file format for tabular data, which
+can be read and edited by several software packages, such as LibreOffice or
+Google Sheets. Opened in these applications, a CSV looks like a spreadsheet,
+and can be edited as such. Text formatting, column or row sizes, borders, and
+similar style features are not supported. CSV is pure data, which is all we are
+interested in.
+
+Pocket Archive's **laundry lists** are formatted in CSV. Spreadsheet
+applications can be used to compile laundry lists, with the caveat that the
+file must be exported as a `.csv` file rather than the native spreadsheet
+application file (usually employed by the "Save" command).
+
+## \*Descriptive resource
+
+## \*Drop box
+
+## \*Field
+
+## Fixity
+
+## \*Laundry list
+
+## Linked Data, Linked Open Data
+
+## Markdown
+
+## Metadata
+
+## \*Opaque resource
+
+## \*Presentation file
+
+## \*Property
+
+## \*Production master
+
+A file fit for generating **presentation files**. This is usually a file
+generated from the **archival master file** and manually adjusted for
+presentation, with elements that are imortant for preservation but not for
+public display, removed (e.g. color bars or working layers in a still image).
+Because it is manually adjusted, it should be preserved along with the archival
+version.
+
+In cases of necessity, the same file may serve both archival and production
+master roles, however this is not a recommended practice and only acceptable
+when a proper archival master is not (or no longer) available.
+
+Derivatives of this file are usually lower-quality copies that are
+automatically generated and not preservation-worthy.
+
+This is a [standard
+definition](https://www.digitizationguidelines.gov/term.php?term=productionmasterfile)
+of the US Federal Agency Digital Guidelines Inititative (FADGI).
+
+## \*Relationship
+
+A relationship, in Pocket Archive, is a special type of hyperlink that points
+to a **resource** managed by Pocket Archive itself. Unlike hyperlinks in the
+WWW, which do not always own the resource pointed to and do not guarantee its
+existence, Pocket Archive guarantees the consistency of relationship links.
+
+## \*Resource
+
+## RDF
+
+## SIP
+
+Submission Information Package: a package of files, folders, and **metadata**
+that constitute a complete **submission** package. A SIP is normally prepared
+by archivists, either by hand or with the aid of automated tools, and is the
+first step of the actual archival process.
+
+This is a term of the
+[OAIS](https://ccsds.org/Pubs/650x0m3.pdf) standard that defines guidelines for
+digital archival practices.
+
+## Static site
+
+A web site that is made up entirely of static files. This means that all
+contents of the website are pre-generated and consist of actual files living
+on a filesystem, in contrast with most modern *dynamic* sites whose contents
+are mostly generated on demand by a continuously running process.
+
+While much less flexible than dynamic sites, static sites are still widely used
+today. Dynamic sites rely on complex, often resource-intensive applications and
+infrastructure that can be subject to exploits and attacks of all sorts, and on
+more applications and infrastructure to prevent those attacks. Sites of small
+to medium size with predefined content can take advantage of a simple and
+economical static site, that needs only a simple web server to run.
+
+Pocket Archive generates static sites for presentation. It also has the option
+[*WORK IN PROGRESS*] to generate contents that can be viewed directly on the
+user's local computer with a web browser, without any web server or even any
+Internet connection.
+
+## Submission
+
+## UID
+
+## UUID

+ 1275 - 0
doc/pkar_res_lifecycle.graphml

@@ -0,0 +1,1275 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yEd 3.25.1-->
+  <key attr.name="Description" attr.type="string" for="graph" id="d0"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key for="graphml" id="d7" yfiles.type="resources"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d0"/>
+    <node id="n0" yfiles.foldertype="group">
+      <data key="d5"/>
+      <data key="d6">
+        <y:TableNode configuration="YED_TABLE_NODE">
+          <y:Geometry height="416.41138648986816" width="1159.1519927978516" x="152.0" y="169.83861351013184"/>
+          <y:Fill color="#ECF5FF" color2="#0042F440" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="232.9165496826172" x="463.1177215576172" y="4.0">Pocket Archive resource lifecycle</y:NodeLabel>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="130.70892333984375" x="147.64553833007812" y="33.0">Archivist's workstation<y:LabelModel>
+              <y:ColumnNodeLabelModel offset="3.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:ColumnNodeLabelModelParameter id="column_0" inside="true" verticalPosition="0.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="45.76029968261719" x="735.1198501586914" y="33.0">Archive<y:LabelModel>
+              <y:ColumnNodeLabelModel offset="3.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:ColumnNodeLabelModelParameter id="column_1" inside="true" verticalPosition="0.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="76.08451843261719" x="985.5337371826172" y="33.0">Presentation<y:LabelModel>
+              <y:ColumnNodeLabelModel offset="3.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:ColumnNodeLabelModelParameter id="column_2" inside="true" verticalPosition="0.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.46437072753906" x="498.76781463623047" y="33.0">Drop box<y:LabelModel>
+              <y:ColumnNodeLabelModel offset="3.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:ColumnNodeLabelModelParameter id="column_3" inside="true" verticalPosition="0.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:StyleProperties>
+            <y:Property class="java.awt.Color" name="yed.table.section.color" value="#7192b2"/>
+            <y:Property class="java.lang.Double" name="yed.table.header.height" value="24.0"/>
+            <y:Property class="java.awt.Color" name="yed.table.lane.color.main" value="#c4d7ed"/>
+            <y:Property class="java.awt.Color" name="yed.table.lane.color.alternating" value="#abc8e2"/>
+            <y:Property class="java.awt.Color" name="yed.table.header.color.alternating" value="#abc8e2"/>
+            <y:Property class="java.lang.String" name="yed.table.lane.style" value="lane.style.columns"/>
+            <y:Property class="java.awt.Color" name="yed.table.header.color.main" value="#c4d7ed"/>
+          </y:StyleProperties>
+          <y:State autoResize="true" closed="false" closedHeight="80.0" closedWidth="100.0"/>
+          <y:Insets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+          <y:BorderInsets bottom="13" bottomF="12.64246416091919" left="20" leftF="20.0" right="58" rightF="58.15199279785156" top="11" topF="11.446314811706543"/>
+          <y:Table autoResizeTable="true" defaultColumnWidth="120.0" defaultMinimumColumnWidth="80.0" defaultMinimumRowHeight="50.0" defaultRowHeight="80.0">
+            <y:DefaultColumnInsets bottom="0.0" left="0.0" right="0.0" top="24.0"/>
+            <y:DefaultRowInsets bottom="0.0" left="0.0" right="0.0" top="0.0"/>
+            <y:Insets bottom="0.0" left="0.0" right="0.0" top="30.0"/>
+            <y:Columns>
+              <y:Column id="column_0" minimumWidth="80.0" width="426.0">
+                <y:Insets bottom="0.0" left="0.0" right="0.0" top="24.0"/>
+              </y:Column>
+              <y:Column id="column_3" minimumWidth="80.0" width="202.0">
+                <y:Insets bottom="0.0" left="0.0" right="0.0" top="24.0"/>
+              </y:Column>
+              <y:Column id="column_1" minimumWidth="80.0" width="260.0">
+                <y:Insets bottom="0.0" left="0.0" right="0.0" top="24.0"/>
+              </y:Column>
+              <y:Column id="column_2" minimumWidth="80.0" width="271.15199279785156">
+                <y:Insets bottom="0.0" left="0.0" right="0.0" top="24.0"/>
+              </y:Column>
+            </y:Columns>
+            <y:Rows>
+              <y:Row height="362.41138648986816" id="row_0" minimumHeight="50.0">
+                <y:Insets bottom="0.0" left="0.0" right="0.0" top="0.0"/>
+              </y:Row>
+            </y:Rows>
+          </y:Table>
+        </y:TableNode>
+      </data>
+      <graph edgedefault="directed" id="n0:">
+        <node id="n0::n0">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="437.0" y="283.0"/>
+              <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+              <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="21.916122436523438" x="34.04193878173828" y="14.327942848205566">SIP<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n0::n1" yfiles.foldertype="group">
+          <data key="d4"/>
+          <data key="d6">
+            <y:ProxyAutoBoundsNode>
+              <y:Realizers active="0">
+                <y:GroupNode>
+                  <y:Geometry height="144.43014335632324" width="164.0" x="172.0" y="235.28492832183838"/>
+                  <y:Fill color="#FFFF9944" transparent="false"/>
+                  <y:BorderStyle hasColor="false" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#FFFF9988" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="164.0" x="0.0" y="0.0">Resources in local HD</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="3" leftF="3.0" right="11" rightF="11.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+                <y:GroupNode>
+                  <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+                  <y:Fill color="#F5F5F5" transparent="false"/>
+                  <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.09037780761719" x="-5.545188903808594" y="0.0">Folder 2</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+              </y:Realizers>
+            </y:ProxyAutoBoundsNode>
+          </data>
+          <graph edgedefault="directed" id="n0::n1:">
+            <node id="n0::n1::n0">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="280.0" y="274.7150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="star5"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n1::n1">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="190.0" y="316.7150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="trapezoid2"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n1::n2">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="271.0" y="321.7150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="octagon"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n1::n3">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="198.0" y="274.7150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="star8"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n1::n4">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="220.0" y="334.7150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="triangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n1::n5">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="24.0" width="25.0" x="241.0" y="298.2150716781616"/>
+                  <y:Fill color="#00C5CC" color2="#7BEDF2" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="10.5" y="10.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="rectangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+          </graph>
+        </node>
+        <node id="n0::n2">
+          <data key="d5"/>
+          <data key="d6">
+            <y:GenericNode configuration="com.yworks.flowchart.document">
+              <y:Geometry height="40.0" width="102.0" x="425.0" y="439.0"/>
+              <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+              <y:BorderStyle color="#3F5400" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="69.70045471191406" x="16.14977264404297" y="9.827942848205566">Laundry list<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+            </y:GenericNode>
+          </data>
+        </node>
+        <node id="n0::n3">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="628.0" y="283.0"/>
+              <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+              <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="21.916122436523438" x="34.04193878173828" y="14.327942848205566">SIP<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n0::n4" yfiles.foldertype="group">
+          <data key="d4"/>
+          <data key="d6">
+            <y:ProxyAutoBoundsNode>
+              <y:Realizers active="0">
+                <y:GroupNode>
+                  <y:Geometry height="186.46248626708984" width="120.0" x="850.5" y="245.76875686645508"/>
+                  <y:Fill color="#FFFF9944" transparent="false"/>
+                  <y:BorderStyle hasColor="false" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#FFFF9988" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="120.0" x="0.0" y="0.0">AIP</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+                <y:GroupNode>
+                  <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+                  <y:Fill color="#F5F5F5" transparent="false"/>
+                  <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.09037780761719" x="-5.545188903808594" y="0.0">Folder 3</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+              </y:Realizers>
+            </y:ProxyAutoBoundsNode>
+          </data>
+          <graph edgedefault="directed" id="n0::n4:">
+            <node id="n0::n4::n0">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="49.0" width="90.0" x="865.5" y="287.2150716781616"/>
+                  <y:Fill color="#FFBFE1" color2="#F263B1" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="53.0323429107666" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="68.22447204589844" x="10.887763977050781" y="-2.016171455383301">Opaque
+resources
+(filesystem)<y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n4::n1">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="49.0" width="90.0" x="865.5" y="366.2150716781616"/>
+                  <y:Fill color="#FFBFE1" color2="#F263B1" transparent="false"/>
+                  <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="53.0323429107666" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="66.76045227050781" x="11.619773864746094" y="-2.016171455383301">Descriptive
+resources
+(database)<y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+          </graph>
+        </node>
+        <node id="n0::n5">
+          <data key="d5"/>
+          <data key="d6">
+            <y:GenericNode configuration="com.yworks.flowchart.document">
+              <y:Geometry height="49.0" width="90.0" x="628.0" y="366.0"/>
+              <y:Fill color="#7BEDF2" color2="#00C5CC" transparent="false"/>
+              <y:BorderStyle color="#005154" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="68.96846008300781" x="10.515769958496094" y="6.155885696411133">Submission
+report<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+            </y:GenericNode>
+          </data>
+        </node>
+        <node id="n0::n6" yfiles.foldertype="group">
+          <data key="d4"/>
+          <data key="d6">
+            <y:ProxyAutoBoundsNode>
+              <y:Realizers active="0">
+                <y:GroupNode>
+                  <y:Geometry height="144.43014335632324" width="150.0" x="1103.0" y="245.76875686645508"/>
+                  <y:Fill color="#FFFF9944" transparent="false"/>
+                  <y:BorderStyle hasColor="false" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#FFFF9988" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="150.0" x="0.0" y="0.0">Web site</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+                <y:GroupNode>
+                  <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+                  <y:Fill color="#F5F5F5" transparent="false"/>
+                  <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.09037780761719" x="-5.545188903808594" y="0.0">Folder 2</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+              </y:Realizers>
+            </y:ProxyAutoBoundsNode>
+          </data>
+          <graph edgedefault="directed" id="n0::n6:">
+            <node id="n0::n6::n0">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="1208.0" y="285.1989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="star5"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n6::n1">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="1118.0" y="327.1989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="trapezoid2"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n6::n2">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="1199.0" y="332.1989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="octagon"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n6::n3">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="1126.0" y="285.1989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="star8"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n6::n4">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="30.0" x="1148.0" y="345.1989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="triangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n0::n6::n5">
+              <data key="d5"/>
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="24.0" width="25.0" x="1169.0" y="308.6989002227783"/>
+                  <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+                  <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="10.5" y="10.0">
+                    <y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="rectangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+          </graph>
+        </node>
+        <node id="n0::n7">
+          <data key="d5"/>
+          <data key="d6">
+            <y:GenericNode configuration="com.yworks.flowchart.document">
+              <y:Geometry height="49.0" width="90.0" x="628.0" y="445.0"/>
+              <y:Fill color="#7BEDF2" color2="#00C5CC" transparent="false"/>
+              <y:BorderStyle color="#005154" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="69.70045471191406" x="10.149772644042969" y="6.155885696411133">Generated
+Laundry list<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+            </y:GenericNode>
+          </data>
+        </node>
+        <node id="n0::n8">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="628.0" y="524.6075358390808"/>
+              <y:Fill color="#7BEDF2" color2="#00C5CC" transparent="false"/>
+              <y:BorderStyle color="#005154" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="84.892578125" x="2.5537109375" y="14.327942848205566">Generated SIP<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n1">
+      <data key="d5"/>
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="58.38100051879883" width="58.50005340576172" x="1152.2499732971191" y="617.5245714187622"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="47.96833801269531" x="5.265857696533203" y="62.38100051879883">Viewers<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="false"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="1"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d5"/>
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="49.32486703413781" width="82.50105285644531" x="265.4989471435547" y="622.0526381610928"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="57.91639709472656" x="12.292327880859375" y="53.3248670341377">Archivists<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="false"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="2"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n3" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="103.43014335632324" width="526.0" x="152.0" y="713.1801433563234"/>
+              <y:Fill color="#FFFF9944" transparent="false"/>
+              <y:BorderStyle hasColor="false" raised="false" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="526.0" x="0.0" y="0.0">Legend</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="24.430143356323242" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.09037780761719" x="-5.545188903808594" y="0.0">Folder 5</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n3:">
+        <node id="n3::n0">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="167.0" y="752.6102867126466"/>
+              <y:Fill color="#7BEDF2" color2="#00C5CC" transparent="false"/>
+              <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.90040588378906" x="14.049797058105469" y="6.155885696411133">Optionally
+kept<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n3::n1">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="370.0" y="752.6102867126466"/>
+              <y:Fill color="#FFBFE1" color2="#F263B1" transparent="false"/>
+              <y:BorderStyle color="#005154" raised="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="48.8203125" x="20.58984375" y="14.327942848205566">Archival<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n3::n2">
+          <data key="d5"/>
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="49.0" width="90.0" x="573.0" y="752.6102867126466"/>
+              <y:Fill color="#CAEC64" color2="#99CC00" transparent="false"/>
+              <y:BorderStyle color="#3F5400" raised="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.96844482421875" x="12.015777587890625" y="14.327942848205566">Disposable<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <edge id="n0::e0" source="n0::n1" target="n0::n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="57.22039794921875" x="21.868804931640625" y="-10.172057151794434">Compose<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e1" source="n0::n2" target="n0::n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="51.3763427734375" x="43.89035849996128" y="-71.85247611999512">Transfer
+#2<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e2" source="n0::n0" target="n0::n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="51.3763427734375" x="24.81304931640625" y="-18.344114303588867">Transfer
+#1<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e3" source="n0::n3" target="n0::n4">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.512451171875" x="33.46966552734375" y="-9.560469798037843">Pick-up &amp;
+processing<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e4" source="n0::n4" target="n0::n5">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.47637939453125" x="-94.50436401367188" y="4.1972395947104815">Generate<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e5" source="n0::n4" target="n0::n6">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.47637939453125" x="38.026763916015625" y="-15.378166390356569">Generate<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n3::e0" source="n3::n0" target="n3::n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="59.20039367675781" x="26.948387145996094" y="-18.34411811828602">Manual
+operation<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n3::e1" source="n3::n1" target="n3::n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="36.688228607177734" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.81640625" x="25.640380859375" y="-18.34411811828602">Automatic
+operation<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e6" source="n0::n4" target="n0::n7">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.47637939453125" x="-94.50436401367188" y="26.239461788378264">Generate<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e0" source="n1" target="n0::n6">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="34.564208984375" x="-18.492516412387204" y="-123.85213041305542">Enjoy<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n2" target="n0::n7">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.57243347167969" x="107.19852447509766" y="-77.90551349220061">Request LL<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n0::e7" source="n0::n4" target="n0::n8">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.47637939453125" x="-102.56245879777248" y="55.57989565535593">Generate<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n2" target="n0::n8">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="70.9124755859375" x="104.52850341796875" y="-47.47865627366582">Request SIP<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n2" target="n0::n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="53.0323429107666" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.15632629394531" x="-44.924283881291274" y="-147.7095870435686">Select,
+arrange,
+review<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n2" target="n0::n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" height="20.344114303588867" horizontalTextPosition="center" iconTextGap="4" lineColor="#000000" modelName="center_slider" preferredPlacement="center_on_edge" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="50.40434265136719" x="39.273679218577" y="-81.6819319189043">Compile<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" placement="center" side="on_edge" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d7">
+    <y:Resources>
+      <y:Resource id="1">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="59px" height="59px" viewBox="0 0 59 59" enable-background="new 0 0 59 59" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="neck_x5F_white_1_" gradientUnits="userSpaceOnUse" x1="13.6323" y1="-1502.7422" x2="14.3617" y2="-1520.2559" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="neck_x5F_white_19_" fill="url(#neck_x5F_white_1_)" stroke="#FFAB4F" stroke-width="0.5" stroke-miterlimit="10" d="
+		M9.639,18.899h9.093v10.115c-0.656,0.186-8.586,0.218-9.093,0.086V18.899z"/&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="13.1294" y1="-1499.207" x2="13.75" y2="-1514.1072" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="M24.766,25.612
+		c-2.199-2.197-5.477-2.941-6.033-3.055v-3.658H9.639c0,0,0.019,3.452,0,3.435c0,0-3.437,0.499-6.154,3.216
+		c-2.796,2.796-3.235,5.835-3.235,5.835c0,0.971,0.788,1.746,1.762,1.746h24.255c0.974,0,1.761-0.777,1.761-1.746
+		C28.027,31.384,27.105,27.953,24.766,25.612z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="13.7515" cy="-1500.0908" r="11.7123" fx="11.4666" fy="-1501.3357" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_19_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="
+		M21.838,11.679c0.043,5.1-3.369,9.26-7.623,9.293C9.964,21.006,6.483,16.899,6.44,11.8c-0.042-5.1,3.37-9.261,7.622-9.294
+		C18.314,2.473,21.795,6.579,21.838,11.679z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="4300.0391" y1="8522.0703" x2="4311.8545" y2="8568.7988" gradientTransform="matrix(0.275 0 0 0.2733 -1169.7629 -2324.9595)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_19_" fill="url(#face_highlight_1_)" d="M13.979,3.166c-3.018,0.023-5.374,2.247-6.394,5.193
+		c-0.332,0.96-0.147,2.021,0.49,2.814c1.365,1.699,2.865,3.142,4.73,4.044c1.569,0.759,3.767,1.192,5.946,0.624
+		c1.139-0.297,1.994-1.229,2.188-2.383c0.092-0.548,0.146-1.145,0.143-1.777C21.041,6.977,18.137,3.134,13.979,3.166z"/&gt;
+	
+		&lt;path id="Hair_Female_1_Black_9_" fill="#4B4B4B" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="
+		M14.187,0.25c-5.418,0-10.052,3.624-9.61,12.813c0.282,3.281,2.931,6.021,4.683,6.766C7.795,14.344,9.107,7.317,8.967,7.064
+		c-0.14-0.252,1.769,3.364,1.769,3.364l1.591-4.155c2.771,2.14,0.197,5.654,0.524,5.528c2.129-0.815,2.67-4.614,2.67-4.614
+		s1.364,1.829,1.35,2.752c-0.025,1.781,1.098-3.033,1.098-3.033l0.514,1.016c3.363,4.911,1.842,8.104,0.826,11.391
+		c7.834-0.352,6.146-5.24,4.83-9.203C21.795,3.046,19.604,0.25,14.187,0.25z"/&gt;
+	
+		&lt;linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="53.4854" y1="2393.7295" x2="21.2897" y2="2393.7295" gradientTransform="matrix(0.9852 0 0 0.9852 -22.6981 -2330.2188)"&gt;
+		&lt;stop  offset="0" style="stop-color:#49AD33"/&gt;
+		&lt;stop  offset="1" style="stop-color:#C2DA92"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="body_63_" fill="url(#body_1_)" stroke="#008D33" stroke-width="0.5" d="M0.25,31.384c0,0.97,0.788,1.747,1.762,1.747
+		h24.255c0.974,0,1.761-0.779,1.761-1.747c0,0-0.922-3.431-3.262-5.771c-2.408-2.406-4.123-2.572-4.123-2.572
+		c-0.723,3.491-4.277,4.393-6.503,4.393c-2.227,0-5.75-0.994-6.06-4.393c0,0-1.877-0.207-4.594,2.51
+		C0.689,28.345,0.25,31.384,0.25,31.384z"/&gt;
+	
+		&lt;linearGradient id="neck_x5F_white_3_" gradientUnits="userSpaceOnUse" x1="43.8525" y1="-1502.7417" x2="44.5819" y2="-1520.2552" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="neck_x5F_white_17_" fill="url(#neck_x5F_white_3_)" stroke="#FFAB4F" stroke-width="0.5" stroke-miterlimit="10" d="
+		M39.859,18.899h9.094v10.115c-0.656,0.186-8.586,0.218-9.094,0.086V18.899z"/&gt;
+	
+		&lt;linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="43.3506" y1="-1499.2075" x2="43.9712" y2="-1514.1077" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_2_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="M54.986,25.612
+		c-2.199-2.197-5.478-2.941-6.033-3.055v-3.658h-9.094c0,0,0.02,3.452,0,3.435c0,0-3.438,0.499-6.153,3.216
+		c-2.796,2.796-3.235,5.835-3.235,5.835c0,0.971,0.787,1.746,1.762,1.746h24.256c0.974,0,1.761-0.777,1.761-1.746
+		C58.248,31.384,57.326,27.953,54.986,25.612z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_3_" cx="43.9727" cy="-1500.0908" r="11.7111" fx="41.6881" fy="-1501.3356" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_17_" fill="url(#face_x5F_white_3_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="
+		M52.059,11.679c0.043,5.1-3.369,9.26-7.623,9.293c-4.25,0.034-7.731-4.073-7.774-9.172c-0.042-5.1,3.368-9.261,7.622-9.294
+		C48.536,2.473,52.016,6.579,52.059,11.679z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_3_" gradientUnits="userSpaceOnUse" x1="4409.9326" y1="8522.0703" x2="4421.7476" y2="8568.7969" gradientTransform="matrix(0.275 0 0 0.2733 -1169.7629 -2324.9595)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_17_" fill="url(#face_highlight_3_)" d="M44.2,3.166c-3.019,0.023-5.374,2.247-6.394,5.193
+		c-0.332,0.96-0.147,2.021,0.489,2.814c1.364,1.699,2.864,3.142,4.729,4.044c1.568,0.759,3.768,1.192,5.945,0.624
+		c1.139-0.297,1.994-1.229,2.188-2.383c0.092-0.548,0.146-1.145,0.143-1.777C51.262,6.977,48.357,3.134,44.2,3.166z"/&gt;
+	
+		&lt;path id="hair_x5F_gray_17_" fill="#ECECEC" stroke="#9B9B9B" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="
+		M40.359,6.625c0,0,2.66,3.625,7.5,1.875c1.365-0.281,4.529,0.518,4.529,0.518s-1.828-8.085-8.523-7.646
+		c-8.943,0.69-7.615,11.467-7.615,11.467s1.384-0.342,2.518-2.401C39.255,9.553,40.359,6.625,40.359,6.625z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_body_2_" cx="37.6602" cy="-1515.813" r="16.2003" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B0E8FF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_body_8_" fill="url(#collar_x5F_body_2_)" stroke="#5491CF" stroke-width="0.5" d="M30.471,31.384
+		c0,0.97,0.787,1.747,1.762,1.747h24.256c0.974,0,1.761-0.779,1.761-1.747c0,0-0.922-3.431-3.263-5.771
+		c-2.407-2.406-5.623-3.072-5.623-3.072c-0.885,0.827-2.805,1.4-5.03,1.4s-4.146-0.573-5.031-1.4c0,0-2.878,0.293-5.595,3.01
+		C30.91,28.345,30.471,31.384,30.471,31.384z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_r_2_" cx="45.8311" cy="-1510.8745" r="4.6401" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_r_8_" fill="url(#collar_x5F_r_2_)" stroke="#5491CF" stroke-width="0.5" d="M49.301,20.69
+		c0,0-0.287,1.185-1.506,2.221c-1.055,0.897-2.893,1.036-2.893,1.036l1.986,3.108c0,0,1.479-0.818,2.504-1.924
+		c0.961-1.036,0.686-2.74,0.686-2.74L49.301,20.69z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_l_2_" cx="39.6494" cy="-1510.896" r="4.6426" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_l_8_" fill="url(#collar_x5F_l_2_)" stroke="#5491CF" stroke-width="0.5" d="M39.536,20.711
+		c0,0,0.288,1.185,1.506,2.221c1.056,0.896,2.894,1.036,2.894,1.036l-1.987,3.108c0,0-1.479-0.818-2.505-1.925
+		c-0.961-1.036-0.685-2.74-0.685-2.74L39.536,20.711z"/&gt;
+	
+		&lt;radialGradient id="Knob2_2_" cx="44.0645" cy="-742.6421" r="0.4846" gradientTransform="matrix(1 0 0 -1 0.1201 -714.5371)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob2_8_" fill="url(#Knob2_2_)" stroke="#5491CF" stroke-width="0.5" cx="44.35" cy="28.127" r="0.292"/&gt;
+	
+		&lt;radialGradient id="Knob1_2_" cx="44.083" cy="-745.7642" r="0.4847" gradientTransform="matrix(1 0 0 -1 0.1201 -714.5371)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob1_8_" fill="url(#Knob1_2_)" stroke="#5491CF" stroke-width="0.5" cx="44.369" cy="31.25" r="0.292"/&gt;
+	
+		&lt;radialGradient id="jacket_x5F_body_1_" cx="36.7842" cy="-1515.3755" r="20.459" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#D0D0D0"/&gt;
+		&lt;stop  offset="1" style="stop-color:#9B9B9B"/&gt;
+	&lt;/radialGradient&gt;
+	
+		&lt;path id="jacket_x5F_body_8_" fill="url(#jacket_x5F_body_1_)" stroke="#4B4B4B" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="
+		M54.986,25.612c-2.217-2.217-5.111-2.955-5.557-3.059l-2.695,10.572h-4.43L39.686,22.84c-0.145-0.096-0.271-0.196-0.385-0.301
+		c0,0-2.877,0.293-5.595,3.01c-2.796,2.796-3.233,5.835-3.233,5.835c0,0.97,0.786,1.747,1.76,1.747h24.256
+		c0.975,0,1.761-0.779,1.761-1.747C58.248,31.384,57.326,27.953,54.986,25.612z"/&gt;
+	
+		&lt;polygon id="jacket_x5F_r_8_" fill="#9B9B9B" stroke="#4B4B4B" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" points="
+		49.688,21.038 51.305,23.187 50.615,27.835 48.914,28.25 49.547,29.563 47.509,33.126 46.734,33.126 	"/&gt;
+	
+		&lt;polygon id="jacket_x5F_l_8_" fill="#B2B2B2" stroke="#4B4B4B" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" points="
+		39.354,21.038 37.734,23.187 38.426,27.835 40.127,28.25 39.493,29.563 41.531,33.126 42.307,33.126 	"/&gt;
+	&lt;path id="path5135_8_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M43.936,27.61c0,0-0.926,1.028-1.041,3.271
+		c-0.115,2.244,0,2.244,0,2.244h3.273c0,0,0.115,0.031-0.077-2.182c-0.2-2.302-1.194-3.334-1.194-3.334L43.936,27.61L43.936,27.61z"
+		/&gt;
+	&lt;path id="path5131_8_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M44.377,24.34h0.063l1.275,2.001
+		c0.258,0.477-0.604,0.898-0.729,1.274l-1.139-0.008c-0.121-0.38-1.129-0.683-0.738-1.292L44.377,24.34z"/&gt;
+	
+		&lt;linearGradient id="neck_x5F_white_4_" gradientUnits="userSpaceOnUse" x1="43.6328" y1="-1527.7417" x2="44.3621" y2="-1545.2545" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="neck_x5F_white_11_" fill="url(#neck_x5F_white_4_)" stroke="#FFAB4F" stroke-width="0.5" stroke-miterlimit="10" d="
+		M39.639,43.898h9.094v10.115c-0.655,0.187-8.586,0.219-9.094,0.086V43.898z"/&gt;
+	
+		&lt;linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="43.1309" y1="-1524.2065" x2="43.7515" y2="-1539.1072" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_3_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="M54.766,50.611
+		c-2.199-2.196-5.477-2.94-6.033-3.055v-3.658h-9.094c0,0,0.021,3.453,0,3.436c0,0-3.437,0.499-6.152,3.216
+		c-2.797,2.796-3.235,5.835-3.235,5.835c0,0.971,0.787,1.746,1.763,1.746h24.254c0.975,0,1.762-0.777,1.762-1.746
+		C58.027,56.384,57.105,52.953,54.766,50.611z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_4_" cx="43.752" cy="-1525.0908" r="11.7114" fx="41.4673" fy="-1526.3356" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_11_" fill="url(#face_x5F_white_4_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="
+		M51.838,36.68c0.043,5.1-3.369,9.26-7.623,9.293c-4.251,0.033-7.732-4.074-7.775-9.173c-0.041-5.1,3.369-9.261,7.623-9.294
+		C48.314,27.473,51.795,31.579,51.838,36.68z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_4_" gradientUnits="userSpaceOnUse" x1="4409.1299" y1="8613.5469" x2="4420.9448" y2="8660.2725" gradientTransform="matrix(0.275 0 0 0.2733 -1169.7629 -2324.9595)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_11_" fill="url(#face_highlight_4_)" d="M43.979,28.166c-3.018,0.023-5.373,2.247-6.394,5.193
+		c-0.332,0.959-0.147,2.021,0.49,2.813c1.364,1.699,2.864,3.142,4.729,4.044c1.568,0.76,3.768,1.192,5.945,0.624
+		c1.139-0.297,1.994-1.229,2.188-2.383c0.092-0.548,0.146-1.146,0.144-1.776C51.041,31.977,48.137,28.134,43.979,28.166z"/&gt;
+	&lt;path fill="#CC9869" stroke="#99724F" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="M46.107,29.969
+		c0,0,2.845,1.375,3.845,4.062c1.052,2.826,2.062,4.117,2.095,4c0.938-3.395,0.531-10.718-5.086-10.792
+		c-10.229-3.832-12.79,5.98-11.947,9.824c0.539,2.457,1.117,3.344,1.971,4.041C36.982,41.104,37.514,33.781,46.107,29.969z"/&gt;
+	
+		&lt;linearGradient id="body_2_" gradientUnits="userSpaceOnUse" x1="83.9365" y1="2419.1064" x2="51.7404" y2="2419.1064" gradientTransform="matrix(0.9852 0 0 0.9852 -22.6981 -2330.2188)"&gt;
+		&lt;stop  offset="0" style="stop-color:#49AD33"/&gt;
+		&lt;stop  offset="1" style="stop-color:#C2DA92"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="body_35_" fill="url(#body_2_)" stroke="#008D33" stroke-width="0.5" d="M30.25,56.384c0,0.97,0.787,1.747,1.762,1.747
+		h24.256c0.974,0,1.76-0.779,1.76-1.747c0,0-0.922-3.431-3.262-5.771c-2.408-2.406-4.123-2.572-4.123-2.572
+		c-0.723,3.49-4.276,4.393-6.504,4.393c-2.227,0-5.75-0.994-6.059-4.393c0,0-1.878-0.207-4.596,2.51
+		C30.689,53.346,30.25,56.384,30.25,56.384z"/&gt;
+	
+		&lt;radialGradient id="neck_x5F_white_5_" cx="14.0952" cy="-1534.9302" r="5.7236" fx="12.9786" fy="-1535.5386" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B38E5D"/&gt;
+		&lt;stop  offset="1" style="stop-color:#805126"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="neck_x5F_white_2_" fill="url(#neck_x5F_white_5_)" stroke="#5B453B" stroke-width="0.5" stroke-miterlimit="10" d="
+		M9.859,43.898h9.094v6.615c-0.656,0.187-8.586,0.219-9.094,0.086V43.898z"/&gt;
+	
+		&lt;radialGradient id="SVGID_4_" cx="13.8213" cy="-1539.1084" r="15.5272" fx="10.7923" fy="-1540.7589" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B38E5D"/&gt;
+		&lt;stop  offset="1" style="stop-color:#805126"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_4_)" stroke="#5B453B" stroke-width="0.5" stroke-miterlimit="10" d="M24.986,50.611
+		c-2.199-2.196-5.477-2.94-6.033-3.055v-3.658H9.859c0,0,0.02,3.453,0,3.436c0,0-3.437,0.499-6.153,3.216
+		c-2.796,2.796-3.235,5.835-3.235,5.835c0,0.971,0.787,1.746,1.762,1.746h24.255c0.974,0,1.761-0.777,1.761-1.746
+		C28.248,56.384,27.326,52.953,24.986,50.611z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_5_" cx="13.9722" cy="-1525.0908" r="11.7123" fx="11.6873" fy="-1526.3357" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B38E5D"/&gt;
+		&lt;stop  offset="1" style="stop-color:#805126"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_2_" fill="url(#face_x5F_white_5_)" stroke="#5B453B" stroke-width="0.5" stroke-miterlimit="10" d="
+		M22.059,36.68c0.043,5.1-3.369,9.26-7.623,9.293c-4.251,0.033-7.732-4.074-7.775-9.173c-0.042-5.1,3.369-9.261,7.622-9.294
+		C18.536,27.473,22.016,31.579,22.059,36.68z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_5_" gradientUnits="userSpaceOnUse" x1="4300.8428" y1="8613.5449" x2="4312.6582" y2="8660.2734" gradientTransform="matrix(0.275 0 0 0.2733 -1169.7629 -2324.9595)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.42"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.12"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_2_" fill="url(#face_highlight_5_)" d="M14.2,28.166c-3.018,0.023-5.374,2.247-6.394,5.193
+		c-0.332,0.959-0.147,2.021,0.49,2.813c1.364,1.699,2.864,3.142,4.73,4.044c1.568,0.76,3.767,1.192,5.945,0.624
+		c1.139-0.297,1.994-1.229,2.188-2.383c0.092-0.548,0.146-1.146,0.143-1.776C21.262,31.977,18.357,28.134,14.2,28.166z"/&gt;
+	
+		&lt;path id="Hair_Young_Black_1_" fill="#4B4B4B" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="
+		M10.359,31.625c1.709,2.166,4.667,3.459,4.667,3.459l-0.708-1.75c0,0,3.547,2.346,4.041,2.166c0.484-0.1-0.541-1.902-0.541-1.902
+		s1.568,0.896,2.428,1.983c0.9,1.14,2.143,1.752,2.143,1.752s1.346-10.974-8.523-10.961C4.359,26.354,6.25,38.839,6.25,38.839
+		L7.568,33.5c0,0,0.457,2.879,0.699,2.438C9.151,32.605,9.651,30.75,10.359,31.625z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_body_3_" cx="7.6602" cy="-1540.813" r="16.2003" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B0E8FF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_body_1_" fill="url(#collar_x5F_body_3_)" stroke="#5491CF" stroke-width="0.5" d="M0.471,56.384
+		c0,0.97,0.787,1.747,1.762,1.747h24.255c0.974,0,1.761-0.779,1.761-1.747c0,0-0.922-3.431-3.262-5.771
+		c-2.408-2.406-5.623-3.072-5.623-3.072c-0.885,0.827-2.805,1.4-5.031,1.4s-4.146-0.573-5.031-1.4c0,0-2.878,0.293-5.595,3.01
+		C0.91,53.346,0.471,56.384,0.471,56.384z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_r_3_" cx="15.8306" cy="-1535.874" r="4.6412" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_r_1_" fill="url(#collar_x5F_r_3_)" stroke="#5491CF" stroke-width="0.5" d="M19.301,45.689
+		c0,0-0.287,1.186-1.506,2.222c-1.055,0.897-2.893,1.036-2.893,1.036l1.986,3.107c0,0,1.479-0.818,2.504-1.924
+		c0.961-1.035,0.686-2.74,0.686-2.74L19.301,45.689z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_l_3_" cx="9.6494" cy="-1535.896" r="4.6422" gradientTransform="matrix(1 0 0 -1 0.2002 -1487.2285)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_l_1_" fill="url(#collar_x5F_l_3_)" stroke="#5491CF" stroke-width="0.5" d="M9.536,45.711
+		c0,0,0.288,1.186,1.506,2.221c1.055,0.896,2.893,1.037,2.893,1.037l-1.987,3.107c0,0-1.479-0.818-2.504-1.926
+		c-0.961-1.035-0.685-2.739-0.685-2.739L9.536,45.711z"/&gt;
+	
+		&lt;radialGradient id="Knob2_3_" cx="14.0645" cy="-767.6421" r="0.4842" gradientTransform="matrix(1 0 0 -1 0.1201 -714.5371)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob2_1_" fill="url(#Knob2_3_)" stroke="#5491CF" stroke-width="0.5" cx="14.35" cy="53.127" r="0.292"/&gt;
+	
+		&lt;radialGradient id="Knob1_3_" cx="14.0835" cy="-770.7642" r="0.4844" gradientTransform="matrix(1 0 0 -1 0.1201 -714.5371)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob1_1_" fill="url(#Knob1_3_)" stroke="#5491CF" stroke-width="0.5" cx="14.369" cy="56.25" r="0.292"/&gt;
+	&lt;path id="path5135_1_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M13.935,52.609c0,0-0.925,1.029-1.04,3.271
+		c-0.115,2.244,0,2.244,0,2.244h3.273c0,0,0.115,0.031-0.077-2.182c-0.2-2.303-1.194-3.334-1.194-3.334H13.935L13.935,52.609z"/&gt;
+	&lt;path id="path5131_1_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M14.377,49.34h0.062l1.276,2.001
+		c0.258,0.478-0.604,0.897-0.728,1.274l-1.14-0.008c-0.121-0.381-1.128-0.684-0.738-1.293L14.377,49.34z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+      <y:Resource id="2">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="59px" height="34px" viewBox="0 0 59 34" enable-background="new 0 0 59 34" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;radialGradient id="SVGID_1_" cx="13.5605" cy="2379.334" r="15.5262" fx="10.5317" fy="2377.6836" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B38E5D"/&gt;
+		&lt;stop  offset="1" style="stop-color:#805126"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#5B453B" stroke-width="0.5" stroke-miterlimit="10" d="M24.766,25.613
+		c-2.199-2.197-5.477-2.941-6.033-3.055V18.9H9.64c0,0,0.019,3.451,0,3.436c0,0-3.437,0.498-6.154,3.217
+		c-2.797,2.795-3.236,5.834-3.236,5.834c0,0.969,0.788,1.744,1.762,1.744h24.255c0.974,0,1.761-0.777,1.761-1.744
+		C28.027,31.384,27.105,27.955,24.766,25.613z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="13.7114" cy="2365.3154" r="11.7124" fx="11.4265" fy="2364.0706" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B38E5D"/&gt;
+		&lt;stop  offset="1" style="stop-color:#805126"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_6_" fill="url(#face_x5F_white_1_)" stroke="#5B453B" stroke-width="0.5" stroke-miterlimit="10" d="
+		M21.838,11.679c0.043,5.1-3.369,9.26-7.623,9.293C9.964,21.005,6.483,16.899,6.44,11.8c-0.042-5.1,3.37-9.26,7.622-9.294
+		C18.314,2.473,21.795,6.58,21.838,11.679z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="5005.1221" y1="-9568.3623" x2="5016.9365" y2="-9615.0859" gradientTransform="matrix(0.275 0 0 -0.2733 -1363.6604 -2610.9094)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.42"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.12"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_6_" fill="url(#face_highlight_1_)" d="M13.979,3.167C10.961,3.19,8.605,5.414,7.585,8.36
+		c-0.332,0.96-0.147,2.021,0.49,2.814c1.365,1.699,2.865,3.142,4.73,4.044c1.569,0.759,3.767,1.192,5.946,0.624
+		c1.139-0.296,1.994-1.229,2.188-2.383c0.092-0.547,0.146-1.145,0.143-1.777C21.041,6.977,18.137,3.134,13.979,3.167z"/&gt;
+	&lt;path fill="#4B4B4B" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="M16.107,4.969
+		c0,0,2.845,1.375,3.845,4.063c1.052,2.826,2.062,4.116,2.095,4c0.938-3.396,0.531-10.719-5.086-10.793
+		C6.733-1.593,4.171,8.219,5.014,12.064c0.539,2.456,1.117,3.343,1.969,4.04C6.983,16.103,7.514,8.782,16.107,4.969z"/&gt;
+	
+		&lt;linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="57.4639" y1="-2355.2373" x2="25.2671" y2="-2355.2373" gradientTransform="matrix(0.9852 0 0 -0.9852 -26.617 -2292.2966)"&gt;
+		&lt;stop  offset="0" style="stop-color:#49AD33"/&gt;
+		&lt;stop  offset="1" style="stop-color:#C2DA92"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="body_21_" fill="url(#body_1_)" stroke="#008D33" stroke-width="0.5" d="M0.25,31.384c0,0.97,0.788,1.746,1.762,1.746
+		h24.255c0.974,0,1.761-0.778,1.761-1.746c0,0-0.922-3.432-3.262-5.771c-2.408-2.406-4.123-2.572-4.123-2.572
+		c-0.723,3.492-4.277,4.395-6.503,4.395c-2.227,0-5.75-0.994-6.06-4.395c0,0-1.877-0.207-4.594,2.512
+		C0.689,28.346,0.25,31.384,0.25,31.384z"/&gt;
+	
+		&lt;linearGradient id="neck_x5F_white_1_" gradientUnits="userSpaceOnUse" x1="43.8125" y1="2367.9678" x2="44.5419" y2="2385.4814" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="neck_x5F_white_5_" fill="url(#neck_x5F_white_1_)" stroke="#FFAB4F" stroke-width="0.5" stroke-miterlimit="10" d="
+		M39.859,18.9h9.094v10.115c-0.656,0.186-8.586,0.217-9.094,0.086V18.9z"/&gt;
+	
+		&lt;linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="43.3115" y1="2364.4336" x2="43.9321" y2="2379.3347" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_2_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="M54.986,25.613
+		c-2.199-2.197-5.479-2.941-6.033-3.055V18.9h-9.094c0,0,0.02,3.451,0,3.436c0,0-3.438,0.498-6.153,3.217
+		c-2.796,2.795-3.235,5.834-3.235,5.834c0,0.971,0.787,1.746,1.762,1.746h24.256c0.975,0,1.762-0.777,1.762-1.746
+		C58.248,31.384,57.326,27.955,54.986,25.613z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_2_" cx="43.9326" cy="2365.3154" r="11.7104" fx="41.6481" fy="2364.0708" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_5_" fill="url(#face_x5F_white_2_)" stroke="#ED9135" stroke-width="0.5" stroke-miterlimit="10" d="
+		M52.059,11.679c0.043,5.1-3.369,9.26-7.623,9.293c-4.25,0.032-7.73-4.074-7.773-9.173c-0.042-5.1,3.367-9.26,7.622-9.294
+		C48.535,2.473,52.016,6.58,52.059,11.679z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_2_" gradientUnits="userSpaceOnUse" x1="5115.0127" y1="-9568.3613" x2="5126.8276" y2="-9615.085" gradientTransform="matrix(0.275 0 0 -0.2733 -1363.6604 -2610.9094)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_5_" fill="url(#face_highlight_2_)" d="M44.2,3.167c-3.019,0.023-5.374,2.247-6.394,5.193
+		c-0.332,0.96-0.147,2.021,0.488,2.814c1.364,1.699,2.864,3.142,4.729,4.044c1.568,0.759,3.769,1.192,5.945,0.624
+		c1.139-0.296,1.994-1.229,2.188-2.383c0.092-0.547,0.146-1.145,0.143-1.777C51.262,6.977,48.357,3.134,44.2,3.167z"/&gt;
+	
+		&lt;path id="Hair_Young_Brown_2_" fill="#CC9869" stroke="#99724F" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="
+		M40.359,6.625c1.709,2.167,4.666,3.458,4.666,3.458l-0.707-1.75c0,0,3.547,2.345,4.041,2.167c0.482-0.1-0.541-1.903-0.541-1.903
+		s1.568,0.897,2.428,1.984c0.9,1.14,2.143,1.752,2.143,1.752s1.346-10.974-8.521-10.961c-9.508-0.017-7.616,12.467-7.616,12.467
+		L37.568,8.5c0,0,0.457,2.878,0.699,2.438C39.15,7.606,39.65,5.75,40.359,6.625z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_body_1_" cx="37.6201" cy="2381.0371" r="16.2003" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#B0E8FF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_body_2_" fill="url(#collar_x5F_body_1_)" stroke="#5491CF" stroke-width="0.5" d="M30.471,31.384
+		c0,0.97,0.787,1.746,1.762,1.746h24.256c0.975,0,1.762-0.778,1.762-1.746c0,0-0.922-3.432-3.264-5.771
+		c-2.406-2.406-5.623-3.072-5.623-3.072c-0.885,0.828-2.805,1.4-5.029,1.4s-4.146-0.572-5.031-1.4c0,0-2.878,0.293-5.595,3.012
+		C30.91,28.346,30.471,31.384,30.471,31.384z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_r_1_" cx="45.791" cy="2376.1016" r="4.6398" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_r_2_" fill="url(#collar_x5F_r_1_)" stroke="#5491CF" stroke-width="0.5" d="M49.301,20.691
+		c0,0-0.287,1.186-1.506,2.221c-1.055,0.896-2.893,1.037-2.893,1.037l1.986,3.107c0,0,1.479-0.818,2.504-1.925
+		c0.961-1.036,0.686-2.739,0.686-2.739L49.301,20.691z"/&gt;
+	
+		&lt;radialGradient id="collar_x5F_l_1_" cx="39.6084" cy="2376.1211" r="4.6429" gradientTransform="matrix(1 0 0 1 0.2402 -2352.4531)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="collar_x5F_l_2_" fill="url(#collar_x5F_l_1_)" stroke="#5491CF" stroke-width="0.5" d="M39.536,20.71
+		c0,0,0.288,1.187,1.506,2.222c1.056,0.896,2.894,1.037,2.894,1.037l-1.986,3.106c0,0-1.479-0.818-2.506-1.925
+		c-0.961-1.037-0.685-2.739-0.685-2.739L39.536,20.71z"/&gt;
+	
+		&lt;radialGradient id="Knob2_1_" cx="44.0244" cy="1607.8691" r="0.485" gradientTransform="matrix(1 0 0 1 0.1602 -1579.7617)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob2_2_" fill="url(#Knob2_1_)" stroke="#5491CF" stroke-width="0.5" cx="44.35" cy="28.127" r="0.292"/&gt;
+	
+		&lt;radialGradient id="Knob1_1_" cx="44.043" cy="1610.9922" r="0.4847" gradientTransform="matrix(1 0 0 1 0.1602 -1579.7617)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#80CCFF"/&gt;
+		&lt;stop  offset="1" style="stop-color:#74AEEE"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;circle id="Knob1_2_" fill="url(#Knob1_1_)" stroke="#5491CF" stroke-width="0.5" cx="44.369" cy="31.25" r="0.292"/&gt;
+	&lt;path id="path5135_2_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M43.936,27.611c0,0-0.926,1.027-1.041,3.271
+		c-0.115,2.244,0,2.244,0,2.244h3.273c0,0,0.115,0.03-0.077-2.183c-0.2-2.303-1.194-3.334-1.194-3.334L43.936,27.611L43.936,27.611z
+		"/&gt;
+	&lt;path id="path5131_2_" fill="#D54A30" stroke="#B51A19" stroke-width="0.5" d="M44.377,24.339h0.063l1.275,2.002
+		c0.258,0.478-0.604,0.897-0.729,1.272l-1.139-0.008c-0.121-0.379-1.13-0.684-0.738-1.291L44.377,24.339z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+    </y:Resources>
+  </data>
+</graphml>

BIN
doc/pkar_res_lifecycle.png


+ 76 - 0
doc/remote_submission.md

@@ -0,0 +1,76 @@
+# Pocket Archive remote submission guide
+
+*Audience: system administrators, developers*
+
+Pocket archive supports submissions of local contents via its command-line
+interface, and of remote contents uploaded to a local folder.
+
+Pocket Archive does not have an administrative user interface. Instead, it
+relies on a "hot folder" method to support remote submissions. The `pkar_watch`
+utility is run on the machine that hosts Pocket Archive to watch a particular
+system folder for laundry lists.  Any time a file named `pkar_submission*.csv`
+is added to that folder, it is processed for submission.
+
+In order for this approach to work, the laundry list **must** be uploaded after
+all the other submission files have been successfully uploaded.
+
+The watched folder is local to the Pocket Archive operating system. However, it
+is possible to run an FTP server on the same folder, thus providing remote
+access and permission management.
+
+Note: currently, `pkar_watch` relies on `inotify`, a Linux utility. Until a
+POSIX compatible solution is implemented, the program can only be run on Linux.
+
+## Transfer protocols
+
+Pocket Archive itself does not provide a network service that allows remote
+users to upload their contents. However, setting up a SFTP, FTPS, WebDav, or
+other transfer service mapping directly to a local file system is a quite
+standard and straightforward way to expose a deposit endpoint and manage
+its permissions.
+
+The other way around is also possible, i.e., mounting the watched folder on the
+machine running Pocket Archive using a network protocol (SMB, NFS). This
+obviously works well only for a single-depositor scenario, in which the mounted
+folder is always accessible to the watchdog process. Note that if the depositor
+has to mount the foler remotely as well, two network transfers are necessary to
+process the SIP.
+
+### Note on S3
+
+S3 is not a good choice for this setup because it complicates things
+significantly, at least in the MinIO implementation of S3 that was tested.
+MinIO remaps the file and folder structure on disk in a way that it doesn't
+match what is seen on the S3 end, and what was uploaded by the depositor. As a
+consequence, the files uploaded from S3 cannot be easily utilized straight from
+the underlying storage (and they probably shouldn't, either). A separate
+process to monior S3 events and a second S3 transfer would be required to fetch
+the SIP, which is not in line with the minimalistic and low-bandwidth
+philosophy of Pocket Archive.
+
+## Watchdog process
+
+Remote submissions are enabled by running the `pkar_watch` service in the
+background:
+
+```
+pkar_watch [options] path
+```
+
+`path` points the folder to watch. It must be a local folder or a locally
+mounted network folder (*TODO the latter is not yet tested*).
+
+Other options include: 
+
+```
+    -l, --loglevel <number> (default: 3)
+        Log level: 1 = error, 2 = warning, 3 = info [default], 4 = debug.
+
+    -g, --gen-site
+        (Re-)generate the website after each submission.
+
+    -c, --cleanup
+        Remove laundry list and SIP after successful submission.
+```
+
+See `pkar_watch --help` for up to date information.

+ 9 - 7
doc/roadmap.md

@@ -69,21 +69,23 @@ usage and opportunities for expanding adoption in relevant areas.
   - ❏ Markdown support for individual fields
 - ⚒ Generator
   - ⎊ Generate site for one collection only
-  - ❏ htmlgen option for local file or webserver URL generation
   - ✓ Generate LL for submission
+  - ❏ htmlgen option for local file or webserver URL generation
   - ✖︎ Generate RDF (multi) [addressed by dump archive RDF]
 - ❏ Front end
+  - ✓ Mobile-friendly layout
+  - ❏ Enhanced styling and access
   - ❏ Category browsing
   - ❏ Improve search indexing
-  - ❏ Enhanced styling and access
 - ❏ Testing
     - ❏ Unit tests
-    -  Roundtrip submission, download LL, update, resubmission
-    -  >100 resource data set
--  Documentation
-  -  Break main sections off README
-  -  Submission guide
+    -  Roundtrip submission, download LL, update, resubmission
+    -  >100 resource data set
+-  Documentation
+  -  Break main sections off README
+  -  Submission guide
   - ❏ Site generation guide
+  - ❏ Watchdog process guide
   - ❏ Content modeling guide (including proxy concepts)
 
 ## Post-release

+ 416 - 59
doc/submission.md

@@ -1,62 +1,398 @@
-# Submission process
-
-The following are basic guidelines to build a submission package:
-
-- Resources are arranged in files and folders on a local filesystem that Pocket
-  Archive can access.
-- File and folder arrangement is important. A folder represents a descriptive
-  resource, and can have metadata attached to it. A file of folder under a
-  parent folder is automatically added as a *child* of the parent resource.
-  This relationship is intended to present the parent as a container of other
-  sub-resources (descriptive and/or opaque). With this method, hierarchies of
-  any complexity can be built.
-- File and folder order in the submission folder is *not* important. No need to
-  rename files and folders to force a specific ordering. This is specified via
-  laundry list instead. See below.
-- The laundry list file is placed under the submission package folder and must
-  be named `pkar_submission.csv`.
-
-A laundry list is thus formatted:
-
-- The first row is reserved for the headers, which indicate the field names.
-- Each subsequent row represents a resource (except in a multi-value case,
-  described below). The `pas:sourcePath` and `pas:contentType` fields are
-  mandatory for each resource. All other fields are optional for the
-  submission, however, some type definitions may have constraints in this
-  regard.
-- All field names, except for `id`, have a namespace prefix among the ones
-  defined in the configuration. See dedicated section for details about
-  namespaces.
-- Fields with a special meaning:
-    - `id`: optional and single-valued. If provided, it becomes the primary
-      identifier for the resource, which is used anywhere information about the
-      resource is retrieved. The depositor is responmsible for ensuring that
-      the provided ID is unique across the system. If left blank, the system
-      generates an identifier that is guaranteed to be unique.
-    - `pas:sourcePath`: mandatory and single-valued. It refers to the file or
-      folder path relative to the package.
-    - `pas:contentType`: mandatory and single-valued. It defines the content
-      type assigned to the resource. For files, it should be `pas:File` or a
-      sub-type thereof. For folders it must not be a `pas:File` or sub-type.
-- To provide multiple values for one or more fields, additional values are
-  added to rows below the previous. For these additional rows, the `sourcePath`
-  field **must not** be filled, and additional values for single-valued fields
-  are ignored.
-- The ordering of the rows determines the ordering of the resources in their
-  container. The system automatically assigns an order to the resources, using
-  their source path and their position in the laundry list. Resources at the
-  top are not assigned an order, as they are considered self-standing. If an
-  order is needed for those, the `pas:next` field can be set to the desired
-  resource (see point below about relationships), or they can be put in an
-  enclosing folder that acts as a collection.
-- Relationships can be established between resources. These are stored as
-  persistent links and appear as hyperlinks in the discovery interface. A
-  relationship can only be set for a field that is configured as "resource"
-  type. To set a relationship with a resource in the
-  same laundry list that doesn't have an explicit ID set, insert the source
-  path of the resource. For a resource that has already an ID, either by being
-  assigned one manually or by being already deposited, insert the full ID
-  including the `par:` namespace (e.g. for ID `12345`, insert `par:12345`).
+# Pocket Archive submission guide
+
+*Audience: archivists, system administrators, developers*
+
+**WORK IN PROGRESS**
+
+Terms appearing in **bold** are referenced in the [glossary](./glossary.md).
+
+## Archival process overview
+
+Pocket Archive receives new contents, and updates to existing contents, via
+**submissions**. A submission is an individual contribution to the archive that
+can add, update, or delete **resources** (a combination of any of these). A
+submission may include multiple resources, which can be related but do not
+necessarily have to.
+
+![The full cycle of operations for a given resource in Pocket
+Archive.](./pkar_res_lifecycle.png)
+
+1. Archivist selects and lays out resources to be archived in his or her own
+   workstation.
+2. Archivist creates a **laundry list** that includes an inventory of the
+   resources and their metadata. This, together with the files and folders
+   previously prepares, constitutes the **SIP**.
+3. Archivist transfers the SIP to the **Drop box**: first the files and
+   folders, then the laundry list.
+4. Upon receipt of the laundry list, Pocket Archive processes the incoming
+   materials and archives them.
+5. Pocket Archive generates a report after the process is complete (regardless
+   of whether it was successful or failed).
+6. Depending on setup, Pocket Archive may delete the SIP from the Drop box if
+   the submission succeeded.
+7. Depending on setup, Pocket Archive may (re-)generate the static site.
+8. If the archivist wants to update the archived resources, they can either
+   request a full copy of the SIP, or to only update metadata, only the laundry
+   list, and re-submit it.
+
+Processing of the SIP (point 4 above) either succeeds or fails as a unit. This
+means that a submission will never perform only a part of the task that it is
+meant to do. This is called an **atomic** operation and it is designed to
+ensure consistency of the data.
+
+Individual steps are described in detail in the following chapters.
+
+## Submission Information Package structure
+
+A submission is performed by preparing a Submission Information Package, or
+**SIP**, which consists of data, i.e. files optionally arranged in a
+curator-defined folder hierarchy, and metadata, the latter gathered in a single
+file called a laundry list; and sending them both to Pocket Archive for
+processing.
+
+A [working SIP example](../test/sample_submission) including files and a
+laundry list, used for testing, is available as a quick reference. Other
+examples are illustrated further down in this document.
+
+As the above life cycle chart shows, the SIP is a disposable artifact. Once it
+is successfully archived, it can be deleted. The full SIP can be regenerated by
+the archive and retrieved at a later time.
+
+The original files in the archivist's workstation can be optionally kept and/or
+copied to local storage. This is stongly recommended, at least until Pocket
+Archive reaches a stable status and can be exclusively relied on for long-term
+preservation. More copies means more chances to recover data from corruption or
+loss, but it also means higher storage costs.
+
+### Source file & folder layout
+
+Preparation of the SIP begins with selecting the materials to submit.
+Generally, it is good practice to select a group of **artifacts** more or less
+related to one another, e.g. a small coherent **collection**, or a day's work
+within a large collection that may take long to complete. It is not critical
+to get this part perfectly right, as more can be added to the archive at a
+later time. It is more important to keep submissions not too large, as a single
+malformed element can cause the whole submission to fail, and not too small, to
+avoid too many iterations that can become confusing. Submissions of tens to
+hundreds of files are in a quite safe range.
+
+The arrangement of files and folders is important, the ordering of elements
+in a folder is less so. A file or sub-folder inside a parent folder creates a
+membership relationship between the two, so that, e.g. one can create the
+following structure:
+
+```
+my_collection
+  |
+  `- artifact1
+  |   |
+  |   `- file01.tiff
+  |   |
+  |   `- file02.pdf
+  |
+  `- artifact2
+      |
+      `- file3.mpg
+```
+
+This creates a collection, `my_collection`, with two members, `artifact1` and
+`artifact2`, the former containing `file1.tiff` and `file2.pdf`, and the latter
+containing `file3.mpg`.
+
+Ordering of the files or folder in a SIP is defined in the laundry list, as we
+will see further down, so using file namings to force a certain order is not
+necessary (however it can provide a good starting point for large lists of
+files or folders under a parent).
+
+Some file and folder structure will be also used in future versions of Pocket
+Archive to create more metadata, but at the moment this is not implemented.
+
+Empty folders can be created and submitted: they can be used as placeholders
+for resources that have no files directly related. But the same effect can be
+obtained by other means with the laundry list.
+
+### Laundry list
+
+Once the files to be included in the SIP is completed, a laundry list is
+compiled. This is basically, as the name suggests, an inventory of all the
+resources that go into the submission; but it provides much more information
+than that, by defining metadata and relationships between resources.
+
+The laundry list is a **CSV** file.
+
+Laundry lists may be edited in any application that supports CSV reading and
+writing. Care must be taken to export the file to CSV. In LibreOffice, for
+example, "Save" writes the file as `.odt` format, which is not usable as a
+laundry list. The spreadsheet must be instead exported as a `.csv` format.
+
+#### Multi-sheet documents
+
+Many spreadsheet applications allow grouping multiple tables or sheets in one
+file. CSV supports only one table per file. While some may find it convenient
+to keep multiple laundry lists in one spreadsheet file, one must take care of
+exporting each sheet individually as a CSV.
+
+#### Laundry list format
+
+The first row of a laundry list is reserved for the header, which indicates the
+field names.  These can be in any order, but following a specific order is
+recommended. The order used in this document and in all laundry lists
+automatically generated by Pocket Archive is: `content_type`, `id`,
+`source_path`, and then all ordinary fields in alphabetical order.
+
+Each subsequent row represents a resource (except in a multi-value case,
+described below). The `content_type` field is mandatory for each resource.
+
+The `source_path` field is only mandatory for files. All other fields are
+optional for the submission, however, some type definitions may have
+constraints in this regard and may be at least strongly recommended. This
+depends on the content model used.
+
+#### Fields with a special meaning
+
+- `content_type`: mandatory, single-valued. It defines the content type
+  assigned to the resource. For files, it must be `file` or a sub-type thereof,
+  except for inferred resources (see below). For folders it must not be a
+  `file` or sub-type. Consult the content model of your archive for a list of
+  defined type names.
+- `id`: optional, single-valued. If provided, it becomes the primary
+  identifier for the resource, which is used anywhere information about the
+  resource is retrieved. The IDs generated by default by Pocket Archive are
+  16-character random strings containing only uppercase and lowercase letters
+  and digits. The depositor is responsible for ensuring that the provided ID
+  is unique across the system. If left blank, the system generates an
+  identifier that is guaranteed to be unique. However, re-submitting the
+  laundry list a second time with the same blank field will create a duplicate
+  resource.
+- `source_path`: mandatory for files, single-valued. It refers to the
+  file or folder path relative to the package, using forward slash `/`
+  characters to separate folders and subfolders or files.
+
+Example of a table representing an artifact with two files:
+
+<table>
+  <thead>
+    <tr>
+      <th>content\_type</th>
+      <th>id</th>
+      <th>source\_path</th>
+      <th>creation\_date</th>
+      <th>label</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>still\_image</td>
+      <td>Sg9hYIISjRjlkP62</td>
+      <td>my\_collection/artifact1</td>
+      <td>My first deposited artifact</td>
+      <td>2002</td>
+    </tr>
+    <tr>
+      <td>still\_image\_file</td>
+      <td>7hic19YTXA8Fudxo</td>
+      <td>my\_collection/artifact1/file1.tiff</td>
+      <td>2025</td>
+      <td></td>
+    </tr>
+    <tr>
+      <td>still\_image\_file</td>
+      <td>Z509TdNhpTjPYDS4</td>
+      <td>my\_collection/artifact1/file2.pdf</td>
+      <td>2025</td>
+      <td></td>
+    </tr>
+  </tbody>
+</table>
+
+Note the difference between the `still_imge` and the `still_image_file`
+resources. We will get back to it further down.
+
+#### Multi-valued fields
+
+Some fields may allow multiple values. To provide multiple values for one or
+more fields, additional values are added to rows below the previous. For these
+additional rows, the special fields `content_type`, `id`, and `source_path`
+**must not** be filled.
+
+Example of a table with a single resource with multi-valued fields:
+
+<table>
+  <thead>
+    <tr>
+      <th>content\_type</th>
+      <th>id</th>
+      <th>source\_path</th>
+      <th>alt\_label</th>
+      <th>description</th>
+      <th>label</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>still\_image</td>
+      <td>Sg9hYIISjRjlkP62</td>
+      <td>my\_collection/artifact1</td>
+      <td>An alternative label</td>
+      <td>A description of the artifact goes here.</td>
+      <td>This is the title and must have only one value.</td>
+    </tr>
+    <tr>
+      <td></td>
+      <td></td>
+      <td></td>
+      <td>You can have as many as you like of these</td>
+      <td>Another description goes here.</td>
+      <td></td>
+    </tr>
+    <tr>
+      <td></td>
+      <td></td>
+      <td></td>
+      <td>FREE alt labels! (as long as supplies last)</td>
+      <td></td>
+      <td></td>
+    </tr>
+  </tbody>
+</table>
+
+The submission process checks if the `content_type` field is filled in a cell
+to determine whether a row in the table is a continuation from the previous
+one, adding multiple values. Having a row without `content` type and with `id`
+and/or `source_path` is considered an error.
+
+#### Ordering (sorting)
+
+The ordering of rows in a laundry list determines the ordering of the resources
+in their container. The system automatically assigns an order to the resources,
+using their source path and their position in the laundry list.  Resources at
+the top are not assigned an order, as they are considered self-standing. If an
+order is needed for those, the `pas:next` **property** can be set to the
+desired resource (see point below about relationships), or they can be put in
+an enclosing folder that acts as a collection.
+
+**Relationships** can be established between resources. These are stored as
+persistent links and appear as hyperlinks in the discovery interface. A
+relationship can only be set for a field that is configured as "resource" type.
+Consult your **content model** to find which properties are relationships.
+
+To set a relationship with a resource in the same laundry list that doesn't
+have an explicit ID set, insert the source path of the resource. For a resource
+that has already an ID, either by being assigned one manually or by being
+already deposited, insert the ID string.
+
+Example table with implicit and explicit relationships, some path-based and
+some ID-based:
+
+<table>
+  <thead>
+    <tr>
+      <th>content\_type</th>
+      <th>id</th>
+      <th>source\_path</th>
+      <th>has\_member</th>
+      <th>label</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>collection</td>
+      <td>p9tXQGBb9iC7xEqm</td>
+      <td>my\_collection-1</td>
+      <td></td>
+      <td>This collection has implicit members from the folder hierarchy.</td>
+    </tr>
+    <tr>
+      <td>still\_image</td>
+      <td>KHwYidw4R7xUAEMN</td>
+      <td>my\_collection-2/image001</td>
+      <td></td>
+      <td>Resource with an explicit ID. The ID can be used in a reference.</td>
+    </tr>
+    <tr>
+      <td>text</td>
+      <td></td>
+      <td>my\_collection-2/text0001</td>
+      <td></td>
+      <td>Resource without explicit ID. It can be referenced by source\_path.</td>
+    </tr>
+    <tr>
+      <td>collection</td>
+      <td>EUXRg9igmU9ouzVH</td>
+      <td>my\_collection-2</td>
+      <td>p9tXQGBb9iC7xEqm</td>
+      <td>This collection has explicit member relationships.</td>
+    </tr>
+    <tr>
+      <td></td>
+      <td></td>
+      <td></td>
+      <td>my\_collection-2/text0001</td>
+      <td></td>
+    </tr>
+  </tbody>
+</table>
+
+When the laundry list is processed for submission, the path-based references
+are replaced with IDs, which are automatically generated where not provided.
+Therefore, a laundry list generated from archived resources may look different
+from the original one. The generated laundry list should be used for
+re-submission.
+
+#### Resource types and sub-types
+
+This chapter is a very concise introduction to content modeling in Pocket
+Archive, which is treated in detail in the [Content modeling guide
+(WIP)](./content_model.md). It is strongly recommended to read that guide
+before archiving resources in earnest.
+
+The three main resource types found in a submission are:
+
+- **Artifact**: the digital surrogate of a physical and/or intellectual object,
+  such as a photograph, a video, a letter, a painting, etc. This resource
+  contains data related to the subject, content, author, taxonomy, etc. of the
+  intellectual work.
+- File: a digital capture or document related to an artifact. The file is
+  accompanied by a **metadata** resource, which is automatically generated fom
+  the metadata that the archivist enters in the laundry list. These metadata
+  should be exclusively about the file itself, e.g. time of creation, file
+  size, file type, etc, as well as how the file relates to the artifact (e.g.
+  detail shot, documentation, transcript, 3/4 view, etc) or other files. Some
+  of these metadata are generated automatically by analyzing the file during
+  the submission process. Information about the artifact itself go exclusively
+  on the artifact resource.
+- **Brick**: a structural element used to build logical, hierarchical
+  structures with multiple resources. Bricks can represent many things: the
+  ordering of chapters and pages in a book, front and back sides of a postcard
+  or a vinyl record, the ordering of artifacts and collections in a collection,
+  etc. They have no intellectual content themselves, but they can reference an
+  artifact or file. They are mostly automatically generated by the submission
+  process, and are mostly hidden in the **presentation**, but they can be
+  explicitly created in a laundry list to create specific structures.
+
+These three key content types are seldom used as-is. They usually have
+sub-types, which are defined in the content model. See the content modeling
+guide for more information about sub-types.
+
+Also see the [sample laundry
+list](../test/sample_submission/pkar_submisson-demo.csv) for examples of
+artifacts, files, and bricks making up a two-sided postcard.
+
+### Submission ID and submission name
+
+Each submission gets a randomly generated ID when it starts. This ID is
+attached to all the resources in the submission. This makes it easier to It
+also makes it possible to generate a laundry list that contains exactly the
+same resources that were originally submitted (possibly with added
+auto-generated implicit resources).
+
+The ID is automatically generated and system-controlled. It cannot be changed.
+A submission can also have a name, which is optional and user-defined. The
+submission name is determined by the file name used for the laundry list. E.g.
+`pkar_submission-my_new_collection.csv` will use `my_new_collection`, i.e. the
+text between `pkar_submission-` and `.csv`, as the submission name. Submisson
+names are not required to be unique, but they can contain for example a date to
+facilitate their search.
 
 ### Update
 
@@ -68,3 +404,24 @@ To facilitate this task while avoiding the need to hold on to all of the
 archive's laundry lists, Pocket Archive can generate a laundry list for one or
 more selected resources. This list, which represents the current state of the
 resources requested, can be edited and submitted for an update. 
+
+### Shortcuts
+
+Some shortcuts are available to facilitate the management of larger
+submissions.
+
+#### Implicit resources
+
+Some implicit resources are created 
+
+#### ID generation
+
+As mentioned before, explicitly adding IDs in a laundry list simplifies later
+editing and management. However, this is one of the most tedious parts of a
+laundry list creation.
+
+Fortuntately, such repetitive and error-prone tasks can be easily automated
+with tools provided by most spreadsheet applications. A macro (a mini-program
+that runs in an application) for LibreOffice Calc is [provided
+here](../src/util/libreoffice_idgen.bas) to automatically generate 16-character
+IDs for all the cells selected in a table.

+ 45 - 0
src/util/libreoffice_idgen.bas

@@ -0,0 +1,45 @@
+REM  ***** BASIC  *****
+Sub generate_id()
+    REM Generate a 16-character long random ID for Pocket Archive.
+    REM Use this macro in Libreoffice Calc on a single or multiple cells for
+    REM quickly filling in any range of cells with fresh IDs.
+    REM The CurrentSelection will even contain the stacked ranges
+    REM of additional sheets IF MORE THAN ONE SHEET IS SELECTED.
+
+    Const CHARS As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+    Const STRING_LENGTH As Integer = 16
+    Dim oSelection As Object
+    Dim oCell As Object
+    Dim sRandomString As String
+    Dim i As Integer
+    Dim iCharIndex As Integer
+    Dim iCharsLength As Integer
+
+    ' Get the current selection.
+    iCharsLength = Len(CHARS)
+
+    sel =ThisComponent.CurrentSelection
+    If sel.supportsService("com.sun.star.sheet.SheetCellRanges") Then
+        rgs = sel
+    Else
+        If NOT sel.supportsService("com.sun.star.sheet.SheetCellRange") Then Exit Sub
+        rgs = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
+        rgs.addRangeAddress(sel.RangeAddress, False)
+    End If
+    For Each rg In rgs
+        uR = rg.Rows.Count - 1
+        uC = rg.Columns.Count - 1
+        Randomize
+        For r = 0 To uR
+            For c = 0 To uC
+                rcCell = rg.getCellByPosition(c, r)
+                sRandomString = ""
+                For i = 1 To STRING_LENGTH
+                    iCharIndex = Int((iCharsLength * Rnd) + 1)
+                    sRandomString = sRandomString & Mid(CHARS, iCharIndex, 1)
+                Next i
+                rcCell.setString(sRandomString)
+            Next c
+        Next r
+    Next rg
+End Sub

+ 0 - 0
test/sample_submission/demo01/coll2/.keep → test/sample_submission/coll2/.keep


+ 0 - 0
test/sample_submission/demo01/demo_collection/demo_postcard/back/567890.jpg → test/sample_submission/demo_collection/demo_postcard/back/567890.jpg


+ 0 - 0
test/sample_submission/demo01/demo_collection/demo_postcard/front/54321.jpg → test/sample_submission/demo_collection/demo_postcard/front/54321.jpg


+ 0 - 0
test/sample_submission/demo01/demo_collection/description.md → test/sample_submission/demo_collection/description.md


+ 0 - 0
test/sample_submission/demo01/demo_collection/single_image/0685_04.jpg → test/sample_submission/demo_collection/single_image/0685_04.jpg


+ 0 - 0
test/sample_submission/demo01/pkar_submission-demo.csv → test/sample_submission/pkar_submission-demo.csv