Compare commits

..

No commits in common. "master" and "subprojects" have entirely different histories.

18 changed files with 1048 additions and 13 deletions

26
NOTES.md Normal file
View file

@ -0,0 +1,26 @@
# Notes
## Connexion initiale
* envoie en broadcast (UPD) de son login
* chaque utilisateur le compare à son propre login et se reserve le droit de refuser
* le client est donc en attente de réponses
* Comment savoir que tout le monde est ok ? Demander au premier qui répond sa liste et l'intégrer
* si tout le monde inscrit sur cette liste dit ok -> c'est bon
* raffiner la liste des actifs au fur et à mesure
## Communication
* Discussion TCP quand on veut envoyer des messages (reset le socket avec un timeout pour économiser ?)
* Détection d'utilisateurs devenus inactifs sur timeout
* Associer un ID à un utilisateur (on peut faire l'hypothèse qu'on est sur un réseau pro et donc l'ip change pas)
## Gestion historique
Décentralisée ou centralisée sur serveur, au choix
* Décentralisé:
* Chaque noeud à une bdd locale -> Serveur SQL qu'on veut (SQLite plus simple)
## Rapport
expliquer l'archi et les choix
expliquer schéma bdd relationnelle
manuel utilisation appli
plus import -> procédure déploiement

View file

@ -2,7 +2,7 @@
This project contains the source for the 4IR Java project.
### Full report with installation instructions available in [report/report.pdf](report/report.pdf).
Full report available [here](report/report.pdf).
## Group
@ -15,9 +15,54 @@ This project contains the source for the 4IR Java project.
* JavaFX 11.0.2 (openfx)
* Gradle 6.3
## Installation
#### Install Java 11
Run this command
```shell script
sudo apt install openjdk-11-jdk
```
#### Optional: Install JavaFX Scene Builder 11
Follow [this link](https://gluonhq.com/products/scene-builder/) to download and install it, then [this link](https://www.jetbrains.com/help/idea/opening-fxml-files-in-javafx-scene-builder.html) to set up Intellij
#### Build and Run
Run this command
```shell script
./gradlew runShadow
```
Or in Intellij, open the gradle window and click on `clavardator -> Tasks -> application -> runShadow`.
#### Generate cross-platform jar
Run this command
```shell script
./gradlew build
```
This will generate a jar file under `client/build/libs/client-{VERSION}-all.jar`.
You can then copy this file and place it on any Linux/Windows/Mac environment with at least Java 11 installed.
#### Running a JAR file
You can run a jar file with this command:
```shell script
java -jar <JAR-NAME>.jar
```
## Resources
* [OpenJDK](https://adoptopenjdk.net/releases.html)
* [JavaFX](https://gluonhq.com/products/javafx/)
* [JavaFX Scene Builder](https://gluonhq.com/products/scene-builder/)
* [Setting up JavaFX](https://openjfx.io/openjfx-docs/)
* [Settings up Scene builder in Intellij](https://www.jetbrains.com/help/idea/opening-fxml-files-in-javafx-scene-builder.html#open-in-scene-builder)
* [Intellij IDEA](https://www.jetbrains.com/idea/)

View file

@ -1,6 +1,6 @@
{
"serveur": {
"actif": 1,
"actif": 0,
"uri": "localhost",
"type": "INSA",
"ports": {
@ -10,6 +10,6 @@
},
"local": {
"actif": 1,
"port": 31598
"port": 31590
}
}

View file

@ -1,7 +1,6 @@
package fr.insa.clavardator.client.db;
import fr.insa.clavardator.client.users.CurrentUser;
import fr.insa.clavardator.client.users.PeerUser;
import fr.insa.clavardator.lib.message.FileMessage;
import fr.insa.clavardator.lib.message.Message;
import fr.insa.clavardator.lib.users.User;
@ -204,7 +203,7 @@ public class DatabaseController {
while (res.next()) {
String id = res.getString("id");
String username = res.getString("username");
userList.add(new PeerUser(id, username));
userList.add(new User(id, username));
}
Log.v(getClass().getSimpleName(), userList.size() + " users fetched");

View file

@ -1,4 +1,4 @@
package fr.insa.clavardator.client.ui.chat;
package fr.insa.clavardator.client.ui;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

View file

@ -2,6 +2,7 @@ package fr.insa.clavardator.client.ui.chat;
import fr.insa.clavardator.client.chat.ChatHistory;
import fr.insa.clavardator.client.ui.LoadingScreenController;
import fr.insa.clavardator.client.ui.NoSelectionModel;
import fr.insa.clavardator.client.users.PeerUser;
import fr.insa.clavardator.lib.message.Message;
import fr.insa.clavardator.lib.util.ErrorCallback;

View file

@ -15,13 +15,13 @@ public class DirectPeerConnection extends PeerConnection {
}
@Override
public void send(Serializable message, @Nullable SimpleCallback callback, @Nullable ErrorCallback errorCallback) {
protected void send(Serializable message, @Nullable SimpleCallback callback, @Nullable ErrorCallback errorCallback) {
connection.send(message, callback, errorCallback);
}
@Override
public void receive(TcpConnection.MessageReceivedCallback callback, ErrorCallback errorCallback) {
protected void receive(TcpConnection.MessageReceivedCallback callback, ErrorCallback errorCallback) {
connection.receive(callback, errorCallback);
}

View file

@ -8,7 +8,7 @@ import org.jetbrains.annotations.Nullable;
import java.io.Serializable;
public abstract class PeerConnection {
public abstract void send(Serializable message, @Nullable SimpleCallback callback, @Nullable ErrorCallback errorCallback);
protected abstract void send(Serializable message, @Nullable SimpleCallback calback, @Nullable ErrorCallback errorCallback);
/**
* Subscribe to this user messages.
@ -17,7 +17,7 @@ public abstract class PeerConnection {
*
* @param errorCallback Callback on error
*/
public abstract void receive(TcpConnection.MessageReceivedCallback callback, ErrorCallback errorCallback);
protected abstract void receive(TcpConnection.MessageReceivedCallback callback, ErrorCallback errorCallback);
/**
* Close the connection and set state to disconnected

View file

@ -18,13 +18,13 @@ public class ProxyPeerConnection extends PeerConnection {
}
@Override
public void send(Serializable message, @Nullable SimpleCallback callback, @Nullable ErrorCallback errorCallback) {
protected void send(Serializable message, @Nullable SimpleCallback callback, @Nullable ErrorCallback errorCallback) {
proxy.send(message, callback, errorCallback);
}
@Override
public void receive(TcpConnection.MessageReceivedCallback callback, ErrorCallback errorCallback) {
protected void receive(TcpConnection.MessageReceivedCallback callback, ErrorCallback errorCallback) {
proxy.receive(userId, callback, errorCallback);
}

View file

@ -2,8 +2,9 @@ package fr.insa.clavardator.lib.users;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
public abstract class User {
public class User implements Serializable {
// Make this class observable
private final transient PropertyChangeSupport pcs = new PropertyChangeSupport(this);
private String username;

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

View file

@ -0,0 +1,963 @@
<?xml version="1.0" encoding="UTF-8"?>
<XMI xmi.version="1.2" verified="false" xmlns:UML="http://schema.omg.org/spec/UML/1.4" timestamp="2020-11-23T07:32:27">
<XMI.header>
<XMI.documentation>
<XMI.exporter>umbrello uml modeller http://umbrello.kde.org</XMI.exporter>
<XMI.exporterVersion>1.6.18</XMI.exporterVersion>
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
</XMI.documentation>
<XMI.metamodel xmi.version="1.4" xmi.name="UML" href="UML.xml"/>
</XMI.header>
<XMI.content>
<UML:Model name="UML Model" isAbstract="false" isSpecification="false" isLeaf="false" isRoot="false" xmi.id="m1">
<UML:Namespace.ownedElement>
<UML:Stereotype name="folder" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="m1" xmi.id="folder"/>
<UML:Stereotype name="interface" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="m1" xmi.id="interface"/>
<UML:Model name="Logical View" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="m1" xmi.id="Logical_View">
<UML:Namespace.ownedElement>
<UML:Package name="Datatypes" isAbstract="false" visibility="public" stereotype="folder" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="Datatypes">
<UML:Namespace.ownedElement>
<UML:DataType name="char" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uchsEHkyw0mhl"/>
<UML:DataType name="int" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uWQiowYe4nFaZ"/>
<UML:DataType name="float" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uBBNaShXZBKQT"/>
<UML:DataType name="double" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uYCPKCjlSdVhN"/>
<UML:DataType name="bool" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uuXBZMoYOYSaM"/>
<UML:DataType name="string" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="unPFzh6A5OwZ2"/>
<UML:DataType name="unsigned char" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="upB9uN8iNuj5J"/>
<UML:DataType name="signed char" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="ugBgYZ4m7Hzug"/>
<UML:DataType name="unsigned int" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="ukvcoZUurK4H4"/>
<UML:DataType name="signed int" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uEyGiyPL3pt24"/>
<UML:DataType name="short int" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uHGWk4b2dl7Ai"/>
<UML:DataType name="unsigned short int" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="ul1iiaDWY4Q8k"/>
<UML:DataType name="signed short int" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="usMRW6EYizS4L"/>
<UML:DataType name="long int" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="u5R4kCxRJFgvc"/>
<UML:DataType name="signed long int" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="ut0ufObD1Lxax"/>
<UML:DataType name="unsigned long int" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uvIVjxSQ633RP"/>
<UML:DataType name="long double" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uLpUkzAJOaLSx"/>
<UML:DataType name="wchar_t" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uEYLz1VvWjMoL"/>
<UML:DataType name="new_datatype" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uWara7WKgmI2M"/>
<UML:DataType name="boolean" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uNCMLbwou3joQ"/>
<UML:DataType name="byte" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uVu06m9mlUXrE"/>
<UML:DataType name="short" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uk0VwLxmv6yPv"/>
<UML:DataType name="long" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uX6Df51OAZt5R"/>
<UML:DataType name="String" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="urG82CYprwXM8"/>
<UML:DataType name="Integer" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uge2sGQAz2ASh"/>
<UML:DataType name="Character" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uyOiLtMiZ2jHc"/>
<UML:DataType name="Boolean" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uq7gti6DTLbuk"/>
<UML:DataType name="Float" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uC3FLBfLgDEhN"/>
<UML:DataType name="Double" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uKOoyaASEX8q0"/>
<UML:DataType name="Byte" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="ulREkeqZpp0ao"/>
<UML:DataType name="Short" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uAvbnwAb5DRkV"/>
<UML:DataType name="Long" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uLnJvHDyRVRio"/>
<UML:DataType name="StringBuffer" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uTVshVpYK1LCz"/>
<UML:DataType name="StringBuilder" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="u0i1FB6SsYSvy"/>
<UML:DataType name="undef" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="u0w2NtfM1frzy"/>
<UML:DataType name="DatabaseController*" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="uIpZjHlEoz0Vt"/>
<UML:DataType name="UIController*" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Datatypes" xmi.id="ux25YPKkHHPLY"/>
</UML:Namespace.ownedElement>
</UML:Package>
<UML:Class name="UIController" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" comment="singleton" namespace="Logical_View" xmi.id="uYKRrg6CmRJAW">
<UML:Classifier.feature>
<UML:Attribute name="users" visibility="private" isSpecification="false" type="ubdskIrDMId2M" xmi.id="ugAEYxEUffkRe"/>
<UML:Attribute name="currentUser" visibility="private" isSpecification="false" type="u2ydP9LaNavW9" xmi.id="uQhNOdhGIR0uG"/>
</UML:Classifier.feature>
</UML:Class>
<UML:Class name="User" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uXJ6llv1PM3IG">
<UML:GeneralizableElement.generalization>
<UML:Generalization xmi.idref="uCaKDoUGDAIOL"/>
</UML:GeneralizableElement.generalization>
<UML:Classifier.feature>
<UML:Attribute name="username" visibility="protected" isSpecification="false" type="urG82CYprwXM8" xmi.id="uz5hFEtLHsR2K"/>
<UML:Operation name="getUsername" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uEIjmpY0s7lyZ">
<UML:BehavioralFeature.parameter>
<UML:Parameter kind="return" type="urG82CYprwXM8" xmi.id="uHJVAvepXeNAJ"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Class name="NetworkConnection" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="u7lpPNe6in0pc">
<UML:GeneralizableElement.generalization>
<UML:Generalization xmi.idref="ussMpL6OBxvd0"/>
<UML:Generalization xmi.idref="unuIHAbXkulHD"/>
</UML:GeneralizableElement.generalization>
<UML:Classifier.feature>
<UML:Attribute name="socket" visibility="private" isSpecification="false" type="urj16oLJpHspa" xmi.id="umKIYFAMLtn8h"/>
<UML:Operation name="sendMessage" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="usL1ETu7nxBtZ">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="message" visibility="private" isSpecification="false" type="uRfb8kwNLXiyz" value="" xmi.id="u7U5CNXeQn5Pa"/>
<UML:Parameter name="callback" visibility="private" isSpecification="false" type="uavPXrvQlWUv4" value="" xmi.id="uoMVDAViLKhuY"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
<UML:Operation name="sendBroadcast" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uaKA49CvAGdR2">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="message" visibility="private" isSpecification="false" type="urG82CYprwXM8" value="" xmi.id="uWNT6T5BhOucT"/>
<UML:Parameter name="callback" visibility="private" isSpecification="false" type="uavPXrvQlWUv4" value="" xmi.id="uVYC47tVWSUQl"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Class name="UserList" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="ubdskIrDMId2M">
<UML:GeneralizableElement.generalization>
<UML:Generalization xmi.idref="uyIhhxgr199MC"/>
</UML:GeneralizableElement.generalization>
<UML:Classifier.feature>
<UML:Attribute name="activeUsers" visibility="public" isSpecification="false" type="uCZjTydUPQ1Jn" xmi.id="ube4u4nmINPfw"/>
<UML:Attribute name="inactiveUsers" visibility="private" isSpecification="false" type="ufU9jurmLpKD0" xmi.id="uCTmUvmY49sQm"/>
<UML:Attribute name="network" visibility="private" isSpecification="false" type="u7lpPNe6in0pc" xmi.id="u0pyt1q3GkiyH"/>
<UML:Attribute name="db" visibility="private" isSpecification="false" type="uJLzR6QLuEycw" xmi.id="u49H8SEmPmGzU"/>
<UML:Operation name="isUsernameAvailable" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uEMjmoujN5z4P">
<UML:BehavioralFeature.parameter>
<UML:Parameter kind="return" type="uNCMLbwou3joQ" xmi.id="uOZChCcdi30NP"/>
<UML:Parameter name="username" visibility="private" isSpecification="false" type="urG82CYprwXM8" value="" xmi.id="u3NAFF4HL9PZG"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
<UML:Operation name="propagateUsernameChange" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uBdWTTWRUgfvA">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="username" visibility="private" isSpecification="false" type="urG82CYprwXM8" value="" xmi.id="uNCVRIWTj59Yq"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
<UML:Operation name="onUsernameChangePropagated" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uGNHIm92iwcLV"/>
<UML:Operation name="discoverActiveUsers" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uEB1ubPnfwbZn"/>
<UML:Operation name="onActiverUserDiscovered" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uzntm57etBGuh">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="user" visibility="private" isSpecification="false" type="uCZjTydUPQ1Jn" value="" xmi.id="uHQi4yYUn5yzb"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Class name="ErrorHandler" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uB64HbD6AAD0Q">
<UML:GeneralizableElement.generalization>
<UML:Generalization xmi.idref="ur8tKxW0c77Qe"/>
</UML:GeneralizableElement.generalization>
<UML:Classifier.feature>
<UML:Operation name="notifyError" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="umV4CeNUtgQsF">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="error" visibility="private" isSpecification="false" type="u9VFYVmCG9TOq" value="" xmi.id="ulC0DxCCZasTE"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Class name="Exception" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="u9VFYVmCG9TOq"/>
<UML:Class name="MainApp" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uL87NkWKxdeZu">
<UML:GeneralizableElement.generalization>
<UML:Generalization xmi.idref="uDDbAgSnisFrn"/>
</UML:GeneralizableElement.generalization>
<UML:Classifier.feature>
<UML:Attribute name="controller" visibility="private" isSpecification="false" type="uYKRrg6CmRJAW" xmi.id="uys11jr9acw2f"/>
<UML:Operation name="main" ownerScope="classifier" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uso8RS4GdgOL9">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="args" visibility="private" isSpecification="false" type="uDrG4ROJHVasS" value="" xmi.id="uWsXkMrktAnPD"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Class name="DatabaseController" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uJLzR6QLuEycw">
<UML:GeneralizableElement.generalization>
<UML:Generalization xmi.idref="uWWNoRJHChTMZ"/>
</UML:GeneralizableElement.generalization>
<UML:Classifier.feature>
<UML:Operation name="getAllUsers" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="u3YiQSRK59Hi5">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="callback" visibility="private" isSpecification="false" type="uXwcH2ETd0Xtm" value="" xmi.id="uM3CUhbiSQ3tL"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
<UML:Operation name="addMessage" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uSigkdDAzyCXE">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="message" visibility="private" isSpecification="false" type="uRfb8kwNLXiyz" value="" xmi.id="u4Vkplwr9Hoff"/>
<UML:Parameter name="callback" visibility="private" isSpecification="false" type="uavPXrvQlWUv4" value="" xmi.id="uPdQD4xVzMae2"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
<UML:Operation name="getChatHistory" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="ushkUTs0K7LsU">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="callback" visibility="private" isSpecification="false" type="uRzT6LGkcbsJm" value="" xmi.id="udnN2JHu9Xwy3"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Class name="ChatHistory" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uMvgLuEK3MyVc">
<UML:GeneralizableElement.generalization>
<UML:Generalization xmi.idref="ueuwF6PhlIVIb"/>
<UML:Generalization xmi.idref="uuA2mW6NMKAht"/>
</UML:GeneralizableElement.generalization>
<UML:Classifier.feature>
<UML:Attribute name="db" visibility="private" isSpecification="false" type="uJLzR6QLuEycw" xmi.id="unZPfZl7jhR6L"/>
<UML:Operation name="refreshHistory" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="ugbMpRixsT7LO"/>
<UML:Operation name="addMessage" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uZyd650tdtLjH">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="message" visibility="private" isSpecification="false" type="uRfb8kwNLXiyz" value="" xmi.id="uQKFCPzSzENSP"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
<UML:Operation name="onMessageSaved" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uEYZepdrLKW3I">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="message" visibility="private" isSpecification="false" type="uRfb8kwNLXiyz" value="" xmi.id="uFFTcLx1dp6An"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
<UML:Operation name="onMessagesFetched" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="utDwMOEL4fgkc"/>
</UML:Classifier.feature>
</UML:Class>
<UML:Class name="ArrayList&lt;User>" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uHHtYzLw61Ywa"/>
<UML:Class name="Message" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uRfb8kwNLXiyz"/>
<UML:Class name="DiscoverCallback" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uz0vg84Fk7MY0"/>
<UML:Class name="UsersCallback" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uXwcH2ETd0Xtm"/>
<UML:Class name="messageCallback" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uO3n9QAZIb9UW"/>
<UML:Class name="ArrayList&lt;Message>" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uGoMRG7f9P0cG"/>
<UML:Interface name="Observer" isAbstract="true" visibility="public" stereotype="interface" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uqtMdczmUK7dZ">
<UML:Classifier.feature>
<UML:Operation name="update" isAbstract="true" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="ud9sBsKvnymYY">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="obs" visibility="private" isSpecification="false" type="u0w2NtfM1frzy" value="" xmi.id="uDCtfXhV3ynM7"/>
<UML:Parameter name="arg" visibility="private" isSpecification="false" type="uz1gW6vUowkjd" value="" xmi.id="uaRN6U5HCeYqz"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Interface>
<UML:Class name="Object" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uz1gW6vUowkjd"/>
<UML:Abstraction name="" visibility="public" client="uYKRrg6CmRJAW" supplier="uqtMdczmUK7dZ" isSpecification="false" namespace="Logical_View" xmi.id="uSziF8kYcYzyq"/>
<UML:Abstraction name="" visibility="public" client="uYKRrg6CmRJAW" supplier="uqtMdczmUK7dZ" isSpecification="false" namespace="Logical_View" xmi.id="uJJTFyagi4jzV"/>
<UML:Class name="Observable" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uMukxNtG4j8CL">
<UML:Classifier.feature>
<UML:Operation name="setChanged" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="u0R1WhCROUrcp"/>
<UML:Operation name="notifyObservers" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uiFfJ18j5Ut4c">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="arg" visibility="private" isSpecification="false" type="uz1gW6vUowkjd" value="" xmi.id="u0t43A1a1BTlp"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
<UML:Operation name="addObserver" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uYrEqTzcOyWZm">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="obs" visibility="private" isSpecification="false" type="uqtMdczmUK7dZ" value="" xmi.id="uvTRiJQFaSmfo"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Generalization name="" parent="uMukxNtG4j8CL" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="ussMpL6OBxvd0" child="u7lpPNe6in0pc"/>
<UML:Generalization name="" parent="uMukxNtG4j8CL" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="ur8tKxW0c77Qe" child="uB64HbD6AAD0Q"/>
<UML:Class name="Application" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="u04Qm3WZC4Dm7">
<UML:Classifier.feature>
<UML:Operation name="launch" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="usmiQ4UnkVvOa">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="args" visibility="private" isSpecification="false" type="uDrG4ROJHVasS" value="" xmi.id="ultgJYVE2OrDk"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Class name="String[]" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uDrG4ROJHVasS"/>
<UML:Generalization name="" parent="u04Qm3WZC4Dm7" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="uDDbAgSnisFrn" child="uL87NkWKxdeZu"/>
<UML:Generalization name="" parent="uMukxNtG4j8CL" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="uyIhhxgr199MC" child="ubdskIrDMId2M"/>
<UML:Dependency name="" visibility="public" client="uXJ6llv1PM3IG" supplier="uRfb8kwNLXiyz" isSpecification="false" namespace="Logical_View" xmi.id="usIfYNakWL01P"/>
<UML:Generalization name="" parent="uMukxNtG4j8CL" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="ueuwF6PhlIVIb" child="uMvgLuEK3MyVc"/>
<UML:Class name="CurrentUser" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="u2ydP9LaNavW9">
<UML:GeneralizableElement.generalization>
<UML:Generalization xmi.idref="uz6iWtgv67vte"/>
</UML:GeneralizableElement.generalization>
<UML:Classifier.feature>
<UML:Operation name="changeUsername" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uACwUrs3R8BQS">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="username" visibility="private" isSpecification="false" type="urG82CYprwXM8" value="" xmi.id="ueWHjyrwjmapi"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Generalization name="" parent="uXJ6llv1PM3IG" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="uz6iWtgv67vte" child="u2ydP9LaNavW9"/>
<UML:Class name="ActiveUser" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uCZjTydUPQ1Jn">
<UML:GeneralizableElement.generalization>
<UML:Generalization xmi.idref="unzOccU9iqM8m"/>
<UML:Generalization xmi.idref="uv7pw80GpGG60"/>
</UML:GeneralizableElement.generalization>
<UML:Classifier.feature>
<UML:Attribute name="networkController" visibility="private" isSpecification="false" type="u7lpPNe6in0pc" xmi.id="uyIBX9tSjiYsx"/>
<UML:Operation name="sendMessage" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uXXG5jiBZ5uah">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="message" visibility="private" isSpecification="false" type="uRfb8kwNLXiyz" value="" xmi.id="uUt9ubJ3kN8hG"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
<UML:Operation name="onMessageSent" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uXDRTyUZxXDCv">
<UML:BehavioralFeature.parameter>
<UML:Parameter name="message" visibility="private" isSpecification="false" type="uRfb8kwNLXiyz" value="" xmi.id="uE0BSNpuPfYYh"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Generalization name="" parent="uXJ6llv1PM3IG" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="unzOccU9iqM8m" child="uCZjTydUPQ1Jn"/>
<UML:Generalization name="" parent="uMukxNtG4j8CL" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="uCaKDoUGDAIOL" child="uXJ6llv1PM3IG"/>
<UML:Dependency name="" visibility="public" client="uCZjTydUPQ1Jn" supplier="uRfb8kwNLXiyz" isSpecification="false" namespace="Logical_View" xmi.id="uS9qcNdJM9cXo"/>
<UML:Class name="Socket" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="urj16oLJpHspa"/>
<UML:Class name="HistoryCallback" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uRzT6LGkcbsJm"/>
<UML:Class name="PeerUser" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="ufU9jurmLpKD0">
<UML:GeneralizableElement.generalization>
<UML:Generalization xmi.idref="ub3CHeL9So6yr"/>
</UML:GeneralizableElement.generalization>
<UML:Classifier.feature>
<UML:Attribute name="history" visibility="protected" isSpecification="false" type="uMvgLuEK3MyVc" xmi.id="uEd3zgxXoF6Nw"/>
<UML:Operation name="getHistory" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uqcKJzzTIUZCd">
<UML:BehavioralFeature.parameter>
<UML:Parameter kind="return" type="uMvgLuEK3MyVc" xmi.id="uLylelsebXwrg"/>
</UML:BehavioralFeature.parameter>
</UML:Operation>
</UML:Classifier.feature>
</UML:Class>
<UML:Generalization name="" parent="uXJ6llv1PM3IG" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="ub3CHeL9So6yr" child="ufU9jurmLpKD0"/>
<UML:Generalization name="" parent="ufU9jurmLpKD0" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="uv7pw80GpGG60" child="uCZjTydUPQ1Jn"/>
<UML:Generalization name="" parent="uMukxNtG4j8CL" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="uuA2mW6NMKAht" child="uMvgLuEK3MyVc"/>
<UML:Class name="Callback" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="uavPXrvQlWUv4"/>
<UML:Class name="Thread" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Logical_View" xmi.id="ubVqOwF4sMNEQ">
<UML:Classifier.feature>
<UML:Operation name="run" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uwXNbdS0ts0u3"/>
<UML:Operation name="start" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="uxqF92VezXaZe"/>
<UML:Operation name="stop" isAbstract="false" visibility="public" isVirtual="false" isSpecification="false" isLeaf="false" isRoot="false" isInline="false" isOverride="false" isQuery="false" xmi.id="u9eF6qFWLCQ1m"/>
</UML:Classifier.feature>
</UML:Class>
<UML:Generalization name="" parent="ubVqOwF4sMNEQ" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="uWWNoRJHChTMZ" child="uJLzR6QLuEycw"/>
<UML:Generalization name="" parent="ubVqOwF4sMNEQ" visibility="public" isSpecification="false" namespace="Logical_View" discriminator="" xmi.id="unuIHAbXkulHD" child="u7lpPNe6in0pc"/>
<UML:Association name="" visibility="public" isSpecification="false" namespace="Logical_View" xmi.id="u1MtGY3acWRbb">
<UML:Association.connection>
<UML:AssociationEnd name="" aggregation="none" isNavigable="false" visibility="public" isSpecification="false" changeability="changeable" type="uXJ6llv1PM3IG" xmi.id="uZiBsUKchtZ09"/>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uXJ6llv1PM3IG" xmi.id="u49Z5gm6mYWCE"/>
</UML:Association.connection>
</UML:Association>
</UML:Namespace.ownedElement>
<XMI.extension xmi.extender="umbrello">
<diagrams resolution="96">
<diagram showopsig="1" type="1" showscope="1" canvasheight="1660" linewidth="0" showops="1" showattribassocs="1" showpackage="1" showstereotype="1" snapgrid="1" canvaswidth="2615" xmi.id="uVu7uqEenPeYW" snapy="25" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" isopen="1" usefillcolor="1" fillcolor="#ffffff" snapx="25" documentation="" showattsig="1" localid="-1" name="class diagram" backgroundcolor="#ffffff" linecolor="#000000" showpubliconly="0" snapcsgrid="0" showatts="1" textcolor="#000000" showgrid="0" zoom="85.583248328124967" griddotcolor="#36383e">
<widgets>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="750" xmi.id="uYKRrg6CmRJAW" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="66" usefillcolor="1" fillcolor="#ffffff" localid="uqKxL8c5HPKwC" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="253" autoresize="1" usesdiagramfillcolor="0" y="-1325"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="1050" xmi.id="u04Qm3WZC4Dm7" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="47" usefillcolor="1" fillcolor="#ffffff" localid="uUXnW1ru1B04z" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="235" autoresize="1" usesdiagramfillcolor="0" y="-1500"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="450" xmi.id="uB64HbD6AAD0Q" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="47" usefillcolor="1" fillcolor="#ffffff" localid="uThSIWqmvEBj6" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="298" autoresize="1" usesdiagramfillcolor="0" y="-850"/>
<interfacewidget showoperations="1" isinstance="0" showscope="1" showattributes="0" linewidth="0" showstereotype="1" showpackage="1" x="700" xmi.id="uqtMdczmUK7dZ" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="57" usefillcolor="1" drawascircle="0" fillcolor="#ffffff" localid="ukuGqxddUqGEm" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="327" autoresize="1" usesdiagramfillcolor="0" y="-1500"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="-775" xmi.id="uXJ6llv1PM3IG" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="57" usefillcolor="1" fillcolor="#ffffff" localid="u0OOMt13Lai7A" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="226" autoresize="1" usesdiagramfillcolor="0" y="-900"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="-750" xmi.id="uJLzR6QLuEycw" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="85" usefillcolor="1" fillcolor="#ffffff" localid="u1ZsdzQnbk1oA" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="478" autoresize="1" usesdiagramfillcolor="0" y="75"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="-225" xmi.id="uCZjTydUPQ1Jn" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="76" usefillcolor="1" fillcolor="#ffffff" localid="udUY3tBCMXHOM" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="361" autoresize="1" usesdiagramfillcolor="0" y="-400"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="-375" xmi.id="u7lpPNe6in0pc" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="76" usefillcolor="1" fillcolor="#ffffff" localid="u6LZmWhJ4lSkN" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="496" autoresize="1" usesdiagramfillcolor="0" y="-225"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="-700" xmi.id="ufU9jurmLpKD0" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="57" usefillcolor="1" fillcolor="#ffffff" localid="uJpPDbCJSqSrO" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="262" autoresize="1" usesdiagramfillcolor="0" y="-725"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="-725" xmi.id="ubVqOwF4sMNEQ" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="85" usefillcolor="1" fillcolor="#ffffff" localid="ukspuX3JFjnGT" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="91" autoresize="1" usesdiagramfillcolor="0" y="-225"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="25" xmi.id="uMukxNtG4j8CL" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="85" usefillcolor="1" fillcolor="#ffffff" localid="uOEPbyh3q12vP" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="289" autoresize="1" usesdiagramfillcolor="0" y="-1050"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="475" xmi.id="ubdskIrDMId2M" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="190" usefillcolor="1" fillcolor="#ffffff" localid="uq2vzhfOndliM" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="460" autoresize="1" usesdiagramfillcolor="0" y="-350"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="1050" xmi.id="uL87NkWKxdeZu" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="57" usefillcolor="1" fillcolor="#ffffff" localid="uh4AmHvyHCejl" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="253" autoresize="1" usesdiagramfillcolor="0" y="-1350"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="-1175" xmi.id="u2ydP9LaNavW9" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="47" usefillcolor="1" fillcolor="#ffffff" localid="uvJl24uk9HpLa" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="325" autoresize="1" usesdiagramfillcolor="0" y="-775"/>
<classwidget showoperations="1" isinstance="0" showscope="1" showattributes="1" linewidth="0" showstereotype="1" showpackage="1" x="-775" xmi.id="uMvgLuEK3MyVc" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="114" usefillcolor="1" fillcolor="#ffffff" localid="ulS8SVpzhLZWf" showopsigs="601" showattsigs="601" linecolor="#000000" showpubliconly="0" textcolor="#000000" width="325" autoresize="1" usesdiagramfillcolor="0" y="-475"/>
</widgets>
<messages/>
<associations>
<assocwidget seqnum="" type="510" widgetaid="ubdskIrDMId2M" changeabilityB="900" linewidth="0" visibilityB="0" totalcounta="2" visibilityA="0" indexa="1" xmi.id="ube4u4nmINPfw" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uqhYNy2L1OOty" linecolor="#000000" widgetbid="uCZjTydUPQ1Jn" textcolor="#000000" indexb="1" autoresize="1" usesdiagramfillcolor="1" changeabilityA="900">
<linepath layout="Direct">
<startpoint startx="475" starty="-350"/>
<endpoint endy="-350" endx="136"/>
</linepath>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="1" x="450" xmi.id="uzD6rs0z6Gfwc" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" posttext="" fillcolor="none" localid="uTCYLOXHCXrbt" linecolor="#000000" textcolor="none" width="17" role="701" pretext="" autoresize="1" usesdiagramfillcolor="1" y="-324"/>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="*" x="176" xmi.id="uOg3hNCrEmntD" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" posttext="" fillcolor="none" localid="u1Qonqm4sbOuH" linecolor="#000000" textcolor="none" width="17" role="702" pretext="" autoresize="1" usesdiagramfillcolor="1" y="-322"/>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="activeUsers" x="176" xmi.id="uyuZtzt2Lqbxj" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" posttext="" fillcolor="none" localid="u2VsRs9c6nSKE" linecolor="#000000" textcolor="none" width="116" role="710" pretext="+" autoresize="1" usesdiagramfillcolor="1" y="-223"/>
</assocwidget>
<assocwidget seqnum="" type="510" widgetaid="uCZjTydUPQ1Jn" changeabilityB="900" linewidth="0" visibilityB="1" totalcounta="2" visibilityA="1" indexa="1" xmi.id="uyIBX9tSjiYsx" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uJhKpAX7ex7HJ" linecolor="#000000" widgetbid="u7lpPNe6in0pc" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1" changeabilityA="900">
<linepath layout="Direct">
<startpoint startx="-100" starty="-324"/>
<endpoint endy="-225" endx="-100"/>
</linepath>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="networkController" x="-200" xmi.id="uKmsNdiJouvtd" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" posttext="" fillcolor="none" localid="uwiWBwVS1324x" linecolor="#000000" textcolor="none" width="170" role="710" pretext="-" autoresize="1" usesdiagramfillcolor="1" y="-225"/>
</assocwidget>
<assocwidget seqnum="" type="510" widgetaid="uL87NkWKxdeZu" changeabilityB="900" linewidth="0" visibilityB="1" totalcounta="2" visibilityA="1" indexa="1" xmi.id="uys11jr9acw2f" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="u2HJXiRhZUPZD" linecolor="#000000" widgetbid="uYKRrg6CmRJAW" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1" changeabilityA="900">
<linepath layout="Direct">
<startpoint startx="1050" starty="-1325"/>
<endpoint endy="-1325" endx="1003"/>
</linepath>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="controller" x="1006" xmi.id="umrNzeuDIw024" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" posttext="" fillcolor="none" localid="uEvzYEFJq1gDh" linecolor="#000000" textcolor="none" width="107" role="710" pretext="-" autoresize="1" usesdiagramfillcolor="1" y="-1350"/>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="u2ydP9LaNavW9" linewidth="0" totalcounta="2" indexa="1" xmi.id="uz6iWtgv67vte" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="3" usefillcolor="1" fillcolor="none" localid="uUrJdnjcuTWkw" linecolor="#000000" widgetbid="uXJ6llv1PM3IG" textcolor="none" indexb="2" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-850" starty="-775"/>
<endpoint endy="-843" endx="-775"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="510" widgetaid="uMvgLuEK3MyVc" changeabilityB="900" linewidth="0" visibilityB="1" totalcounta="2" visibilityA="1" indexa="1" xmi.id="unZPfZl7jhR6L" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uvqL3j7XbNJpr" linecolor="#000000" widgetbid="uJLzR6QLuEycw" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1" changeabilityA="900">
<linepath layout="Direct">
<startpoint startx="-570.875" starty="-361"/>
<endpoint endy="75" endx="-570.875"/>
</linepath>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="db" x="-425" xmi.id="uZG1rQtyi46qM" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" posttext="" fillcolor="none" localid="ugggLu4FmAzm9" linecolor="#000000" textcolor="none" width="35" role="710" pretext="-" autoresize="1" usesdiagramfillcolor="1" y="133"/>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="ubdskIrDMId2M" linewidth="0" totalcounta="2" indexa="1" xmi.id="uyIhhxgr199MC" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uosZXUThMMibZ" linecolor="#000000" widgetbid="uMukxNtG4j8CL" textcolor="#000000" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="475" starty="-350"/>
<endpoint endy="-965" endx="314"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="ufU9jurmLpKD0" linewidth="0" totalcounta="2" indexa="1" xmi.id="ub3CHeL9So6yr" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="3" usefillcolor="1" fillcolor="none" localid="uf5AUMRZTG2oo" linecolor="#000000" widgetbid="uXJ6llv1PM3IG" textcolor="none" indexb="2" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-549" starty="-725"/>
<endpoint endy="-843" endx="-549"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="uB64HbD6AAD0Q" linewidth="0" totalcounta="2" indexa="1" xmi.id="ur8tKxW0c77Qe" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uwPWR47jikfGC" linecolor="#000000" widgetbid="uMukxNtG4j8CL" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="475" starty="-850"/>
<endpoint endy="-965" endx="314"/>
<point x="475" y="-875"/>
<point x="457" y="-965"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="uL87NkWKxdeZu" linewidth="0" totalcounta="2" indexa="1" xmi.id="uDDbAgSnisFrn" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uMbuN0Lj2JehW" linecolor="#000000" widgetbid="u04Qm3WZC4Dm7" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="1060.16" starty="-1350"/>
<endpoint endy="-1453" endx="1060.16"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="511" widgetaid="uYKRrg6CmRJAW" linewidth="0" totalcounta="2" indexa="1" xmi.id="uJJTFyagi4jzV" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uUAbkIrArJCEp" linecolor="#000000" widgetbid="uqtMdczmUK7dZ" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Orthogonal">
<startpoint startx="760.164" starty="-1325"/>
<endpoint endy="-1443" endx="760.164"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="uXJ6llv1PM3IG" linewidth="0" totalcounta="2" indexa="1" xmi.id="uCaKDoUGDAIOL" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="ukwJQqlFM55k8" linecolor="#000000" widgetbid="uMukxNtG4j8CL" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-549" starty="-900"/>
<endpoint endy="-965" endx="25"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="510" widgetaid="ubdskIrDMId2M" changeabilityB="900" linewidth="0" visibilityB="1" totalcounta="2" visibilityA="1" indexa="1" xmi.id="u49H8SEmPmGzU" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="u8FGCoFktKdDF" linecolor="#000000" widgetbid="uJLzR6QLuEycw" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1" changeabilityA="900">
<linepath layout="Direct">
<startpoint startx="475" starty="-160"/>
<endpoint endy="75" endx="-272"/>
</linepath>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="db" x="-179" xmi.id="ugHRJ9lG91AQ3" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="u6zRHY98xNsHN" linecolor="#000000" textcolor="none" width="28" role="710" pretext="-" autoresize="1" usesdiagramfillcolor="1" y="29"/>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="u7lpPNe6in0pc" linewidth="0" totalcounta="2" indexa="1" xmi.id="unuIHAbXkulHD" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="u9XJ6Xg3jjmFs" linecolor="#000000" widgetbid="ubVqOwF4sMNEQ" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-375" starty="-178.25"/>
<endpoint endy="-178.25" endx="-634"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="510" widgetaid="uYKRrg6CmRJAW" changeabilityB="900" linewidth="0" visibilityB="1" totalcounta="2" visibilityA="1" indexa="1" xmi.id="ugAEYxEUffkRe" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="u7Xp3AcgIf7Qj" linecolor="#000000" widgetbid="ubdskIrDMId2M" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1" changeabilityA="900">
<linepath layout="Direct">
<startpoint startx="821.67" starty="-1259"/>
<endpoint endy="-350" endx="821.67"/>
</linepath>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="users" x="811" xmi.id="unJzZzvaLqKFi" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uvQqlpH3nsNjX" linecolor="#000000" textcolor="none" width="45" role="710" pretext="-" autoresize="1" usesdiagramfillcolor="1" y="-350"/>
</assocwidget>
<assocwidget seqnum="" type="510" widgetaid="uYKRrg6CmRJAW" changeabilityB="900" linewidth="0" visibilityB="1" totalcounta="2" visibilityA="1" indexa="1" xmi.id="uQhNOdhGIR0uG" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="ukhm4Zadbz4j2" linecolor="#000000" widgetbid="u2ydP9LaNavW9" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1" changeabilityA="900">
<linepath layout="Orthogonal">
<startpoint startx="750" starty="-1259"/>
<endpoint endy="-775" endx="-1075"/>
<point x="725" y="-1225"/>
<point x="-1075" y="-1225"/>
</linepath>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="currentUser" x="-1312" xmi.id="u1aNJTwib6iYG" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="usklF6RJT9aNh" linecolor="#000000" textcolor="none" width="85" role="710" pretext="-" autoresize="1" usesdiagramfillcolor="1" y="-771"/>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="uJLzR6QLuEycw" linewidth="0" totalcounta="2" indexa="1" xmi.id="uWWNoRJHChTMZ" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uhsqrgxly43Yb" linecolor="#000000" widgetbid="ubVqOwF4sMNEQ" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-658.5" starty="75"/>
<endpoint endy="-140" endx="-658.5"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="510" widgetaid="ubdskIrDMId2M" changeabilityB="900" linewidth="0" visibilityB="1" totalcounta="2" visibilityA="1" indexa="1" xmi.id="u0pyt1q3GkiyH" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="usdNzIA7YL2Fn" linecolor="#000000" widgetbid="u7lpPNe6in0pc" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1" changeabilityA="900">
<linepath layout="Direct">
<startpoint startx="475" starty="-225"/>
<endpoint endy="-225" endx="121"/>
</linepath>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="network" x="134" xmi.id="ujG7t7FwK3TXm" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uJWuRjclk8Wjd" linecolor="#000000" textcolor="none" width="63" role="710" pretext="-" autoresize="1" usesdiagramfillcolor="1" y="-199"/>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="uMvgLuEK3MyVc" linewidth="0" totalcounta="2" indexa="1" xmi.id="uuA2mW6NMKAht" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="u10VAQ1CDUJIE" linecolor="#000000" widgetbid="uMukxNtG4j8CL" textcolor="#000000" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-450" starty="-475"/>
<endpoint endy="-965" endx="25"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="510" widgetaid="ufU9jurmLpKD0" changeabilityB="900" linewidth="0" visibilityB="2" totalcounta="2" visibilityA="2" indexa="1" xmi.id="uEd3zgxXoF6Nw" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="u1fwKPQHZ4MO9" linecolor="#000000" widgetbid="uMvgLuEK3MyVc" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1" changeabilityA="900">
<linepath layout="Direct">
<startpoint startx="-547.375" starty="-668"/>
<endpoint endy="-475" endx="-547.375"/>
</linepath>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="history" x="-620" xmi.id="uMwSB9u0QluYR" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" posttext="" fillcolor="none" localid="uDqak3GenpWUJ" linecolor="#000000" textcolor="none" width="80" role="710" pretext="#" autoresize="1" usesdiagramfillcolor="1" y="-475"/>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="uCZjTydUPQ1Jn" linewidth="0" totalcounta="2" indexa="1" xmi.id="uv7pw80GpGG60" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uxUjg6NUz7jtw" linecolor="#000000" widgetbid="ufU9jurmLpKD0" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-225" starty="-400"/>
<endpoint endy="-668" endx="-438"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="510" widgetaid="ubdskIrDMId2M" changeabilityB="900" linewidth="0" visibilityB="1" totalcounta="2" visibilityA="1" indexa="1" xmi.id="uCTmUvmY49sQm" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uf2HQAJtQKwOI" linecolor="#000000" widgetbid="ufU9jurmLpKD0" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1" changeabilityA="900">
<linepath layout="Direct">
<startpoint startx="475" starty="-350"/>
<endpoint endy="-668" endx="-438"/>
</linepath>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="inactiveUsers" x="-426" xmi.id="uZxcVzihuu9fW" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" posttext="" fillcolor="none" localid="uFLlnH4mPEyhQ" linecolor="#000000" textcolor="none" width="134" role="710" pretext="-" autoresize="1" usesdiagramfillcolor="1" y="-646"/>
</assocwidget>
</associations>
</diagram>
<diagram showopsig="1" type="3" showscope="1" canvasheight="878.639" linewidth="0" showops="1" showattribassocs="1" showpackage="1" showstereotype="1" snapgrid="1" canvaswidth="1022.5" xmi.id="uGaCUFgq8XYbv" snapy="25" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" isopen="0" usefillcolor="1" fillcolor="#ffffff" snapx="25" documentation="" showattsig="1" localid="-1" name="changeUsername" backgroundcolor="#ffffff" linecolor="#000000" showpubliconly="0" snapcsgrid="0" showatts="1" textcolor="#000000" showgrid="0" autoincrementsequence="0" zoom="69" griddotcolor="#36383e">
<widgets>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="-225" drawasactor="0" xmi.id="u2ydP9LaNavW9" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uD0Ja13OB0Dsj" decon="0" linecolor="#000000" textcolor="#000000" width="136" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<combinedFragmentwidget isinstance="0" linewidth="0" showstereotype="1" CombinedFragmenttype="7" x="-925" xmi.id="ur8pWcIbOVaa2" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="701.139" usefillcolor="1" fillcolor="#ffffff" localid="uKhhOMmCfOyQ9" documentation="" linecolor="#000000" combinedFragmentname="usernameAvailable" textcolor="#000000" width="1000" autoresize="0" usesdiagramfillcolor="0" y="250">
<floatingdashlinewidget minY="250" isinstance="0" linewidth="0" showstereotype="1" text="else" x="-925" xmi.id="u6zvqQh0Obmjf" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="20" usefillcolor="1" maxY="951.1392822265625" fillcolor="none" localid="uKttmy5ARTPeW" linecolor="#000000" textcolor="none" width="1000" autoresize="1" usesdiagramfillcolor="1" y="850"/>
</combinedFragmentwidget>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="-475" drawasactor="0" xmi.id="u7lpPNe6in0pc" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uN7sPaVzqcbWp" decon="0" linecolor="#000000" textcolor="#000000" width="190" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<combinedFragmentwidget isinstance="0" linewidth="0" showstereotype="1" CombinedFragmenttype="7" x="-900" xmi.id="u0y6jSVl9ipqS" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="397.42" usefillcolor="1" fillcolor="#ffffff" localid="uaJNrCQ8fYUfP" documentation="" linecolor="#000000" combinedFragmentname="requestSuccess" textcolor="#000000" width="962.099" autoresize="0" usesdiagramfillcolor="0" y="425">
<floatingdashlinewidget minY="425" isinstance="0" linewidth="0" showstereotype="1" text="else" x="-900" xmi.id="udCLmSHshu57F" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="20" usefillcolor="1" maxY="822.42034912109375" fillcolor="none" localid="uCL07lHVo6zUW" linecolor="#000000" textcolor="none" width="962" autoresize="1" usesdiagramfillcolor="1" y="625"/>
</combinedFragmentwidget>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="-925" drawasactor="0" xmi.id="uYKRrg6CmRJAW" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uMPfriSHgkcRL" decon="0" linecolor="#000000" textcolor="#000000" width="145" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="-50" drawasactor="0" xmi.id="uB64HbD6AAD0Q" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uF2y5mXg5j2Ys" decon="0" linecolor="#000000" textcolor="#000000" width="145" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="-650" drawasactor="0" xmi.id="ubdskIrDMId2M" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uVb0eCBnqdgPc" decon="0" linecolor="#000000" textcolor="#000000" width="109" autoresize="1" usesdiagramfillcolor="1" y="75"/>
</widgets>
<messages>
<messagewidget seqnum="" widgetaid="uMPfriSHgkcRL" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-852" xmi.id="uEMjmoujN5z4P" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="20" usefillcolor="1" fillcolor="none" localid="u5fzUaHsEtXQf" linecolor="#000000" widgetbid="uVb0eCBnqdgPc" textcolor="none" width="265" operation="uEMjmoujN5z4P" autoresize="1" usesdiagramfillcolor="1" y="149" textid="usGDKHKmagCJ3">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="isUsernameAvailable(username : String) : boolean" x="-847" xmi.id="usGDKHKmagCJ3" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="u37fJdypeY0Ov" linecolor="#000000" textcolor="none" width="312" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="127"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uMPfriSHgkcRL" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-852" xmi.id="uBdWTTWRUgfvA" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="80" usefillcolor="1" fillcolor="none" localid="u2oQVrkDKr4lZ" linecolor="#000000" widgetbid="uVb0eCBnqdgPc" textcolor="none" width="265" operation="uBdWTTWRUgfvA" autoresize="0" usesdiagramfillcolor="1" y="301" textid="uBNzoWdF8HKDW">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="propagateUsernameChange(username : String)" x="-847" xmi.id="uBNzoWdF8HKDW" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="u2OqnvDbold4t" linecolor="#000000" textcolor="none" width="298" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="279"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uVb0eCBnqdgPc" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-860" xmi.id="ud9sBsKvnymYY" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" fillcolor="none" localid="uPbOWs4dRTZCK" linecolor="#000000" widgetbid="uMPfriSHgkcRL" textcolor="none" width="265" operation="ud9sBsKvnymYY" autoresize="1" usesdiagramfillcolor="1" y="492.13" textid="uXePpBFmscJih">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="update(obs : undef, arg : Object)" x="-804" xmi.id="uXePpBFmscJih" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uMFOzIniuF5zA" linecolor="#000000" textcolor="none" width="204" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="470"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uVb0eCBnqdgPc" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1001" x="-594" xmi.id="uaKA49CvAGdR2" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="8" usefillcolor="1" fillcolor="none" localid="uDwyDSinR5bMt" linecolor="#000000" widgetbid="uN7sPaVzqcbWp" textcolor="none" width="213" operation="uaKA49CvAGdR2" autoresize="1" usesdiagramfillcolor="1" y="337" textid="u8fDzkv0gKwDe">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="sendBroadcast(message : String, callback : Callback)" x="-589" xmi.id="u8fDzkv0gKwDe" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="ufMGNpxfXTj5J" linecolor="#000000" textcolor="none" width="324" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="315"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uN7sPaVzqcbWp" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-603" xmi.id="uGNHIm92iwcLV" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="81" usefillcolor="1" fillcolor="none" localid="uFKPS1Nc8F6Os" linecolor="#000000" widgetbid="uVb0eCBnqdgPc" textcolor="none" width="223" operation="uGNHIm92iwcLV" autoresize="0" usesdiagramfillcolor="1" y="452.899" textid="uCeBy7qxNy9Cd">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="onUsernameChangePropagated()" x="-598" xmi.id="uCeBy7qxNy9Cd" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uddNOBz68YRjC" linecolor="#000000" textcolor="none" width="213" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="430"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uN7sPaVzqcbWp" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-380" xmi.id="umV4CeNUtgQsF" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="101" usefillcolor="1" fillcolor="none" localid="uGEA9g4x57DJn" linecolor="#000000" widgetbid="uF2y5mXg5j2Ys" textcolor="none" width="410" operation="umV4CeNUtgQsF" autoresize="0" usesdiagramfillcolor="1" y="675" textid="uc7YJLMZXwPtx">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="notifyError(error : Exception)" x="-200" xmi.id="uc7YJLMZXwPtx" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="u57MCQyisikci" linecolor="#000000" textcolor="none" width="182" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="653"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uF2y5mXg5j2Ys" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-860" xmi.id="ud9sBsKvnymYY" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" fillcolor="none" localid="uxr1iFREwFu5q" linecolor="#000000" widgetbid="uMPfriSHgkcRL" textcolor="none" width="882" operation="ud9sBsKvnymYY" autoresize="1" usesdiagramfillcolor="1" y="733.159" textid="uZNdXGqxOXDaw">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="update(obs : undef, arg : Object)" x="-187" xmi.id="uZNdXGqxOXDaw" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="u3s9VSms3d0F8" linecolor="#000000" textcolor="none" width="204" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="711"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uMPfriSHgkcRL" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-852" xmi.id="uACwUrs3R8BQS" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="20" usefillcolor="1" fillcolor="none" localid="uM1B1ClAOXBbu" linecolor="#000000" widgetbid="uD0Ja13OB0Dsj" textcolor="none" width="703" operation="uACwUrs3R8BQS" autoresize="0" usesdiagramfillcolor="1" y="576.185" textid="uf99NKxyiEcvD">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="changeUsername(username : String)" x="-575" xmi.id="uf99NKxyiEcvD" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="umjzYbrIKdhCf" linecolor="#000000" textcolor="none" width="232" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="554"/>
</messagewidget>
</messages>
<associations/>
</diagram>
<diagram showopsig="1" type="3" showscope="1" canvasheight="442.5" linewidth="0" showops="1" showattribassocs="1" showpackage="1" showstereotype="1" snapgrid="1" canvaswidth="970" xmi.id="ukSNp3b4DiBx2" snapy="25" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" isopen="0" usefillcolor="1" fillcolor="#ffffff" snapx="25" documentation="" showattsig="1" localid="-1" name="viewActiveUsers" backgroundcolor="#ffffff" linecolor="#000000" showpubliconly="0" snapcsgrid="0" showatts="1" textcolor="#000000" showgrid="0" autoincrementsequence="0" zoom="92" griddotcolor="#36383e">
<widgets>
<combinedFragmentwidget isinstance="0" linewidth="0" showstereotype="1" CombinedFragmenttype="7" x="-350" xmi.id="ukBpSKemjPwkY" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="315" usefillcolor="1" fillcolor="#ffffff" localid="uX46cR2E9TFmh" documentation="" linecolor="#000000" combinedFragmentname="requestSuccess" textcolor="#000000" width="926" autoresize="0" usesdiagramfillcolor="0" y="200">
<floatingdashlinewidget minY="200" isinstance="0" linewidth="0" showstereotype="1" text="else" x="-350" xmi.id="uP5Ys3wP9IEZy" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="20" usefillcolor="1" maxY="515" fillcolor="none" localid="uXlS5Wf70DF2w" linecolor="#000000" textcolor="none" width="926" autoresize="1" usesdiagramfillcolor="1" y="325"/>
</combinedFragmentwidget>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="450" drawasactor="0" xmi.id="uB64HbD6AAD0Q" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uQLdez58JQZRi" decon="0" linecolor="#000000" textcolor="#000000" width="145" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="0" drawasactor="0" xmi.id="ubdskIrDMId2M" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uzto3aHoluaA5" decon="0" linecolor="#000000" textcolor="#000000" width="109" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="-375" drawasactor="0" xmi.id="uYKRrg6CmRJAW" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uCliBVTjsDFw1" decon="0" linecolor="#000000" textcolor="#000000" width="145" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="200" drawasactor="0" xmi.id="u7lpPNe6in0pc" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uvHvgdJ8vUOE3" decon="0" linecolor="#000000" textcolor="#000000" width="190" autoresize="1" usesdiagramfillcolor="1" y="75"/>
</widgets>
<messages>
<messagewidget seqnum="" widgetaid="uvHvgdJ8vUOE3" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="46" xmi.id="uzntm57etBGuh" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="54" usefillcolor="1" fillcolor="none" localid="ujzlmUjG5YTfe" linecolor="#000000" widgetbid="uzto3aHoluaA5" textcolor="none" width="249" operation="uzntm57etBGuh" autoresize="0" usesdiagramfillcolor="1" y="239" textid="uAbKz3WUUdoBe">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="onActiverUserDiscovered(user : ActiveUser)" x="51" xmi.id="uAbKz3WUUdoBe" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uv26LCG3M0tcN" linecolor="#000000" textcolor="none" width="271" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="217"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uzto3aHoluaA5" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-310" xmi.id="ud9sBsKvnymYY" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" fillcolor="none" localid="ub4T7mYgveM8x" linecolor="#000000" widgetbid="uCliBVTjsDFw1" textcolor="none" width="364" operation="ud9sBsKvnymYY" autoresize="1" usesdiagramfillcolor="1" y="252.75" textid="ue2ZGreXqAmsd">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="update(obs : undef, arg : Object)" x="-175" xmi.id="ue2ZGreXqAmsd" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uAzViSYFdfIUV" linecolor="#000000" textcolor="none" width="204" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="230"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uvHvgdJ8vUOE3" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="295" xmi.id="umV4CeNUtgQsF" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="95" usefillcolor="1" fillcolor="none" localid="ulCKsyLxfUyAQ" linecolor="#000000" widgetbid="uQLdez58JQZRi" textcolor="none" width="235" operation="umV4CeNUtgQsF" autoresize="0" usesdiagramfillcolor="1" y="351" textid="uMl7dMIDJKLyM">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="notifyError(error : Exception)" x="300" xmi.id="uMl7dMIDJKLyM" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="ugltt3uecg7BR" linecolor="#000000" textcolor="none" width="182" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="329"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uCliBVTjsDFw1" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-302" xmi.id="uEB1ubPnfwbZn" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="20" usefillcolor="1" fillcolor="none" localid="uOpZt25jWts81" linecolor="#000000" widgetbid="uzto3aHoluaA5" textcolor="none" width="364" operation="uEB1ubPnfwbZn" autoresize="1" usesdiagramfillcolor="1" y="131" textid="umgC7MkDjGgO1">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="discoverActiveUsers()" x="-89" xmi.id="umgC7MkDjGgO1" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uNBcmrRpyOH7j" linecolor="#000000" textcolor="none" width="138" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="109"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uQLdez58JQZRi" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-310" xmi.id="ud9sBsKvnymYY" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" fillcolor="none" localid="u0HbVfAeOofJh" linecolor="#000000" widgetbid="uCliBVTjsDFw1" textcolor="none" width="832" operation="ud9sBsKvnymYY" autoresize="1" usesdiagramfillcolor="1" y="395.2" textid="uhyqxrFWyPADT">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="update(obs : undef, arg : Object)" x="0" xmi.id="uhyqxrFWyPADT" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="u622JEswQUXtd" linecolor="#000000" textcolor="none" width="204" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="373"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uzto3aHoluaA5" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1001" x="55" xmi.id="uaKA49CvAGdR2" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="8" usefillcolor="1" fillcolor="none" localid="ug8OTC2k5DJLz" linecolor="#000000" widgetbid="uvHvgdJ8vUOE3" textcolor="none" width="239" operation="uaKA49CvAGdR2" autoresize="1" usesdiagramfillcolor="1" y="145" textid="uLm6taw1wLaMw">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="sendBroadcast(message : String, callback : Callback)" x="60" xmi.id="uLm6taw1wLaMw" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uIN5THwfpV4jz" linecolor="#000000" textcolor="none" width="324" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="123"/>
</messagewidget>
</messages>
<associations/>
</diagram>
<diagram showopsig="1" type="3" showscope="1" canvasheight="551.5" linewidth="0" showops="1" showattribassocs="1" showpackage="1" showstereotype="1" snapgrid="1" canvaswidth="961" xmi.id="uMqzZUmyIqTmj" snapy="25" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" isopen="1" usefillcolor="1" fillcolor="#ffffff" snapx="25" documentation="" showattsig="1" localid="-1" name="viewMessageHistory" backgroundcolor="#ffffff" linecolor="#000000" showpubliconly="0" snapcsgrid="0" showatts="1" textcolor="#000000" showgrid="0" autoincrementsequence="0" zoom="86" griddotcolor="#36383e">
<widgets>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="-100" drawasactor="0" xmi.id="uMvgLuEK3MyVc" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uDfFsVgVAyNl8" decon="0" linecolor="#000000" textcolor="#000000" width="136" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="-350" drawasactor="0" xmi.id="uYKRrg6CmRJAW" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uKXjmZHs2njEB" decon="0" linecolor="#000000" textcolor="#000000" width="145" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<combinedFragmentwidget isinstance="0" linewidth="0" showstereotype="1" CombinedFragmenttype="7" x="-350" xmi.id="uI1TsUtyP8lXY" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="374" usefillcolor="1" fillcolor="#ffffff" localid="u5DY4Tzbr4IBh" documentation="" linecolor="#000000" combinedFragmentname="fetchSuccess" textcolor="#000000" width="956" autoresize="0" usesdiagramfillcolor="0" y="250">
<floatingdashlinewidget minY="250" isinstance="0" linewidth="0" showstereotype="1" text="else" x="-350" xmi.id="uxPMSXR2PUI3Q" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="20" usefillcolor="1" maxY="624" fillcolor="none" localid="uEay7M3SLxT4K" linecolor="#000000" textcolor="none" width="956" autoresize="1" usesdiagramfillcolor="1" y="450"/>
</combinedFragmentwidget>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="150" drawasactor="0" xmi.id="uJLzR6QLuEycw" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uWwVNq8ObGHJA" decon="0" linecolor="#000000" textcolor="#000000" width="199" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="400" drawasactor="0" xmi.id="uB64HbD6AAD0Q" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uTRTK0EDUgzj4" decon="0" linecolor="#000000" textcolor="#000000" width="145" autoresize="1" usesdiagramfillcolor="1" y="75"/>
</widgets>
<messages>
<messagewidget seqnum="" widgetaid="uKXjmZHs2njEB" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-277" xmi.id="ugbMpRixsT7LO" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="96" usefillcolor="1" fillcolor="none" localid="ubf5uY8TJMDhz" linecolor="#000000" widgetbid="uDfFsVgVAyNl8" textcolor="none" width="253" operation="ugbMpRixsT7LO" autoresize="0" usesdiagramfillcolor="1" y="143" textid="uVbQ6YMABZ6d7">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="refreshHistory()" x="-175" xmi.id="uVbQ6YMABZ6d7" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uiBUInv1jBAEi" linecolor="#000000" textcolor="none" width="103" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="121"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uTRTK0EDUgzj4" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-285" xmi.id="ud9sBsKvnymYY" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" fillcolor="none" localid="ugnHL9hjjfVM4" linecolor="#000000" widgetbid="uKXjmZHs2njEB" textcolor="none" width="757" operation="ud9sBsKvnymYY" autoresize="1" usesdiagramfillcolor="1" y="529" textid="ut1ZT2e5du38B">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="update(obs : undef, arg : Object)" x="0" xmi.id="ut1ZT2e5du38B" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="u3B3QDUevU47g" linecolor="#000000" textcolor="none" width="204" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="507"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uDfFsVgVAyNl8" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1001" x="-31" xmi.id="ushkUTs0K7LsU" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" fillcolor="none" localid="uOk9bS1EO0QWr" linecolor="#000000" widgetbid="uWwVNq8ObGHJA" textcolor="none" width="279" operation="ushkUTs0K7LsU" autoresize="1" usesdiagramfillcolor="1" y="192" textid="uH7Ta47WiFIAZ">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="getChatHistory(callback : HistoryCallback)" x="-17" xmi.id="uH7Ta47WiFIAZ" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uipy6GJCTApiC" linecolor="#000000" textcolor="none" width="261" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="170"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uWwVNq8ObGHJA" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="249" xmi.id="umV4CeNUtgQsF" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="82" usefillcolor="1" fillcolor="none" localid="u8Al2t8c2TVgs" linecolor="#000000" widgetbid="uTRTK0EDUgzj4" textcolor="none" width="231" operation="umV4CeNUtgQsF" autoresize="0" usesdiagramfillcolor="1" y="495" textid="uDrj21wMpgw3F">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="notifyError(error : Exception)" x="275" xmi.id="uDrj21wMpgw3F" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uDy3GB9ldrHcn" linecolor="#000000" textcolor="none" width="182" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="473"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uDfFsVgVAyNl8" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-285" xmi.id="ud9sBsKvnymYY" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" fillcolor="none" localid="uhYOpoJREfED4" linecolor="#000000" widgetbid="uKXjmZHs2njEB" textcolor="none" width="253" operation="ud9sBsKvnymYY" autoresize="1" usesdiagramfillcolor="1" y="324" textid="um1FkAdkzHFYv">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="update(obs : undef, arg : Object)" x="-241" xmi.id="um1FkAdkzHFYv" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uZm8H5HdehBHm" linecolor="#000000" textcolor="none" width="204" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="302"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uWwVNq8ObGHJA" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-40" xmi.id="utDwMOEL4fgkc" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="60" usefillcolor="1" fillcolor="none" localid="ufvWy0Z8vNNjW" linecolor="#000000" widgetbid="uDfFsVgVAyNl8" textcolor="none" width="289" operation="utDwMOEL4fgkc" autoresize="0" usesdiagramfillcolor="1" y="299" textid="uB7kCBf3nDyy1">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="onMessagesFetched()" x="75" xmi.id="uB7kCBf3nDyy1" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uLgQiORHyu1zf" linecolor="#000000" textcolor="none" width="140" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="277"/>
</messagewidget>
</messages>
<associations/>
</diagram>
<diagram showopsig="1" type="3" showscope="1" canvasheight="857.29" linewidth="0" showops="1" showattribassocs="1" showpackage="1" showstereotype="1" snapgrid="1" canvaswidth="1145" xmi.id="uQns1Cc1D8H8z" snapy="25" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" isopen="1" usefillcolor="1" fillcolor="#ffffff" snapx="25" documentation="" showattsig="1" localid="-1" name="sendMessage" backgroundcolor="#ffffff" linecolor="#000000" showpubliconly="0" snapcsgrid="0" showatts="1" textcolor="#000000" showgrid="0" autoincrementsequence="0" zoom="62" griddotcolor="#36383e">
<widgets>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="-300" drawasactor="0" xmi.id="uCZjTydUPQ1Jn" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uMJJiFtN5KWUD" decon="0" linecolor="#000000" textcolor="#000000" width="127" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="500" drawasactor="0" xmi.id="uB64HbD6AAD0Q" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uHhtGT77c8jfR" decon="0" linecolor="#000000" textcolor="#000000" width="145" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="-125" drawasactor="0" xmi.id="u7lpPNe6in0pc" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="u9Mp3QlPUScZQ" decon="0" linecolor="#000000" textcolor="#000000" width="190" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="-500" drawasactor="0" xmi.id="uYKRrg6CmRJAW" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uH5v1fN59O1Xy" decon="0" linecolor="#000000" textcolor="#000000" width="145" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<combinedFragmentwidget isinstance="0" linewidth="0" showstereotype="1" CombinedFragmenttype="7" x="-475" xmi.id="ueMhzU7K9KzSZ" usesdiagramusefillcolor="0" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="629.79" usefillcolor="1" fillcolor="#ffffff" localid="uAWtWiBmdkUmy" documentation="" linecolor="#000000" combinedFragmentname="requestSuccess" textcolor="#000000" width="1000" autoresize="0" usesdiagramfillcolor="0" y="300">
<floatingdashlinewidget minY="300" isinstance="0" linewidth="0" showstereotype="1" text="else" x="-475" xmi.id="ucDDgToNwS7JY" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="20" usefillcolor="1" maxY="929.79022216796875" fillcolor="none" localid="ukHZlDNjgI742" linecolor="#000000" textcolor="none" width="1000" autoresize="1" usesdiagramfillcolor="1" y="700"/>
</combinedFragmentwidget>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="275" drawasactor="0" xmi.id="uJLzR6QLuEycw" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="uh0RWpvrmBzJX" decon="0" linecolor="#000000" textcolor="#000000" width="199" autoresize="1" usesdiagramfillcolor="1" y="75"/>
<objectwidget isinstance="0" linewidth="0" showstereotype="1" multipleinstance="0" x="100" drawasactor="0" xmi.id="uMvgLuEK3MyVc" usesdiagramusefillcolor="1" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" height="29" usefillcolor="1" fillcolor="none" localid="usPliqjI191i4" decon="0" linecolor="#000000" textcolor="#000000" width="136" autoresize="1" usesdiagramfillcolor="1" y="75"/>
</widgets>
<messages>
<messagewidget seqnum="" widgetaid="u9Mp3QlPUScZQ" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-244" xmi.id="uXDRTyUZxXDCv" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="136" usefillcolor="1" fillcolor="none" localid="unlDk2hqVrgra" linecolor="#000000" widgetbid="uMJJiFtN5KWUD" textcolor="none" width="214" operation="uXDRTyUZxXDCv" autoresize="0" usesdiagramfillcolor="1" y="349.056" textid="uHaMpaPs1Vg9n">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="onMessageSent(message : Message)" x="-239" xmi.id="uHaMpaPs1Vg9n" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uNqMEEi2yegBu" linecolor="#000000" textcolor="none" width="232" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="327"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="usPliqjI191i4" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-435" xmi.id="ud9sBsKvnymYY" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" fillcolor="none" localid="u1rmPCIzQFt54" linecolor="#000000" widgetbid="uH5v1fN59O1Xy" textcolor="none" width="603" operation="ud9sBsKvnymYY" autoresize="1" usesdiagramfillcolor="1" y="559.931" textid="ulq5oPC0ueqWG">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="update(obs : undef, arg : Object)" x="-41" xmi.id="ulq5oPC0ueqWG" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="ulUBsO19q0pvz" linecolor="#000000" textcolor="none" width="204" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="537"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="u9Mp3QlPUScZQ" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-30" xmi.id="uZyd650tdtLjH" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="59" usefillcolor="1" fillcolor="none" localid="u5KtYU8QlNMUo" linecolor="#000000" widgetbid="usPliqjI191i4" textcolor="none" width="206" operation="uZyd650tdtLjH" autoresize="0" usesdiagramfillcolor="1" y="395.667" textid="ualKvMmUBq37d">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="addMessage(message : Message)" x="-25" xmi.id="ualKvMmUBq37d" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="umJszqR6YvE9b" linecolor="#000000" textcolor="none" width="212" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="373"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uh0RWpvrmBzJX" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="160" xmi.id="uEYZepdrLKW3I" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="109" usefillcolor="1" fillcolor="none" localid="uXB1ye0UQy5Hz" linecolor="#000000" widgetbid="usPliqjI191i4" textcolor="none" width="214" operation="uEYZepdrLKW3I" autoresize="0" usesdiagramfillcolor="1" y="501.833" textid="uZrbejyA8kES3">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="onMessageSaved(message : Message)" x="165" xmi.id="uZrbejyA8kES3" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uckbEvAfFZnwZ" linecolor="#000000" textcolor="none" width="241" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="479"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uHhtGT77c8jfR" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-435" xmi.id="ud9sBsKvnymYY" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="20" usefillcolor="1" fillcolor="none" localid="uXeMUahoJdDbG" linecolor="#000000" widgetbid="uH5v1fN59O1Xy" textcolor="none" width="1007" operation="ud9sBsKvnymYY" autoresize="0" usesdiagramfillcolor="1" y="812.734" textid="us2rqGbUgUv9E">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="update(obs : undef, arg : Object)" x="0" xmi.id="us2rqGbUgUv9E" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uWfW5Rt9uRt44" linecolor="#000000" textcolor="none" width="204" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="790"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="u9Mp3QlPUScZQ" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-30" xmi.id="umV4CeNUtgQsF" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="89" usefillcolor="1" fillcolor="none" localid="upHCGdehO37HS" linecolor="#000000" widgetbid="uHhtGT77c8jfR" textcolor="none" width="610" operation="umV4CeNUtgQsF" autoresize="0" usesdiagramfillcolor="1" y="753.949" textid="u5Hv7SSZyhv1A">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="notifyError(error : Exception)" x="275" xmi.id="u5Hv7SSZyhv1A" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uMG3tI3jLl1xm" linecolor="#000000" textcolor="none" width="182" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="731"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uMJJiFtN5KWUD" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1001" x="-235" xmi.id="usL1ETu7nxBtZ" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" fillcolor="none" localid="uWybO66fKTJuu" linecolor="#000000" widgetbid="u9Mp3QlPUScZQ" textcolor="none" width="204" operation="usL1ETu7nxBtZ" autoresize="1" usesdiagramfillcolor="1" y="267.333" textid="uXTv3pMOzetvK">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="sendMessage(message : Message, callback : Callback)" x="-230" xmi.id="uXTv3pMOzetvK" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uajIfc19pc9wK" linecolor="#000000" textcolor="none" width="335" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="245"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="uH5v1fN59O1Xy" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1000" x="-427" xmi.id="uXXG5jiBZ5uah" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="63" usefillcolor="1" fillcolor="none" localid="uWSAWvH8OA1sr" linecolor="#000000" widgetbid="uMJJiFtN5KWUD" textcolor="none" width="199" operation="uXXG5jiBZ5uah" autoresize="0" usesdiagramfillcolor="1" y="227" textid="urtFZA3FfOeyg">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="sendMessage(message : Message)" x="-422" xmi.id="urtFZA3FfOeyg" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uP8Ugod0EVzv3" linecolor="#000000" textcolor="none" width="218" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="205"/>
</messagewidget>
<messagewidget seqnum="" widgetaid="usPliqjI191i4" isinstance="0" linewidth="0" showstereotype="1" sequencemessagetype="1001" x="169" xmi.id="uSigkdDAzyCXE" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="23" usefillcolor="1" fillcolor="none" localid="upvZrkKsp0411" linecolor="#000000" widgetbid="uh0RWpvrmBzJX" textcolor="none" width="204" operation="uSigkdDAzyCXE" autoresize="1" usesdiagramfillcolor="1" y="427.389" textid="uY8R5zNnBogpV">
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="addMessage(message : Message, callback : Callback)" x="174" xmi.id="uY8R5zNnBogpV" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uXcxCP7Bb0Bar" linecolor="#000000" textcolor="none" width="328" role="704" pretext="" autoresize="1" usesdiagramfillcolor="1" y="405"/>
</messagewidget>
</messages>
<associations/>
</diagram>
</diagrams>
</XMI.extension>
</UML:Model>
<UML:Model name="Use Case View" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="m1" xmi.id="Use_Case_View">
<UML:Namespace.ownedElement>
<UML:Actor name="user" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="uPSuMIiWs9jIU"/>
<UML:UseCase name="sendMessage" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="uj5GeNcPHC9zx"/>
<UML:UseCase name="receiveMessages" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="uSmlf4XkA0Tsr"/>
<UML:UseCase name="viewMessageHistory" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="u7ki3DxahYlI6"/>
<UML:UseCase name="changeUsername" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="uPmNmbygHuiXm"/>
<UML:UseCase name="viewActiveUsers" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="umB1eZfkvjWFc"/>
<UML:Association name="" visibility="public" isSpecification="false" namespace="Use_Case_View" xmi.id="u2k4HBG5v4g8q">
<UML:Association.connection>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uPSuMIiWs9jIU" xmi.id="u63oPtE0Lafka"/>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uPmNmbygHuiXm" xmi.id="uslLbJG4tT3tZ"/>
</UML:Association.connection>
</UML:Association>
<UML:Association name="" visibility="public" isSpecification="false" namespace="Use_Case_View" xmi.id="uHQfz6vgPc7gu">
<UML:Association.connection>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uPSuMIiWs9jIU" xmi.id="uFPp9ojHVGy2X"/>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uj5GeNcPHC9zx" xmi.id="u8BNQO95LqGT4"/>
</UML:Association.connection>
</UML:Association>
<UML:Association name="" visibility="public" isSpecification="false" namespace="Use_Case_View" xmi.id="ua5GjcIQNy3VO">
<UML:Association.connection>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uPSuMIiWs9jIU" xmi.id="utHZ2kBDMLXyZ"/>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uSmlf4XkA0Tsr" xmi.id="u9eW5I1K8e5vR"/>
</UML:Association.connection>
</UML:Association>
<UML:Association name="" visibility="public" isSpecification="false" namespace="Use_Case_View" xmi.id="u9gFY2nWA2tjn">
<UML:Association.connection>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uPSuMIiWs9jIU" xmi.id="u5Xjzn2pdDKjy"/>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="u7ki3DxahYlI6" xmi.id="uDChN8FFpWPuJ"/>
</UML:Association.connection>
</UML:Association>
<UML:Association name="" visibility="public" isSpecification="false" namespace="Use_Case_View" xmi.id="un7jbdHJAdjbs">
<UML:Association.connection>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uPSuMIiWs9jIU" xmi.id="uearmN2ROlnKg"/>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="umB1eZfkvjWFc" xmi.id="uPkkMxTYSfAqX"/>
</UML:Association.connection>
</UML:Association>
<UML:UseCase name="checkUsernameAvailability" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="uJrPCFgp9ZKpk"/>
<UML:UseCase name="connectUser" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="uRPwu0FLBcUPK"/>
<UML:Dependency name="" visibility="public" client="uj5GeNcPHC9zx" supplier="uRPwu0FLBcUPK" isSpecification="false" namespace="Use_Case_View" xmi.id="u0S05PQ3Cl0TI"/>
<UML:Dependency name="" visibility="public" client="uSmlf4XkA0Tsr" supplier="uRPwu0FLBcUPK" isSpecification="false" namespace="Use_Case_View" xmi.id="unQDWZWtGFOL6"/>
<UML:Association name="include" visibility="public" isSpecification="false" namespace="Use_Case_View" xmi.id="uWTkjnO0pEPHS">
<UML:Association.connection>
<UML:AssociationEnd name="" aggregation="none" isNavigable="false" visibility="public" isSpecification="false" changeability="changeable" type="uPmNmbygHuiXm" xmi.id="ustTWDUimOw5T"/>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uJrPCFgp9ZKpk" xmi.id="uJrYnFjznjE4y"/>
</UML:Association.connection>
</UML:Association>
<UML:Association name="« include »" visibility="public" isSpecification="false" namespace="Use_Case_View" xmi.id="uDMA4JNfxQj1T">
<UML:Association.connection>
<UML:AssociationEnd name="" aggregation="none" isNavigable="false" visibility="public" isSpecification="false" changeability="changeable" type="uPmNmbygHuiXm" xmi.id="uYfwwPzC70mrW"/>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uJrPCFgp9ZKpk" xmi.id="usDvBlZrO9HkA"/>
</UML:Association.connection>
</UML:Association>
<UML:Dependency name="" visibility="public" client="uSmlf4XkA0Tsr" supplier="uRPwu0FLBcUPK" isSpecification="false" namespace="Use_Case_View" xmi.id="uprMUgi8HFKkF"/>
<UML:Association name="« include »" visibility="public" isSpecification="false" namespace="Use_Case_View" xmi.id="ue7l1TnA4F6S8">
<UML:Association.connection>
<UML:AssociationEnd name="" aggregation="none" isNavigable="false" visibility="public" isSpecification="false" changeability="changeable" type="uj5GeNcPHC9zx" xmi.id="ubbT0r4W2tyUH"/>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uRPwu0FLBcUPK" xmi.id="uf7laCu2GaFX7"/>
</UML:Association.connection>
</UML:Association>
<UML:Association name="« include »" visibility="public" isSpecification="false" namespace="Use_Case_View" xmi.id="unbciXgVmVCIK">
<UML:Association.connection>
<UML:AssociationEnd name="" aggregation="none" isNavigable="false" visibility="public" isSpecification="false" changeability="changeable" type="uSmlf4XkA0Tsr" xmi.id="ugl5IxZCVarwJ"/>
<UML:AssociationEnd name="" aggregation="none" isNavigable="true" visibility="public" isSpecification="false" changeability="changeable" type="uRPwu0FLBcUPK" xmi.id="uCrgb1P6cjRJT"/>
</UML:Association.connection>
</UML:Association>
<UML:UseCase name="sendText" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="uzeM2B6YEkfL0"/>
<UML:UseCase name="sendImage" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="uwztC8xg9yTsa"/>
<UML:UseCase name="sendFile" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="uDTktcuCOB1PC"/>
<UML:Generalization name="" parent="uj5GeNcPHC9zx" visibility="public" isSpecification="false" namespace="Use_Case_View" discriminator="" xmi.id="uHjFsI6qP4AYY" child="uzeM2B6YEkfL0"/>
<UML:Generalization name="" parent="uj5GeNcPHC9zx" visibility="public" isSpecification="false" namespace="Use_Case_View" discriminator="" xmi.id="uqmLeLuQ6YPgC" child="uwztC8xg9yTsa"/>
<UML:Generalization name="" parent="uj5GeNcPHC9zx" visibility="public" isSpecification="false" namespace="Use_Case_View" discriminator="" xmi.id="uN3usxOkgNa2m" child="uDTktcuCOB1PC"/>
<UML:UseCase name="receiveText" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="u2aJU0CMghED6"/>
<UML:UseCase name="receiveImage" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="uHAwwLrm4munZ"/>
<UML:UseCase name="receiveFile" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="u45tOlitmo7xr"/>
<UML:Generalization name="" parent="u2aJU0CMghED6" visibility="public" isSpecification="false" namespace="Use_Case_View" discriminator="" xmi.id="uNkTl1NlsTkj8" child="uSmlf4XkA0Tsr"/>
<UML:Generalization name="" parent="uHAwwLrm4munZ" visibility="public" isSpecification="false" namespace="Use_Case_View" discriminator="" xmi.id="uniiETH3SqQEI" child="uSmlf4XkA0Tsr"/>
<UML:Generalization name="" parent="uSmlf4XkA0Tsr" visibility="public" isSpecification="false" namespace="Use_Case_View" discriminator="" xmi.id="ukf15Qvn57PMB" child="u2aJU0CMghED6"/>
<UML:Generalization name="" parent="uSmlf4XkA0Tsr" visibility="public" isSpecification="false" namespace="Use_Case_View" discriminator="" xmi.id="u7c0OqjyRxCkL" child="uHAwwLrm4munZ"/>
<UML:Generalization name="" parent="uSmlf4XkA0Tsr" visibility="public" isSpecification="false" namespace="Use_Case_View" discriminator="" xmi.id="uepZqycjBUi9z" child="u45tOlitmo7xr"/>
<UML:Actor name="other users*" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="Use_Case_View" xmi.id="uV1yXcArN3UEJ"/>
</UML:Namespace.ownedElement>
<XMI.extension xmi.extender="umbrello">
<diagrams resolution="96">
<diagram showopsig="1" type="2" showscope="1" canvasheight="622.122" linewidth="0" showops="1" showattribassocs="1" showpackage="1" showstereotype="1" snapgrid="0" canvaswidth="837.781" xmi.id="uKSxQosg9FbWz" snapy="25" font="JetBrains Mono,11,-1,5,50,0,0,0,0,0,Regular" isopen="0" usefillcolor="1" fillcolor="#ffffff" snapx="25" documentation="" showattsig="1" localid="-1" name="use case" backgroundcolor="#ffffff" linecolor="#000000" showpubliconly="0" snapcsgrid="0" showatts="1" textcolor="#000000" showgrid="0" zoom="81" griddotcolor="#36383e">
<widgets>
<actorwidget x="-887.115" showstereotype="1" width="117.32" localid="uuFIFrvU380GD" autoresize="0" usesdiagramfillcolor="0" height="117.32" linecolor="#000000" usesdiagramusefillcolor="0" fillcolor="#ffffff" isinstance="0" linewidth="0" usefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" y="-56.9256" xmi.id="uPSuMIiWs9jIU" textcolor="#000000"/>
<boxwidget x="-711.712" showstereotype="1" width="662.378" localid="ujiIBpdNO0SWg" autoresize="0" usesdiagramfillcolor="0" height="622.122" linecolor="#000000" usesdiagramusefillcolor="0" fillcolor="#ffffff" isinstance="0" linewidth="0" usefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" y="-265.257" xmi.id="udzFBpgmt9Rar" textcolor="#000000"/>
<usecasewidget x="-301.809" showstereotype="1" width="87" localid="uNDLgZwTL81nZ" autoresize="1" usesdiagramfillcolor="0" height="53" linecolor="#000000" usesdiagramusefillcolor="0" fillcolor="#ffffff" isinstance="0" linewidth="0" usefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" y="85.4308" xmi.id="uRPwu0FLBcUPK" textcolor="#000000"/>
<usecasewidget x="-180.655" showstereotype="1" width="70" localid="uyox5IivZNSDf" autoresize="1" usesdiagramfillcolor="0" height="53" linecolor="#000000" usesdiagramusefillcolor="0" fillcolor="#ffffff" isinstance="0" linewidth="0" usefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" y="-122.901" xmi.id="uzeM2B6YEkfL0" textcolor="#000000"/>
<usecasewidget x="-190.856" showstereotype="1" width="70" localid="uyVS48740zL03" autoresize="1" usesdiagramfillcolor="0" height="53" linecolor="#000000" usesdiagramusefillcolor="0" fillcolor="#ffffff" isinstance="0" linewidth="0" usefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" y="26.0536" xmi.id="uDTktcuCOB1PC" textcolor="#000000"/>
<usecasewidget x="-479.603" showstereotype="1" width="98.9293" localid="u2i2swex4N2Tl" autoresize="0" usesdiagramfillcolor="0" height="53" linecolor="#000000" usesdiagramusefillcolor="0" fillcolor="#ffffff" isinstance="0" linewidth="0" usefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" y="-54.8367" xmi.id="uj5GeNcPHC9zx" textcolor="#000000"/>
<usecasewidget x="-175.985" showstereotype="1" width="79" localid="uJm4A27YPsvP7" autoresize="1" usesdiagramfillcolor="0" height="53" linecolor="#000000" usesdiagramusefillcolor="0" fillcolor="#ffffff" isinstance="0" linewidth="0" usefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" y="-48.9734" xmi.id="uwztC8xg9yTsa" textcolor="#000000"/>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="Clavardator-3000 PRO Lite" x="-700.34" xmi.id="uGZ1kgrsMbtJQ" usesdiagramusefillcolor="0" font="Comfortaa,16,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="#ffffff" localid="uXkjpUzM3v3pf" linecolor="#000000" textcolor="#000000" width="168" role="700" pretext="" autoresize="1" usesdiagramfillcolor="0" y="-258.526"/>
<usecasewidget x="-492.507" showstereotype="1" width="119" localid="ucDbXTtbgfaEh" autoresize="1" usesdiagramfillcolor="0" height="53" linecolor="#000000" usesdiagramusefillcolor="0" fillcolor="#ffffff" isinstance="0" linewidth="0" usefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" y="-223.022" xmi.id="uPmNmbygHuiXm" textcolor="#000000"/>
<usecasewidget x="-521.705" showstereotype="1" width="109" localid="u2ZQiET8JNrC1" autoresize="1" usesdiagramfillcolor="0" height="53" linecolor="#000000" usesdiagramusefillcolor="0" fillcolor="#ffffff" isinstance="0" linewidth="0" usefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" y="222.259" xmi.id="umB1eZfkvjWFc" textcolor="#000000"/>
<usecasewidget x="-529.569" showstereotype="1" width="137" localid="uqXa4Riwvx7os" autoresize="1" usesdiagramfillcolor="0" height="53" linecolor="#000000" usesdiagramusefillcolor="0" fillcolor="#ffffff" isinstance="0" linewidth="0" usefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" y="121.949" xmi.id="u7ki3DxahYlI6" textcolor="#000000"/>
</widgets>
<messages/>
<associations>
<assocwidget seqnum="" type="500" widgetaid="uwztC8xg9yTsa" linewidth="0" totalcounta="2" indexa="1" xmi.id="uqmLeLuQ6YPgC" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="upUCtFlShSIpA" linecolor="#000000" widgetbid="uj5GeNcPHC9zx" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-175.985" starty="-17.9684"/>
<endpoint endy="-17.9684" endx="-380.674"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="uDTktcuCOB1PC" linewidth="0" totalcounta="2" indexa="1" xmi.id="uN3usxOkgNa2m" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="utX4GzrhOylOX" linecolor="#000000" widgetbid="uj5GeNcPHC9zx" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-190.856" starty="26.0536"/>
<endpoint endy="-1.8367" endx="-380.674"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="500" widgetaid="uzeM2B6YEkfL0" linewidth="0" totalcounta="2" indexa="1" xmi.id="uHjFsI6qP4AYY" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uaJfwzZurCbcg" linecolor="#000000" widgetbid="uj5GeNcPHC9zx" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-180.655" starty="-69.901"/>
<endpoint endy="-54.8367" endx="-380.674"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="503" widgetaid="uPSuMIiWs9jIU" linewidth="0" totalcounta="2" indexa="1" xmi.id="un7jbdHJAdjbs" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uTr8zMyGJaPU3" linecolor="#000000" widgetbid="umB1eZfkvjWFc" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-769.795" starty="60.3944"/>
<endpoint endy="222.259" endx="-521.705"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="512" widgetaid="uj5GeNcPHC9zx" linewidth="0" totalcounta="2" indexa="1" xmi.id="ue7l1TnA4F6S8" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uJs1AJfz1AI6r" linecolor="#000000" widgetbid="uRPwu0FLBcUPK" textcolor="#000000" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-380.674" starty="-1.8367"/>
<endpoint endy="85.4308" endx="-301.809"/>
</linepath>
<floatingtext isinstance="0" linewidth="0" showstereotype="1" text="« include »" x="-409.901" xmi.id="uqxmPhVH1NTou" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" height="22" usefillcolor="1" posttext="" fillcolor="none" localid="uipuWYvPFGJZb" linecolor="#000000" textcolor="none" width="72" role="703" pretext="" autoresize="1" usesdiagramfillcolor="1" y="44.0706"/>
</assocwidget>
<assocwidget seqnum="" type="503" widgetaid="uPSuMIiWs9jIU" linewidth="0" totalcounta="2" indexa="1" xmi.id="uHQfz6vgPc7gu" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="u6xwaNdEovRPH" linecolor="#000000" widgetbid="uj5GeNcPHC9zx" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-769.795" starty="-17.9684"/>
<endpoint endy="-17.9684" endx="-479.603"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="503" widgetaid="uPSuMIiWs9jIU" linewidth="0" totalcounta="2" indexa="1" xmi.id="u9gFY2nWA2tjn" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="umazzOmogJLbG" linecolor="#000000" widgetbid="u7ki3DxahYlI6" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-769.795" starty="60.3944"/>
<endpoint endy="121.949" endx="-529.569"/>
</linepath>
</assocwidget>
<assocwidget seqnum="" type="503" widgetaid="uPSuMIiWs9jIU" linewidth="0" totalcounta="2" indexa="1" xmi.id="u2k4HBG5v4g8q" usesdiagramusefillcolor="1" font="Noto Sans,10,-1,0,50,0,0,0,0,0,Regular" totalcountb="2" usefillcolor="1" fillcolor="none" localid="uCxVpSzXx4TgN" linecolor="#000000" widgetbid="uPmNmbygHuiXm" textcolor="none" indexb="1" autoresize="1" usesdiagramfillcolor="1">
<linepath layout="Direct">
<startpoint startx="-769.795" starty="-56.9256"/>
<endpoint endy="-170.022" endx="-492.507"/>
</linepath>
</assocwidget>
</associations>
</diagram>
</diagrams>
</XMI.extension>
</UML:Model>
<UML:Model name="Component View" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="m1" xmi.id="Component_View">
<UML:Namespace.ownedElement/>
</UML:Model>
<UML:Model name="Deployment View" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="m1" xmi.id="Deployment_View">
<UML:Namespace.ownedElement/>
</UML:Model>
<UML:Model name="Entity Relationship Model" isAbstract="false" visibility="public" isSpecification="false" isLeaf="false" isRoot="false" namespace="m1" xmi.id="Entity_Relationship_Model">
<UML:Namespace.ownedElement/>
</UML:Model>
</UML:Namespace.ownedElement>
</UML:Model>
</XMI.content>
<XMI.extensions xmi.extender="umbrello">
<docsettings documentation="" uniqueid="u49Z5gm6mYWCE" viewid="uVu7uqEenPeYW"/>
<listview>
<listitem open="1" type="800" id="Views">
<listitem open="1" type="821" id="Component_View"/>
<listitem open="1" type="827" id="Deployment_View"/>
<listitem open="1" type="836" id="Entity_Relationship_Model"/>
<listitem open="1" type="801" id="Logical_View">
<listitem open="1" type="813" id="uCZjTydUPQ1Jn">
<listitem open="0" type="814" id="uyIBX9tSjiYsx"/>
<listitem open="0" type="815" id="uXDRTyUZxXDCv"/>
<listitem open="0" type="815" id="uXXG5jiBZ5uah"/>
</listitem>
<listitem open="1" type="813" id="u04Qm3WZC4Dm7">
<listitem open="0" type="815" id="usmiQ4UnkVvOa"/>
</listitem>
<listitem open="1" type="813" id="uGoMRG7f9P0cG"/>
<listitem open="1" type="813" id="uHHtYzLw61Ywa"/>
<listitem open="1" type="813" id="uavPXrvQlWUv4"/>
<listitem open="0" label="changeUsername" type="810" id="uGaCUFgq8XYbv"/>
<listitem open="1" type="813" id="uMvgLuEK3MyVc">
<listitem open="0" type="815" id="uZyd650tdtLjH"/>
<listitem open="0" type="814" id="unZPfZl7jhR6L"/>
<listitem open="0" type="815" id="uEYZepdrLKW3I"/>
<listitem open="0" type="815" id="utDwMOEL4fgkc"/>
<listitem open="0" type="815" id="ugbMpRixsT7LO"/>
</listitem>
<listitem open="0" label="class diagram" type="807" id="uVu7uqEenPeYW"/>
<listitem open="1" type="813" id="u2ydP9LaNavW9">
<listitem open="0" type="815" id="uACwUrs3R8BQS"/>
</listitem>
<listitem open="1" type="813" id="uJLzR6QLuEycw">
<listitem open="0" type="815" id="uSigkdDAzyCXE"/>
<listitem open="0" type="815" id="u3YiQSRK59Hi5"/>
<listitem open="0" type="815" id="ushkUTs0K7LsU"/>
</listitem>
<listitem open="0" type="830" id="Datatypes">
<listitem open="0" type="829" id="uuXBZMoYOYSaM"/>
<listitem open="1" type="829" id="uNCMLbwou3joQ"/>
<listitem open="1" type="829" id="uq7gti6DTLbuk"/>
<listitem open="1" type="829" id="uVu06m9mlUXrE"/>
<listitem open="1" type="829" id="ulREkeqZpp0ao"/>
<listitem open="0" type="829" id="uchsEHkyw0mhl"/>
<listitem open="1" type="829" id="uyOiLtMiZ2jHc"/>
<listitem open="1" type="829" id="uIpZjHlEoz0Vt"/>
<listitem open="0" type="829" id="uYCPKCjlSdVhN"/>
<listitem open="1" type="829" id="uKOoyaASEX8q0"/>
<listitem open="0" type="829" id="uBBNaShXZBKQT"/>
<listitem open="1" type="829" id="uC3FLBfLgDEhN"/>
<listitem open="0" type="829" id="uWQiowYe4nFaZ"/>
<listitem open="1" type="829" id="uge2sGQAz2ASh"/>
<listitem open="1" type="829" id="uX6Df51OAZt5R"/>
<listitem open="1" type="829" id="uLnJvHDyRVRio"/>
<listitem open="0" type="829" id="uLpUkzAJOaLSx"/>
<listitem open="0" type="829" id="u5R4kCxRJFgvc"/>
<listitem open="1" type="829" id="uWara7WKgmI2M"/>
<listitem open="1" type="829" id="uk0VwLxmv6yPv"/>
<listitem open="1" type="829" id="uAvbnwAb5DRkV"/>
<listitem open="0" type="829" id="uHGWk4b2dl7Ai"/>
<listitem open="0" type="829" id="ugBgYZ4m7Hzug"/>
<listitem open="0" type="829" id="uEyGiyPL3pt24"/>
<listitem open="0" type="829" id="ut0ufObD1Lxax"/>
<listitem open="0" type="829" id="usMRW6EYizS4L"/>
<listitem open="0" type="829" id="unPFzh6A5OwZ2"/>
<listitem open="1" type="829" id="urG82CYprwXM8"/>
<listitem open="1" type="829" id="uTVshVpYK1LCz"/>
<listitem open="1" type="829" id="u0i1FB6SsYSvy"/>
<listitem open="1" type="829" id="ux25YPKkHHPLY"/>
<listitem open="0" type="829" id="u0w2NtfM1frzy"/>
<listitem open="0" type="829" id="upB9uN8iNuj5J"/>
<listitem open="0" type="829" id="ukvcoZUurK4H4"/>
<listitem open="0" type="829" id="uvIVjxSQ633RP"/>
<listitem open="0" type="829" id="ul1iiaDWY4Q8k"/>
<listitem open="0" type="829" id="uEYLz1VvWjMoL"/>
</listitem>
<listitem open="1" type="813" id="uz0vg84Fk7MY0"/>
<listitem open="1" type="813" id="uB64HbD6AAD0Q">
<listitem open="0" type="815" id="umV4CeNUtgQsF"/>
</listitem>
<listitem open="1" type="813" id="u9VFYVmCG9TOq"/>
<listitem open="1" type="813" id="uRzT6LGkcbsJm"/>
<listitem open="1" type="813" id="uL87NkWKxdeZu">
<listitem open="0" type="814" id="uys11jr9acw2f"/>
<listitem open="0" type="815" id="uso8RS4GdgOL9"/>
</listitem>
<listitem open="1" type="813" id="uRfb8kwNLXiyz"/>
<listitem open="1" type="813" id="uO3n9QAZIb9UW"/>
<listitem open="1" type="813" id="u7lpPNe6in0pc">
<listitem open="0" type="815" id="uaKA49CvAGdR2"/>
<listitem open="0" type="815" id="usL1ETu7nxBtZ"/>
<listitem open="0" type="814" id="umKIYFAMLtn8h"/>
</listitem>
<listitem open="1" type="813" id="uz1gW6vUowkjd"/>
<listitem open="1" type="813" id="uMukxNtG4j8CL">
<listitem open="0" type="815" id="uYrEqTzcOyWZm"/>
<listitem open="0" type="815" id="uiFfJ18j5Ut4c"/>
<listitem open="0" type="815" id="u0R1WhCROUrcp"/>
</listitem>
<listitem open="1" type="817" id="uqtMdczmUK7dZ">
<listitem open="0" type="815" id="ud9sBsKvnymYY"/>
</listitem>
<listitem open="1" type="813" id="ufU9jurmLpKD0">
<listitem open="0" type="815" id="uqcKJzzTIUZCd"/>
<listitem open="0" type="814" id="uEd3zgxXoF6Nw"/>
</listitem>
<listitem open="0" label="sendMessage" type="810" id="uQns1Cc1D8H8z"/>
<listitem open="1" type="813" id="urj16oLJpHspa"/>
<listitem open="1" type="813" id="uDrG4ROJHVasS"/>
<listitem open="1" type="813" id="ubVqOwF4sMNEQ">
<listitem open="0" type="815" id="uwXNbdS0ts0u3"/>
<listitem open="0" type="815" id="uxqF92VezXaZe"/>
<listitem open="0" type="815" id="u9eF6qFWLCQ1m"/>
</listitem>
<listitem open="1" type="813" id="uYKRrg6CmRJAW">
<listitem open="0" type="814" id="uQhNOdhGIR0uG"/>
<listitem open="0" type="814" id="ugAEYxEUffkRe"/>
</listitem>
<listitem open="1" type="813" id="uXJ6llv1PM3IG">
<listitem open="0" type="815" id="uEIjmpY0s7lyZ"/>
<listitem open="0" type="814" id="uz5hFEtLHsR2K"/>
</listitem>
<listitem open="1" type="813" id="ubdskIrDMId2M">
<listitem open="0" type="814" id="ube4u4nmINPfw"/>
<listitem open="0" type="814" id="u49H8SEmPmGzU"/>
<listitem open="0" type="815" id="uEB1ubPnfwbZn"/>
<listitem open="0" type="814" id="uCTmUvmY49sQm"/>
<listitem open="0" type="815" id="uEMjmoujN5z4P"/>
<listitem open="0" type="814" id="u0pyt1q3GkiyH"/>
<listitem open="0" type="815" id="uzntm57etBGuh"/>
<listitem open="0" type="815" id="uGNHIm92iwcLV"/>
<listitem open="0" type="815" id="uBdWTTWRUgfvA"/>
</listitem>
<listitem open="1" type="813" id="uXwcH2ETd0Xtm"/>
<listitem open="0" label="viewActiveUsers" type="810" id="ukSNp3b4DiBx2"/>
<listitem open="0" label="viewMessageHistory" type="810" id="uMqzZUmyIqTmj"/>
</listitem>
<listitem open="1" type="802" id="Use_Case_View">
<listitem open="1" type="812" id="uPmNmbygHuiXm"/>
<listitem open="1" type="812" id="uJrPCFgp9ZKpk"/>
<listitem open="1" type="812" id="uRPwu0FLBcUPK"/>
<listitem open="1" type="811" id="uV1yXcArN3UEJ"/>
<listitem open="1" type="812" id="u45tOlitmo7xr"/>
<listitem open="1" type="812" id="uHAwwLrm4munZ"/>
<listitem open="1" type="812" id="uSmlf4XkA0Tsr"/>
<listitem open="1" type="812" id="u2aJU0CMghED6"/>
<listitem open="1" type="812" id="uDTktcuCOB1PC"/>
<listitem open="1" type="812" id="uwztC8xg9yTsa"/>
<listitem open="1" type="812" id="uj5GeNcPHC9zx"/>
<listitem open="1" type="812" id="uzeM2B6YEkfL0"/>
<listitem open="0" label="use case" type="805" id="uKSxQosg9FbWz"/>
<listitem open="1" type="811" id="uPSuMIiWs9jIU"/>
<listitem open="1" type="812" id="umB1eZfkvjWFc"/>
<listitem open="1" type="812" id="u7ki3DxahYlI6"/>
</listitem>
</listitem>
</listview>
<codegeneration>
<codegenerator language="Java"/>
</codegeneration>
</XMI.extensions>
</XMI>

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.